
Я понимаю, что есть 12 битов разрешений, из которых есть 3 группы по 3 бита для пользователя, группы и других, которые являются RWX соответственно. RW — это чтение и запись, а X — search
для каталогов и execute
файлов.
Вот чего я не понимаю:
Каковы три оставшихся бита режима и все ли они хранятся в inode?
Я знаю, что сам каталог файлов также считается файлом, поскольку все в UNIX является файлами (это правда?), но поскольку системы UNIX используют ACL для представления файловой системы, то файловая система представляет собой список пар имя_файла-номер_инода. Где каталог файлов хранит свой собственный номер инода и имя файла?
решение1
stat /bin/su
показывает на одной системе:
Access: (4755/-rwsr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Вот восьмеричное представление 4755
всех 12 битов режима. Число соответствует битам:
octal 4 7 5 5
bits 100 111 101 101
sst uuu ggg ooo
ug rwx rwx rwx
Где uuu
, ggg
и ooo
— биты разрешений для пользователя, группы и других. Оставшаяся группа (первая по порядку) содержит биты setuid ( su
), setgid ( sg
) и sticky ( t
).
Биты setuid и sticky часто не упоминаются, поскольку для большинства файлов они равны нулю. Они все еще там для каждого файла, сохраненные вместе с другими.
Если уж на то пошло, некоторые файловые системы и интерфейсы хранят файлтипвдоль битов режима, в еще более высоких битах. Вышеуказанное учитывает только 12 бит, так что с 16-битным полем остается 4. См., например,описание st_mode
вstat(2)
.
решение2
Оставшиеся три бита представляют собой биты setuid, setgid и sticky; см.Понимание разрешений и типов файлов UNIXдля подробностей. Все они хранятся в inode.
Каталог действительно является своего рода файлом, хранящим список имен и соответствующих инодов. Собственное имя и иноды каталога хранятся в его родительском каталоге; корневой каталог является особым случаем, это, как правило, фиксированный инод в файловой системе (inode 2 в Ext4) и, конечно, всегда имеет имя
/
(которое в конечном итоге задается относительно точки монтирования...).