Existe alguma razão para usar `cat` quando você tem menos?

59

Eu costumava usar catpara visualizar arquivos. Aprendi então que isso lessgeralmente é melhor e é obrigatório se o arquivo tiver mais de algumas dezenas de linhas.

Minha pergunta: existe alguma razão para usar em catvez de less? Existe alguma situação em que cathá uma solução melhor?

Ram Rachum
fonte
17
lesse catresolver problemas diferentes e são cada um melhor que o outro em seu próprio domínio do problema
David Heffernan
2
Eu só uso catpara canalizar sua saída lessposteriormente.
FUZxxl 29/09/11
11
Costumo usar catarquivos muito curtos no console, os arquivos /proce /syssão ótimos candidatos. Dessa forma, posso ver o conteúdo de vários arquivos simultaneamente.
Feuermurmel 16/09

Respostas:

20

Pessoalmente, prefiro viewconteúdo estático ou tail -fdinâmico.

Isso não responde à sua pergunta, no entanto. Há um ditado "por que usar mais se você tem menos" ;-)

Mas há casos em que prefiro gato a menos: geralmente trabalho com o X11-windows. Essas janelas têm um buffer de rolagem que pode ser definido para algumas centenas de linhas.

Fazer um catpara - digamos 200 linhas e, em seguida, usar o mouse com a barra de rolagem é mais confortável para mim do que usar lessnesses casos.

Nils
fonte
4
Por viewque você quer dizer o costume vim -R, ou você tem alguma coisa com esse nome?
manatwork
Não - apenas vi (ou vim) no modo somente leitura. O CentOS define esse alias por padrão. Isso não acionará o HIDS ao exibir um arquivo em um diretório seguro.
Nils
2
less +Ffaz o que tail -ffaz.
legends2k
2
Na verdade, viewnão é um apelido; é um link (para viou vim). viexamina argv[0]quando é iniciado (para ver em que nome foi chamado) e, se é viewou rview, define o modo somente leitura (como se você tivesse digitado vim -R).
G-Man diz que 'Reinstate Monica'
91

Embora ambos os comandos permitam visualizar o conteúdo de um arquivo, seus propósitos originais são bem diferentes.

menos estende os recursos de mais . O último foi criado para exibir o conteúdo de um arquivo, uma tela por vez. menos adiciona recursos como movimentos para trás e melhor gerenciamento de memória (não é necessário ler o arquivo inteiro antes de poder ver as primeiras linhas).

cat concatena arquivos e imprime o resultado na saída padrão. Se você fornecer apenas um arquivo, verá o conteúdo desse arquivo. Torna-se 'poderoso' quando você fornece vários arquivos. Um bom exemplo é a combinação de split e cat. O primeiro comando dividirá um arquivo grande em pequenas porções. O segundo concatenará as pequenas porções em um único arquivo.

De volta à sua pergunta, o gato seria preferido em um script autônomo, exigindo que os arquivos fossem lidos inteiramente (ou concatenados) sem interação. Em termos de visualização de arquivos, acho que é mais uma questão de gosto.

nrolans
fonte
4
lesssempre permite pesquisar dentro do arquivo, o que catnão acontece.
Bernhard
@ Bernhard: Que tal fazer um grep na saída do gato?
user3527975
23

Eu costumo usar catquando preciso digitar um comando com base em algo no arquivo. caté mais conveniente, pois você pode ver o arquivo (se for pequeno) enquanto tiver acesso ao prompt do shell. Também permite o revestimento de tubos.

Amir Rachum
fonte
3
Para um arquivo, o redirecionamento da entrada padrão também é possível e geralmente preferível.
AProgramador 28/09
17
Existe alguma situação em que o gato é uma solução melhor?

Quando você está lidando com mais de um arquivo e deseja concatená-los.

Na página do manual:

cat f - g
        Output f's contents, then standard input, then g's contents.
jasonwryan
fonte
15

Há pessoas que argumentam violentamente que o único propósito de catse con gato arquivos Enate. Para qualquer outro uso, existe more(ou less).

