Сначала подумайте: что такое каталог? Это просто список элементов (файлов и других каталогов), которые находятся внутри. Итак: каталог = список имен.
Читать бит = Если установлено, вы можете прочитать этот список. Так, например, если у вас есть каталог с именем poems
:
- Вы можете,
ls poems
и вы получите список предметов, живущих внутри ( -l
не раскрывать никаких деталей!).
- Вы можете использовать параметры командной строки завершения ИЭ
touch poems/so <TAB> poems/somefile
.
- Вы не можете сделать
poems
свой рабочий каталог (то есть cd
в него).
Бит записи = если установлено, вы можете изменить этот список, т.е. вы можете {добавлять, переименовывать, удалять} имена в нем. Но! На самом деле вы можете сделать это, только если установлен бит выполнения.
Выполнить бит = Сделать этот каталог вашим рабочим каталогом, т.е. cd
в него. Вам нужно это разрешение, если вы хотите:
- доступ (чтение, запись, выполнение) объектов, находящихся внутри.
- изменить сам список, т. е. добавлять, переименовывать, удалять имена в нем (конечно, бит записи должен быть установлен в каталоге).
Интересный случай 1. Если у вас есть права на запись + выполнение для каталога, вы можете {удалить, переименовать} элементы, находящиеся внутри, даже если у вас нет разрешения на запись для этих элементов. (используйте липкий бит, чтобы предотвратить это)
Интересный случай 2 : если у вас есть разрешение на выполнение (но не на запись) в каталоге и у вас есть разрешение на запись в файл, находящийся внутри, вы не можете удалить файл (поскольку он предполагает удаление его из списка). Однако вы можете удалить его содержимое, например, если это текстовый файл, вы можете использовать vi, чтобы открыть его и удалить все. Файл все еще будет там, но он будет пустым.
Резюме:
Читать бит = Вы можете прочитать имена в списке.
Бит записи = Вы можете {добавлять, переименовывать, удалять} имена в списке, ЕСЛИ бит выполнения тоже установлен.
Выполнить бит = Вы можете сделать этот каталог вашим рабочим каталогом.
PS: Статья, упомянутая Кусаланандой, хорошо читается.