# Cat (Unix)

O comando cat, do sistema operacional, Unix é usado para unir, criar e exibir arquivos. 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:

## História

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.
Uma versão de cat embutida em GNU "coreutils" foi escrita por Torbjorn Granlund e Richard Stallman.

## Uso

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:

### Opções

Exemplos de opções para cat:
* -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

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

| 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
### A definição Jargon file

A versão 4.4.7 do Jargon File lista o seguinte como a definição de cat:
   * To spew an entire file to the screen or some other output sink without pause (syn. blast).
   * 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"

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. Isso também é referido como "abuso de cat". Segue um exemplo comum de abuso de cat :
Isso pode ser reescrito utilizando o redirecionamento do stdin, em qualquer uma das seguintes formas (a primeira sendo mais comum):
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:
Podem ser escritos como:
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. 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:
com:

## tac

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