Czy plik / dev / null faktycznie ma ustalony rozmiar?

23

Właśnie się dowiedziałem, że /dev/nullto plik, a nie katalog.

Zastanawiam się tylko, czy ma rzeczywisty rozmiar pliku.

Cody
źródło

Odpowiedzi:

35

/dev/nulltak naprawdę nie jest plikiem. To urządzenie postaci !

$ ls -l /dev/null
crw-rw-rw- 1 root root 1, 3 Apr 10 09:53 /dev/null

Wskazuje na to pierwsza litera cciągu uprawnień ( crw-rw-rw-). W przypadku zwykłych plików byłoby to -zamiast tego.

W prostych słowach: /dev/nullnie jest plikiem, lecz urządzeniem wirtualnym zamapowanym na tę ścieżkę w systemie plików, którego jedynym celem jest połykanie i znikanie danych - jak czarna dziura.
Można go również użyć jako danych wejściowych, a następnie działa jak pusty plik (rozmiar 0) i natychmiast zwraca EOF (koniec pliku).

Dlatego nie można tak naprawdę powiedzieć, że /dev/nullma on określony rozmiar pliku, ponieważ nie jest to zwykły plik na żadnym nośniku pamięci.

Bajt Dowódca
źródło
Wkład? Co zapewnia nieskończona lista znaków NUL?
Jonathon,
@JonathonWisnoski Nie wiem dokładnie i nigdy nie użyłem tego w ten sposób, więc mogę dać ci link do pytania na StackOverflow, gdzie jest wyjaśnione.
Bajt Dowódca
7
@JonathonWisnoski, nie - na wejściu zachowuje się jak plik o zerowej wielkości, więc pierwszy odczyt z niego informuje, że plik znajduje się w EOF.
godlygeek,
Tak, zgadza się.
godlygeek,
3
@JonathonWisnoski spójrz na / dev / zero.
Paŭlo Ebermann
16

/dev/nullto specjalny rodzaj pliku o nazwie „ plik urządzenia ”.

Pliki urządzeń działają jako interfejs niektórych funkcji jądra. Po prostu zajmują miejsce potrzebne do wpisu katalogu („i- węzeł ”), ale nie mają żadnej rzeczywistej zawartości i nie mają rzeczywistego rozmiaru pliku.

Inne pliki urządzeń to np. /dev/sda(Zazwyczaj dysk twardy lub dysk SSD), /dev/zero(plik, który podczas odczytu generuje zero) lub /dev/random(plik, który podczas odczytu generuje losowe dane). Właściwie wszystkie pliki /dev/są plikami urządzeń lub linkami prowadzącymi do plików urządzeń.

Florian Diesch
źródło
Chociaż uważam, że większość tej odpowiedzi jest poprawna (+1), myślę, że nieco mylące jest stwierdzenie, że zajmują one rozmiar wpisu i-węzła. Albo nie zajmują miejsca, jeśli odnoszą się do miejsca na dysku, albo zajmują więcej, jeśli odnoszą się do całej ich implementacji jako urządzeń postaci.
Kos
2
Podobnie jak każdy inny plik, plik urządzenia potrzebuje i-węzła, który przechowuje właściciela, uprawnienia, numer główny / pomocniczy i inne metadane. To zależy od systemu plików, w jaki sposób i gdzie są przechowywane te i-węzły (możesz użyć mknoddo tworzenia plików urządzeń w dowolnym miejscu). W przypadku wirtualnych systemów plików, takich jak /dev/i-węzeł, nie zajmuje miejsca na dysku, ale pewna pamięć.
Florian Diesch
Dokładnie. Myślę, że nie wyraziłem się dobrze, więc pozwólcie, że sformułuję to. Być może to, co wskazuję, jest trochę wybredne, więc wybacz mi to. Chodzi mi o to, że jeśli oświadczysz, że każde urządzenie znakowe zajmuje trochę miejsca w pamięci ze względu na swój wpis i-węzła, być może chcesz zauważyć, że funkcje, które mają być wywoływane podczas odczytu / zapisu na takim urządzeniu, które są wraz z nimi ładowane, wykonaj: więc także.
Kos
Czy naprawdę słuszne jest twierdzenie, że plik zajmuje miejsce zajmowane przez wpis w tabeli i-węzłów? Nie sądzę, że jest to zwykle uwzględnione w tym, co ludzie - i ludzie oprogramowania napisali - mają na myśli, gdy mówią o rozmiarze pliku. W szczególności zapytanie lsi duzgłoszenie rozmiaru znaku specjalnego urządzenia, takiego jak /dev/nulllub, /dev/randomdaje 0 .
Eliah Kagan
Przepraszam, ale przegłosowałem tę odpowiedź, ponieważ jeśli ktoś nie udowodni, że się mylę co do tego, co powiedziałem (co może być), nadal uważam, że nie jest poprawne stwierdzenie, że urządzenie znakowe zajmuje miejsce na wejściu i-węzła.
Kos