cat

Wyświetla zawartość plików lub łączy je w jeden strumień.

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ć tu grep ERROR dane.log wystarczy bez cat.
  • 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.