Změna výchozího shellu v Linuxu
přehled
interaktivní shell čte příkazy ze vstupu uživatele na terminálu tty. Interaktivní shell nazýváme po úspěšném přihlášení uživatele výchozí shell nebo přihlašovací shell.
v tomto tutoriálu budeme diskutovat o tom, jak změnit výchozí shell uživatele.
Úvod do příkazu chsh
příkaz chsh je dodáván s balíčkem util-linux-standardním balíčkem, který je k dispozici na všech distribucích Linuxu.
pomocí příkazu chsh s volbou-l můžeme vypsat Shelly nainstalované v aktuálním systému:
$ chsh -l/bin/sh/bin/bash/bin/zsh/usr/bin/zsh/usr/bin/git-shell
běžnějším použitím příkazu chsh je změna výchozího shellu uživatele.
jak to udělat, se budeme zabývat v pozdějších sekcích.
Který Shell Právě Používám?
po úspěšném přihlášení budeme s výchozím shellem.
než budeme hovořit o změně výchozího shellu, pojďme se nejprve naučit několik způsobů, jak zjistit, který shell aktuálně používáme.
jedním ze způsobů je čtení systémového prostředí $SHELL, které ukládá právě spuštěný příkaz shell:
kent$ echo $SHELL/bin/zsh
jak ukazuje výše uvedený příklad, běžící shell mého aktuálního přihlašovacího uživatele je Zsh.
alternativně můžeme znát aktuální běžící shell prozkoumáním jeho procesních informací. Linux ukládá PID běžícího shellu do speciální proměnné $$:
kent$ echo $3492
ve výše uvedeném příkladu by proces s PID 153492 byl aktuální proces shellu. Podrobné informace o procesu můžeme získat pomocí příkazu ps s volbou-p:
kent$ ps -p $$ PID TTY TIME CMD 153492 pts/2 00:00:00 zsh
výstup nám říká, že Zsh je náš aktuální shell.
Změna výchozího shellu aktuálního uživatele
pokud chceme změnit výchozí shell aktuálního přihlašovacího uživatele, můžeme spustit příkaz chsh pomocí volby-s <NEW_SHELL>.
změňme výchozí shell aktuálního uživatele na Bash:
kent$ chsh -s /bin/bashChanging shell for kent.Password: Shell changed.
je vhodné zmínit, že po úspěšné změně výchozího shellu se aktuálně běžící shell nezmění. Například jsme nastavili Bash jako výchozí shell uživatele kent, ale aktuální shell je stále Zsh:
kent$ ps -p $$ PID TTY TIME CMD 153492 pts/2 00:00:00 zsh
nově změněný výchozí shell se projeví při příštím přihlášení pomocí uživatele kent.
výchozí příkaz shellu je nezbytný pro přihlášení uživatelů. Pokud je příkaz neplatný, budeme mít potíže s přihlášením uživatele.
proto, když měníme výchozí shell, příkaz chsh ověří, zda je daný příkaz shellu platný.
podívejme se, co se stane, pokud předáme neplatnou cestu k příkazu chsh:
kent$ chsh -s /bin/bashhhhChanging shell for kent.Password: chsh: "/bin/bashhhh" does not exist
naučili jsme se, že příkaz chsh může vypsat aktuálně nainstalované Shelly v systému.
příkaz chsh odmítne změnit výchozí shell, pokud daný shell není na seznamu platných shellů systému:
kent$ chsh -s /usr/bin/catChanging shell for kent.Password: chsh: "/usr/bin/cat" is not listed in /etc/shells.Use chsh -l to see list.
ve výše uvedeném příkladu jsme se pokusili nastavit příkaz/usr/bin / cat jako výchozí shell uživatele kent.
cesta příkazu cat je platná. Nicméně, to není na seznamu shell. Proto chsh přerušil odpovídající chybovou zprávu a nápovědu.
Změna výchozího shellu ostatních uživatelů
Zatím jsme se naučili používat příkaz chsh ke změně výchozího shellu aktuálního přihlašovacího uživatele.
můžeme také změnit výchozí shell ostatních uživatelů pomocí příkazu chsh, ale k tomu potřebujeme oprávnění root.
syntaxe je velmi jednoduchá:
root# chsh -s NEW_SHELL USERNAME
tentokrát se přihlásíme jako uživatel root a změníme výchozí shell uživatele kent na / bin / sh:
root# chsh -s /bin/sh kent Changing shell for kent.Shell changed.
nyní se znovu přihlásíme s uživatelem kent a zkontrolujeme, zda byl výchozí shell úspěšně změněn:
sh-5.1$ echo $SHELL/bin/sh
jak ukazuje výše uvedený výstup, výchozí shell uživatele kent je nyní / bin / sh.
úprava souboru / etc / passwd
naučili jsme se používat příkaz chsh ke změně výchozího shellu uživatele. Alternativně to můžeme také provést úpravou souboru/etc / passwd.
v Linuxu je soubor /etc/passwd prostý textový soubor. Ukládá informace o uživatelském účtu, který je vyžadován při přihlášení uživatele:
-rw-r--r-- 1 root root 2.1K Mar 12 10:27 /etc/passwd
pokud se podíváme na příznaky oprávnění, uvidíme, že si je mohou přečíst všichni uživatelé, ale pouze uživatel root může zapisovat do/etc / passwd.
pojďme zkontrolovat obsah v souboru / etc/passwd:
kent$ cat /etc/passwdroot:x:0:0:root:/root:/bin/zshbin:x:1:1:bin:/bin:/bin/false...kent:x:1000:1000::/home/kent:/bin/zshguest:x:1001:1001::/home/guest:/bin/zsh...cups:x:209:209:cups helper user:/:/sbin/nologin...
každý řádek v souboru zaznamenává informace o účtu uživatele. Pole v záznamu jsou oddělena dvojtečkami.
záznam obsahuje mimo jiné údaje o účtu uživatele, například uživatelské jméno, uid, GID a domovský adresář. Poslední pole označuje výchozí shell uživatele.
pokud změníme výchozí pole shellu v souboru / etc/passwd, projeví se to, když se uživatel příště přihlásí do systému.
jednou z výhod úpravy souboru / etc/passwd je, že můžeme změnit výchozí shell více uživatelů v jednom záběru. Někdy, to by mohlo být docela pohodlné.
měli bychom však mít na paměti, že když uložíme soubor / etc/passwd, na změněných výchozích shellech nedojde k ověření ani ověření.
proto se musíme ujistit, že jsme zadali platné cesty příkazů shellu. V opačném případě bude mít uživatel příště problém s přihlášením do systému.
závěr
v tomto rychlém článku jsme se naučili, jak změnit výchozí shell uživatele pomocí příkladů.
příkaz chsh je pro úkol velmi jednoduchý. Navíc může ověřit, zda je daný shell v systému platný.
pokud chceme změnit výchozí shell jiného uživatele, než je aktuální přihlašovací, musíme spustit příkaz chsh s oprávněním uživatele root.
dále, pokud se můžeme přihlásit jako uživatel root, můžeme také změnit výchozí shell více uživatelů přímou úpravou souboru/etc / passwd.