Gibt es jemals einen Grund, `cat` zu verwenden, wenn Sie` less` haben?

59

Früher habe ich catzum Anzeigen von Dateien verwendet. Dann habe ich gelernt, dass lessdas normalerweise besser ist und ein Muss ist, wenn die Datei länger als ein paar Dutzend Zeilen ist.

Meine Frage: Gibt es jemals einen Grund, catstatt zu verwenden less? Gibt es eine Situation, in der cates eine bessere Lösung gibt?

Ram Rachum
quelle
17
lessund catlösen verschiedene Probleme und sie sind besser als die anderen in ihrer eigenen Problemdomäne
David Heffernan
2
Ich benutze cates nur, um die Ausgabe lessdanach weiterzuleiten.
FUZxxl,
1
Ich benutze oft cat, um sehr kurze Dateien auf die Konsole zu drucken, die Dateien in /procund /syssind sehr gute Kandidaten. Auf diese Weise kann ich den Inhalt mehrerer Dateien gleichzeitig sehen.
Feuermurmel

Antworten:

20

Ich persönlich bevorzuge viewstatische oder tail -fdynamische Inhalte.

Dies beantwortet Ihre Frage jedoch nicht. Es gibt ein Sprichwort "warum mehr verwenden, wenn Sie weniger haben" ;-)

Aber es gibt Fälle, in denen ich Katze weniger bevorzuge: Ich arbeite normalerweise mit X11-Fenstern. Diese Fenster haben einen Bildlaufpuffer, der auf einige hundert Zeilen eingestellt werden kann.

Ein catFor - sagen wir mal 200 Zeilen und dann die Maus mit der Bildlaufleiste zu benutzen ist für mich angenehmer als lessin diesen Fällen.

Nils
quelle
4
Meinen viewSie das Übliche vim -Roder haben Sie etwas anderes mit diesem Namen?
Manatwork
Nein - nur vi (oder vim) im schreibgeschützten Modus. CentOS legt diesen Alias ​​standardmäßig fest. Dies löst HIDS nicht aus, wenn eine Datei in einem gesicherten Verzeichnis angezeigt wird.
Nils
2
less +Fmacht was tail -fmacht.
legends2k
2
Ist eigentlich viewkein Alias; es ist eine Verbindung (zu vioder vim). viSchaut nach, argv[0]wann es gestartet wird (um zu sehen, unter welchem ​​Namen es aufgerufen wurde) und legt , wenn dies viewoder ist rview, den schreibgeschützten Modus fest (als ob Sie eingegeben hätten vim -R).
G-Man
91

Obwohl Sie mit beiden Befehlen den Inhalt einer Datei anzeigen können, unterscheiden sich ihre ursprünglichen Zwecke erheblich.

weniger erweitert die Möglichkeiten von mehr . Letzteres wurde erstellt, um den Inhalt einer Datei bildschirmweise anzuzeigen. less fügt Funktionen wie Rückwärtsbewegungen und eine bessere Speicherverwaltung hinzu (Sie müssen nicht die gesamte Datei lesen, bevor Sie die ersten Zeilen sehen können).

cat verknüpft Dateien und druckt das Ergebnis auf der Standardausgabe. Wenn Sie nur eine Datei angeben, wird der Inhalt dieser Datei angezeigt. Es wird "leistungsstark", wenn Sie mehrere Dateien bereitstellen. Ein gutes Beispiel ist die Kombination von Split und Cat. Der erste Befehl teilt eine große Datei in kleine Teile. Der zweite verkettet dann die kleinen Teile zu einer einzigen Datei.

Zurück zu Ihrer Frage, cat wird in einem autonomen Skript bevorzugt, bei dem Dateien vollständig (oder verkettet) ohne Interaktion gelesen werden müssen. In Bezug auf die Anzeige von Dateien denke ich, ist es eher eine Frage des Geschmacks.

Nrolane
quelle
4
lessErmöglicht immer die Suche in der Datei, was catnicht der Fall ist.
Bernhard
@Bernhard: Was ist mit einem Grep bei der Katzenausgabe?
user3527975
23

Ich benutze normalerweise, catwenn ich einen Befehl basierend auf etwas in der Datei eingeben muss. catDies ist praktischer, da Sie die Datei (wenn sie klein ist) sehen können, während Sie auf die Shell-Eingabeaufforderung zugreifen können. Es ermöglicht auch das Auskleiden von Rohren.

Amir Rachum
quelle
3
Für eine Datei ist auch die Umleitung der Standardeingabe möglich und oftmals vorzuziehen.
AProgrammer
17
Gibt es eine Situation, in der Katze eine bessere Lösung ist?

Wenn Sie mit mehr als einer Datei arbeiten und diese verketten möchten.

Von der Manpage:

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

Es gibt Menschen , die heftig argumentieren , dass der einzige Zweck catzu con ist Katze enate Dateien. Für jede andere Verwendung gibt es more(oder less).