Mas isso não leva em conta um fato bastante importante: cathá um caractere a menos para digitar. Eu uso esses comandos com tanta frequência que um caractere a menos é um acéfalo.

Outro motivo é quando você deseja criar um arquivo. Costumo copiar e colar texto da Web em um arquivo como este (prompt de comando mostrado):

$ cat > filename
<Cmd-V>
<Ctrl-D>
$

Ou seja, abro um arquivo filenamepara acesso de gravação, colo o conteúdo e fecho o fluxo pressionando Ctrl- D. Nem lessnem morepode fazer isso, e é mais rápido do que a abertura de um editor.

Konrad Rudolph
fonte
4
Se você usar o zsh como um shell, poderá configurá-lo para que $<filename(onde $está o prompt) chame o $ PAGER com o stdin conectado filename. Isso é ainda menos caracteres para digitar do que cat.
Kevin Cathcart
@ Kevin É bom saber, mas eu sou um usuário do bash.
precisa saber é o seguinte
2
No Mac OS X, eu uso pbpaste > filenamee acredito que o X tenha algo semelhante. Eu ainda uso catpara criação rápida de arquivos, mas não para colar.
cobbal
@cobbal Hehe, eu nunca pensei nisso, mesmo que eu use pbcopy/ pbpastepara outros fins.
Konrad Rudolph
11
É realmente dois personagens menos - você tem que pressionar qa saída less: D
Martin von Wittich
9

Às vezes, você não deseja a paginação que lessdeseja e apenas deseja o arquivo completo para usá-lo cat.

Mike Brentlinger
fonte
4

Eu uso catpara grep(vários) arquivos.

cat <filename1> [<filename2> <filename3>] | grep -i "string of interest"

Eu sei que grepsuporta nomes de arquivos, mas se você está esperando o mesmo arquivo por termos de pesquisa diferentes, editar um comando em que o termo de pesquisa é a última coisa na linha é mais fácil do que ter que pressionar a tecla Ctrl + seta na linha.

Nome falso
fonte
4

cat pode ser usado para concaturar vários arquivos binários em um grande:

cat data.001 data.002 data.003 > bigdata.dat
Michał Šrajer
fonte
3

Eu uso less -FX, o que faz com que se lesscomporte como catquando um arquivo pode ser exibido em uma tela. Na página de less(1)manual:

-F or --quit-if-one-screen
       Causes less to automatically exit if the entire file can be dis-
       played on the first screen.

-X or --no-init
       Disables sending the termcap initialization and deinitialization
       strings  to  the  terminal.   This is sometimes desirable if the
       deinitialization string does something unnecessary, like  clear-
       ing the screen.

fonte
2

Eu acho que, devido à economia de variantes do Unix agora, muitas pessoas não precisam administrar seus sistemas (com vingança). Quando tudo der certo, você poderá reiniciar e entrar no sistema no que é chamado de ambiente restrito.

Você obtém uma linha de comando e acessa um pequeno conjunto do que é considerado comandos úteis que são pequenos e geralmente vinculados estaticamente. Você pode obter o vi como editor ou mesmo o menor, mas não o emacs ou o vim. Você teria gato, mas não menos. A idéia é fornecer ferramentas suficientes para reparar seu sistema sem consumir muitos recursos, pois esses recursos podem estar incorretamente configurados ou esgotados. menos comando sob essas circunstâncias é supérfluo.

Paddy3118
fonte
2

E lessnão está pré-instalado em todas as distribuições GNU / Linux. (por exemplo, Gentoo) catestá em toda parte, provavelmente.

xin
fonte
2

As catpermanece na tela. Tudo lessdesaparece.

Esclarecido por / para Volker Siegel:

A saída de catpermanece na tela. Tudo o que é mostrado lessdesaparece após o fechamento.

TEMOR
fonte
1

Pode haver um problema com a escalação de privilégios, pois em 'less' você pode pressionar 'v' para editar um arquivo ou '!' para enviar um comando shell.

