cat (Unix)

Origem: Wikipédia, a enciclopédia livre.
Terminal mostrando a saída produzida pelo cat

O comando cat, do sistema operacional, Unix é usado para unir, criar e exibir arquivos.[1][2] O nome remete a "concatenate" ("concatenar" em inglês). Em geral é usado desta maneira para exibir o conteúdo de um arquivo na saída padrão:[1]

História[editar | editar código-fonte]

cat faz parte das primeiras versões do Unix, e substituiu pr, uma ferramenta PDP-7 que exibia o conteúdo de um único arquivo na tela.[3]

Uma versão de cat embutida em GNU "coreutils" foi escrita por Torbjorn Granlund e Richard Stallman.[4]

Uso[editar | editar código-fonte]

O "Single Unix Specification" define o funcionamento de cat como "ler arquivos na sequência dada nos argumentos, exibindo o conteúdo dos mesmos na saída padrão nessa mesma sequência".

Se um dos arquivos for especificado como um único hífen(-), cat lerá da entrada padrão naquela instância. Se nenhum arquivo for especificado, cat automaticamente lerá apenas da entrada padrão.

A sintaxe do comando se dá por:

cat [opções] [arquivos]

Opções[editar | editar código-fonte]

Exemplos de opções para cat [5]:

  • -b (GNU: --number-nonblank), enumera todas as linhas não-brancas na saída
  • -n (GNU: --number), enumera todas as linhas da saída
  • -s (GNU: --squeeze-blank), comprime múltiplas linhas brancas adjacentes
  • -u usa "unbuffered I/O" para a saída padrão. POSIX não especifica o comportamento do comando sem essa opção.
  • -v (GNU: --show-nonprinting), exibe caracteres que não são exibidos por padrão, exceto "tabs" e caracteres de fim de linha

Casos de uso[editar | editar código-fonte]

cat pode ser usado para direcionar um arquivo para um programa que requer texto simples ou dados binários como entrada. cat não destrói bytes não referentes a texto quando concatena e exibe os arquivos. Com isso, seus dois principais casos de uso são arquivos de texto e certos arquivos binários com formatos compatíveis.

Concatenação de texto é limitado a arquivos de texto que usam a mesma codificação, como ASCII. catnão fornece uma forma de concatenar arquivos de texto Unicode que contém uma "Byte Order Mark" ou arquivos que usam codificações diferentes entre si.

Para muitas estruturas binárias de dados, o arquivo resultante da concatenação pode não ser válido; por exemplo, se um arquivo tem um cabeçalho ou rodapé único, o resultado duplicará os mesmos. Entretanto, para alguns formatos multimídia digitais, o arquivo resultante é válido, nesse caso, cat fornece uma maneira efetiva de anexar arquivos. Arquivos de vídeo são um exemplo significante de formatos que cat pode concatenar sem problemas, como MPEG (MPEG-1 e MPEG-2) e outros formatos de vídeo digitais.

Exemplos[editar | editar código-fonte]

Comando Explicação
cat arquivo1.txt Exibe o conteúdo do arquivo
cat arquivo1.txt arquivo2.txt Concatena dois arquivos e exibe o resultado no terminal
cat arquivo1.txt arquivo2.txt > arquivocombinado.txt Concatena dois arquivos e escreve o resultado em um novo arquivo
cat >novoarquivo.txt Cria um novo arquivo chamado novoarquivo.txt. Escreva o conteúdo a ser inserido no arquivo e pressione CTRL+D para terminar.
cat -n arquivo1.txt arquivo2.txt > newnumberedfile.txt Algumas implementações de cat, com a opção -n, também podem enumerar as linhas
cat arquivo1.txt > arquivo2.txt Copia o conteúdo de arquivo1.txt para arquivo2.txt
cat arquivo1.txt >> arquivo2.txt Anexa o conteúdo de arquivo1.txt em arquivo2.txt
cat arquivo1.txt arquivo2.txt arquivo3.txt | sort > teste4.txt Concatena os arquivos, ordena as linhas, e escreve a saída no arquivo teste4.txt
cat arquivo1 arquivo2 | less Roda o programa "less" com a concatenação de arquivo1 e arquivo2 como entrada

Cultura Unix[editar | editar código-fonte]

A definição Jargon file[editar | editar código-fonte]

