Il recupero di una parte di testo dai file di input in Linux è un'operazione comune. Tuttavia, a volte, siamo interessati a visualizzare solo poche righe di un file. Linux ci fornisce i comandi testa e coda per stampare solo le righe che ci interessano.
Sommario
- Comando principale in Linux
- Emetti un numero specifico di righe usando il comando head
- Emetti un numero specifico di byte usando il comando head
- Emetti più file usando il comando head
- Come usare il comando head con i tubi
- Comando Tail in Linux
- Emetti un numero specifico di righe usando il comando tail
- Come usare il comando tail con i tubi
- Guarda un file per le modifiche usando il comando tail
- Come utilizzare i comandi head e tail insieme in Linux
- Conclusione
Linux head
e tail
i comandi sono molto simili. Per impostazione predefinita, sono installati in tutte le distribuzioni Linux. Capiamo prima cosa sono e a cosa servono.
In breve, come suggeriscono i loro nomi, il head
il comando stampa le righe dall'inizio di un file e la tail
il comando stampa le righe dalla fine dei file. Entrambi i comandi scrivono il risultato nello standard output.
Ora impariamo come usarli attraverso degli esempi.
Comando principale in Linux
La sintassi di head
il comando è piuttosto semplice:
head [OPTIONS] FILES
Per impostazione predefinita, senza alcuna opzione , il head
il comando visualizzerà le prime 10 righe del file. Proprio così.
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
Naturalmente ci sono opzioni che possiamo definire durante l'esecuzione del comando per ottenere l'output personalizzato.
Emetti un numero specifico di righe usando il comando head
Se desideri recuperare un numero di righe diverso da quello predefinito 10, allora -n
viene utilizzata insieme a un numero intero che indica il numero di righe da recuperare.
Ad esempio, il comando seguente visualizzerà le prime 3 righe da /etc/passwd
file.
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
Emetti un numero specifico di byte usando il comando head
Inoltre, il head
il comando può anche stampare il contenuto del file per byte. Basta passare il -c
opzione al comando. Tieni presente che la nuova riga conta come un singolo carattere, quindi se head
stampa una nuova riga, la conterà come un byte.
Ad esempio, il comando seguente visualizzerà i primi 8 byte da /etc/passwd
file.
head -c 8 /etc/passwd
root:x:0
Emetti più file usando il comando head
Naturalmente, il head
il comando può anche gestire più file. Ad esempio, il comando seguente mostrerà le prime 3 righe di /etc/passwd
e /etc/group
file.
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:
Aggiunta del -q
l'opzione dell'esempio sopra rimuoverà le intestazioni che danno i nomi dei file.
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:
Come usare il comando head con i tubi
La head
comando può essere reindirizzato ad altri comandi. Nell'esempio seguente l'output di ls
il comando viene inviato tramite pipe a head
per mostrare i cinque file o cartelle modificati più di recente in /etc
directory.
ls -t /etc | head -n 5
ld.so.cache
resolv.conf
systemd
libreoffice
profile.d
A questo punto dovresti avere una buona comprensione di come utilizzare Linux head
comando. Ora, diamo un'occhiata alla tail
comando.
Comando Tail in Linux
Il comando Tail in Linux è lo stesso di head
comando. Diversamente dalla head
comando, tuttavia, il tail
comando stampa l'ultimo numero di righe (10 righe per impostazione predefinita) di un determinato file.
La sintassi di base del comando tail è:
tail [OPTIONS] FILES
Ad esempio, il comando seguente stamperà le ultime 10 righe da /etc/locale.gen
file.
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
Emetti un numero specifico di righe usando il comando tail
Analogamente al head
comando, puoi anche stampare le ultime righe usando il -n
opzione come mostrato di seguito.
tail -n 3 /etc/locale.gen
#zh_TW BIG5
#zu_ZA.UTF-8 UTF-8
#zu_ZA ISO-8859-1
Come usare il comando tail con i tubi
In precedenza, abbiamo reindirizzato l'output da head
in ls
. Possiamo anche reindirizzare l'output di altri comandi a tail
.
Ad esempio, per identificare i cinque file o cartelle in /etc
directory con i tempi di modifica più vecchi e reindirizza l'output a tail
:
ls -t /etc/ | tail -n 5
wpa_supplicant
libpaper.d
papersize
mdadm.conf
gssapi_mech.conf
Guarda un file per le modifiche usando il comando tail
C'è un'altra potente funzionalità in tail
comando. A volte il file di input che vogliamo controllare sta cambiando. Ad esempio, un'applicazione in esecuzione può aggiungere il proprio output a un file di registro. Se eseguiamo il tail
comando con il -f
opzione sul file di modifica, tutte le righe appena aggiunte verranno aggiunte allo standard out. Questa potrebbe essere di gran lunga l'opzione più utile e comunemente usata per tail
comando.
Ad esempio, puoi vedere nuove righe che vengono aggiunte alla fine di un file di registro Nginx, man mano che vengono aggiunte, in questo modo:
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"
Quando ogni nuova voce di registro viene aggiunta al file di registro, tail
ne aggiornerà la visualizzazione nella finestra del terminale.
Come utilizzare i comandi head e tail insieme in Linux
Come tail
e head
comandi stampa diverse parti di file, possiamo combinare questi due per stampare alcuni filtri avanzati del contenuto del file. Ad esempio, se vuoi leggere il contenuto dal centro di qualsiasi file, devi utilizzare entrambi i comandi insieme.
Diciamo di voler andare dalla 5a alla 10a riga da /etc/passwd
file. Inizialmente, head
il comando recupererà le prime 10 righe e tail
il comando recupererà le ultime 5 righe dall'output di head
comando.
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
Conclusione
È tutto per ora. In questo articolo abbiamo appreso alcuni usi tipici di entrambi i comandi attraverso esempi. Come puoi vedere, sia il tail
e il head
i comandi sono molto utili per controllare esattamente quale contenuto del file verrà stampato sullo schermo. Certamente sono comandi flessibili che possono migliorare notevolmente la gestione dei tuoi file. Provali.
Hai bisogno di maggiori dettagli? Controlla la head
e la tail
pagine man dei comandi.