Prawie wszystkie pliki poniżej /devto pliki urządzeń . Podczas gdy odczyt i zapis do zwykłego pliku przechowują dane na dysku lub innym systemie plików, dostęp do pliku urządzenia komunikuje się ze sterownikiem w jądrze, który generalnie z kolei komunikuje się ze sprzętem (urządzenie, stąd nazwa).
Istnieją dwa typy plików urządzeń: urządzenia blokowe (oznaczone bjako pierwszy znak na wyjściu ls -l) i urządzenia znakowe (oznaczone przez c). Rozróżnienie między urządzeniami blokowymi i znakowymi nie jest całkowicie uniwersalne. Urządzenia blokowe to takie dyski, które zachowują się jak duże pliki o stałym rozmiarze: jeśli zapisujesz bajt z pewnym przesunięciem, a później odczytujesz urządzenie z tym przesunięciem, odzyskujesz ten bajt. Urządzenia znakowe są czymkolwiek innym, gdzie zapisanie bajtu ma natychmiastowy efekt (np. Jest emitowany na linii szeregowej), a odczyt bajtu ma również natychmiastowy efekt (np. Odczyt z portu szeregowego).
Znaczenie pliku urządzenia zależy od jego numeru, a nie nazwy (nazwa ma znaczenie dla aplikacji, ale nie dla jądra). Liczba to tak naprawdę dwie liczby: większa liczba wskazuje, który sterownik jest odpowiedzialny za to urządzenie, a podrzędny numer pozwala kierowcy sterować kilkoma urządzeniami¹. Liczby te pojawiają się na ls -lliście, gdzie zwykle znajduje się rozmiar pliku. Np. brw-rw---- 1 root disk 8, 0 Jul 12 15:54 /dev/sda→ to urządzenie ma major 8, minor 0.
Niektóre pliki urządzeń poniżej /devnie odpowiadają urządzeniom. Jednym z nich jest każdy system uniksowy /dev/null; zapisywanie do niego nie ma żadnego efektu, a czytanie z niego nigdy nie zwraca żadnych danych. Jest to często wygodne w skryptach powłoki, gdy chcesz zignorować dane wyjściowe polecenia ( >/dev/null) lub uruchomić polecenie bez wprowadzania danych ( </dev/null). Inne typowe przykłady to /dev/zero(które zwraca null bajty ad infinitum ) /dev/urandom(które zwraca losowe bajty ad infinitum ).
Kilka plików urządzeń ma znaczenie, które zależy od procesu, który uzyskuje do nich dostęp. Na przykład /dev/stdinwyznacza standardowe wejście bieżącego procesu; otwarcie z ma w przybliżeniu taki sam efekt jak otwarcie oryginalnego pliku, który został otwarty jako standardowe wejście procesu. W podobny sposób /dev/ttyoznacza terminal, z którym proces jest połączony. Pod Linuksem współcześnie /dev/stdinprzyjaciele i przyjaciele nie są implementowani jako urządzenia postaci, ale zamiast tego jako dowiązania symboliczne do bardziej ogólnego mechanizmu, który pozwala na odwołanie się do każdego deskryptora pliku (w przeciwieństwie do 0, 1 i 2 w tradycyjnej metodzie); na przykład /dev/stdinjest dowiązaniem symbolicznym do /proc/self/fd/0. Zobacz Jak odnosi się / dev / fd do / proc / self / fd /? .
Znajdziesz kilka symbolicznych linków pod /dev. Może się to zdarzyć z przyczyn historycznych: plik urządzenia został przeniesiony z jednej nazwy na drugą, ale niektóre aplikacje nadal używają starej nazwy. Na przykład /dev/scd0jest dowiązaniem symbolicznym do /dev/sr0systemu Linux; oba oznaczają pierwsze urządzenie CD. Innym powodem, dla łączy symbolicznych jest organizacja: pod Linuksem, znajdziesz dysków twardych i partycji w kilku miejscach: /dev/sdai /dev/sda1i przyjaciele (każdy dysk oznaczony literą, arbitralny i przegrody zgodnie z układem partycji), /dev/disk/by-id/*(dyski oznaczone przez niepowtarzalny numer seryjny) /dev/disk/by-label/*(partycje z systemem plików, oznaczone etykietą wybraną przez człowieka); i więcej. Łącza symboliczne są również używane, gdy ogólna nazwa urządzenia może być jedną z kilku; na przykład/dev/dvdmoże to być symboliczny link do /dev/sr0, lub może to być link do, /dev/sr1jeśli masz dwa czytniki CD, a drugi ma być domyślnym czytnikiem DVD.
Na koniec istnieje kilka innych plików, które możesz znaleźć /devz tradycyjnych powodów. Nie znajdziesz tego samego w każdym systemie. W większości jednorożców /dev/logjest gniazdem używanym przez programy do wysyłania komunikatów dziennika. /dev/MAKEDEVto skrypt, który tworzy wpisy w /dev. W nowoczesnych systemach Linux wpisy w /dev/są tworzone automatycznie przez udev , przestarzałe MAKEDEV.
¹ W rzeczywistości nie jest to prawdą w Linuksie, ale ten szczegół ma znaczenie tylko dla autorów sterowników urządzeń.