Cat (Unix)
![](http://upload.wikimedia.org/wikipedia/commons/thumb/7/76/Cpuinfo_about_Intel_Celeron_M_410.png/250px-Cpuinfo_about_Intel_Celeron_M_410.png)
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
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
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
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
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. cat
nã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.[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
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
- ↑ a b Indiana University, University Information Technology Services, Knowledge Base, Introduction to Unix commands, ls [em linha]
- ↑ The University of Utah, College of Science, Department of Mathematics, Mathematics Department computing facilities, Unix Command Summary [em linha]
- ↑ 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
- ↑ https://linux.die.net/man/1/cat
- ↑ OpenBSD manual page and the GNU Core Utiltites version of cat
- ↑ comp.unix.shell. "Early award example of UUOC (1994)", comp.unix.shell via Google Groups, Retrieved on 1 Mars 2017.
- ↑ Nguyen, Dan. «Stanford Computational Journalism Lab». stanford.edu. Consultado em 8 de outubro de 2017
Ligações externas
- UNIX Style, or cat -v Considered Harmful - A paper by Rob Pike on proper Unix command design using cat as an example.
- cat(1) original manual page in the First Edition of Unix.
- «cat(1): concatenate and write files» (em inglês). . GNU Coreutils reference. templatestyles stripmarker character in
|título=
at position 37 (ajuda) - «cat(Predefinição:Citar man (Unix)/OpenBSD): concatenate and print files» [[[:Predefinição:Citar man (Unix)/OpenBSD]] 🔗] Verifique valor
|url=
(ajuda) (em inglês). . Predefinição:Citar man (Unix)/OpenBSD. templatestyles stripmarker character in|título=
at position 37 (ajuda) - «cat(Predefinição:Citar man (Unix)/FreeBSD)» [[[:Predefinição:Citar man (Unix)/FreeBSD]] 🔗] Verifique valor
|url=
(ajuda) (em inglês). . Predefinição:Citar man (Unix)/FreeBSD. templatestyles stripmarker character in|título=
at position 37 (ajuda) - «cat(Predefinição:Citar man (Unix)/Plan 9)» [[[:Predefinição:Citar man (Unix)/Plan 9]] 🔗] Verifique valor
|url=
(ajuda) (em inglês). . Predefinição:Citar man (Unix)/Plan 9. templatestyles stripmarker character in|título=
at position 37 (ajuda) - Useless Use Of Cat Award
- «tac(1): concatenate and write files in reverse» (em inglês). . GNU Coreutils reference. templatestyles stripmarker character in
|título=
at position 37 (ajuda) - 13 examples of cat and tac usage from tecmint