Il comando head viene utilizzato per stampare le prime righe di un file di testo. Per impostazione predefinita, il comando head stampa le prime 10 righe di ogni file sull'output standard, che è lo schermo di visualizzazione. Può essere utilizzato con altri comandi per fornire risultati più specifici e dal sistema.
In un articolo precedente, abbiamo imparato come usare il comando tail e le sue diverse opzioni. In questo articolo impareremo come usare il comando head di Linux per leggere le prime righe di qualsiasi file di testo e sono le opzioni più comuni.
1) Utilizzo della testa con input standard
Se non viene specificato alcun file o quando il file è specificato come -, il comando head legge dal flusso di input standard (stdin) anziché da un file. Ciò significa che respinge tutto ciò che è stato digitato dalla tastiera. In questo esempio, inserirò le parole e poi head visualizzerà ciò che ho digitato. Dopo aver inserito, premo CTRL + C per uscire.
$ head -
this
this
is
is
an
an
example
example
of
of
head
head
with no file specified
with no file specified
2) Visualizzazione delle prime 10 righe di un file
Specificando un nome file con head si stampano le prime 10 righe.
$ head /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
3) Visualizzazione delle prime N righe di un file
Puoi specificare il numero esatto di righe da visualizzare oltre alle prime 10. Puoi farlo usando il -n
o --lines
interruttore e quindi il numero di righe che desideri stampare.
$ head -n11 /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
4) Visualizzazione di più file
Se vengono forniti più file come argomento, vengono visualizzate le prime 10 righe e ciascuna precede con un'intestazione che mostra il nome del file.
$ head /etc/crontab /etc/group
==> /etc/crontab <==
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
==> /etc/group <==
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:syslog,eyramm
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
Se non vuoi stampare le intestazioni, puoi usare -q
, --quite
o --silent
interruttori.
$ head --silent /etc/crontab /etc/group
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:syslog,eyramm
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
Per stampare sempre le intestazioni, puoi lasciare il nome del file così com'è o usare il -v
o --verbose
interruttore.
Per visualizzare le prime N righe di più file puoi usare il comando seguente.
$ head -3 /etc/group /etc/fuse.conf /etc/passwd
==> /etc/group <==
root:x:0:
daemon:x:1:
bin:x:2:
==> /etc/fuse.conf <==
# /etc/fuse.conf - Configuration file for Filesystem in Userspace (FUSE)
# Set the maximum number of FUSE mounts allowed to non-root users.
==> /etc/passwd <==
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
Puoi utilizzare il carattere jolly * per stampare le righe di ogni file il cui nome termina con un'estensione specifica.
$ head -1 -q /etc/*.conf
# /etc/adduser.conf: `adduser' configuration.
# this file sets defaults for apg if apg is called without parameters
#
# Documents/brltty.conf. Generated from brltty.conf.in by configure.
# This file lists certificates that you wish to use or to ignore to be
# This is the main config file for debconf. It tells debconf where to
# /etc/deluser.conf: `deluser' configuration.
# /etc/fuse.conf - Configuration file for Filesystem in Userspace (FUSE)
[fwupd]
# Configurazione per getaddrinfo(3).## Questa è la configurazione predefinita per hdparm per Debian. È una # La riga "order" è usata solo dalle vecchie versioni della libreria C.## La gestione dell'immagine del kernel ha la precedenza#include /etc/ld.so.conf.d/*.confdefault_driver=pulse# Questo è il file di configurazione per accordabili libaudit.
5) Stampa degli ultimi N byte di un file
Per stampare gli ultimi N byte di un file, dovresti usare -c
o --bytes
switch seguito dal numero di byte. Questo stampa i primi 50 byte del file. Puoi anche usare
$ head -c 70 /etc/group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:syslog,eyramm
tty:x:5:
Per visualizzare un'altra dimensione diversa dai byte, ad esempio Kilobyte, puoi specificare kB
, MB
, M
, ecc
$ head -c 2kB /etc/group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:syslog,eyramm
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:
fax:x:21:
voice:x:22:
In alternativa, puoi usare -c +N
per generare byte che iniziano con l'ennesimo di ogni file
$ head -c +50 /etc/group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:sy
Per rimuovere le ultime N righe e stampare tutto il resto, utilizziamo il comando:
$ head -n -20 /var/log/syslog
6) Utilizzo della testina con tubi
Il comando head può essere indirizzato ao da altri comandi. Questo comando elenca il contenuto di un file di registro, lo reindirizza a head per visualizzare le prime 5 righe con un'intestazione e quindi il comando di ordinamento visualizza i risultati in ordine inverso.
$ cat /var/log/dpkg.log | head -n 5 -v | sort -r
==> standard input <==
2017-02-15 20:18:59 status unpacked base-passwd:amd64 3.5.39
2017-02-15 20:18:59 status unpacked base-passwd:amd64 3.5.39
2017-02-15 20:18:59 status half-installed base-passwd:amd64 3.5.39
2017-02-15 20:18:59 startup archives install
2017-02-15 20:18:59 install base-passwd:amd64 <none> 3.5.39
L'esempio seguente stampa una parte del file bootstrap.log, ovvero dalla decima riga alla ventesima riga. Ciò significa il -n20
switch stampa le prime 20 righe mentre -n10
switch stampa le ultime 10 delle 20 righe iniziali.
$ head -n20 /var/log/bootstrap.log | tail -n 10
dpkg: warning: parsing file '/var/lib/dpkg/status' near line 4 package 'dpkg':
missing maintainer
dpkg: warning: parsing file '/var/lib/dpkg/status' near line 4 package 'dpkg':
missing architecture
Selecting previously unselected package base-passwd.
(Reading database ... 0 files and directories currently installed.)
Preparing to unpack .../base-passwd_3.5.39_amd64.deb ...
Unpacking base-passwd (3.5.39) ...
dpkg: base-passwd: dependency problems, but configuring anyway as you requested:
base-passwd depends on libc6 (>= 2.8); however:
Ora dovresti capire come funzionano il comando head e i suoi argomenti nella visualizzazione delle prime righe di un file. Funziona esattamente in modo opposto a tail e può essere utilizzato anche con altri comandi utilizzando pipe. Puoi fare riferimento alle pagine man dei comandi head per ulteriori informazioni.
Leggi anche:
- Linux more Command spiegato con esempi