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-8zamiastASCII 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łyapplication/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.