Você pode permitir que alguns usuários visualizem um arquivo que só pode ser lido pelo superusuário, mas não permite que esses usuários editem o arquivo ou usem privilégios de superusuário em geral. Você pode fazer isso editando '/ etc / sudoers' para permitir que eles usem 'sudo / bin / cat / etc / importantfile'. Você não deseja permitir 'sudo / usr / bin / less / etc / importantfile', porque eles podem usar 'v' para editar o arquivo ou '!' para iniciar um shell com privilégios completos de superusuário.

Obviamente, os usuários poderiam usar 'sudo / bin / cat / etc / importantfile | less 'e ainda usa' less ', sem os riscos de segurança.

bgvaughan
fonte
1

Os dois são diferentes. lessé um pager não padrão ( moreé o padrão), usado para exibir texto, enquanto caté um utilitário padrão, usado para concatenar qualquer tipo e número de fluxos de dados em um.

Eles podem parecer fazer a mesma coisa em algumas circunstâncias, mas, novamente, o mesmo acontece com outros utilitários.

Kusalananda
fonte
0

Por conveniência. gato tem 3 caracteres enquanto mais / menos tem 4 caracteres. E digitar gato requer apenas a mão esquerda.

lamwaiman1988
fonte
11
Por que usar apenas a mão esquerda é uma vantagem? Eu não uso o mouse sobre o terminal ...
Bernhard
0

Em termos de como mostrar os caracteres na tela, lesspode fazer o que catpode; E muito mais.

Mas há uma boa razão para usar o gato em alguns casos:
lessé muito complexo para resolver problemas muito simples. Eu tenho tantas opções que é difícil encontrar as catrelacionadas na página de manual.


Deseja mostrar as guias em um Makefile?

Em man cat, a primeira opção é -A.
A descrição não é útil: -vET.
Mas o longo nome de opção soa apenas para a direita: --show-all.

E cat -A Makefilefaz o que eu preciso.


Agora, vá encontrar isso por less.

Volker Siegel
fonte
0

Ambos 'less' e 'more' funcionarão exatamente como 'cat' se a saída não for um terminal (tty); quanto a pipes e arquivos, ambos reverterão para nenhuma paginação.

Eu acho que é seguro dizer que 'cat' está sempre presente em qualquer sistema do tipo Unix que você encontrará. A presença de 'less' e / ou 'more' em qualquer sistema é menos previsível.

Portanto, nos scripts, se você precisar apenas de uma operação de não paginação, 'cat' estará presente sempre que seu script for usado em um sistema do tipo Unix.

user208007
fonte
11
Bem, é seguro supor que moreestará disponível, visto que é exigido pela Especificação Unix Única.
Kusalananda
Infelizmente, embora possa ser mandatado assim, mas na minha experiência nem sempre está presente. Vale a pena notar que existem vários sistemas semelhantes ao Unix que não afirmam ser Unix. Eu acho que um pode estar bastante confiante de que um lessou um moreestará presente, mas acho que não se pode confiar em um em particular, nem que seja uma implementação 'verdadeira' ... muitas vezes um é alias ao outro, às vezes eles ' re uma versão leve e mínima.
precisa saber é o seguinte
-1

A tubulação de gato através do grep é útil:

cat <filename> | grep -i "string of interest"
RobW
fonte
4
Sem mencionar que grepleva um nome de arquivo como argumento, ou você pode usar o redirecionamento. O tubo é caro.
Chris Baixo
25
Parabéns, você ganhou o prêmio 'uso inútil de gato'!
precisa saber é o seguinte
4
@TimKennedy - "quando você tem less" está no título pergunta ...
Chris Baixo
5
Votado. Eu faço isso regularmente. Se eu desejar grep um arquivo várias vezes para termos de pesquisa diferentes, isso é mais fácil. grep quer grep [search term] [filename]Portanto, é mais difícil editar o termo de pesquisa se eu estiver usando o histórico do terminal. Ao canalizar para grep, o termo de pesquisa é a última coisa na linha e mais fácil de editar.
Fake Name
10
Você ainda pode ter a encomenda desejada sem usar cat: < [filename] grep [search term]e < filename tail -n 1000 | grep pattern. O redirecionamento pode ir praticamente para qualquer lugar da linha de comando.
camh 28/09/11