C'è mai un motivo per usare `cat` quando hai` meno`?


59

Prima usavo catper visualizzare i file. Poi ho imparato che di lesssolito è meglio, ed è un must se il file è più lungo di alcune dozzine di righe.

La mia domanda: c'è mai un motivo da usare al catposto di less? C'è qualche situazione in cui catc'è una soluzione migliore?


17
lesse catrisolvono problemi diversi e sono entrambi migliori dell'altro nel proprio dominio problematico
David Heffernan,

2
Uso solo catper inoltrare il suo output in lessseguito.
FUZxxl,

1
Uso spesso catper stampare file molto brevi sulla console, i file /proce /syssono candidati molto validi. In questo modo posso vedere contemporaneamente il contenuto di più file.
Feuermurmel,

Risposte:


20

Personalmente preferisco viewcontenuti statici o tail -fdinamici.

Questo non risponde alla tua domanda, però. C'è un detto "perché usare di più se ne hai meno" ;-)

Ma ci sono casi in cui preferisco cat a meno: di solito lavoro con X11-windows. Queste finestre hanno un buffer di scorrimento che può essere impostato su alcune centinaia di righe.

Fare un catfor - diciamo 200 righe e quindi usare il mouse con la barra di scorrimento mi è più comodo che usare lessin questi casi.


4
Con viewvuoi dire il solito vim -R, o se hai qualcos'altro con quel nome?
arte

No - solo vi (o vim) in modalità di sola lettura. CentOS imposta tale alias per impostazione predefinita. Ciò non attiverà HIDS durante la visualizzazione di un file in una directory protetta.
Nils,

2
less +Ffa quello che tail -ffa.
legends2k

2
In realtà, viewnon è un alias; è un collegamento (a vio vim). viguarda argv[0]quando inizia (per vedere con quale nome è stato invocato) e, se questo è viewo rview, imposta la modalità di sola lettura (come se tu avessi digitato vim -R).
G-Man dice "Ripristina Monica" il

91

Sebbene entrambi i comandi ti consentano di visualizzare il contenuto di un file, i loro scopi originali sono piuttosto diversi.

