Y a-t-il une raison d'utiliser "cat" quand vous avez "moins"?

59

J'avais l'habitude de catvoir des fichiers. Ensuite, j’ai appris que lessc’est généralement mieux et qu’il est indispensable si le fichier est plus long que quelques dizaines de lignes.

Ma question: Y a-t-il jamais une raison d'utiliser catau lieu de less? Y at-il une situation où catest une meilleure solution?

Ram Rachum
la source
17
lesset catrésoudre des problèmes différents et ils sont meilleurs l'un que l'autre dans leur propre domaine de problèmes
David Heffernan Le
2
J'utilise seulement catpour canaliser sa sortie dans la lesssuite.
FUZxxl le
1
J'utilise souvent catpour imprimer des fichiers très courts sur la console, les fichiers /procet /syssont de très bons candidats. De cette façon, je peux voir le contenu de plusieurs fichiers simultanément.
Feuermurmel

Réponses:

20

Personnellement, je préfère viewle contenu statique ou tail -fdynamique.

Cela ne répond pas à votre question, cependant. Il y a un dicton "pourquoi utiliser plus si vous avez moins" ;-)

Mais il y a des cas où je préfère les chats aux moins: je travaille généralement avec X11-windows. Ces fenêtres ont un tampon de défilement qui peut être défini sur une centaine de lignes.

Faire un catpour - disons 200 lignes et ensuite utiliser la souris avec la barre de défilement est plus confortable pour moi que lessdans ces cas.

Nils
la source
4
En viewvous dire l'habitude vim -R, ou si vous avez autre chose avec ce nom?
Manatwork
Non - juste vi (ou vim) en mode lecture seule. CentOS définit cet alias par défaut. Cela ne déclenchera pas HIDS lors de la visualisation d'un fichier dans un répertoire sécurisé.
Nils
2
less +Ffait quoi tail -ffait.
legends2k
2
En réalité, ce viewn’est pas un alias; c'est un lien (vers viou vim). viregarde argv[0]quand il commence (pour voir quel nom il a été invoqué) et, s'il s'agit de viewou rview, il définit le mode lecture seule (comme si vous aviez tapé vim -R).
G-Man dit 'Réintégrez Monica' le
91

Bien que les deux commandes vous permettent d'afficher le contenu d'un fichier, leur objectif d'origine est très différent.

less étend les capacités de more . Ce dernier a été créé pour afficher le contenu d’un fichier écran par écran. less ajoute des fonctionnalités telles que les mouvements en arrière et une meilleure gestion de la mémoire (inutile de lire le fichier en entier avant de pouvoir voir les premières lignes).

cat concatène des fichiers et imprime le résultat sur la sortie standard. Si vous ne fournissez qu'un seul fichier, vous verrez le contenu de ce fichier. Il devient "puissant" lorsque vous fournissez plusieurs fichiers. Un bon exemple est la combinaison de split et de chat. La première commande divisera un fichier volumineux en petites parties. Le second concaténera ensuite les petites parties dans un seul fichier.

Pour revenir à votre question, cat serait préféré dans un script autonome exigeant que les fichiers soient lus entièrement (ou concaténés) sans interaction. En ce qui concerne la consultation des fichiers, je pense que c’est davantage une question de goût.

nrolans
la source
4
lesspermet toujours de rechercher dans le fichier, ce qui catn'est pas le cas.
Bernhard
@ Bernhard: Qu'en est-il de faire un grep sur la sortie de chat?
user3527975
23

