cat (od ang. concatenate, czyli „połącz”) to jedno z pierwszych narzędzi, które poznaje każdy użytkownik terminala. Wypisuje zawartość plików na standardowe wyjście, a podanych kolejno plików nie pokazuje osobno, tylko skleja je w jeden ciągły strumień. W praktyce używasz go najczęściej do szybkiego podejrzenia, co siedzi w pliku tekstowym, albo do przekierowania zawartości dalej (do innego polecenia lub do nowego pliku).
Składnia i najważniejsze opcje
Podstawowa składnia wygląda tak: cat [OPCJE] [PLIK...]. Jeśli nie podasz żadnego pliku albo podasz -, cat czyta ze standardowego wejścia.
-n— numeruje wszystkie wiersze wyjścia (przydatne, gdy chcesz odwołać się do konkretnej linii).-b— numeruje tylko niepuste wiersze; nadpisuje działanie-n.-s— ściska powtórzone puste linie do jednej (z ang. squeeze).-E— pokazuje znak$na końcu każdego wiersza, czyli ujawnia, gdzie kończy się linia.-T— wyświetla tabulatory jako^I, więc łatwo odróżnisz je od spacji.-A— skrót od „pokaż wszystko” (równoważny-vET): ujawnia tabulatory, końce linii i znaki niedrukowalne.-v— pokazuje znaki niedrukowalne (poza tabulatorem i końcem linii) w formie symbolicznej.
Przykłady użycia
cat plik.txt— wypisuje całą zawartość pliku na ekran.cat -n skrypt.sh— pokazuje plik z numerami wierszy, idealnie pod gadanie o „błędzie w linii 42”.cat czesc1.txt czesc2.txt > calosc.txt— łączy dwa pliki w jeden nowy (to jest właśnie owo „concatenate” z nazwy).cat dane.log | grep ERROR— przekazuje zawartość dalej, choć tugrep ERROR dane.logwystarczy bezcat.cat -A config.conf— odsłania ukryte tabulatory i znaki, gdy plik „wygląda dobrze”, a i tak nie działa.
Częste błędy i pułapki
Najpopularniejsza wpadka to „useless use of cat” — czyli cat plik | grep coś zamiast grep coś plik. Działa, ale to jeden proces w plecy bez powodu. Druga pułapka: cat wrzuca całą zawartość na ekran, więc puszczenie go na plik binarny albo na log o setkach megabajtów zasypie terminal krzakami (czasem rozsypie nawet ustawienia konsoli). Do dużych plików lepszy jest less, a do podglądu fragmentu head lub tail. Uważaj też na przekierowanie: cat a.txt > a.txt wyzeruje plik, bo powłoka opróżnia cel zanim cat zdąży go przeczytać. Drobna różnica między systemami: część flag (-n, -b, -s) jest wspólna dla GNU coreutils i BSD/macOS, ale długie warianty typu --number znajdziesz tylko w wersji GNU.
Powiązane komendy: tac (cat od tyłu), less, more, head, tail, nl oraz tee.