Získání části textu ze vstupních souborů v systému Linux je běžnou operací. Někdy nás však zajímá zobrazení pouze několika řádků souboru. Linux nám poskytuje příkazy head a tail pro tisk pouze řádků, které nás zajímají.
Obsah
- Příkaz Head v Linuxu
- Vydejte konkrétní počet řádků pomocí příkazu head
- Vydání určitého počtu bajtů pomocí příkazu head
- Výstup více souborů pomocí příkazu head
- Jak používat head Command s Pipes
- Příkaz Tail v Linuxu
- Vydejte konkrétní počet řádků pomocí příkazu tail
- Jak používat tail Command s Pipes
- Sledování změn v souboru pomocí příkazu tail
- Jak společně používat příkazy hlavy a paty v systému Linux
- Závěr
Linux head
a tail
příkazy jsou velmi podobné. Jsou standardně nainstalovány ve všech distribucích Linuxu. Nejprve si ujasněme, co jsou a k čemu se používají.
Stručně řečeno, jak jejich názvy napovídají, head
příkaz vytiskne řádky od začátku souboru a tail
příkaz vytiskne řádky od konce souborů. Oba příkazy zapisují výsledek na standardní výstup.
Nyní se na příkladech naučíme, jak je používat.
Příkaz Head v Linuxu
Syntaxe head
příkaz je docela jednoduchý:
head [OPTIONS] FILES
Ve výchozím nastavení bez možnosti , head
zobrazí prvních 10 řádků ze souboru. Přesně takhle.
head /etc/passwd
root:x:0:0::/root:/bin/bash
bin:x:1:1::/:/usr/bin/nologin
daemon:x:2:2::/:/usr/bin/nologin
mail:x:8:12::/var/spool/mail:/usr/bin/nologin
ftp:x:14:11::/srv/ftp:/usr/bin/nologin
http:x:33:33::/srv/http:/usr/bin/nologin
nobody:x:65534:65534:Nobody:/:/usr/bin/nologin
dbus:x:81:81:System Message Bus:/:/usr/bin/nologin
systemd-journal-remote:x:982:982:systemd Journal Remote:/:/usr/bin/nologin
systemd-network:x:981:981:systemd Network Management:/:/usr/bin/nologin
Samozřejmě existují možnosti, které můžeme definovat při provádění příkazu, abychom získali přizpůsobený výstup.
Vydání určitého počtu řádků pomocí příkazu head
Pokud chcete načíst jiný počet řádků než výchozích 10, pak -n
volba se používá spolu s celým číslem udávajícím počet řádků, které mají být načteny.
Například následující příkaz zobrazí první 3 řádky z /etc/passwd
soubor.
head -n 3 /etc/passwd
root:x:0:0::/root:/bin/bash
bin:x:1:1::/:/usr/bin/nologin
daemon:x:2:2::/:/usr/bin/nologin
Vydání určitého počtu bajtů pomocí příkazu head
Kromě toho head
příkaz může také tisknout obsah souboru po bytech. Stačí předat -c
možnost k příkazu. Mějte na paměti, že nový řádek se počítá jako jeden znak, takže pokud head
vytiskne nový řádek, bude to počítat jako bajt.
Například následující příkaz zobrazí prvních 8 bajtů z /etc/passwd
soubor.
head -c 8 /etc/passwd
root:x:0
Výstup více souborů pomocí příkazu head
Samozřejmě, head
příkaz také zvládne více souborů. Například následující příkaz zobrazí první 3 řádky /etc/passwd
a /etc/group
soubory.
head -n 3 /etc/passwd /etc/group
==> /etc/passwd <==
root:x:0:0::/root:/bin/bash
bin:x:1:1::/:/usr/bin/nologin
daemon:x:2:2::/:/usr/bin/nologin
==> /etc/group <==
root:x:0:brltty,root
sys:x:3:bin
mem:x:8:
Přidání -q
volba k výše uvedenému příkladu odstraní záhlaví s názvy souborů.
head -q -n 3 /etc/passwd /etc/group
root:x:0:0::/root:/bin/bash
bin:x:1:1::/:/usr/bin/nologin
daemon:x:2:2::/:/usr/bin/nologin
root:x:0:brltty,root
sys:x:3:bin
mem:x:8:
Jak používat příkaz head s potrubím
head
příkaz lze převést na jiné příkazy. V následujícím příkladu je výstup ls
příkaz je přesměrován do head
zobrazit pět naposledy upravených souborů nebo složek v /etc
adresář.
ls -t /etc | head -n 5
ld.so.cache
resolv.conf
systemd
libreoffice
profile.d
Nyní byste měli dobře rozumět tomu, jak používat Linux head
příkaz. Nyní se podívejme na tail
příkaz.
Příkaz Tail v Linuxu
Příkaz Tail v Linuxu je stejný jako head
příkaz. Na rozdíl od head
příkaz, ale tail
příkaz vytiskne několik posledních řádků (standardně 10 řádků) určitého souboru.
Základní syntaxe příkazu tail je:
tail [OPTIONS] FILES
Například následující příkaz vytiskne posledních 10 řádků z /etc/locale.gen
soubor.
tail /etc/locale.gen
#zh_HK.UTF-8 UTF-8
#zh_HK BIG5-HKSCS
#zh_SG.UTF-8 UTF-8
#zh_SG.GBK GBK
#zh_SG GB2312
#zh_TW.EUC-TW EUC-TW
#zh_TW.UTF-8 UTF-8
#zh_TW BIG5
#zu_ZA.UTF-8 UTF-8
#zu_ZA ISO-8859-1
Vydání určitého počtu řádků pomocí příkazu tail
Podobně jako head
můžete také vytisknout několik posledních řádků pomocí -n
možnost, jak je uvedeno níže.
tail -n 3 /etc/locale.gen
#zh_TW BIG5
#zu_ZA.UTF-8 UTF-8
#zu_ZA ISO-8859-1
Jak používat příkaz tail s potrubím
Dříve jsme výstup převedli z head
do ls
. Do tail
můžeme také převést výstup z jiných příkazů .
Například k identifikaci pěti souborů nebo složek v /etc
adresář s nejstaršími časy úprav a výstup převede do tail
:
ls -t /etc/ | tail -n 5
wpa_supplicant
libpaper.d
papersize
mdadm.conf
gssapi_mech.conf
Sledování změn v souboru pomocí příkazu tail
V tail
je ještě jedna mocná funkce příkaz. Někdy se vstupní soubor, který chceme zkontrolovat, mění. Například spuštěná aplikace může připojit svůj výstup k souboru protokolu. Pokud spustíme tail
pomocí -f
na měnícím se souboru budou všechny nově přidané řádky připojeny ke standardnímu výstupu. Toto může být zdaleka nejužitečnější a běžně používaná možnost pro tail
příkaz.
Můžete například vidět nové řádky, které jsou přidány na konec souboru protokolu Nginx, když jsou přidávány, takto:
tail -f /var/log/nginx/access.log
172.16.1.122 - - [08/Apr/2021:08:15:32 +0000] "POST /wp-admin/admin-ajax.php HTTP/1.1" 200 109 "https://linuxwizard.com/wp-admin/post.php?post=18254&action=edit" "Mozilla/5.0 (X11; Linux x86_64; rv:87.0) Gecko/20100101 Firefox/87.0"
172.16.1.122 - - [08/Apr/2021:08:19:27 +0000] "GET /feed/ HTTP/1.1" 304 0 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.1"
172.16.1.122 - - [08/Apr/2021:08:19:49 +0000] "HEAD /feed/ HTTP/1.1" 200 0 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36"
Když je do souboru protokolu přidán každý nový záznam, tail
aktualizuje své zobrazení v okně terminálu.
Jak společně používat příkazy hlavy a paty v Linuxu
Jako tail
a head
příkazy tisknou různé části souborů, můžeme tyto dva kombinovat a vytisknout pokročilé filtrování obsahu souboru. Pokud například chcete číst obsah ze středu libovolného souboru, musíte oba příkazy použít společně.
Řekněme, že se chceme dostat z 5. na 10. řádek z /etc/passwd
soubor. Nejprve head
příkaz načte prvních 10 řádků a tail
příkaz načte posledních 5 řádků z výstupu head
příkaz.
head -n 10 /etc/passwd | tail -n 5
http:x:33:33::/srv/http:/usr/bin/nologin
nobody:x:65534:65534:Nobody:/:/usr/bin/nologin
dbus:x:81:81:System Message Bus:/:/usr/bin/nologin
systemd-journal-remote:x:982:982:systemd Journal Remote:/:/usr/bin/nologin
systemd-network:x:981:981:systemd Network Management:/:/usr/bin/nologin
Závěr
To je prozatím vše. V tomto článku jsme se na příkladech naučili některá typická použití obou příkazů. Jak vidíte, oba tail
a head
Příkazy jsou velmi užitečné pro přesné ovládání toho, jaký obsah souboru se vytiskne na obrazovku. Jistě, jsou to flexibilní příkazy, které mohou výrazně zlepšit správu vašich souborů. Vyzkoušejte je.
Potřebujete více podrobností? Zkontrolujte head
a tail
příkazy manuálových stránek.