J'utilise généralement catlorsque j'ai besoin de taper une commande basée sur quelque chose dans le fichier. catest plus pratique car vous pouvez voir le fichier (s'il est petit) pendant que vous avez accès à l'invite du shell. Il permet également de doubler les tuyaux.

Amir Rachum
la source
3
Pour un fichier, la redirection de l'entrée standard est également possible et souvent préférable.
AProgrammer
17
Y a-t-il une situation où le chat est une meilleure solution?

Lorsque vous avez affaire à plusieurs fichiers et que vous souhaitez les concaténer.

De la page de manuel:

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

Il y a des gens qui soutiennent violemment que le seul but de catest de con chat fichiers Enate. Pour toute autre utilisation, il y a more(ou less).

Mais ceci ne tient pas compte d’un fait assez important: catc’est un caractère de moins à taper. J'utilise ces commandes si souvent qu'un personnage de moins est une évidence.

Une autre raison est lorsque vous souhaitez créer un fichier. Je copie souvent le texte du Web dans un fichier comme celui-ci (invite de commande affichée):

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

C'est-à-dire que j'ouvre un fichier filenamepour un accès en écriture, colle le contenu et ferme le flux en appuyant sur Ctrl- D. Ni lessni morene peut le faire, et c'est plus rapide que d'ouvrir un éditeur.

Konrad Rudolph
la source
4
Si vous utilisez zsh en tant que shell, vous pouvez le configurer pour que $<filename(où $est l'invite) appelle $ PAGER avec stdin connecté à filename. C'est encore moins de caractères à taper que cat.
Kevin Cathcart le
@ Kevin C'est bon à savoir, mais je suis un utilisateur bash.
Konrad Rudolph le
2
Sur Mac OS X, j’utilise pbpaste > filename, et je pense que X a quelque chose de similaire. J'utilise toujours catpour la création rapide de fichiers, mais pas pour le collage.
Cobob
@ cobbal Héhé, je n'y ai jamais pensé même si j'utilise pbcopy/ pbpasteà d'autres fins.
Konrad Rudolph
1
C'est en fait deux caractères de moins - vous devez appuyer sur qpour sortir less: D
Martin von Wittich
9

Parfois, vous ne voulez pas que la pagination soit faite, lessmais simplement le fichier complet que vous utiliseriez cat.

Mike Brentlinger
la source
4

J'utilise catpour grep(plusieurs) fichiers.

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

Je sais que grepprend en charge les noms de fichiers, mais si vous recherchez le même fichier pour différents termes de recherche, il est plus facile de modifier une commande dans laquelle le terme de recherche est la dernière chose de la ligne.

Faux nom
la source
4

cat peut être utilisé pour concaténer plusieurs fichiers binaires en un seul:

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

J'utilise less -FX, ce qui permet de lessse comporter comme catlorsqu'un fichier peut être affiché sur un seul écran. De la less(1)page de manuel:

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

la source
2

En raison de la profusion de variantes Unix, beaucoup de gens n’ont pas à administrer leurs systèmes (avec vengeance). Lorsque les choses vont mal, vous pourrez peut-être simplement redémarrer et entrer dans votre système dans ce qu'on appelle un environnement restreint.

Vous obtenez une ligne de commande et un accès à un petit ensemble de commandes jugées utiles qui sont petites et généralement liées statiquement. Vous pouvez obtenir vi en tant qu'éditeur ou même un éditeur plus petit, mais pas emacs ou vim. Vous auriez un chat, mais pas moins. L'idée est de vous donner suffisamment d'outils pour réparer votre système sans prendre trop de ressources car ces ressources risquent d'être mal configurées ou toutes utilisées. moins les circonstances sont superflues.

Paddy3118
la source
2

Et lessn’est pas préinstallé sur toutes les distributions GNU / Linux. (par exemple, Gentoo) catest partout, probablement.

xin
la source
2

Les catreste à l'écran. Tout lessdisparaît.

Clarifié par / pour Volker Siegel:

La sortie de catreste à l'écran. Tout ce qui est indiqué par lessdisparaît après la fermeture.

ADMIRATION
la source
1

Il peut y avoir un problème avec l'élévation de privilèges, car dans "moins", vous pouvez appuyer sur "v" pour éditer un fichier ou "!" envoyer une commande shell.

Vous pouvez autoriser certains utilisateurs à afficher un fichier qui ne peut être lu que par le superutilisateur, mais pas leur permettre de l'éditer ou d'utiliser les privilèges de superutilisateur en général. Vous pouvez le faire en éditant '/ etc / sudoers' pour leur permettre d'utiliser 'sudo / bin / cat / etc / importantfile'. Vous ne voudriez pas autoriser 'sudo / usr / bin / less / etc / importantfile', car ils pourraient utiliser 'v' pour éditer le fichier ou utiliser '!' pour lancer un shell avec les privilèges de super-utilisateur complets.

Bien entendu, les utilisateurs pourraient utiliser 'sudo / bin / cat / etc / importantfile | less 'et utilisent toujours' moins ', sans les risques de sécurité.

bgvaughan
la source
1

Les deux sont différents. lessest un pager non standard ( morestandard), utilisé pour la visualisation de texte, alors qu’il cats’agit d’un utilitaire standard, utilisé pour concaténer tout type et nombre de flux de données en un seul.

Ils peuvent sembler faire la même chose dans certaines circonstances, mais il en va de même pour les autres services publics.

Kusalananda
la source
0

Pour plus de commodité. le chat a 3 caractères tandis que plus / moins a 4 caractères. Et taper chat nécessite seulement votre main gauche.

lamwaiman1988
la source
1
Pourquoi utiliser uniquement votre main gauche est un avantage? Je n'utilise pas la souris sur le terminal ...
Bernhard
0

En ce qui concerne la manière d'afficher les caractères à l'écran, vous lesspouvez faire ce que vous catpouvez faire. Et beaucoup plus.

Mais il existe une très bonne raison d’utiliser cat dans certains cas:
lessc’est trop complexe pour le lancer sur des problèmes très simples. J'ai tellement d'options qu'il est difficile de trouver catcelles qui sont liées dans la page de manuel.


Voulez-vous afficher les onglets dans un Makefile?

Dans man cat, la première option est -A.
La description n'est pas utile: -vET.
Mais le nom de l' option sonne juste: --show-all.

Et cat -A Makefilefait ce dont j'ai besoin.


Maintenant, allez chercher ça pour less.

Volker Siegel
la source
0

'Less' et 'more' fonctionneront exactement comme 'cat' si la sortie n'est pas un terminal (tty), en ce qui concerne les pipes et les fichiers, ils ne retourneront pas à la pagination.

Je pense qu'il est prudent de dire que 'cat' est toujours présent sur tous les systèmes de type Unix que vous trouverez jamais. La présence de «moins» et / ou de «plus» sur tout système est moins prévisible.

Par conséquent, dans les scripts, si vous n'avez besoin que d'une opération sans pagination, 'cat' est certain d'être présent partout où votre script est utilisé sur un système de type Unix.

utilisateur208007
la source
1
Eh bien, on peut supposer que morecela sera disponible, étant donné que cela est imposé par la spécification Single Unix.
Kusalananda
Malheureusement, bien que cela puisse être mandaté de la sorte, ce n’est pas toujours le cas. Il est à noter qu'il existe un certain nombre de systèmes de type Unix qui ne prétendent pas être Unix. Je pense que l’on peut être assez sûr qu’un lessou un moresera présent, mais je pense qu’on ne peut pas faire confiance à un particulier, ni au fait qu’il s’agit d’une «vraie» implémentation ... souvent l’un a un alias, parfois même. re une version minimale légère.
user208007
-1

Piping cat via grep est utile:

cat <filename> | grep -i "string of interest"
RobW
la source
4
Sans compter que cela grepprend un nom de fichier en argument, ou vous pouvez utiliser une redirection. La pipe est chère.
Chris Down
25
Félicitations, vous remportez un prix «Utilisation inutile du chat»!
ThatGraemeGuy
4
@TimKennedy - "quand vous avez less" est dans le titre de la question ...
Chris Down
5
Upvote. Je le fais régulièrement. Si je veux grep un fichier plusieurs fois pour différents termes de recherche, c'est plus facile. grep veut grep [search term] [filename]Par conséquent, il est plus pénible de modifier le terme de recherche si j'utilise l'historique du terminal. En recherchant grep, le terme de recherche est la dernière chose sur la ligne et est plus facile à modifier.
Faux nom
10
Vous pouvez toujours avoir la commande que vous voulez sans utiliser cat: < [filename] grep [search term]et < filename tail -n 1000 | grep pattern. La redirection peut aller à peu près n'importe où sur une ligne de commande.
camh