Одной из определяющих особенностей Linux и других UNIX-подобных операционных систем является то, что “все является файлом”. Это чрезмерное упрощение, но понимание того, что это значит, поможет вам понять, как работает Linux.
Многие вещи в Linux отображаются в вашей файловой системе, но на самом деле они не являются файлами. Это специальные файлы, которые представляют аппаратные устройства, системную информацию и другие вещи, включая генератор случайных чисел.
Эти специальные файлы могут быть расположены в псевдо- или виртуальных файловых системах, таких как /dev, который содержит специальные файлы, представляющие устройства, и /proc, который содержит специальные файлы, представляющие информацию о системе и процессе.
/proc
Например, предположим, вы хотите найти информацию о своем процессоре. Каталог /proc содержит специальный файл – /proc/cpuinfo – который содержит эту информацию.
Вам не нужна специальная команда, которая сообщает вам информацию о вашем процессоре – вы можете просто прочитать содержимое этого файла, используя любую стандартную команду, которая работает с обычными текстовыми файлами. Например, вы можете использовать команду cat /proc/cpuinfo для вывода содержимого этого файла на терминале – вывод информации о вашем процессоре на терминале. Вы даже можете открыть /proc/cpuinfo в текстовом редакторе, чтобы просмотреть его содержимое.
Помните, что /proc/cpuinfo на самом деле не является текстовым файлом, содержащим эту информацию – ядро Linux и файловая система proc предоставляют нам эту информацию в виде файла. Это позволяет нам использовать знакомые инструменты для просмотра и работы с информацией.
Каталог /proc также содержит другие подобные файлы, например:
- /proc/uptime – показывает время безотказной работы вашего ядра Linux – другими словами, как долго ваша система работала без выключения.
- /proc/version – предоставляет версию вашего ядра Linux.
/ dev
В каталоге /dev вы найдете файлы, представляющие устройства, а также файлы, представляющие другие специальные вещи. Например, /dev/cdrom - это ваш привод CD-ROM. /dev/sda представляет ваш первый жесткий диск, в то время как /dev/sda1 представляет первый раздел на вашем первом жестком диске.
Хотите смонтировать свой компакт-диск? Запустите команду 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 немедленно отбрасывает его. Вместо того, чтобы каждая команда реализовывала свой собственный “тихий режим”, вы можете использовать этот метод с любой командой.
command> /dev/null
Если вам нужен источник случайности – скажем, для генерации ключа шифрования, вам не нужно писать свой собственный генератор случайных чисел – вы можете использовать /dev/random .
Чтобы стереть содержимое жесткого диска, записав в него 0, вам не нужна специальная утилита, предназначенная для обнуления диска – вы можете использовать стандартные утилиты и /dev/zero . Например, команда dd считывает данные из местоположения и записывает в другое местоположение. Следующая команда считывает нули из /dev/zero и записывает их непосредственно в первый раздел жесткого диска в вашей системе, полностью стирая его содержимое.
(Предупреждение: эта команда удалит все данные на вашем первом разделе, если вы ее запустите. Выполняйте эту команду только в том случае, если вы хотите уничтожить данные.)
dd if=/dev/zero of=/dev/sda1
Здесь мы используем dd для специальных файлов (/dev/zero и /dev/sda1), но мы также можем использовать dd для чтения и записи в реальные файлы. Одна и та же команда работает как для непосредственного управления устройствами, так и для работы с файлами.
Разъяснение
На практике точнее сказать, что “все является потоком байтов”, чем “все является файлом”. /dev/random - это не файл, но это, безусловно, поток байтов. И, хотя технически эти вещи не являются файлами, они доступны в файловой системе – файловая система представляет собой универсальное “пространство имен”, где доступно все. Хотите получить доступ к генератору случайных чисел или прочитать напрямую с устройства? Вы найдете и то, и другое в файловой системе; никакая другая форма адресации не требуется.
Конечно, некоторые вещи на самом деле не являются файлами – процессы, запущенные в вашей системе, не являются частью файловой системы. “Все является файлом” неточно, но многие вещи ведут себя как файлы.