Каталог — это список файлов и подкаталогов (точнее, для каждой записи: имя файла или подкаталога, пользователь-владелец, группа-владелец, биты разрешений, расширенные разрешения, указатель на расположение на диске файла/подкаталога и дополнительные эзотерические метаданные). Каталог имеет владельца и группу. Разрешения каталога определяют, какие пользователи и какие пользователи читают, пишут и CD
в этот каталог. Если вы хотите создать файл в каталоге, у вас должно быть разрешение на запись в каталог. Если вы хотите удалить файл из каталога, у вас должно быть разрешение на запись в каталог. Если вы хотите переименовать файл, у вас должно быть разрешение на запись в каталог. Если вы хотите изменить права доступа к файлу, у вас должно быть разрешение на запись в каталог. Все это модификации каталога, поэтому используйте разрешения каталога. (Есть исключения, связанные с расширенными разрешениями, которые я выделил здесь.)
В дальнейшем я буду продолжать писать «запись каталога, которую вы используете для доступа к нему», потому что может быть несколько записей каталога, следовательно, потенциально разные имена для файла в файловой системе. На самом деле, несколько записей в одном каталоге (обязательно с разными именами) могут указывать на один и тот же файл на диске, и разные записи могут иметь разных пользователей-владельцев, группу-владельцев и разрешения.
Запись файла в каталоге имеет пользователя-владельца, группу-владельца и разрешения. Если вы хотите прочитать содержимое файла, запись в каталоге, которую вы используете для доступа к нему, должна разрешать вам доступ для чтения. Если вы хотите записать содержимое файла, запись каталога, которую вы используете для доступа к нему, должна разрешать вам доступ для записи. Если вы хотите выполнить содержимое файла, запись в каталоге, которую вы используете для доступа к нему, должна разрешать вам доступ на выполнение.
Итак, давайте поработаем на вашем примере.
- Текущий рабочий каталог
~/tmp/
, поэтому текущий пользователь является пользователем-владельцем, группой-владельцем и имеет права на чтение, запись и выполнение в каталоге.
sudo touch c.txt
Это создает файл с владельцем пользователя корень
имея права на чтение+запись, группа корень
иметь права на запись и права на запись для других пользователей. (4 = чтение, 2 = запись, 1 = выполнение, 6 = 4+2 = чтение+запись)
рм c.txt
имеет предупреждение/подсказку "rm: удалить защищенный от записи обычный пустой файл «c.txt»?
" Это предупреждение означает: текущий пользователь имеет права на запись в текущий каталог, поэтому может удалить этот файл, но текущий пользователь имеет права только на чтение содержимого этого файла, что говорит о том, что текущий пользователь желает сохранить этот файл от изменений , Эти два намерения несовместимы, поэтому требуется дальнейшее руководство.
- Выбирать
у
и c.txt
удален. Да. У вас есть права на удаление записи из справочника, поэтому при ответе у
, запись удаляется из каталога. Содержимое файла никогда не записывается и не выполняется (что запрещено разрешениями на запись в файл).
Ваш второй сценарий также работает, но не по той причине, которую вы ожидаете. вим
и многие, многие другие редакторы (в том числе, в качестве случайного примера, Microsoft Word) не редактируют исходный файл. Они копируют файл, затем редактируют копию. Если правки не сохраняются, копию можно удалить. Если изменения сохраняются, исходный файл удаляется из каталога, а копия переименовывается в имя оригинала. Итак, давайте посмотрим, что произойдет.
мкдир тест
компакт-диск тест
ls -laF
всего 8
drwxrwxr-x 2 нечеткий нечеткий 4096 31 октября 11:40 ./
drwxr-xr-x 78 нечеткий нечеткий 4096 31 октября 11:40 ../
Мы видим, что мой пользователь, нечеткий
, и моя группа, нечеткий
владеть текущим каталогом, .
, и установлены разрешения 775 (пользователь нечеткий
: rwx, группа нечеткий
: rwx, другое: rx).
sudo vim d.txt
[укажите пароль]
[сеанс vim начинается]
[вставить режим]Привет.
Теперь давайте перейдем к другой оболочке и посмотрим, что происходит в каталоге.
[другая оболочка, не sudo...]
компакт-диск тест
ls -laF
всего 20
drwxrwxr-x 2 нечеткий нечеткий 4096 31 октября 11:44 ./
drwxr-xr-x 78 нечеткий нечеткий 4096 31 октября 11:44 ../
-rw------- 1 root root 12288 31 окт 11:44 .d.txt.swp
Мы видим, что судо вим
создал временный файл с именем .d.txt.swp
с владельцами корень.корень
и режим 600
. Теперь вернитесь и сохраните файл в судо вим
сессии и проверьте еще раз.
ls -laF
всего 12
drwxrwxr-x 2 нечеткий нечеткий 4096 31 октября 11:48 ./
drwxr-xr-x 78 нечеткий нечеткий 4096 31 октября 11:48 ../
-rw-r--r-- 1 root root 4 31 окт 11:48 d.txt
Мы видим, что запись каталога временного файла была изменена, чтобы иметь новое имя и новые разрешения. Текущий пользователь здесь нечеткий
, у которого есть только права на чтение д.текст
, но это все нечеткий
нужно открыть файл в редакторе.
[первая сессия, обратите внимание, не sudo...]
vim d.txt
[перейти к концу первой строки]
[добавить. предупрежден: «W10: Предупреждение: изменение файла только для чтения»]
[введите один пробел после «Привет».]
Как только мы добавили
после Привет.
временный файл vim появился в каталоге.
[вторая сессия]
ls -laF
всего 16
drwxrwxr-x 2 нечеткий нечеткий 4096 31 октября 11:53 ./
drwxr-xr-x 78 нечеткий нечеткий 4096 31 октября 11:52 ../
-rw-r--r-- 1 root root 4 31 окт 11:48 d.txt
-rw------- 1 нечеткий нечеткий 4096 31 октября 11:53 .d.txt.swp
Этот каталог имеет разрешения rwx для пользователя нечеткий
, поэтому создание этой записи разрешено. Как обычно, вим
сохраняет права доступа к временным файлам очень строгими.
[Первая сессия]
[выйти из режима вставки]
[Выход]:ж
[ошибка получения: «E45: установлена опция «только для чтения» (добавьте !, чтобы переопределить)»]
Это означает, что исходная запись каталога не имеет прав на запись для текущего пользователя, нечеткий
. Обычно это имеет семантику, что файл не должен быть изменен, поэтому вим
может учитывать эту семантику или переопределять ее (поскольку разрешения каталога позволяют нечеткий
удалить д.текст
запись и переименовать .d.txt.swp
к д.текст
). Какой ты хочешь?
[Первая сессия]
[Esc]:в!
Вы выбираете перезапись.
Давайте посмотрим, что сейчас происходит в каталоге.
[вторая сессия]
ls -laF
всего 28
drwxrwxr-x 2 нечеткий нечеткий 4096 31 октября 12:01 ./
drwxr-xr-x 78 нечеткий нечеткий 4096 31 октября 12:00 ../
-rw-r--r-- 1 нечеткий нечеткий 5 31 окт 12:01 d.txt
-rw-r--r-- 1 fuzzy fuzzy 4 31 окт 11:48 d.txt~
-rw------- 1 нечеткий нечеткий 12288 31 окт 12:01 .d.txt.swp
Возможно, вы не видите д.текст~
файл. Я, возможно, включил вим
возможность всегда сохранять резервную копию исходного файла. Я не помню, какое поведение по умолчанию вим
относится к этому варианту.
Теперь есть три файла:
д.текст
-- модифицированная версия, которую мы только что сохранили. Он содержит «Привет». Последующие сохранения заменят этот файл.
д.текст~
-- резервная копия оригинального файла. Он содержит «Привет». Эта запись каталога была создана процессом, запущенным как нечеткий
, так же нечеткий
права собственности и разрешения по умолчанию.
.d.txt.swp
-- текущий рабочий файл. Последующие правки будут периодически автоматически сохраняться в этот файл.
Теперь давайте покончим с этим вим
сессия.
[Первая сессия]
[Выход]: д
и снова посмотреть, что происходит в файловой системе.
[вторая сессия]
ls -laF
всего 16
drwxrwxr-x 2 нечеткий нечеткий 4096 31 октября 12:05 ./
drwxr-xr-x 78 нечеткий нечеткий 4096 31 октября 12:05 ../
-rw-r--r-- 1 нечеткий нечеткий 5 31 окт 12:01 d.txt
-rw-r--r-- 1 fuzzy fuzzy 4 31 окт 11:48 d.txt~
Оба файла были созданы непривилегированным нечеткий
, так и есть нечеткий
права собственности и разрешения по умолчанию. нечеткий
смог создать и удалить эти записи каталога, потому что нечеткий
имеет права на запись в текущий каталог, .
.