Поиск по сайту:

Что означает «Все является файлом» в Linux?


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

Многие вещи в Linux появляются в вашей файловой системе, но на самом деле они не являются файлами. Это специальные файлы, которые представляют аппаратные устройства, системную информацию и другие вещи, включая генератор случайных чисел.

Эти специальные файлы могут располагаться в псевдо- или виртуальных файловых системах, таких как /dev, который содержит специальные файлы, представляющие устройства, и /proc, который содержит специальные файлы, представляющие информацию о системе и процессах.

/прок

Например, допустим, вы хотите найти информацию о вашем процессоре. Каталог /proc содержит специальный файл — /proc/cpuinfo — который содержит эту информацию.

Вам не нужна специальная команда, которая сообщает вам информацию о вашем процессоре — вы можете просто прочитать содержимое этого файла, используя любую стандартную команду, которая работает с текстовыми файлами. Например, вы можете использовать команду cat /proc/cpuinfo, чтобы распечатать содержимое этого файла на терминале — распечатать информацию о вашем ЦП на терминале. Вы даже можете открыть /proc/cpuinfo в текстовом редакторе, чтобы просмотреть его содержимое.

Помните, что /proc/cpuinfo на самом деле не является текстовым файлом, содержащим эту информацию — ядро Linux и файловая система proc предоставляют нам эту информацию в виде файла. Это позволяет нам использовать привычные инструменты для просмотра и работы с информацией.

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

  • /proc/uptime — показывает время безотказной работы вашего ядра Linux — другими словами, как долго ваша система работала без выключения.
  • /proc/version — показывает версию вашего ядра Linux.

/dev

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

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

Как видите, представление этих устройств как части файловой системы имеет свои преимущества. Файловая система обеспечивает согласованное «пространство имен», которое все приложения могут использовать для обращения к устройствам и доступа к ним.

/dev/null, /dev/random и /dev/zero

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

  • /dev/null — отбрасывает все записанные в него данные — думайте об этом как о мусорном баке или черной дыре. Если вы когда-нибудь увидите комментарий, в котором вам будет предложено отправлять жалобы на /dev/null — это отвратительный способ сказать «выбросьте их в корзину».
  • /dev/random — Создает случайность, используя окружающий шум. Это генератор случайных чисел, к которому вы можете подключиться.
  • /dev/zero — создает нули — постоянный поток нулей.

Если вы думаете об этих трех как о файлах, вы не увидите в них применения. Вместо этого думайте о них как об инструментах.

Например, по умолчанию команды Linux создают сообщения об ошибках и другие выходные данные, которые они выводят на стандартный вывод, обычно на терминал. Если вы хотите запустить команду и не заботитесь о ее выводе, вы можете перенаправить этот вывод в /dev/null. Перенаправление вывода команды на /dev/null немедленно отбрасывает его. Вместо того, чтобы каждая команда реализовывала свой собственный «тихий режим», вы можете использовать этот метод с любой командой.

команда > /dev/null

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

Чтобы стереть содержимое жесткого диска, записав на него 0, вам не нужна специальная утилита, предназначенная для обнуления диска — вы можете использовать стандартные утилиты и /dev/zero. Например, команда dd читает из одного места и записывает в другое. Следующая команда будет читать нули из /dev/zero и записывать их непосредственно в первый раздел жесткого диска в вашей системе, полностью удаляя его содержимое.

(Предупреждение: эта команда удалит все данные в вашем первом разделе, если вы ее запустите. Выполняйте эту команду, только если вы хотите уничтожить данные.)

дд, если=/dev/ноль из=/dev/sda1

Здесь мы используем dd со специальными файлами (/dev/zero и /dev/sda1), но мы также можем использовать dd для чтения и записи в реальные файлы. Одна и та же команда работает как для непосредственного управления устройствами, так и для работы с файлами.

Уточнение

На практике правильнее сказать, что «все есть поток байтов», чем «все есть файл». /dev/random — это не файл, а поток байтов. И хотя технически эти вещи не являются файлами, они доступны в файловой системе — файловая система представляет собой универсальное «пространство имен», где все доступно. Хотите получить доступ к генератору случайных чисел или читать напрямую с устройства? найдут оба в файловой системе, никакой другой формы адресации не требуется.

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