Эта интерпретация разрешений восходит к ранним файловым системам Unix. В начале были только файлы. (Ну, и устройства, и каналы, и ... но я пытаюсь рассказать историю здесь, а не быть на 100% строго точным; кроме того, все это верно для устройств и каналов и всего остального, потому что все является файлом, даже каталоги).
Каталоги - это просто файлы, которые файловая система использует для хранения метаданных, описывающих дерево каталогов, и файлов, которые в нем содержатся. Каждый файл в каталоге был описан простой структурой данных, которая содержала место для имени файла (первоначально 14 символов, IIRC) вместе с номером инода, где хранились данные, размером файла, временными метками и словом прав доступа. , Каждый каталог начинался с двух записей с именем .и .., первый указывал на индекс этого самого каталога, а второй - на индекс его родительского каталога.
Слово разрешений содержало девять битов для описания обращения с владельцем, другими членами той же группы и миром. Три бита для каждого флага указывают, может ли соответствующий пользователь прочитать, записать или выполнить файл. (Вы можете заметить, что в 16-разрядном слове разрешений есть еще пять битов, которые я игнорирую. В конечном итоге они получили назначенные значения, но это не относится к этой части истории.) (Кроме того, это толкование девяти биты остались почти одинаковыми у всех потомков ранних версий Unix, включая Linux.)
Таким образом, если каталог действительно является особым видом файла и описывается записью в каком-либо каталоге, он, очевидно, также имеет биты прав доступа, и эти биты, вероятно, что-то значат. Но вопрос в том, что именно. Самый простой способ присвоить значение этим битам - не изменять то, что они означают. И это по сути то, что было сделано.
Таким образом, бит чтения означает, что пользователь может читать сам каталог. Это классически дает читателю доступ к имени файла, меткам времени, размеру и номеру узла для каждого файла. В частности, с помощью rset вы можете использовать, lsчтобы увидеть имена всех файлов в каталоге, но этого недостаточно для открытия (или использования каким-либо образом) любого из перечисленных файлов.
Бит выполнения означает, что пользователь может «выполнить» каталог. Поскольку каталоги особенные, выполнить действительно означает найти запись по имени и использовать ее. Это означает, что вы можете попытаться открыть файлы, если они xустановлены, но без них rвы не сможете обнаружить их имена. Разумеется, права доступа к запрашиваемому файлу также влияют на доступ, поэтому даже при xналичии в каталоге вы не сможете прочитать файл, если он также не предложит вам r.
Бит записи означает, что пользователь может записывать в каталог, но, естественно, только с помощью самой файловой системы. Это означает, что с помощью wset вы можете создавать новые файлы в этом каталоге или редактировать записи каталога существующих файлов. Но без xнабора вы не можете использовать какие-либо файлы, и без них rвы тоже их не увидите.
По мере того как в Unix и его потомках развивались более сложные модели идентификации пользователей, эти же базовые описания смогли остаться на удивление неизменными.
Короче говоря, rозначает, что вы можете видеть его содержимое, xозначает, что вы можете использовать его, и wозначает, что вы можете изменить его даже для каталогов.