Příkazy a operátory Bashe
Každý jazyk prostředí má své nejčastěji používané příkazy. Pojďme se začít seznamovat s příkazy Bash od těch nejčastěji používaných.
Příkazy Bash
Pojďme se podívat na běžné příkazy Bash a jejich použití.
Příkaz ls
ls
zobrazí obsah aktuálního adresáře nebo adresáře zadaného v argumentu příkazu. Sám o sobě vypíše soubory a adresáře v aktuálním adresáři:
ls
Soubory a adresáře, jejichž názvy začínají tečkou, jsou ve výchozím nastavení skryté. Pokud chcete tyto položky zahrnout do výpisu adresáře, použijte příznak -a
:
ls -a
Pokud chcete o souborech a adresářích v aktuálním adresáři získat ještě další informace, použijte příznak -l
:
ls -l
Toto je ukázkový výstup z adresáře, který obsahuje několik souborů JPEG a PNG a podadresář s názvem gifs:
-rw-rw-r-- 1 azureuser azureuser 473774 Jun 13 15:38 0001.png
-rw-rw-r-- 1 azureuser azureuser 1557965 Jun 13 14:43 0002.jpg
-rw-rw-r-- 1 azureuser azureuser 473774 Mar 26 09:21 0003.png
-rw-rw-r-- 1 azureuser azureuser 4193680 Jun 13 09:40 0004.jpg
-rw-rw-r-- 1 azureuser azureuser 423325 Jun 10 12:53 0005.jpg
-rw-rw-r-- 1 azureuser azureuser 2278001 Jun 12 04:21 0006.jpg
-rw-rw-r-- 1 azureuser azureuser 1220517 Jun 13 14:44 0007.jpg
drwxrwxr-x 2 azureuser azureuser 4096 Jun 13 20:16 gifs
Každý řádek poskytuje podrobné informace o odpovídajícím souboru nebo adresáři. Tyto informace zahrnují přiřazená oprávnění, vlastníka a velikost souboru v bajtech, čas poslední úpravy a název souboru nebo adresáře.
Příkaz cat
Předpokládejme, že chcete zjistit, co se nachází uvnitř souboru. K tomu můžete použít příkaz cat
. Pokud se nejedná o textový soubor, nebude výstup dávat moc smysl. Následující příkaz zobrazí obsah souboru os-release uloženého v adresáři /etc:
cat /etc/os-release
Je to užitečný příkaz, protože vás informuje o tom, kterou distribuci systému Linux používáte:
NAME="Ubuntu"
VERSION="18.04.2 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.2 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
Adresář /etc je v Linuxu speciální. Obsahuje konfigurační soubory systému. Žádné soubory z tohoto adresáře nechcete odstranit, pokud si ovšem nejste jistí tím, co děláte.
Příkaz sudo
Některé příkazy Bash může spustit pouze uživatel root; správce systému nebo superuživatel. Pokud se pokusíte použít některý z těchto příkazů bez dostatečných oprávnění, dojde k chybě. Například příkaz cat
k zobrazení obsahu /etc/at.deny můžou použít pouze uživatelé přihlášení jako superuživatelé:
cat /etc/at.deny
at.deny je speciální soubor, který určuje, kdo může použít další příkazy Bash k odeslání úloh pro pozdější spuštění.
Většinu času nechcete spustit jako kořen; Je to příliš nebezpečné. Pokud chcete spouštět příkazy, které vyžadují oprávnění správce bez přihlášení jako superuživatele, zobrazí se příkazy takto sudo
:
sudo cat /etc/at.deny
sudo
je zkratka pro "superuser do". Když ho použijete, říkáte prostředí, že pro tento příkaz fungujete s úrovní oprávnění root-user.
Příkazy cd
, mkdir
a rmdir
cd
představuje zkratku pro „change directory“ (změnit adresář) a dělá přesně to, co jeho název napovídá, změní aktuální adresář na jiný adresář. Umožňuje přesun z jednoho adresáře do jiného, stejně jako jeho alternativa ve Windows. Následující příkaz přejde na podadresář aktuálního adresáře s názvem orders:
cd orders
Můžete se posunout o adresář nahoru zadáním ..
jako názvu adresáře:
cd ..
Tento příkaz se změní do vašeho domovského adresáře; při prvním přihlášení:
cd ~
Pomocí příkazu mkdir
můžete vytvářet adresáře. Následující příkaz vytvoří v aktuálním pracovním adresáři podadresář s názvem orders:
mkdir orders
Pokud chcete pomocí jednoho příkazu vytvořit podadresář a další podadresář, který je mu podřízený, použijte příznak --parents
:
mkdir --parents orders/2019
Příkaz rmdir
odstraní (odebere) adresář, ale jenom v případě, že je prázdný. Pokud není prázdný, zobrazí se místo toho upozornění. Naštěstí můžete pomocí rm
příkazu odstranit adresáře, které nejsou prázdné v kombinaci s příznakem -r
(rekurzivní). Příkaz by pak vypadal takto: rm -r
.
Příkaz rm
Příkaz rm
je zkratka pro odebrání. Jak byste očekávali, rm
odstraní soubory. Tento příkaz tedy skoncuje se souborem 0001.jpg:
rm 0001.jpg
A tento příkaz odstraní všechny soubory v aktuálním adresáři:
rm *
Buďte při práci s příkazem rm
opatrní. Je to nebezpečný příkaz.
Spuštění příkazu rm
s příznakem -i
vám dá před odstraněním možnost zamyslet se:
rm -i *
Snažte se zahrnout -i
do každého příkazu rm
a můžete se pak vyhnout tomu, že se stanete obětí jedné z největších chyb v Linuxu. Obávaný příkaz rm -rf /
odstraní každý soubor na celé jednotce. Používá rekurzivní odstranění všech podadresářů kořenového adresáře a jejich podadresářů. Příznak -f
(jako „force“ (vynutit)) problém ještě znásobí, protože potlačí výzvy. Nedělejte to.
Pokud chcete odstranit podadresář s názvem orders, který není prázdný, můžete použít příkaz rm
tímto způsobem:
rm -r orders
Odstraní se tak podadresář orders a vše, co obsahuje, včetně dalších podadresářů.
Příkaz cp
Příkaz cp
nekopíruje jen soubory, ale v případě potřeby i celé adresáře (a podadresáře). Pokud chcete vytvořit kopii souboru 0001.jpg s názvem 0002.jpg, použijte tento příkaz:
cp 0001.jpg 0002.jpg
Pokud soubor 0002.jpg již existuje, Bash ho tiše nahradí. Tento postup je skvělý, pokud jste to tak zamýšleli, ale pokud jste si neuvědomili, že přepíšete starou verzi, už tak skvělý není.
Pokud ale použijete příznak -i
(jako „interactive“ (interaktivní)), Bash vás před odstraněním existujících souborů upozorní. To je bezpečnější:
cp -i 0001.jpg 0002.jpg
Pomocí zástupných znaků můžete zkopírovat několik souborů najednou. Pokud chcete zkopírovat všechny soubory v aktuálním adresáři do podadresáře s názvem photos, udělejte toto:
cp * photos
Pokud chcete zkopírovat všechny soubory v podadresáři s názvem photos do podadresáře s názvem images, udělejte toto:
cp photos/* images
Předpokládá se, že adresář images již existuje. Pokud neexistuje, můžete ho vytvořit a zkopírovat obsah adresáře photos pomocí tohoto příkazu:
cp -r photos images
Zkratka -r
pro "rekurzivní". Další výhodou příznaku -r
je, že pokud fotky obsahují vlastní podadresáře, zkopírují se také do adresáře obrázků .
Příkaz ps
Příkaz ps
poskytuje snímek všech aktuálně spuštěných procesů. Sama o sobě, bez argumentů, zobrazuje všechny vaše procesy prostředí; Jinými slovy, ne moc. Pokud ale zadáte příznak -e
, je to už o něčem jiném:
ps -e
-e
zobrazí všechny spuštěné procesy, kterých obvykle bývá velké množství.
Komplexnější přehled o tom, jaké procesy v systému běží, získáte pomocí příznaku -ef
:
ps -ef
Tento příznak zobrazuje názvy všech spuštěných procesů, jejich identifikační čísla procesu (PID), PID nadřazených procesů (PPID) a čas jejich zahájení (STIME). Zobrazuje také, k jakému terminálu jsou připojeny (pokud jsou k nějakému připojeny) (TTY), kolik času procesoru si vyhradily (TIME) a jejich úplné názvy cest. Tady je zkrácený příklad:
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 13:35 ? 00:00:03 /sbin/init
root 2 0 0 13:35 ? 00:00:00 [kthreadd]
root 3 2 0 13:35 ? 00:00:00 [rcu_gp]
root 4 2 0 13:35 ? 00:00:00 [rcu_par_gp]
root 5 2 0 13:35 ? 00:00:00 [kworker/0:0-cgr]
root 6 2 0 13:35 ? 00:00:00 [kworker/0:0H-kb]
root 8 2 0 13:35 ? 00:00:00 [mm_percpu_wq]
root 9 2 0 13:35 ? 00:00:01 [ksoftirqd/0]
root 10 2 0 13:35 ? 00:00:02 [rcu_sched]
Kromě toho můžete najít dokumentaci, která takové použití příkazups
ukazuje:
ps aux
ps aux
a ps -ef
jsou stejné. Tuto dualitu můžeme vysledovat zpět k historickým rozdílům mezi systémy POSIX Unix (k nimž patří Linux) a systémy BSD Unix (z nichž nejběžnější je macOS). POSIX používal na začátku příznak -ef
, zatímco BSD vyžadoval aux
. V současné době přijímají obě řady operačních systémů oba formáty.
Toto je skvělé připomenutí, proč byste si měli pečlivě prozkoumat nápovědu všech příkazů Linuxu. Studium Bashe odpovídá studiu angličtiny jako druhého jazyka. Pravidla mají spoustu výjimek.
Příkaz w
Uživatelé přichází, uživatelé odchází a občas máte uživatele, o které vůbec nestojíte. Když zaměstnanec odejde na další příležitosti, správce systému se zavolá, aby se pracovník nemohl přihlásit k počítačovým systémům společnosti. Očekává se také, že správci systému vědí, kdo je přihlášený a kdo by neměl být.
Linux má příkaz w
(jako „who“ (kdo)), který zjistí, kdo se nachází na vašich serverech. Zobrazuje informace o uživatelích, kteří se aktuálně nacházejí v počítačových systémech, a činnostech těchto uživatelů. w
zobrazuje uživatelská jména a jejich IP adresy, kdy se přihlásili, jejich aktuálně spuštěné procesy a kolik času tyto procesy spotřebovávají. Jedná o cenný nástroj správců systému.
Vstupně-výstupní operátory Bashe
Spouštěním příkazů Bash a jejich různých možností toho v Linuxu zvládnete opravdu hodně. Všechnu práci ale můžete udělat, když příkazy zkombinujete pomocí vstupně-výstupních operátorů:
<
pro přesměrování vstupu na jiný zdroj než klávesnici>
pro přesměrování výstupu na jiný cíl než obrazovku>>
pro stejný postup, místo přepsání se ale provede připojení|
pro předání výstupu z jednoho příkazu do vstupu jiného příkazu
Předpokládejme, že chcete zobrazit seznam všech položek v aktuálním adresáři a zachytit výstup v souboru s názvem listing.txt. Přesně to udělá následující příkaz:
ls > listing.txt
Pokud už soubor listing.txt existuje, přepíše se. Pokud místo toho použijete operátor >>
, přidá se výstup z příkazu ls
k obsahu souboru listing.txt:
ls >> listing.txt
Operátor potrubí je výkonný (a často používaný). Přesměruje výstup prvního příkazu do vstupu druhého příkazu. Řekněme, že příkaz cat
použijete k zobrazení obsahu velkého souboru, ale obsah se posouvá příliš rychle, abyste si ho mohli přečíst. Výstup můžete lépe ovládat, pokud výsledky propojíte s jiným příkazem, například more
. Následující příkaz zobrazí seznam všech aktuálně spuštěných procesů. Jakmile se obrazovka zaplní, výstup se pozastaví, dokud nestisknete ENTER k zobrazení dalšího řádku:
ps -ef | more
Výstup můžete také propojit s head
, aby se zobrazilo jenom několik prvních řádků:
ps -ef | head
Nebo předpokládejme, že chcete filtrovat výstup tak, aby obsahoval pouze řádky, které obsahují slovo démon. Jedním ze způsobů, jak to udělat, je propojení výstupu z ps
užitečného grep
nástroje linuxu:
ps -ef | grep daemon
Výstup by mohl vypadat takto:
azureus+ 52463 50702 0 23:28 pts/0 00:00:00 grep --color=auto deamon
azureuser@bash-vm:~$ ps -ef | grep daemon
root 449 1 0 13:35 ? 00:00:17 /usr/lib/linux-tools/4.18.0-1018-azure/hv_kvp_daemon -n
root 988 1 0 13:35 ? 00:00:00 /usr/lib/accountsservice/accounts-daemon
message+ 1002 1 0 13:35 ? 00:00:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
daemon 1035 1 0 13:35 ? 00:00:00 /usr/sbin/atd -f
root 1037 1 0 13:35 ? 00:00:00 /usr/bin/python3 -u /usr/sbin/waagent -daemon
root 1039 1 0 13:35 ? 00:00:00 /usr/lib/linux-tools/4.18.0-1018-azure/hv_vss_daemon -n
azureus+ 52477 50702 0 23:28 pts/0 00:00:00 grep --color=auto daemon
Jako vstup můžete použít také soubory. Ve výchozím nastavení pochází standardní vstup z klávesnice, je možné ho ale také přesměrovat. Pokud chcete získat vstup ze souboru místo z klávesnice, použijte operátor <
. Jedním z běžných úkolů správce systému je seřadit obsah souboru. Jak název napovídá, příkaz sort
řadí text v abecedním pořadí:
sort < file.txt
Pokud chcete seřazené výsledky uložit do nového souboru, můžete přesměrovat vstup a výstup:
sort < file.txt > sorted_file.txt
Podle potřeby můžete použít vstupně-výstupní operátory ke zřetězení příkazů Linuxu. Zvažte použití následujícího příkazu:
cat file.txt | fmt | pr | lpr
Výstup z příkazu cat
přejde do příkazu fmt
, výstup z příkazu fmt
přejde do příkazu pr
a tak dále. Příkaz fmt
formátuje výsledky do úhledného odstavce. Příkaz pr
výsledky stránkuje. A příkaz lpr
odesílá stránkovaný výstup do tiskárny. To všechno na jednom řádku.