Skip to content

Co oznacza „Wszystko jest plikiem” w systemie Linux?

3 de sierpień de 2021
image28

Jedną z cech charakterystycznych Linuksa i innych systemów operacyjnych typu UNIX jest to, że „wszystko jest plikiem”. To nadmierne uproszczenie, ale zrozumienie, co to oznacza, pomoże ci zrozumieć, jak działa Linux.

Wiele rzeczy w Linuksie pojawia się w twoim systemie plików, ale w rzeczywistości nie są to pliki. Są to specjalne pliki reprezentujące urządzenia sprzętowe, informacje o systemie i inne rzeczy — w tym generator liczb losowych.

Te specjalne pliki mogą znajdować się w pseudo lub wirtualnych systemach plików, takich jak /dev, który zawiera specjalne pliki reprezentujące urządzenia, i /proc, który zawiera specjalne pliki reprezentujące informacje o systemie i procesie.

/proc

Załóżmy na przykład, że chcesz znaleźć informacje o swoim procesorze. Katalog /proc zawiera specjalny plik – /proc/cpuinfo – który zawiera te informacje.

1627998059 507 Co oznacza „Wszystko jest plikiem w systemie

Nie potrzebujesz specjalnego polecenia, które podaje informacje o procesorze — możesz po prostu odczytać zawartość tego pliku za pomocą dowolnego standardowego polecenia, które działa z plikami tekstowymi. Na przykład możesz użyć polecenia kot /proc/cpuinfo aby wydrukować zawartość tego pliku na terminalu – wypisanie informacji o procesorze do terminala. Możesz nawet otworzyć /proc/cpuinfo w edytorze tekstu, aby wyświetlić jego zawartość.


Pamiętaj, że /proc/cpuinfo w rzeczywistości nie jest plikiem tekstowym zawierającym te informacje – jądro Linuksa i system plików proc udostępniają nam te informacje w postaci pliku. Pozwala nam to korzystać ze znanych narzędzi do przeglądania informacji i pracy z nimi.

1627998059 426 Co oznacza „Wszystko jest plikiem w systemie

Katalog /proc zawiera również inne podobne pliki, na przykład:

  • /proc/uptime – Odsłania czas pracy jądra Linuksa – innymi słowy, jak długo system był włączony bez wyłączania.
  • /proc/version – Odsłania wersję jądra Linuksa.

/dev

W katalogu /dev znajdziesz pliki reprezentujące urządzenia – a także pliki reprezentujące inne specjalne rzeczy. Na przykład /dev/cdrom to twój napęd CD-ROM. /dev/sda reprezentuje twój pierwszy dysk twardy, podczas gdy /dev/sda1 reprezentuje pierwszą partycję na twoim pierwszym dysku twardym.

Chcesz zamontować CD-ROM? Uruchom polecenie mount i określ /dev/cdrom jako urządzenie, które chcesz zamontować. Chcesz podzielić swój pierwszy dysk twardy na partycje? Uruchom narzędzie do partycjonowania dysku i określ /dev/sda jako dysk twardy, który chcesz edytować. Chcesz sformatować pierwszą partycję na swoim pierwszym dysku twardym? Uruchom polecenie formatowania i powiedz, aby sformatował /dev/sda1.

1627998059 997 Co oznacza „Wszystko jest plikiem w systemie

Jak widać, eksponowanie tych urządzeń jako części systemu plików ma swoje zalety. System plików zapewnia spójną „przestrzeń nazw”, której wszystkie aplikacje mogą używać do adresowania i uzyskiwania dostępu do urządzeń.

/dev/null, /dev/random i /dev/zero

System plików /dev zawiera nie tylko pliki reprezentujące urządzenia fizyczne. Oto trzy najważniejsze urządzenia specjalne, które zawiera:

  • /dev/null – Odrzuca wszystkie zapisane w nim dane – pomyśl o tym jako o koszu na śmieci lub czarnej dziurze. Jeśli kiedykolwiek zobaczysz komentarz mówiący o wysyłaniu skarg do /dev/null – to dziwaczny sposób na powiedzenie „wyrzuć je do kosza”.
  • /dev/random — generuje losowość za pomocą szumu otoczenia. Jest to generator liczb losowych, do którego możesz się podłączyć.
  • /dev/zero – Tworzy zera – stały strumień zer.


Jeśli pomyślisz o tych trzech plikach, nie zobaczysz dla nich zastosowania. Zamiast tego myśl o nich jako o narzędziach.

Na przykład, domyślnie polecenia Linuksa generują komunikaty o błędach i inne dane wyjściowe, które wypisują na standardowe wyjście, zwykle terminal. Jeśli chcesz uruchomić polecenie i nie przejmujesz się jego danymi wyjściowymi, możesz przekierować je do /dev/null. Przekierowanie wyjścia polecenia do /dev/null natychmiast je odrzuca. Zamiast tego, aby każde polecenie implementowało swój własny „tryb cichy”, możesz użyć tej metody z dowolnym poleceniem.

polecenie > /dev/null

1627998059 115 Co oznacza „Wszystko jest plikiem w systemie

Jeśli potrzebujesz źródła losowości – powiedzmy, do generowania klucza szyfrującego, nie musisz pisać własnego generatora liczb losowych – możesz użyć /dev/random.

Aby wymazać zawartość dysku twardego przez wpisanie na nim zer, nie potrzebujesz specjalnego narzędzia przeznaczonego do zerowania dysku – możesz użyć standardowych narzędzi i /dev/zero. Na przykład dd polecenie odczytuje z lokalizacji i zapisuje w innej lokalizacji. Następujące polecenie odczyta zera z /dev/zero i zapisze je bezpośrednio na pierwszej partycji dysku twardego w systemie, całkowicie usuwając jego zawartość.

(Ostrzeżenie: To polecenie usunie wszystkie dane z pierwszej partycji, jeśli je uruchomisz. Uruchom to polecenie tylko wtedy, gdy chcesz zniszczyć dane.)

dd if=/dev/zero z=/dev/sda1

Tutaj używamy dd ze specjalnymi plikami (/dev/zero i /dev/sda1), ale możemy również użyć dd do odczytu i zapisu do rzeczywistych plików. To samo polecenie działa zarówno w przypadku bezpośredniego manipulowania urządzeniami, jak i pracy z plikami.

Wyjaśnienie

W praktyce trafniej jest powiedzieć, że „wszystko jest strumieniem bajtów” niż „wszystko jest plikiem”. /dev/random nie jest plikiem, ale z pewnością jest strumieniem bajtów. I chociaż te rzeczy technicznie nie są plikami, są dostępne w systemie plików – system plików jest uniwersalną „przestrzenią nazw”, w której wszystko jest dostępne. Chcesz uzyskać dostęp do generatora liczb losowych lub czytać bezpośrednio z urządzenia? Znajdziesz oba w systemie plików; żadna inna forma adresowania nie jest potrzebna.


Oczywiście niektóre rzeczy nie są w rzeczywistości plikami – procesy działające w twoim systemie nie są częścią systemu plików. „Wszystko jest plikiem” jest niedokładne, ale wiele rzeczy zachowuje się jak pliki.

Czy ten post był pomocny?