Admin Linux - Comando cat

o catcomando é usado para concatenar arquivos e imprimir na saída padrão. Anteriormente, demonstramos usos e abusos com o comando cat. servidores cat para as seguintes finalidades distintas -

  • Mostrar o conteúdo dos arquivos

  • Grava o conteúdo de um arquivo em outro arquivo

  • Combine vários arquivos em um único arquivo

  • Suporte a recursos especiais: adição de números de linha, exibição de caracteres especiais, eliminação de linhas em branco

Interruptor Açao
-b Número de linhas não vazias
-E Mostrar finais de linha
-T Mostrar abas
-s Aperte em branco, suprima linhas vazias repetidas

Conforme observado anteriormente, ao usar utilitários como grep , sort e uniq , queremos evitar o piping de saída de cat, se possível. Fizemos isso para uma demonstração simples dos comandos de tubulação anteriormente. No entanto, saber quando realizar uma operação com um utilitário como o grep é o que separa os administradores Linux dos usuários finais do Linux.

Mau hábito

[[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]#

Bom hábito

[[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 - direcionar cat para comandos secundários como sort ou grep só deve ser feito quando for necessário.

Um uso comum de cat é ao lidar com quebras de linha formatadas do Windows. Linux e Windows por design interno, usam um código de controle diferente para representar o fim da linha (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"

Então, digamos que abrimos nosso arquivo em um editor de texto GUI como o gedit ou estamos enfrentando problemas aleatórios ao aplicar comandos de filtragem. O texto aparece em uma única linha ou os comandos de filtragem não funcionam conforme o esperado.

Especialmente, quando o arquivo de texto foi baixado da Internet, queremos verificar as quebras de linha. A seguir está um exemplo de saída de cat mostrando caracteres 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

Observe o anterior "$"em cada linha? O Linux está lendo o CR" \ n ", quebrando o arquivo. Em seguida, traduz um retorno de carro sobre o primeiro caractere de cada arquivo.

Quando visualizado sem a opção -E, o arquivo parece bom -

[[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

Felizmente, com os comandos de filtragem do Linux, essa é uma solução fácil -

[[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 - Quando visualizado com a opção -E, todas as quebras de linha do Linux terminarão em $.

cat também pode ser usado para combinar vários arquivos em um único arquivo.

[[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]#

Agora vamos usar cat para combinar os dois arquivos.

[[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]#

Finalmente, podemos usar o -nmude para numerar cada linha de saída. Isso nos dará um total de linhas.

[[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]#