Czy jest kiedykolwiek powód, aby używać „cat”, gdy masz „mniej”?


59

Kiedyś używałem catdo przeglądania plików. Potem dowiedziałem się, że lessjest to zwykle lepsze i jest koniecznością, jeśli plik ma więcej niż kilkadziesiąt wierszy.

Moje pytanie: Czy istnieje kiedykolwiek powód, aby użyć catzamiast less? Czy jest jakaś sytuacja, w której catjest lepsze rozwiązanie?


17
lessi catrozwiązują różne problemy, a każdy z nich jest lepszy od drugiego we własnej dziedzinie problemów
David Heffernan

2
Używam tylko catdo lesspóźniejszego przesyłania danych wyjściowych .
FUZxxl,

1
Często używam catdo drukowania bardzo krótkich plików na konsolę, pliki są /proci /syssą bardzo dobrymi kandydatami. W ten sposób widzę zawartość wielu plików jednocześnie.
Feuermurmel

Odpowiedzi:


20

Osobiście wolę viewtreści statyczne lub tail -fdynamiczne.

To jednak nie odpowiada na twoje pytanie. Jest takie powiedzenie „po co korzystać więcej, jeśli masz mniej” ;-)

Ale są przypadki, w których wolę kota niż mniej: zwykle pracuję z oknami X11. Te okna mają bufor przewijania, który można ustawić na około stu linii.

Wykonanie catfor - powiedzmy 200 linii, a następnie używanie myszy z paskiem przewijania jest dla mnie wygodniejsze niż używanie lessw tych przypadkach.


4
Przez viewciebie myśli zwykle vim -R, albo masz coś jeszcze o tej nazwie?
manatwork

Nie - po prostu vi (lub vim) w trybie tylko do odczytu. CentOS domyślnie ustawia ten alias. Nie spowoduje to uruchomienia HIDS podczas przeglądania pliku w zabezpieczonym katalogu.
Nils

2
less +Frobi to, co tail -frobi.
legends2k

2
W rzeczywistości viewnie jest pseudonimem; to link (do vilub vim). vipatrzy na argv[0]kiedy zaczyna (aby zobaczyć jaka nazwa została wywołana pod) oraz, jeżeli jest to viewczy rview, ustawia tryb tylko do odczytu (jak gdyby wpisane vim -R).
G-Man,

91

Chociaż oba polecenia pozwalają na przeglądanie zawartości pliku, ich pierwotne cele są zupełnie inne.

less rozszerza możliwości more . Ten ostatni został stworzony, aby przeglądać zawartość pliku po jednym ekranie na raz. less dodaje funkcje, takie jak ruchy do tyłu i lepsze zarządzanie pamięcią (nie trzeba czytać całego pliku, zanim będzie można zobaczyć pierwsze wiersze).

cat konkatenuje pliki i drukuje wynik na standardowym wyjściu. Jeśli podasz tylko jeden plik, zobaczysz zawartość tego pliku. Staje się „wydajny”, gdy udostępniasz wiele plików. Dobrym przykładem jest połączenie split i cat. Pierwsze polecenie podzieli duży plik na małe części. Drugi następnie połączy małe porcje w jeden plik.

Wracając do twojego pytania, cat byłby preferowany w autonomicznym skrypcie wymagającym, aby pliki były czytane całkowicie (lub łączone) bez interakcji. Jeśli chodzi o przeglądanie plików, myślę, że to bardziej kwestia gustu.


4
lesszawsze pozwala na wyszukiwanie w pliku, co catnie.
Bernhard,

@Bernhard: A może zrobić grep na wyjściu kota?
user3527975,

23

Zwykle używam, catgdy muszę wpisać polecenie oparte na czymś w pliku. catjest wygodniejszy, ponieważ możesz zobaczyć plik (jeśli jest mały), gdy masz dostęp do zachęty powłoki. Pozwala również na wykładanie rur.


3
W przypadku jednego pliku przekierowanie standardowego wejścia jest również możliwe i często preferowane.
AProgrammer

17
Czy jest jakaś sytuacja, w której kot jest lepszym rozwiązaniem?

Gdy masz do czynienia z więcej niż jednym plikiem i chcesz je połączyć.

Ze strony podręcznika:

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

