Amministratore Linux: comando cat
Il catviene utilizzato per concatenare i file e stampare sull'output standard. In precedenza, abbiamo dimostrato usi e abusi con il comando cat. cat serve i seguenti scopi distinti:
Mostra i contenuti dei file
Scrive il contenuto di un file in un altro file
Combina più file in un unico file
Supporta funzioni speciali: aggiunta di numeri di riga, visualizzazione di caratteri speciali, eliminazione di righe vuote
Interruttore | Azione |
---|---|
-b | Numero di righe non vuote |
-E | Mostra le estremità della linea |
-T | Mostra schede |
-S | Schiaccia gli spazi vuoti, elimina le righe vuote ripetute |
Come notato in precedenza, quando si usano utilità come grep , sort e uniq , si vuole evitare, se possibile, il piping dell'output da cat. Lo abbiamo fatto per una semplice dimostrazione dei comandi di piping in precedenza. Tuttavia, sapere quando eseguire un'operazione con un'utilità come grep è ciò che separa gli amministratori Linux dagli utenti finali Linux.
Cattiva abitudine
[[email protected] centos]# cat /etc/passwd | sort -t: -k1 | grep ":0"
halt:x:7:0:halt:/sbin:/sbin/halt
operator:x:11:0:operator:/root:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sync:x:5:0:sync:/sbin:/bin/sync
[[email protected] centos]#
Buona abitudine
[[email protected] centos]# grep ":0" /etc/passwd | sort -t: -k 1
halt:x:7:0:halt:/sbin:/sbin/halt
operator:x:11:0:operator:/root:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sync:x:5:0:sync:/sbin:/bin/sync
[[email protected] centos]#
Note - il piping cat a comandi secondari come sort o grep dovrebbe essere fatto solo quando è necessario.
Un uso comune di cat è quando si ha a che fare con interruzioni di riga formattate Windows. Sia Linux che Windows per progettazione interna, utilizzano un codice di controllo diverso per rappresentare End Of Line (EOL) -
* Linux line break is always a Line Feed: LF or depicted as "\n".
* Windows is Carriage Return followed by a Line Feed: CR LF or depicted as "\r\n".
* Macintosh, in all moderne releases of OS X and now macOS, has adopted the Linux/Unix
standard of LF or "\n"
Quindi, supponiamo di aprire il nostro file in un editor di testo GUI come gedit o di riscontrare problemi casuali durante l'applicazione dei comandi di filtro. Il testo viene visualizzato su una singola riga oppure i comandi di filtro non funzionano come previsto.
In particolare, quando il file di testo è stato scaricato da Internet, vogliamo controllare le interruzioni di riga. Di seguito è riportato un esempio di output da cat che mostra i caratteri EOL.
[[email protected] centos]# cat -E ./Desktop/WinNames.txt
$ed:Daniel:101
$enny:Colon:608
$ana:Maxwell:602
$arian:Little:903
$obbie:Chapman:403
$icolas:Singleton:203
$ale:Barton:901
Notare il precedente "$"su ogni riga? Linux sta leggendo la CR" \ n ", interrompendo il file. Quindi traduce un ritorno a capo sul primo carattere di ogni file.
Se visualizzato senza l'opzione -E, il file sembra a posto -
[[email protected] centos]# cat ./Desktop/WinNames.txt
Ted:Daniel:101
Jenny:Colon:608
Dana:Maxwell:602
Marian:Little:903
Bobbie:Chapman:403
Nicolas:Singleton:203
Dale:Barton:901
Fortunatamente, con i comandi di filtraggio di Linux questa è una soluzione semplice:
[[email protected] centos]# sed -i 's/\r$//g' ./Desktop/WinNames.txt
[[email protected] centos]# cat -E ./Desktop/WinNames.txt
Ted:Daniel:101$
Jenny:Colon:608$
Dana:Maxwell:602$
Note - Se visualizzati con l'opzione -E, tutte le interruzioni di riga di Linux finiranno in $.
cat può essere utilizzato anche per combinare più file in un unico file.
[[email protected] centos]# cat linux.txt
CentOS
Ubuntu
Red Hat
Suse
Debian
[[email protected] centos]# cat windwos.txt
NT 3.5
NT 4.0
Server 2000
Server 2003
Server 2008
Server 2012
Server 2016
[[email protected] centos]#
Usiamo ora cat per combinare i due file.
[[email protected] centos]# cat windwos.txt linux.txt > server_class_operating_sytems.txt
[[email protected] centos]# cat server_class_operating_sytems.txt
NT 3.5
NT 4.0
Server 2000
Server 2003
Server 2008
Server 2012
Server 2016
CentOS
Ubuntu
Red Hat
Suse
Debian
[[email protected] centos]#
Infine, possiamo usare il file -npassare al numero di ciascuna linea di uscita. Questo ci darà un totale di righe.
[[email protected] centos]# cat -n ./server_class_operating_sytems.txt
1 NT 3.5
2 NT 4.0
3 Server 2000
4 Server 2003
5 Server 2008
6 Server 2012
7 Server 2016
8 CentOS
9 Ubuntu
10 Red Hat
11 Suse
12 Debian [[email protected] centos]#