Вот список файлов на /dev/sda1
на моем почти современном сервере Arch Linux:
% ls -li /dev/sda1
1294 brw-rw---- 1 root disk 8, 1 Nov 9 13:26 /dev/sda1
Итак, запись каталога в /dev/
для sda
имеет номер inode, 1294. Это реальный файл на диске.
Посмотрите, где обычно отображается размер файла. Вместо этого появляется "8, 1". Это главный и второстепенный номер устройства. Также обратите внимание на "b" в разрешении файла.
Файл /usr/include/ext2fs/ext2_fs.h
содержит этот (фрагмент) C struct:
/*
* Structure of an inode on the disk
*/
struct ext2_inode {
__u16 i_mode; /* File mode */
Этот struct показывает нам структуру инода файла на диске. В этой структуре много интересного; посмотрите на нее внимательно.
Элемент i_mode
в struct ext2_inode
имеет 16 бит, и он использует только 9 для разрешений user/group/other, read/write/execute, и еще 3 для setuid, setgid и sticky. У него есть 4 бита для различения таких типов, как "обычный файл", "ссылка", "каталог", "именованная труба", "сокет семейства Unix" и "блочное устройство".
Ядро Linux может следовать обычному алгоритму поиска каталога, а затем принимать решение на основе разрешений и флагов в элементе i_mode
. Для 'b', файлов блочных устройств, он может найти главный и младший номера устройств и традиционно использовать главный номер устройства для поиска указателя на функцию ядра (драйвер устройства), которая работает с дисками. Номер второстепенного устройства обычно используется, скажем, как номер устройства шины SCSI, или номер устройства EIDE, или что-то в этом роде.
Некоторые другие решения о том, как работать с файлом типа /proc/cpuinfo
, принимаются на основе типа файловой системы. Если вы сделаете a:
% mount | grep proc
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
то увидите, что /proc
имеет тип файловой системы "proc". Чтение из файла в /proc
заставляет ядро делать что-то другое в зависимости от типа файловой системы, так же как открытие файла в файловой системе ReiserFS или DOS заставляет ядро использовать различные функции для поиска файлов и нахождения данных файлов.