15

Są ludzie, którzy twierdzą, gwałtownie, że jedynym celem catjest con cat pliki enate. Dla każdego innego zastosowania istnieje more(lub less).

Ale to nie bierze pod uwagę jednego dość ważnego faktu: catjest jedna postać mniej do wpisania. Używam tych poleceń tak często, że jedna postać mniej nie stanowi problemu.

Innym powodem jest to, że chcesz utworzyć plik. Często kopiuję i wklejam tekst z Internetu do pliku takiego jak ten (pokazano wiersz polecenia):

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

Oznacza to, że otwieram plik filenamedo zapisu, wklejam zawartość i zamykam strumień naciskając Ctrl- D. Ani lessteż nie moremoże tego zrobić, i to szybciej niż otwarcie edytora.


4
Jeśli używasz zsh jako powłoki, możesz ustawić go tak, aby $<filename(gdzie $jest monit) wywoływał $ PAGER z podłączonym standardem stdin filename. To nawet mniej znaków do wpisania niż cat.
Kevin Cathcart

@Kevin Miło wiedzieć, ale jestem użytkownikiem bash.
Konrad Rudolph,

2
W Mac OS X używam pbpaste > filenamei uważam, że X ma coś podobnego. Nadal używam catdo szybkiego tworzenia plików, po prostu nie do wklejania.
cobbal

@cobbal Hehe, nigdy o tym nie myślałem, mimo że używam pbcopy/ pbpastedo innych celów.
Konrad Rudolph

1
To właściwie dwie postacie mniej - musisz qwyjść, by wyjść less: D
Martin von Wittich,

9

Czasami nie chcesz, aby podział na strony był taki less, a po prostu potrzebujesz pełnego pliku, abyś mógł z niego skorzystać cat.


4

Używam catdo grep(wielu) plików.

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

Wiem, że grepobsługuje nazwy plików, ale jeśli grepujesz ten sam plik dla różnych wyszukiwanych haseł, łatwiej jest edytować polecenie, w którym wyszukiwane hasło jest ostatnią rzeczą w wierszu, niż ctrl + klawisz strzałki z powrotem przez linię.


4

cat można użyć do połączenia kilku plików binarnych w jeden duży:

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

3

Używam less -FX, co sprawia, że lesszachowuję się jak catwtedy, gdy plik można wyświetlić na jednym ekranie. Z strony less(1)podręcznika:

-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

Wydaje mi się, że ze względu na lichość wariantów Uniksa wiele osób nie musi administrować swoimi systemami (z zemsty). Kiedy wszystko idzie w górę, możesz po prostu zrestartować komputer i wejść do systemu w tak zwanym środowisku ograniczonym.

Otrzymujesz wiersz poleceń i dostęp do małego zestawu przydatnych poleceń, które są małe i zwykle połączone statycznie. Możesz dostać vi jako edytor lub nawet mniejszy ed, ale nie emacs ani vim. Dostałbyś kota, ale nie mniej. Chodzi o to, aby zapewnić wystarczającą liczbę narzędzi do naprawy systemu bez zajmowania zbyt dużych zasobów, ponieważ zasoby te mogą być nieprawidłowo skonfigurowane lub wszystkie zużyte. im mniej dowództwa w tych okolicznościach jest zbędne.


2

I lessnie jest wstępnie zainstalowany we wszystkich dystrybucjach GNU / Linux. (np. Gentoo) catjest prawdopodobnie wszędzie.


2

Na catpozostaje na ekranie. Wszystko lessznika.

Wyjaśnione przez / dla Volker Siegel:

Wyjście catpozostaje na ekranie. Wszystko pokazane przez lesszniknie po zamknięciu.


1

Może występować problem z eskalacją uprawnień, ponieważ w „mniej” możesz nacisnąć „v”, aby edytować plik lub „!” aby wysłać polecenie powłoki.

Możesz zezwolić niektórym użytkownikom na przeglądanie pliku, który może odczytać tylko superużytkownik, ale nie zezwalać tym użytkownikom na edycję pliku lub ogólne korzystanie z uprawnień administratora. Możesz to zrobić, edytując „/ etc / sudoers”, aby umożliwić im użycie „sudo / bin / cat / etc / importantfile”. Nie chcesz zezwalać na „sudo / usr / bin / less / etc / importantfile”, ponieważ mogliby użyć „v” do edycji pliku lub użyć „!” aby uruchomić powłokę z pełnymi uprawnieniami administratora.

