
Допустим, я создал каталог (называемый temp) в моем ~ и внутри него я создал несколько файлов. Теперь мой umask — 0002, но ради упражнения я изменил права на ~/temp/:
chmod 222 temp
Насколько я знаю, наличие прав на запись в каталог будет означать, что я не смогу открыть его или прочитать его содержимое, но я должен иметь возможность добавить файл (или удалить файл) внутри. Например, я думал, что это будет работать просто отлично:
touch temp/new_file.txt
Однако, когда я пытаюсь это сделать, выдается ошибка:
touch: cannot touch 'temp/new_file.txt': Permission denied
Я не смог понять, почему это не работает так, как я ожидал, поэтому мне интересно, что я МОГУ сделать с каталогом, если у меня есть только права на запись, и почему создание нового файла таким способом, как я попробовал, не работает?
(Все команды выше были выполнены в ~)
Любая помощь приветствуется!
решение1
Разрешения работают по-разному для каталогов,
Это не идеальное объяснение, но,
Согласно странице руководства chmod ( man chmod
):
Буквы rwxXst выбирают биты режима файла для затронутых пользователей: чтение (r), запись (w),выполнить (или найти каталоги) (x), выполнять/искать только если файл является каталогом или уже имеет разрешение на выполнение для некоторого пользователя (X), устанавливать идентификатор пользователя или группы при выполнении (s), флаг ограниченного удаления или бит закрепления (t). Вместо одной или нескольких из этих букв вы можете указать только одну из букв ugo: разрешения, предоставленные пользователю, владеющему файлом (u), разрешения, предоставленные другим пользователям, являющимся членами группы файла (g), и разрешения, предоставленные пользователям, которые не входят ни в одну из двух предыдущих категорий (o).
Это означает, что для записи в файл внутри каталога вам сначала нужноперейти в каталог (разрешение на выполнение)и создайте файл (разрешение на запись)