Katalog /dev w systemach Linux to zdecydowanie jedno z ciekawszych miejsc w strukturze plików. Moim zdaniem często bywa niedoceniany przez początkujących, a przecież to tutaj znajdziesz pliki urządzeń, które pozwalają systemowi komunikować się bezpośrednio ze sprzętem. Pliki te, nazywane plikami urządzeń (device files), nie są zwykłymi plikami z danymi – w rzeczywistości reprezentują interfejsy do fizycznych lub wirtualnych urządzeń, takich jak dyski twarde (/dev/sda), terminale (/dev/tty), czy pamięć RAM (/dev/mem). To jest genialne rozwiązanie: każde urządzenie jest dostępne jak plik – można je czytać, zapisywać, a nawet przekierowywać do nich strumienie. Z mojego doświadczenia, jeśli chcesz np. sklonować cały dysk, wystarczy użyć komendy dd na /dev/sda – żaden magiczny interfejs, po prostu plik! Standard Filesystem Hierarchy Standard (FHS) wyraźnie określa, że /dev służy właśnie do tego celu. Warto pamiętać, że pliki te są tworzone dynamicznie – często przez udev – więc na nowoczesnych systemach zawartość tego katalogu może się zmieniać wraz z podłączaniem i odłączaniem sprzętu. W praktyce, rozumienie działania /dev bardzo pomaga np. przy diagnozowaniu problemów sprzętowych, konfiguracji RAID czy nawet wirtualizacji. To taka baza wypadowa dla każdego, kto poważnie podchodzi do administracji Linuksem.
Wiele osób myli zawartość katalogu /dev z plikami, które rzeczywiście są wymagane do uruchamiania systemu, narzędziami binarnymi lub plikami konfiguracyjnymi. Oczywiście, można zrozumieć takie podejście, bo Linux ma dość rozbudowaną strukturę katalogów i nie zawsze łatwo zapamiętać, co gdzie się znajduje. Jednak katalog /dev nie przechowuje ani programów wykonywalnych, ani plików konfiguracyjnych – to nie jest katalog typu /bin, /usr/bin czy /etc. To właśnie tam są narzędzia systemowe i konfiguracja. W /dev natomiast znajdują się specjalne pliki urządzeń, które umożliwiają systemowi komunikację ze sprzętem. Największym błędem jest przekonanie, że te pliki zawierają binarne narzędzia – one nie są aplikacjami, nie można ich po prostu uruchomić. Czasem można się zasugerować nazwami plików, które brzmią technicznie, ale to wyłącznie interfejsy do urządzeń. Koncepcja plików niezbędnych do startu systemu też jest myląca – owszem, bez /dev/console czy /dev/null system może mieć duże problemy przy uruchamianiu, ale to nie znaczy, że katalog ten jest repozytorium wszystkich wymaganych do uruchomienia plików. Z mojego doświadczenia, to często powtarzany mit. Pliki konfiguracyjne, jak sama nazwa wskazuje, trzymane są w /etc, a nie w /dev. Myślenie o /dev jako magazynie wszystkiego, co ważne dla systemu, prowadzi do nieporozumień i problemów z bezpieczeństwem czy zarządzaniem. Dlatego tak ważne jest, by znać różnice między typami katalogów w Linuksie i rozumieć, jak system operuje na poziomie sprzętu – a katalog /dev jest właśnie tą bramą pomiędzy światem sprzętu a światem plików.