Oczywiście użytkownicy mogą użyć „sudo / bin / cat / etc / importantfile | mniej ”i nadal używaj„ mniej ”, bez ryzyka dla bezpieczeństwa.


1

Oba są różne. lessto niestandardowy pager ( morejest to standardowy), używany do przeglądania tekstu, podczas gdy catjest standardowym narzędziem służącym do łączenia dowolnego typu i liczby strumieni danych w jeden.

Mogą się wydawać, że robią to samo w pewnych okolicznościach, ale z drugiej strony, podobnie jak inne narzędzia.


0

Dla wygody. kot ma 3 znaki, a więcej / mniej 4 znaki. A pisanie kota wymaga tylko lewej ręki.


1
Dlaczego używanie lewej ręki jest zaletą? Nie używam myszy na terminalu ...
Bernhard

0

Pod względem sposobu wyświetlania znaków na ekranie, lessmożna robić, co catmożna; I wiele więcej.

Ale w niektórych przypadkach istnieje bardzo dobry powód, aby używać kota:
lessjest zbyt skomplikowany, aby rzucić go na bardzo proste problemy. Mam tak wiele opcji, że trudno jest znaleźć te catpowiązane na stronie podręcznika.


Chcesz pokazać karty w Makefile?

W man catpierwsza opcja -A.
Opis nie jest pomocne: -vET.
Ale długa nazwa opcja brzmi po prostu rację --show-all.

I cat -A Makefilerobi to, czego potrzebuję.


Teraz znajdź to dla less.


0

Zarówno „mniej”, jak i „więcej” będą działać dokładnie tak samo jak „kot”, jeśli wyjście nie jest terminalem (tty), co do potoków i plików, oba powrócą do braku podziału na strony.

Myślę, że można bezpiecznie powiedzieć, że „kot” jest zawsze obecny w każdym systemie typu Unix, jaki kiedykolwiek znajdziesz. Obecność „mniej” i / lub „więcej” w dowolnym systemie jest mniej przewidywalna.

Dlatego w skryptach, jeśli potrzebujesz tylko operacji bez paginacji, 'cat' z pewnością będzie obecny wszędzie tam, gdzie twój skrypt jest używany w systemie typu Unix.


1
Cóż, można bezpiecznie założyć, że morebędzie dostępny, ponieważ wymaga tego specyfikacja Single Unix.
Kusalananda

Niestety, chociaż może być tak nakazane, ale z mojego doświadczenia nie zawsze jest ono obecne. Warto zauważyć, że istnieje wiele systemów uniksopodobnych, które nie twierdzą, że są Unixami. Myślę, że można być pewnym, że albo a, lessalbo morebędzie obecny, ale myślę, że nie można ufać konkretnemu, ani że jest to „prawdziwa” implementacja… często jedna jest aliasowana do drugiej, czasem „ to minimalna lekka wersja.
user208007

-1

Przydatne jest przepuszczanie kota przez grep:

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

4
Nie wspominając o tym, że grepjako argument przyjmuje się nazwę pliku lub można użyć przekierowania. Rura jest droga.
Chris Down,

25
Gratulacje, wygrywasz nagrodę „bezużyteczne korzystanie z kota”!
ThatGraemeGuy

4
@TimKennedy - „When you have less” jest w tytule pytania ...
Chris Down

5
Pozytywne. Robię to regularnie. Jeśli chcę wielokrotnie grepować plik dla różnych wyszukiwanych haseł, jest to łatwiejsze. grep chce grep [search term] [filename]Dlatego trudniej jest edytować wyszukiwane hasło, jeśli korzystam z historii terminali. Piping do grep, wyszukiwane hasło jest ostatnią rzeczą w linii i jest łatwiejsze do edycji.
Fałszywe imię

10
Nadal możesz mieć potrzebne zamówienie bez użycia cat: < [filename] grep [search term]i < filename tail -n 1000 | grep pattern. Przekierowanie może przebiegać praktycznie w dowolnym miejscu wiersza poleceń.
camh
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.