A versão 4.4.7 do Jargon File lista o seguinte como a definição de cat:

  1. To spew an entire file to the screen or some other output sink without pause (syn. blast).
  2. By extension, to dump large amounts of data at an unprepared target or with no intention of browsing it carefully. Usage: considered silly. Rare outside Unix sites. See also dd, BLT.

Among Unix fans, cat(1) is considered an excellent example of user-interface design, because it delivers the file contents without such verbosity as spacing or headers between the files, and because it does not require the files to consist of lines of text, but works with any sort of data.

Among Unix critics, cat(1) is considered the canonical example of bad user-interface design, because of its woefully unobvious name. It is far more often used to blast a single file to standard output than to concatenate two or more files. The name cat for the former operation is just as unintuitive as, say, LISP's cdr.


O "Useless use of cat"[editar | editar código-fonte]

O Useless use of cat (UUOC), ou no português "Uso Inútil de cat", é um jargão Unix comum usado para denominar os casos onde o comando é usado simplesmente como uma forma de conveniência ao usuário.[6] Isso também é referido como "abuso de cat". Segue um exemplo comum de abuso de cat :

cat arquivo | comando arg1 arg2 argn

Isso pode ser reescrito utilizando o redirecionamento do stdin, em qualquer uma das seguintes formas (a primeira sendo mais comum):

 comando arg1 arg2 argn < arquivo
 <arquivo comando arg1 arg2 argn

Além de outros benefícios, os meios que usam redirecionamento permitem que o comando performe um acesso aleatório no arquivo, enquanto o exemplo com cat não. Isso acontece pois o redirecionamento abre o arquivo como o "stdin file descriptor", algo que o comando pode acessar por completo, enquanto o método com cat simplesmente fornece os dados como um fluxo de bytes.

Outro caso comum onde cat é desnecessário é quando um comando lê sempre da entrada padrão, a não ser no caso onde um arquivo é fornecido como argumento. Esse é o caso com muitos comandos comuns. Os exemplos seguintes:

 cat "$arquivo" | grep "$estampa"
 cat "$arquivo" | less

Podem ser escritos como:

 grep "$estampa" "$arquivo"
 less "$arquivo"

Um uso interativo comum de cat para arquivos únicos é o de exibir o conteúdo do arquivo na saída padrão. No entanto, se a saída for canalizada ou redirecionada, cat é desnecessário. Um cat escrito com UUOC ainda pode ser preferível por razões de legibilidade, já que ler uma sequência de canalizações da esquerda para a direita pode torná-la mais fácil de ser conceitualizada.[7] Além disso, o uso incorreto do símbolo de redirecionamento ">" ao invés de "<" (muitas vezes adjacentes no teclado) pode deletar permanentemente o conteúdo de um arquivo, e uma forma de evitar que isso aconteça é o uso de cat . Compare:

 comando < entrada | comando2 > saida
 <entrada comando | comando2 > saida

com:

cat entrada | comando | comando2 > saida

tac[editar | editar código-fonte]

tac é um comando Linux que te permite ver um arquivo linha por linha de trás para frente. É nomeado pela analogia com cat.

Uso:

Usage: tac [OPTION]... [FILE]...
Write each FILE to standard output, last line first.
With no FILE, or when FILE is -, read standard input.

Mandatory arguments to long options are mandatory for short options too.
  -b, --before             attach the separator before instead of after
  -r, --regex              interpret the separator as a regular expression
  -s, --separator=STRING   use STRING as the separator instead of newline
      --help     display this help and exit
      --version  output version information and exit

Referências[editar | editar código-fonte]

  1. a b Indiana University, University Information Technology Services, Knowledge Base, Introduction to Unix commands, ls [em linha]
  2. The University of Utah, College of Science, Department of Mathematics, Mathematics Department computing facilities, Unix Command Summary [em linha]
  3. McIlroy, M. D. (1987). A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986 (PDF) (Relatório técnico). CSTR. Bell Labs. 139 
  4. https://linux.die.net/man/1/cat
  5. OpenBSD manual page and the GNU Core Utiltites version of cat
  6. comp.unix.shell. "Early award example of UUOC (1994)", comp.unix.shell via Google Groups, Retrieved on 1 Mars 2017.
  7. Nguyen, Dan. «Stanford Computational Journalism Lab». stanford.edu. Consultado em 8 de outubro de 2017 

Ligações externas[editar | editar código-fonte]