Bash není jediný dostupný shell v Linuxu. Existuje mnoho alternativ, jako například Zsh, který se těší velké popularitě. Pokud objevíte shell, který vám vyhovuje, příkazem `chsh` si ho můžete nastavit jako výchozí. V tomto průvodci vám ukážeme, jak na to.
Proč je Shell Důležitý?
Shell funguje jako prostředník mezi vámi a operačním systémem. Poskytuje rozhraní v terminálovém okně, kde můžete zadávat příkazy a spouštět aplikace. Shell analyzuje váš vstup a rozhodne, jaké akce provést. Pokud to zvládne sám, provede je. V opačném případě prohledá systém a hledá potřebné programy, které zvládnou vaše požadavky. Více informací o Unix shell.
V Linuxu je k dispozici mnoho různých shellů. Všechny umí provádět základní úkoly: navigaci v souborovém systému, práci se soubory, spouštění programů a skriptů. Nicméně, každý shell to dělá trochu jinak a má svá specifika a odlišnosti.
Shelly jsou často navrhovány lidmi, kteří chtějí, aby věci fungovaly určitým způsobem. Jestliže váš způsob myšlení ladí s filozofií návrháře shellu, bude se vám s ním dobře pracovat. Zkoušení nových shellů v Linuxu je navíc velice jednoduché.
Ve většině distribucí Linuxu, včetně Ubuntu, je Bash shell standardním výchozím shellem. Funguje spolehlivě a má bohatou funkčnost. Nicméně, jiný shell může nabídnout efektivnější práci a pozitivně ovlivnit váš pracovní postup. Nikdy to nezjistíte, dokud to nevyzkoušíte!
Přehled Shellů
Už jsme se o různých linuxových shellech zmínili, ale pojďme si je rychle shrnout:
- bash: Bourne-again shell je výchozí shell v mnoha distribucích.
- rbash: Omezená verze bash, která poskytuje omezenou funkčnost pro uživatele nebo spouštěné skripty.
- ash: Almquist shell je odlehčená varianta bashe.
- dash: Debian Almquist Shell je výchozí shell pro skripty v Ubuntu. I když bash je výchozí přihlašovací a interaktivní shell, dash se používá pro spouštění systémových procesů, protože má menší nároky na zdroje než bash.
- zsh: Z shell je modernější pojetí bash rodiny shellů. Nabízí vylepšení jako kontrola pravopisu příkazů a návrhy oprav.
- fish: Přátelský interaktivní shell napsaný od nuly a nepochází z žádné existující rodiny shellů. Klade důraz na uživatelskou přívětivost. Kromě jiných výhod, fish nabízí návrhy příkazů na základě vaší historie a obsahu aktuální složky, podobně jako prediktivní text.
- ksh: KornShell poskytuje obzvláště robustní skriptovací jazyk.
Zjištění Instalovaných Shellů
Chcete-li zjistit, jaké shelly jsou nainstalované na vašem systému, použijte následující příkaz. Zobrazí obsah souboru `/etc/shells`:
cat /etc/shells
Zmínili jsme bash, dash a rbash, ale co je sh?
`sh` je Thompsonův shell, který napsal Ken Thompson v roce 1971 v Bell Labs. Nyní už se nepoužívá a byl nahrazen moderními shelly. Je součástí systému kvůli kompatibilitě se staršími skripty, které mají v prvním řádku:
#!/bin/sh
Tím se systému říká, že má ke spuštění skriptu použít shell sh. Ale používá se opravdu ten prastarý shell ke spouštění skriptů? Příkaz `which` vám ukáže, který program se ve skutečnosti spustí, když zadáte daný příkaz.
Podívejme se, co se spustí, když zadáte sh:
which sh
Zdá se, že najde binární soubor. Když se podíváme hlouběji, zjistíme, že to je symbolický odkaz, který ve skutečnosti ukazuje na dash, lehký shell používaný ke spouštění skriptů:
ls -l /bin/sh
Je to chytrý a nenáročný způsob, jak zajistit, aby skripty, které očekávají sh na moderních systémech, fungovaly správně.
Instalace Nového Shellu
Nainstalujme si fish shell a nastavme ho jako výchozí pro uživatele „dave“. V Ubuntu použijeme následující příkaz:
sudo apt-get install fish
Na Manjaru použijte pacman:
sudo pacman -Sy fish
Na Fedoře zadejte tento příkaz:
sudo dnf install fish
Po instalaci si můžete znovu zkontrolovat seznam instalovaných shellů:
cat /etc/shells
Náš nový shell je /usr/bin/fish. Poznamenejte si tuto cestu – budeme ji brzy potřebovat.
Proměnná Prostředí `$SHELL`
Proměnná prostředí `$SHELL` uchovává název vašeho aktuálního shellu. Pomocí `echo` můžeme zkontrolovat, který shell je nastavený:
echo $SHELL
Spusťme fish shell:
fish
Znovu zkontrolujme, co nyní říká proměnná `$SHELL`:
echo $SHELL
Když poprvé použijeme příkaz `echo $SHELL`, jsme v bash shellu. Proměnná prostředí obsahuje cestu ke spustitelnému souboru bash, `/bin/bash`.
Když spustíme fish shell, zobrazí se uvítací zpráva a změní se příkazový řádek. Co může být překvapující, je, že proměnná prostředí `$SHELL` stále obsahuje cestu ke spustitelnému souboru bash, `/bin/bash`. Je to v pořádku, je to normální chování.
Když spouštíte nový shell (nebo jakýkoli jiný program), zdědí proměnné prostředí nadřazeného shellu. Fish shell zdědí globální a exportované proměnné prostředí z bash shellu. Vzhledem k tomu, že hodnota proměnné `$SHELL` se nezměnila, má stejnou hodnotu ve fish shellu jako v bash shellu.
Fish spouštíme jako jakýkoli jiný program. Pro ukončení fish shellu můžeme použít příkaz `exit`. Uzavře se stejně jako ostatní programy a vrátíme se zpět do bash shellu.
Je to skvělý způsob, jak testovat nové shelly a zjistit, co umí a zda vám budou vyhovovat. Než se rozhodnete pro trvalou změnu, můžete ho prozkoumat a osvojit si ho jako váš hlavní shell.
Pokud se rozhodnete nastavit fish – nebo jakýkoli jiný shell – jako výchozí, musíte použít příkaz `chsh`.
Příkaz `chsh`
Příkaz `chsh` vám umožňuje změnit výchozí shell. Hlavní trik spočívá v tom, že vám umožňuje měnit výchozí přihlašovací i interaktivní shell. Můžete chtít změnit jeden, druhý, nebo oba.
Když se přihlásíte do systému, použijete shell nakonfigurovaný jako váš přihlašovací shell. Když už jste přihlášení a otevřete okno terminálu, použijete shell nakonfigurovaný jako váš interaktivní shell. Můžou to být stejné nebo různé shelly.
Chcete-li nastavit přihlašovací shell, použijte příkaz `chsh` bez parametrů:
chsh
Budete vyzváni k zadání hesla. Poté zadejte cestu k novému shellu a stiskněte Enter.
Pokud se k testovacímu počítači připojíme vzdáleně z jiného, po přihlášení se ocitneme ve fish shellu.
Chcete-li změnit interaktivní shell, použijte `chsh` s volbou `-s` (shell). Zadejte cestu k novému shellu v příkazovém řádku:
chsh -s /usr/bin/fish
Budete vyzváni k zadání hesla a vrátíte se do příkazového řádku vašeho aktuálního shellu. Aby se změna projevila, musíte se odhlásit a znovu přihlásit. Když se tak stane, uvidíte uvítací zprávu a příkazový řádek fish shellu.
Proměnná prostředí `$SHELL` nyní obsahuje cestu k novému výchozímu shellu:
echo $SHELL
Změna Shellu Jiného Uživetele
Máte-li práva roota a umíte používat příkaz sudo, můžete změnit shell i pro ostatní uživatele. Příkaz je stejný jako předtím, ale přidáte do něj uživatelské jméno dané osoby:
sudo chsh -s /usr/bin/fish mary
Příště, když se Mary přihlásí, uvidí nový shell, jakmile otevře terminál.