Главная >> Информация >> Концепция Linux - всё есть файл

Концепция Linux - всё есть файл

В программировании для упрощения разработки программ принято использовать различные шаблоны, паттерны и абстракции. Разработчики Linux не делали исключений и одна из таких абстракций, это основная концепция Linux - всё есть файл. Эта концепция была перенята от Unix. Она была выбрана для того чтобы предоставить простой доступ ко всем возможностям операционной системы не разрабатывая специальных интерфейсов.

К почти любой возможности можно обратиться как к файлу, попытаться открыть его с помощью текстового редактора, записать туда данные или сделать что-либо подобное. В этой статье мы подробно рассмотрим что на деле означает эта концепция и немного поэкспериментируем с ней.


Содержание статьи

Всё есть файл

Давайте сначала разберемся как вообще это может работать. В Linux есть такое понятие как корневая файловая система. В качестве неё монтируется раздел жесткого диска, на котором установлен Linux. В различные подпапки подключаются другие реальные разделы жесткого диска, например, домашний раздел подключается в папку /home, а загрузочный в папку /boot. Но существуют не только реальные файловые системы, но и виртуальные файловые системы, созданные ядром, например в папку /proc монтируется файловая система procfs, которая позволяет получить доступ к параметрам ядра, а в папку /dev монтируется devfs содержащая устройства, подключённые к компьютеру и тоже в виде файлов.

Конечно, в этих файловых системах размещены не совсем обычные файлы. В статье типы файлов Linux мы рассматривали все существующие типы файлов. Если вы посмотрите на обычный файл, например, /etc/passwd с помощью утилиты file, то увидите информацию об этом файле:

file /etc/passwd

Это текстовый файл в реальной файловой системе и вы можете открыть его с помощью текстового редактора, посмотреть содержимое или записать туда данные.

1. Устройства Linux - это файлы

Давайте начнём с устройств. В каталог /dev монтируется файловая система devfs и тут находятся все подключённые к Linux устройства, а также некоторые интерфейсы для доступа к возможностям ядра:

ls -l /dev

Если попытаться посмотреть информацию, например, о файле /dev/sda1, то утилита сообщит нам что это блочный файл:

file /dev/sda

Это значит, что такой файл можно открыть с помощью какого-либо редактора разделов диска и настроить этот диск. Конечно, его можно попытаться посмотреть содержимое файла с помощью cat, но из этого ничего хорошего не выйдет потому что там хранятся двоичные данные:

cat /dev/sda

Работает это и в обратную сторону. Вы можете открыть любой обычный файл в редакторе разделов диска и создать в нём файловую систему вместо его содержимого:

Например, здесь я открыл изображение. Важно отметить что всё содержимое файла будет стёрто.

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

2. Информация о ядре - тоже файлы

Информация об операционной системе, ядре и выполняемых в системе процессах находится в директории /proc. Все эти файлы можно посмотреть с помощью утилиты ls:

ls -l /proc

Например, информация об использовании оперативной памяти размещена в файле /proc/meminfo. Вы можете попытаться посмотреть информацию об этом файле:

file /proc/meminfo

Это файл, но утилита сообщает, что он пустой. Однако, если вы попытаетесь прочитать из него данные, то получите вполне интересную информацию о состоянии памяти. Например, откроем его в текстовом редакторе:

vi /proc/meminfo

Но записать туда ничего не получится, эта файловая система доступна только для чтения. Таких файлов здесь много. Самые интересные из них описаны здесь.

3. И настройки ядра - файлы

Настройки ядра находятся в директории /sys и /proc/sys. Эти файлы можно выводить списком, читать их содержимое и даже записывать новые значения чтобы изменить нужные параметры. Один из самых часто изменяемых файлов - это /proc/sys/net/ipv4/ip_forward. Давайте посмотрим информацию о нём:

file /proc/sys/net/ipv4/ip_forward

Он тоже вроде как пустой. Но в нём содержатся данные:

cat /proc/sys/net/ipv4/ip_forward

И их можно изменить:

echo "0" | sudo tee /proc/sys/net/ipv4/ip_forward

Фактически, можно было просто сделать так:

echo "0" > /proc/sys/net/ipv4/ip_forward

Или даже попытаться редактировать файл в текстовом редакторе. Но такая команда не будет работать, если её не выполнить в оболочке суперпользователя. А текстовый редактор обычно пытается сначала создать резервную копию файла, который он будет менять, а ничего создать в этой папке у него не выйдет.

4. Сокеты - странные, но файлы

Для сетевого взаимодействия и взаимодействия между программами используются сокеты. И это тоже файлы, хотя они чуть отличаются от привычных нам файлов. Сокеты используются для того чтобы программно писать и читать их них данные, таким образом программы могут взаимодействовать между собой. Давайте создадим свой сокет. Для этого выполните:

nc -lU socket.sock

Утилита file сообщит, что это сокет:

Но открыть сокет в текстовом редакторе или с помощью утилиты cat не получится, придется подключится к нему с помощью той же утилиты nc:

nc -U socket.sock

После этого любые данные, которые вы будете набирать в одной консоли, будут отображаться в другой. Но это всё ещё файл, потому что вы можете вывести список сокетов из определённой папки с помощью ls.

Выводы

Вот так и работает концепция всё есть файл в Linux. Все возможные функции операционной системы представлены в виде файлов и это удобно, потому что для доступа к любой из функций не надо писать отдельный инструмент, а можно использовать уже существующие и проверенные программы. Такие утилиты для работы с файлами как cat, ls и echo справляются в большинстве случаев.

Оставьте свой Email для того чтобы получать анонсы новых статей и полезную информацию о Linux по электронной почте


Pеклама
Посмотреть детали

Если вы искали альтернативу почтовому сервису Gmail, который уважает вашу конфиденциальность, обратите внимание на ProtonMail. Ваши письма автоматически шифруются сквозным шифрованием, поэтому читать их можете только вы и получатель. ProtonMail не собирает ваши персональные данные и базируется в Швейцарии, где действуют одни из самых строгих законов о конфиденциальности. Посмотреть детали

Creative Commons License
Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна .

1 комментарий к “Концепция Linux - всё есть файл”

  1. Автор, огромнейшее спасибо за твой труд. Ни раз пользовался твоим каналом для настройки Linux. Благодаря тебе многие люди с минимальной болью перешли на эту ОС. Слово боль означает выход из состояния комфорта и привыкание к абсолютно новой системе.

    Ответить

Оставьте комментарий