Dabei wird jedoch eine ganz wichtige Tatsache außer Acht gelassen: catIst ein Zeichen weniger einzugeben? Ich benutze diese Befehle so oft, dass ein Zeichen weniger ein Kinderspiel ist.

Ein weiterer Grund ist, wenn Sie eine Datei erstellen möchten. Ich kopiere und füge häufig Text aus dem Internet in eine Datei wie diese ein (Eingabeaufforderung wird angezeigt):

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

Das heißt, ich öffne eine Datei filenamefür den Schreibzugriff, füge den Inhalt ein und schließe den Stream, indem ich Ctrl- drücke D. Weder lessnoch morekann das und es ist schneller als das Öffnen eines Editors.

Konrad Rudolph
quelle
4
Wenn Sie zsh als Shell verwenden, können Sie es so einrichten, dass $<filename(wo $die Eingabeaufforderung ist) $ PAGER mit stdin aufgerufen wird, das mit verbunden ist filename. Das sind noch weniger Zeichen als cat.
Kevin Cathcart
@ Kevin Gut zu wissen, aber ich bin ein bash Benutzer.
Konrad Rudolph
2
Unter Mac OS X verwende ich pbpaste > filenameund ich glaube, X hat etwas Ähnliches. Ich benutze immer noch catfür die schnelle Dateierstellung, nur nicht zum Einfügen.
Cobbal
@cobbal Hehe, daran habe ich nie gedacht, obwohl ich pbcopy/ pbpastefür andere Zwecke benutze .
Konrad Rudolph
1
Es sind eigentlich zwei Zeichen weniger - Sie müssen drücken, um qzu beenden less: D
Martin von Wittich
9

Manchmal möchten Sie nicht die Paginierung, die dies lesstut, und nur die vollständige Datei, die Sie verwenden möchten cat.

Mike Brentlinger
quelle
4

Ich verwende catdazu grep(mehrere) Dateien.

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

Ich weiß, dass grepDateinamen unterstützt werden, aber wenn Sie dieselbe Datei nach verschiedenen Suchbegriffen durchsuchen, ist es einfacher, einen Befehl zu bearbeiten, bei dem der Suchbegriff das letzte in der Zeile ist, als Strg + Pfeiltaste in der Zeile zu drücken.

Falscher Name
quelle
4

cat kann verwendet werden, um mehrere Binärdateien zu einer großen zusammenzufassen:

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

Ich benutze less -FX, was lesssich so verhält, catwenn eine Datei auf einem Bildschirm angezeigt werden kann. Aus der less(1)Manpage:

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

quelle
2

Ich denke, aufgrund der Poularität der Unix-Varianten müssen viele Leute ihre Systeme nicht mehr administrieren (mit einer Vergeltung). Im Ernstfall können Sie möglicherweise einen Neustart durchführen und Ihr System in einer so genannten eingeschränkten Umgebung betreten.

Sie erhalten eine Befehlszeile und Zugriff auf einen kleinen Satz von als nützlich erachteten Befehlen, die klein und normalerweise statisch verknüpft sind. Sie könnten vi als Editor oder sogar den kleineren ed bekommen, aber nicht Emacs oder Vim. Sie würden Katze bekommen, aber nicht weniger. Die Idee ist, Ihnen genügend Tools zur Verfügung zu stellen, mit denen Sie Ihr System reparieren können, ohne zu viele Ressourcen in Anspruch zu nehmen, da diese möglicherweise falsch konfiguriert oder alle Ressourcen verbraucht sind. Je weniger Befehle unter diesen Umständen vorliegen, desto überflüssiger ist es.

Paddy3118
quelle
2

Und lessist nicht auf allen GNU / Linux-Distributionen vorinstalliert. (zB Gentoo) catist wahrscheinlich überall.

xin
quelle
2

Der catbleibt auf dem Bildschirm. Alles lessverschwindet.

Abgeklärt von / für Volker Siegel:

Die Ausgabe von catbleibt auf dem Bildschirm. Alles, was durch angezeigt wird, lessverschwindet nach dem Schließen.

SCHEU
quelle
1

Es kann ein Problem mit der Rechteerweiterung geben, da Sie in "less" "v" drücken können, um eine Datei zu bearbeiten, oder "!" um einen Shell-Befehl zu senden.

Möglicherweise möchten Sie einigen Benutzern erlauben, eine Datei anzuzeigen, die nur vom Superuser gelesen werden kann, diesen Benutzern jedoch nicht erlauben, die Datei zu bearbeiten oder Superuser-Berechtigungen im Allgemeinen zu verwenden. Sie können dies tun, indem Sie '/ etc / sudoers' bearbeiten, damit diese 'sudo / bin / cat / etc / importantfile' verwenden können. Sie möchten 'sudo / usr / bin / less / etc / importantfile' nicht zulassen, da sie 'v' zum Bearbeiten der Datei oder '!' um eine Shell mit vollen Superuser-Rechten zu starten.

