file

Określa typ pliku na podstawie jego zawartości.

file to klasyczne narzędzie Uniksa, które mówi Ci, czym naprawdę jest dany plik. W odróżnieniu od Windowsa system nie patrzy na rozszerzenie nazwy, tylko zagląda do środka: czyta tzw. magic bytes (charakterystyczne pierwsze bajty), strukturę i ewentualnie tekst. Dzięki temu rozpoznasz, że plik obrazek.jpg jest tak naprawdę PDF-em, a skrypt bez rozszerzenia to skrypt Bash w UTF-8. To pierwsza rzecz, po którą sięgasz, gdy nie wiesz, na co właśnie patrzysz.

Składnia i najważniejsze opcje

Podstawowa składnia wygląda tak: file [OPCJE] PLIK...

  • -b (--brief) — pomija nazwę pliku w wyniku, drukuje sam typ. Idealne do skryptów.
  • -i (--mime) — wypisuje typ MIME zamiast opisu po ludzku, np. text/plain; charset=utf-8 zamiast ASCII text.
  • --mime-type — tylko sam typ MIME, bez informacji o kodowaniu.
  • -z — zagląda do wnętrza plików skompresowanych (np. co siedzi w archiwum gzip).
  • -L — podąża za dowiązaniami symbolicznymi i bada plik docelowy, a nie sam symlink.
  • -s — czyta też pliki specjalne (bloki, urządzenia znakowe), które normalnie są pomijane.
  • -f LISTA — bierze nazwy plików do sprawdzenia z podanego pliku (po jednej w linii).
  • -k — nie zatrzymuje się na pierwszym dopasowaniu, pokazuje wszystkie pasujące typy.

Przykłady użycia

  • file dokument — sprawdza pojedynczy plik bez rozszerzenia i mówi, czym jest naprawdę.
  • file * — przelatuje wszystkie pliki w katalogu; szybki przegląd, co tu w ogóle leży.
  • file -i zdjecie.png — zwraca typ MIME, przydatne gdy konfigurujesz serwer albo walidujesz upload.
  • file -b --mime-type wsad — zwraca goły application/pdf, gotowe do podstawienia w skrypcie.
  • file -z paczka.tar.gz — pokazuje, co kryje się w środku archiwum, a nie tylko że to gzip.

Częste błędy i pułapki

Największa zasadzka jest międzysystemowa: na Linuksie typ MIME dostaniesz przez -i (małe „i”), ale na macOS/BSD ta sama funkcja kryje się pod -I (wielkie „I”). Skrypt napisany na Macu z -i zachowa się na obu systemach inaczej, więc sprawdzaj man file na docelowej maszynie.

Druga sprawa: file zgaduje na podstawie zawartości, więc dla nietypowych albo bardzo małych plików potrafi się pomylić lub powiedzieć tylko data — to znaczy „nie rozpoznaję”, a nie że plik jest uszkodzony. Pamiętaj też, że domyślnie file bada sam symlink, a nie cel — jeśli zależy Ci na pliku docelowym, dorzuć -L. I nie traktuj wyniku jako gwarancji bezpieczeństwa: złośliwy plik może mieć podrobione magic bytes.

Powiązane komendy: stat (metadane pliku), ls, od i xxd (podgląd bajtów), strings (czytelny tekst z binarki) oraz magic jako baza wzorców dla file.