less estende le capacità di more . Quest'ultimo è stato creato per visualizzare il contenuto di un file uno schermo alla volta. less aggiunge funzionalità come i movimenti all'indietro e una migliore gestione della memoria (non è necessario leggere l'intero file prima di poter vedere le prime righe).

cat concatena i file e stampa il risultato sull'output standard. Se fornisci un solo file, vedrai il contenuto di quel file. Diventa "potente" quando si forniscono più file. Un buon esempio è la combinazione di split e cat. Il primo comando divide un file di grandi dimensioni in piccole porzioni. Il secondo concatenerà le piccole porzioni in un singolo file.

Tornando alla tua domanda, cat sarebbe preferito in uno script autonomo che richiede che i file vengano letti interamente (o concatenati) senza interazione. In termini di visualizzazione dei file, penso che sia più una questione di gusti.


4
lessconsente sempre di cercare all'interno del file, il che catnon lo fa.
Bernhard,

@ Bernard: che ne dici di fare un grep sull'output di gatto?
user3527975

23

Di solito lo uso catquando devo digitare un comando basato su qualcosa nel file. catè più conveniente poiché puoi vedere il file (se è piccolo) mentre hai accesso al prompt della shell. Inoltre consente il rivestimento del tubo.


3
Per un file, anche il reindirizzamento dell'input standard è possibile e spesso preferibile.
AProgrammer,

17
C'è qualche situazione in cui il gatto è una soluzione migliore?

Quando hai a che fare con più di un file e desideri concatenarli.

Dalla pagina man:

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

15

Ci sono persone che sostengono violentemente che l'unico scopo di catè quello con gatto file Enate. Per ogni altro uso, c'è more(o less).

Ma questo non tiene conto di un fatto abbastanza importante: catè un carattere in meno da digitare. Uso questi comandi così spesso che un personaggio in meno è un gioco da ragazzi.

Un altro motivo è quando si desidera creare un file. Spesso copia e incolla il testo dal Web in un file come questo (visualizzato il prompt dei comandi):

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

Cioè, apro un file filenameper l'accesso in scrittura, incollo il contenuto e chiudo il flusso premendo Ctrl- D. Né less, né morepuò farlo, ed è più veloce di apertura di un editor.


4
Se usi zsh come shell, puoi configurarlo in modo che $<filename(dov'è $il prompt) invochi $ PAGER con stdin connesso filename. Questo è ancora meno caratteri da digitare di cat.
Kevin Cathcart,

@Kevin Bello da sapere ma sono un utente bash.
Konrad Rudolph,

2
Su Mac OS X, io uso pbpaste > filenamee credo che X abbia qualcosa di simile. Lo uso ancora catper la creazione rapida di file, ma non per incollare.
cobbal

@cobbal Hehe, non ci ho mai pensato anche se uso pbcopy/ pbpasteper altri scopi.
Konrad Rudolph,

1
In realtà sono due caratteri in meno - devi premere qper uscire less: D
Martin von Wittich,

9

A volte non vuoi l'impaginazione che lessfa e vuoi solo il file completo in modo da utilizzare cat.


4

Io uso catdi grepfile (più).

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

So che grepsupporta i nomi di file, ma se stai inserendo lo stesso file per termini di ricerca diversi, modificare un comando in cui il termine di ricerca è l'ultima cosa sulla riga è più semplice quindi dover ctrl + tasto freccia indietro attraverso la linea.


4

cat può essere utilizzato per concatenare più file binari in uno solo grande:

cat data.001 data.002 data.003 > bigdata.dat

3

Io uso less -FX, il che si lesscomporta come catquando un file può essere visualizzato su una schermata. Dalla 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.

2

Immagino, a causa della poularità delle varianti Unix ora, molte persone non devono amministrare i loro sistemi (con una vendetta). Quando le cose vanno a meraviglia potresti essere in grado di riavviare ed entrare nel tuo sistema in quello che viene chiamato un ambiente limitato.

Si ottiene una riga di comando e si accede a un piccolo insieme di quelli che sono considerati comandi utili che sono piccoli e generalmente collegati staticamente. Potresti ottenere vi come editor o anche un editor più piccolo, ma non emacs o vim. Otterresti un gatto, ma non di meno. L'idea è di fornirti strumenti sufficienti per riparare il tuo sistema senza prendere troppe risorse in quanto tali risorse potrebbero essere configurate in modo errato o tutte esaurite. tanto meno l'onere di tali circostanze è superfluo.


2

E lessnon è preinstallato su tutte le distribuzioni GNU / Linux. (es. Gentoo) catè ovunque, probabilmente.


2

I catresti sullo schermo. Tutto lessscompare.

Chiarito da / per Volker Siegel:

L'output di catrimane sullo schermo. Tutto ciò che viene mostrato lessscompare dopo la chiusura.


1

Potrebbe esserci un problema con l'escalation dei privilegi, poiché in "meno" è possibile premere "v" per modificare un file o "!" per inviare un comando shell.

Potresti voler consentire ad alcuni utenti di visualizzare un file che può essere letto solo dal superutente, ma non consentire a quegli utenti di modificare il file o di utilizzare i privilegi di superutente in generale. Puoi farlo modificando '/ etc / sudoers' per consentire loro di usare 'sudo / bin / cat / etc / importantfile'. Non si vorrebbe consentire 'sudo / usr / bin / less / etc / importantfile', perché potrebbero usare 'v' per modificare il file o usare '!' per lanciare una shell con tutti i privilegi di superutente.

Naturalmente, gli utenti potrebbero usare 'sudo / bin / cat / etc / importantfile | meno "e usa ancora" meno ", senza rischi per la sicurezza.


1

I due sono diversi. lessè un cercapersone non standard ( moreè quello standard), utilizzato per visualizzare il testo, mentre catè un'utilità standard, utilizzata per concatenare qualsiasi tipo e numero di flussi di dati in uno.

Potrebbero sembrare che facciano la stessa cosa in alcune circostanze, ma anche in questo caso, così come altre utilità.


0

Per comodità. il gatto ha 3 caratteri mentre più / meno hanno 4 caratteri. E digitare cat richiede solo la mano sinistra.


1
Perché usare solo la mano sinistra è un vantaggio? Non uso il mouse sul terminale ...
Bernhard,

0

In termini di come mostrare i personaggi sullo schermo, lesspuò fare ciò che catpuò fare; E altro ancora.

Ma c'è una buona ragione per usare cat in alcuni casi:
lessè troppo complesso per lanciarlo su problemi molto semplici. Ho così tante opzioni che è difficile trovare catquelle correlate nella pagina man.


Vuoi mostrare le schede in un Makefile?

In man cat, la prima opzione è -A.
La descrizione non è utile: -vET.
Ma il nome di opzione a lungo suona giusto: --show-all.

E cat -A Makefilefa quello che mi serve.


Ora vai a cercarlo less.


0

Sia 'less' che 'more' funzioneranno esattamente come 'cat' se l'output non è un terminale (tty), per quanto riguarda pipe e file, entrambi torneranno a nessuna impaginazione.

Penso che sia sicuro dire che 'cat' è sempre presente su qualsiasi sistema di tipo Unix che tu abbia mai trovato. La presenza di "meno" e / o "più" su qualsiasi sistema è meno prevedibile.

Pertanto, negli script, se è necessaria solo un'operazione di non impaginazione, "cat" è sicuramente presente ovunque lo script venga utilizzato su un sistema di tipo Unix.


1
Bene, si può presumere che moresarà disponibile, visto che è richiesto dalla specifica Unix singola.
Kusalananda

Purtroppo, sebbene possa essere obbligatorio in questo modo, ma nella mia esperienza non è sempre presente. Vale la pena notare che ci sono un certo numero di sistemi simili a Unix che non pretendono di essere Unix. Penso che uno possa essere abbastanza fiducioso che uno lesso uno moresarà presente, ma penso che non ci si possa fidare di uno in particolare, né che si tratti di un'implementazione "vera" ... spesso uno è aliasato all'altro, a volte loro re una versione minimale leggera.
user208007

-1

Piping cat attraverso grep è utile:

cat <filename> | grep -i "string of interest"

4
Per non parlare del fatto che grepaccetta un nome file come argomento, oppure potresti usare il reindirizzamento. La pipa è costosa.
Chris Down,

25
Congratulazioni, vinci un premio "uso inutile del gatto"!
ThatGraemeGuy,

4
@TimKennedy - "quando hai less" è nel titolo della domanda ...
Chris Down,

5
Upvoted. Lo faccio regolarmente. Se voglio grep un file più volte per diversi termini di ricerca, questo è più facile. grep vuole grep [search term] [filename]Pertanto, è più difficile modificare il termine di ricerca se sto usando la cronologia dei terminali. Effettuando il piping su grep, il termine di ricerca è l'ultima cosa sulla linea e più facile da modificare.
Nome falso

10
Puoi comunque avere l'ordine che desideri senza usare cat: < [filename] grep [search term]e < filename tail -n 1000 | grep pattern. Il reindirizzamento può andare praticamente ovunque in una riga di comando.
Camh,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.