Многие, кто начинают изучать Linux, слышали про UNIX-way.
Linux хотя и не является UNIX, является UNIX-подобной системой, и UNIX-way исповедуется в нем (не всегда и не во всем правда, но все же)).
Когда я спрашиваю, что такое UNIX-way, мне отвечают -- все есть файл.
На самом деле не совсем так, и даже не так, но концепция, что все есть файл действительно, действует и в UNIX и в Linux. Тоже далеко не всегда, но во многом. (Что такое UNIX-way я тоже расскажу, потом, следите за новостями))
Что это означает.
Обычно мы считаем что файл это некие данные, лежащие на диске. Он имеет имя, и с ним можно проводить какие-то действия. Считать этот файл, отредактировать, записать, удалить.
Но оказывается, что если понимать файл, прежде всего, как интерфейс, который имеет имя, который можно открыть, который можно прочитать, в который можно записать, то окажется, что это очень удобная абстракция. И сам файл не обязательно должен где-то хранится.
А самим источником данных может быть целый диск, некая переменная ядра операционной системы, область в оперативной памяти и т.д.
Приведу примеры
Пример 1
Чтобы в Windows посмотреть диск, нужно специальную программу. Например disk editor
А в linux можно взять и прочитать диск, как обычный файл
cat /dev/vda1
Конечно, не читаемо.
Вывод, правда, полмался но мы его починим, введя вслепую
tput reset и нажмем Enter
Но есть утилита hexdump которая с параметром -C может отобразить в более-менее читаемом виде любой двоичный вывод.
hexdump -C /dev/vda1
Если мы хотим полистать, то можем воспользоваться конвейером
hexdump -C /dev/vda1 | less
Можно листать вверх или вниз, или выйти, нажав q
А может быть мы хотим просто вывести первые 10 строк.
hexdump -C /dev/vda1 | head
Благодаря конвейеру и использованию узкоспециальных утилит (кстати, а это уже действительно часть определения UNIX-way) мы можем обойтись вообще без специальных программ)
И /dev/vda1 это не файл, хранящийся на диске. Это диск. Точнее раздел на диске.
Но и сам диск /dev/vda мы можем посмотреть
Пример 2.
Мы хотим узнать, разрешеная ли пересылка пакетов (чтобы компьютер работал как маршрутизатор) в ядре линукс.
В ядре линукс есть переменная.
Но как нам ее посмотреть?
Благодаря тому, что переменные ядра отображаются в виде файлов, мы можем посмотреть это с помощью стандартных программ.
Переменная, которая хранит флаг, разрешена ли пересылка пакетов или нет, доступна в виде файла ip_forward, находящегося в каталоге (тоже не существующем ни на одном из дисков) /proc/sys/net/ipv4/
cat /proc/sys/net/ipv4/ip_forward
По понятным причинам, такие файлы, и каталоги, их содержащие, не могут быть записанными на диске.
Вы знаете, что в UNIX и linux используют не концепцию букв дисков, как DOS/OS/2/Windows, а идею единого дерева, куда могут подсоединяться ветви, находящиеся на других носителях -- благодаря монтированию.
Но если, например / может быть файловая система, находящаяся на SSD накопителе и быть отформатированная в ext4, а в /mnt/flash -- флешка, отформатированная в fat32.
Но точно также могут быть смонтированы файловые системы, которые вообще нигде не хранятся.
Например RAM-диск -- область памяти, которая работает как диск, но стоит отключить питание, и файлы пропадут. Для долговременного хранилища такой вариант не пойдет, но для временного -- самое то.
Примером RAM-диска (точнее его более удобной реализации tmpfs, который от ramfs отличается тем, что выделяется динамически ОЗУ, и может сбрасываться в swap, т.е. в каком-то смысле эти файлы действительно могут храниться на диске) является каталог /run, в котором создаются файлы блокировок (.lock) и файловые сокеты (одна из разновидностей файла, не хранящегося на диске -- двусторонний буфер для обмена данными между процессами).
tmpfs -- это пример псевдофс.
Другие примеры
procfs -- для отображения в виде дерева каталогов и файлов переменных ядра
sysfs -- для отображения информации от устройств
devfs -- для хранения файловых устройств -- интерфейсов для взаимодействия с устройствами (терминалами, дисками) как с файлами
Команда mount покажет, что примонтировано в какие точки монтирования
Давайте посмотрим, какие песвдофс есть в свежеустановленном линуксе
/sys это sysfs
/proc это procfs
/run это tmpfs
специфичная для Astra Linux /parsecfs -- parsecfs
И только / это ext4
Не в моем случае, но /tmp тоже часто бывает tmpfs.
Вообще, если интересно об устройстве виртуальной файловой системы (VFS) -- той иерархии, в которую подключаются и настоящие ФС и псевдофс, то есть такой термир FHS -- File Hierarhy Standard
О нем можно почитать в man,
команда
man hier
Подписывайтесь на мой канал в дзен https://dzen.ru/olinux и будете в курсе новых моих статей по компьютерным сетям и ОС GNU/Linux.
Всегда с вами, Сергей Кручинин преподаватель GNU/Linux и компьютерных сетей