Что означает «Everything is a File» в Linux?

  Дмитрий Бушуев  | 

  Обновл. 29 Авг 2021  | 

 1395

Одной из определяющих особенностей Linux и UNIX-подобных операционных систем является понятие «Everything is a File», что в переводе означает «Всё является файлом». А если что-то и не является таковым, то оно должно выполняться в системе как процесс. Конечно, данное обобщение довольно грубо упрощает реальную суть происходящего, но его понимание поможет вам лучше разобраться с тем, как работает Linux.

Everything is a File

Linux не делает различий между файлами и каталогами, но каталоги выполняют одну очень важную работу — хранят другие файлы, создавая определенную иерархию для их удобного расположения. Многие вещи, которые находятся в файловой системе Linux, на самом деле не являются «обычными» файлами. Есть т.н. «специальные» файлы, которые представляют аппаратные компоненты (через которые Linux взаимодействует с «железом» компьютера), системную информацию и другие вещи, вплоть до генератора случайных чисел.

Эти «специальные» файлы могут быть расположены в отдельных каталогах, таких как /dev (содержит специальные файлы, представляющие устройства) или /proc (содержит специальные файлы, представляющие информацию о системе и её процессах). Все эти «файлы», в более широком смысле данного слова, имеют стандартные атрибуты Linux-файлов, такие как владелец, права доступа, и к ним могут быть применены классические утилиты Linux.

Например, воспользуемся командой cat, чтобы посмотреть содержимое /etc:

$ cat /etc

Как видите, команда cat сообщает, что /etc является каталогом. Теперь давайте попробуем считать какой-нибудь файл, который отображается в списке, например, /usr/lib/systemd/systemd-ac-power:

Воспользуемся той же командой cat:

$ sudo cat /usr/lib/systemd/systemd-ac-power

Мы получили полную абракадабру. А всё потому, что systemd-ac-power является бинарным файлом. Он отображается в файловой системе, как другие файлы, но открыть и посмотреть его содержимое (как обычного текстового файла) мы не можем.

Каталог /proc


Предположим, мы хотим найти информацию о процессоре. Каталог /proc имеет специальный файл — /proc/cpuinfo, который содержит данную информацию. Мы можем прочитать содержимое этого файла следующей командой:

$ cat /proc/cpuinfo

Или же мы можем открыть файл /proc/cpuinfo в текстовом редакторе и просмотреть его содержимое:

Однако, как уже говорилось выше, файл /proc/cpuinfo на самом деле не является обычным текстовым файлом. Ядро Linux и каталог /proc лишь предоставляют нам эту информацию в виде файла. Данный подход позволяет нам (пользователям) использовать стандартные команды для просмотра и работы с информацией.

Также в каталоге /proc содержатся и другие подобные файлы, например:

   /proc/uptime — информация о времени безотказной работы (uptime) ядра Linux. Другими словами, как долго наша система работала без выключения.

   /proc/version — информация о версии ядра Linux.

   /proc/meminfo — информация о свободной и используемой памяти (как физической, так и виртуальной).

Каталог /dev

В каталоге /dev вы найдете файлы, которые представляют различные аппаратные устройства и специальные объекты. Например, /dev/cdrom — это привод для чтения компакт-дисков, /dev/sda — первый жесткий диск, а /dev/sda1 — первый раздел на первом жестком диске.

   Хотите смонтировать свой CD-ROM? Тогда выполните команду mount и укажите (файл) /dev/cdrom в качестве устройства, которое необходимо смонтировать.

   Хотите разделить свой первый жесткий диск на разделы? Запустите утилиту управления дисками и укажите (файл) /dev/sda в качестве жесткого диска, который вы хотите отредактировать.

   Хотите отформатировать первый раздел на своем первом жестком диске? Запустите команду форматирования и укажите ей отформатировать (файл) /dev/sda1.

Общим здесь является представление аппаратных устройств (привод для чтения компакт-дисков, жесткий диск) в виде отдельных файлов, которые присутствуют в каталоге /dev. Подобная реализация имеет свои преимущества, например, файловая система обеспечивает согласованное «пространство имен», которое все приложения, команды и утилиты могут использовать для обращения к данным устройствам.

Также каталог /dev содержит не только файлы, представляющие физические устройства. Вот три наиболее примечательных специальных (псевдо-)устройства:

   /dev/null — физически этого устройства не существует, но отправляемые в него данные просто исчезают, и вернуть их обратно невозможно.

   /dev/random — генератор случайных чисел, к которому вы можете подключиться.

   /dev/zero — специальный файл, являющийся источником постоянного потока нулей. При чтении данного файла его конец никогда не достигается.

Так что же «всё является файлом» или нет?


На поверхностном уровне, для нас, как для пользователей Linux, всё представлено в виде файлов (хотя их может и не быть в системе фактически, но они могут отображаться через терминал), а «под капотом» эти файлы разделяются на отдельные категории, например, драйверы устройств (/dev/mouse, /dev/cdrom и пр.), исполняемые файлы (аналоги .exe-файлов в Windows), обычные текстовые файлы и т.д.

Представление данных одно и то же — файл, но сами данные могут быть потоком, устройством, памятью на жестком диске и пр.

Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (9 оценок, среднее: 5,00 из 5)
Загрузка...

Добавить комментарий

Ваш E-mail не будет опубликован. Обязательные поля помечены *