Su Unix sono disponibili svariati comandi che permettono la visualizzazione del contenuto di file di testo o binari.
Fare pratica con i principali è fondamentale per la normale attività sistemistica.
Tutti questi comandi hanno svariate opzioni e possibilità di eseguire operazioni anche complesse.
In genere si suggerisce di fare pratica con le funzionalità di base ed eventualmente usare le opzioni più evolute o rare in script shell o casi particolari.
cat
Visualizza il contenuto di un file di testo
tac
Fa esattamente la stessa cosa di cat, ma al contrario, visualizzando per prime le utile righe di un testo.
less
Visualizza il contenuto di un file testo, pagina per pagina
more
Come less, ma con meno funzioni
tail
Visualizza l'ultima parte di un file di testo
head
Visualizza la prima parte di un file di testo
file
Analizza e mostra il tipo di un file
strings
Visualizza stringhe di testo all'interno di un file binario
Legge uno o più file e li scrive sullo standard output.
E' il comando Unix più comune per visualizzare un file ASCII senza interruzioni o particolari filtri.
cat [opzioni] [file]
-v
(--show-nonprinting) Visualizza caratteri di controlli e non stampabili (ad eccezione dei LINEFEED e TAB).
-T
(--show-tabs) Visualizza i caratteri TAB come ^I
-E
(--show-ends) Visualizza $ alla fine di ogni riga (dove c'è un LINEFEED)
-A
(--show-all) Corrisponde a -vET
-n
(--number) Numera tutte le righe in output, iniziando da 1.
Esempi
cat -A file.dos
Visualizza il contenuto di file.dos evidenziando la presenza di eventuali caratteri non stampabili (se il file è stato copiato o salvato da Windows avrà dei caratteri di fine riga, non necessari su Linux/Unix che possono creare problemi. Per rimuoverli usare il comando dos2unix
)
Visualizza i file specificati una pagina alla volta.
E' comune in tutti gli Unix, ma in molti OS basati su utility GNU viene spesso sostituito o affiancato dall'analogo e più flessibile "less".
Con "SPAZIO" si scrolla l'output di una pagina, con "q" si torna alla shell.
more [opzioni] [file]
-r
Visualizza caratteri speciali e di controllo
+ #numero
Inizia a visualizzare dalla riga numero specificato
-num #numero
Imposta le dimensioni dello schermo a #numero righe
-p
Ripulisce ogni volta le pagine e non le scrolla. E' utile, con terminali che presentano problemi di visualizzazione, per rendere più leggibile l'output.
Una volta eseguito more si entra in modalità visualizzazione, in cui è possibile dare diversi comandi:
SPAZIO
Visualizza la schermata di testo successiva
INVIO
Visualizza la riga di testo successiva
q
Esce da more e torna alla shell
/pattern
Cerca il pattern indicato all'interno del testo
n
Cerca l'occorrenza successiva dell'ultimo pattern cercato
!comando
invoca la shell ed esegue il comando scritto
:n
Salta al file successivo (quando si visualizzano più file
:p
Salta al file precedente
Visualizza il contenuto di un file pagina per pagina, permettendo di scrollare al suo interno.
E' una versione più evoluta e recente di "more".
E' comune in tutti gli Unix che utilizzano utility GPL, Linux fra questi.
less [opzioni] [file]
-j #numero
Inizia a visualizzare dalla riga numero specificato
- #numero
Imposta il valore di default di linee scrollate (se non specificato è lo schermo intero)
-C
Ripulisce ogni volta le pagine e non le scrolla. E' utile, con terminali che presentano problemi di visualizzazione, per rendere più leggibile l'output.
-o file
Copia l'output sul file specificato nel caso in cui l'input provenga da una pipe.
-p pattern
All'apertura del file visualizza la prima occorrenza del pattern specificato.
Una volta eseguito less si entra in modalità visualizzazione, in cui è possibile dare diversi comandi:
SPAZIO
Visualizza la schermata di testo successiva (o avanza del numero di righe specificate con l'opzione - )
INVIO
Visualizza la riga di testo successiva
FRECCIA SU-GIU
Scrolla verso l'alto o verso il basso l'output
q
Esce da less e torna alla shell
/pattern
Cerca il pattern indicato all'interno del testo
n
Cerca l'occorrenza successiva dell'ultimo pattern cercato
!comando
invoca la shell ed esegue il comando scritto
:n
Salta al file successivo (quando si visualizzano più file)
:p
Salta al file precedente
Visualizza le ultime righe (di default 10) di un file.
E' un comando Unix comune.
Con l'opzione -f visualizza il file continuamente, senza tornare alla shell: opzione molto utile per tenere sotto controllo dei log.
tail [opzioni] [file]
-f
Non esce alla fine del file ma continua a visualizzarlo mentre cresce. Premere CTRL+C per tornare alla shell
- #numero
Visualizza le ultime #numero righe del file specificato
Esempi
tail -f /var/log/maillog
Visualizza l'ultima parte del file /var/log/maillog, continuando a scorrere il testo mano a mano che nuove righe si aggiungono al log. Questa funzionalità è molto comoda per diagnosticare problemi vari visualizzando in tempo reale file di log o debug.
tail -10 codice.txt
Visualizza le ultime 10 righe del file codice.txt presente nella directory corrente.
Comando utile per capire la natura di un file che non si conosce. Identifica il tipo di file specificato sulla base di pattern definiti nel file di definizioni /etc/magic
(o /usr/share/magic
)
file [opzioni] file
-s
Controlla anche i file speciali a blocchi o a caratteri (tipicamente quelli in /dev )
-z
Scomprime e prova a verificare il formato di file compressi
Esempi
file /bin/vi
Mostra che tipo di file è /bin/vi
file -s /dev/hda1
Fornisce informazioni utili sulla partizione /dev/hda1
Visualizza le prime righe (di default 10) di un file.
E' un comando Unix comune.
head [opzioni] [file]
-#numero
Visualizza le prime #numero righe del file specificato
-c #numero
Stampa i primi #num byte
Esempi
head -5 /etc/group
Visualizza le prime cinque righe di /etc/group
head -c5 /etc/group
Visualizza i primi 5 caratteri di /etc/group
Visualizza i caratteri stampabili all'interno di un file binario.
Comando comune in Unix, è comodo per verificare la presenza di stringhe di testo all'interno di un file binario compilato (il cui output tipicamente è un insieme di caratteri senza senso).
Precisamente visualizza, per il file specificato, qualunque stringa lunga almeno 4 caratteri stampabili e seguita da un carattere non stampabile.
E' utile per avere un'idea dei messaggi di testo utilizzati in un dato programma.
strings [opzioni] file
-a
Scandisce l'intero file e non solo alcune parti
-n #numero
Imposta a #numero la lunghezza minima della stringhe da visualizzare (di default è 4)
Esempi
strings /usr/bin/passwd
Visualizza tutte le stringe di caratteri stampabili (e quindi di testo) all'interno del file binario /usr/bin/passwd.
Visualizza il contenuto di un file con i caratteri solitamente non visualizzati (ad esempio ^M che rappresenta un Carriage Return (CR) di troppo).
Utile per individuare caratteri estranei in file di testo (tipicamente importati da DOS) che ne compromettono la funzionalità.
Per convertire file ascii da DOS a Unix e viceversa esistono le utility dos2unix
e unix2dos
.
Su un testo DOS l'"a capo" viene fatto con due caratteri ASCII: CR (carriage return) e LF (line feed).
Su un testo Unix è sufficiente LF. Su un testo Mac, si usa CR.
cat -v nomefile
Visualizza il contenuto di un file con i caratteri solitamente non visualizzati. Utile per individuare caratteri estranei in file di testo.
cat >> [nomefile]
Usare cat come semplice editor di testo.
cat /dev/null > [nomefile]
Comando che ricorre nel frasario del sistemista Unix. Svuota il contenuto di un file, rendendolo di dimensioni 0.
Visualizza, suddiviso per pagina con intestazione, il contenuto dei file trovati corrispondenti al criterio di ricerca.
Qualora sia necessario visualizzare il contenuto completo di un file, in relazione alla ricerca di un contenuto presente suo interno, è possibile utilizzare in combinazione il comando grep
per la ricerca e more
, che ne consente la visualizzazione pagina per pagina.
Supponendo di voler ricercare il pattern OpenSkills all'interno di tutti i file .txt
presenti nelle directory corrente:
[azitti@pegasus azitti]$ more `grep -l OpenSkills *.txt`
::::::::::::::
prova.txt
::::::::::::::
Test txt file
for OpenSkills
::::::::::::::
test.txt
::::::::::::::
YATF = This is Yet Another Test File for OpenSkills
L'output di grep, ovvero il nome di ogni file (opzione -l) che corrisponde alla ricerca, verrà passato in pasto a more
Usare cat come semplice editor di testo.
Il comando cat
, se utilizzato senza argomenti utilizza lo standard input, come input. Tramite l'uso dell'operatore di redirezione >>
può essre utilizzato come una sorta di semplice editor multilinea.
root@Joker:~# cat >> /etc/hosts
192.168.0.15 ftp.joker.net
192.168.0.20 ftp.enigma.net
^D
Due nuove linee vengono accodate al file hosts, terminando l'input con control+D
Visualizzare le ultime righe di un file, che soddisfano un determinato pattern di ricerca.
Usato tipicamente per tenere sotto controllo un file di log, è possibile raffinare ulteriormente la ricerca combinando il comando tai con grep in modo da visualizzare solo determinate informazioni.
Esempio:
root@enigma:/var/log/apache# tail -f access_log | grep 192.168.0.97
192.168.0.97 - - [23/Oct/2004:12:52:27 +0200] "GET / HTTP/1.1" 200 5703
192.168.0.97 - - [23/Oct/2004:12:52:28 +0200] "GET /style-enigma.css HTTP/1.1" 200 742
192.168.0.97 - - [23/Oct/2004:12:52:28 +0200] "GET /enigma.jpg HTTP/1.1" 200 21432
192.168.0.97 - - [23/Oct/2004:14:42:43 +0200] "GET / HTTP/1.1" 200 5703
Esempio di tail per visualizzare solo le richieste ad al Web Server apache dalla macchina 192.168.0.97
Comando che ricorre nel frasario del sistemista Unix.
Svuota il contenuto di un file, rendendolo di dimensioni 0.
E' un utilizzo particolare del comando cat, in quanto non è usato per visualizzare bensì per cancellare.
$ ls -la
[...] -rwxrwxrwx 1 al None 4386 Feb 26 21:33 NetDiag.log
$ cat /dev/null > NetDiag.log
$ ls -la
[...] -rwxrwxrwx 1 al None 0 Jun 14 15:41 NetDiag.log
Come si può immaginare dal nome del comando, esegue le stesse operazioni del comando cat
ma alla rovescia, ovvero la prima riga visualizzata sarà l'ultima contenuta del file.
tac [opzioni] [file]
-s STRINGS
Utilizza un separatore prima di visualizzare una nuova linea
-r
Interpreta il separatore come una regular expression