Natürlich könnten die Benutzer 'sudo / bin / cat / etc / importantfile | verwenden less 'und immer noch' less 'verwenden, ohne die Sicherheitsrisiken.

bgvaughan
quelle
1

Die beiden sind unterschiedlich. lessist ein Nicht-Standard-Pager ( moreder Standard -Pager ), der zum Anzeigen von Text verwendet wird, während cates sich um ein Standard-Dienstprogramm handelt, mit dem alle Arten und Anzahlen von Datenströmen zu einem verkettet werden.

Sie scheinen unter bestimmten Umständen dasselbe zu tun, aber auch andere Dienstprogramme.

Kusalananda
quelle
0

Zur Bequemlichkeit. Katze hat 3 Zeichen, während mehr / weniger 4 Zeichen haben. Und das Tippen von Katzen erfordert nur Ihre linke Hand.

lamwaiman1988
quelle
1
Warum ist es von Vorteil, nur die linke Hand zu benutzen? Ich benutze die Maus nicht auf dem Terminal ...
Bernhard
0

In Bezug darauf, wie die Zeichen auf dem Bildschirm angezeigt werden sollen, lesskönnen Sie tun, was Sie catkönnen. Und vieles mehr.

Aber es gibt einen sehr guten Grund, in manchen Fällen Katze zu benutzen: Sie
lessist einfach zu komplex, um sie auf sehr einfache Probleme zu werfen. Ich habe so viele Optionen, dass es schwierig ist, die catentsprechenden in der Manpage zu finden.


Wollen Sie die Registerkarten in einer zeigen Makefile?

In man catist die erste Option -A.
Die Beschreibung ist nicht hilfreich: -vET.
Aber die lange Option Name klingt genau richtig: --show-all.

Und cat -A Makefilemacht was ich brauche.


Nun, finden Sie das für less.

Volker Siegel
quelle
0

Sowohl 'less' als auch 'more' funktionieren genau wie 'cat', wenn die Ausgabe kein Terminal (tty) ist. Bei Pipes und Dateien werden beide auf keine Paginierung zurückgesetzt.

Ich denke, man kann mit Sicherheit sagen, dass 'cat' auf jedem Unix-System, das Sie jemals finden werden, immer vorhanden ist. Das Vorhandensein von "weniger" und / oder "mehr" auf jedem System ist weniger vorhersehbar.

Wenn Sie daher in Skripten nur eine Operation ohne Paginierung benötigen, ist "cat" überall dort vorhanden, wo Ihr Skript auf einem Unix-System verwendet wird.

user208007
quelle
1
Nun, es ist sicher anzunehmen, dass moredies verfügbar sein wird, da es in der Single Unix-Spezifikation vorgeschrieben ist.
Kusalananda
Leider kann es so angeordnet sein, aber meiner Erfahrung nach ist es nicht immer vorhanden. Es ist erwähnenswert, dass es eine Reihe von Unix-ähnlichen Systemen gibt, die nicht behaupten, Unix zu sein. Ich denke, man kann ziemlich sicher sein, dass entweder ein lessoder ein morevorhanden sein wird, aber ich denke, man kann einem bestimmten nicht vertrauen, noch dass es eine "wahre" Implementierung ist ... oft ist man auf den anderen ausgerichtet, manchmal sind sie " Es handelt sich um eine minimale, leichte Version.
user208007
-1

Das Piping von cat durch grep ist nützlich:

cat <filename> | grep -i "string of interest"
RobW
quelle
4
Ganz zu schweigen davon, dass grepein Dateiname als Argument verwendet wird oder Sie die Umleitung verwenden könnten. Das Rohr ist teuer.
Chris Down
25
Herzlichen Glückwunsch, Sie gewinnen eine Auszeichnung für nutzlose Katzennutzung!
ThatGraemeGuy
4
@ TimKennedy - "wenn Sie haben less" ist in der Frage Titel ...
Chris Down
5
Upvoted. Ich mache das regelmäßig. Wenn ich eine Datei mehrmals nach verschiedenen Suchbegriffen durchsuchen möchte, ist dies einfacher. grep will Aus diesem grep [search term] [filename]Grund ist es mühsamer, den Suchbegriff zu bearbeiten, wenn ich das Terminalprotokoll verwende. Durch Weiterleiten an grep ist der Suchbegriff das Letzte in der Zeile und einfacher zu bearbeiten.
Fake Name
10
Sie können immer noch die gewünschte Bestellung haben, ohne cat: < [filename] grep [search term]und zu verwenden < filename tail -n 1000 | grep pattern. Die Umleitung kann praktisch überall in einer Befehlszeile erfolgen.
Samstag,