Вы, glen
, владелец каталога (см. .
файл в Вашем списке). Каталог является просто списком файлов, и у Вас есть разрешение изменить этот список (например, добавить файлы, удалить файлы, владения изменения для создания его Вашим снова, и т.д.). Вы не можете изменять содержание файла непосредственно, но можно считать и удалить связь (удаляют) файл в целом и добавляют новые файлы впоследствии 1 Только наблюдение прежде и после, это может быть похожим на файл, был изменен.
Vim использует файлы подкачки и перемещает файлы под водой, так, чтобы объяснил, почему это, кажется, пишет в тот же файл, как Вы делаете в своей оболочке, но это не та же вещь 2
Так, что делает Vim, сводится к этому:
cat temp > .temp.swp # copy file by contents into a new glen-owned file
echo nope >> .temp.swp # or other command to alter the new file
rm temp && mv .temp.swp temp # move temporary swap file back
1This важное различие в обработке разрешения файла между Windows и Нельдами. В Windows каждый обычно не в состоянии удалить файлы, для которых у Вас нет разрешения записи.
2 обновления: как отмечено в комментариях, Vim на самом деле не делает этого этот путь к изменению владения как inode число на temp
файл не изменяется (сравнение ls -li
прежде и после). Используя strace
мы видим точно что vim
делает. Интересная часть здесь:
open("temp", O_WRONLY|O_CREAT|O_TRUNC, 0664) = -1 EACCES (Permission denied)
unlink("temp") = 0
open("temp", O_WRONLY|O_CREAT|O_TRUNC, 0664) = 4
write(4, "more text bla\n", 14) = 14
close(4) = 0
chmod("temp", 0664) = 0
Это показывает, что только удаляет связь, но не закрывает дескриптор файла к temp
. Это скорее просто перезаписывает свое целое содержание (more text bla\n
в моем случае). Я предполагаю, что это объясняет, почему inode число не изменяется.
прежде:
-rw-r--r-- 1 root staff 0 19 Dec 12:38 temp
после:
-rw-r--r-- 1 glen staff 7 19 Dec 12:38 temp
Энергия не прорывается через барьер разрешения. Просто взгляните на информацию о файле, перечисленную тщательно затем, Вы могли узнать, что энергия на самом деле удалила исходный файл (потому что у Вас есть разрешение удалить файл, хотя Вы не можете измениться, его содержание) затем создал новый файл Вас собственный (см., что владелец больше не является 'корнем').
И в то время как Вы редактируете исходный файл в энергии, он предупреждает, что Вы изменяете файл только для чтения. Таким образом, когда Вы вводите команду :wq!
(вызовите операцию), что может, энергия только сделать должна удалить существующий файл и создать новый файл, который имеет идентичное имя.
Надежда, которая помогает.
Используйте -i
опция ls
видеть inode число, которое является уникальным идентификатором (в файловой системе) файла или другого объекта.
Вы будете видеть, что файл был заменен другим объектом: inode число, вероятно, изменится.
Наблюдение того же inode числа не является доказательством ничего: может быть переработано inode число. Если мы удаляем последнюю ссылку на файл и затем создаем новый файл, мы могли бы добраться один с тем же inode числом. Но этого не может произойти, если старый файл удален после того, как новый создается. Например. mv file file.tmp; touch file; rm file.tmp
. Я подозреваю, что энергия на самом деле делает что-то аналогичное этому echo new_content > tmpfile; mv tmpfile file
. mv
операция переведет в a rename
системный вызов, таким образом, присвоение inode чисел зависит от того, как файловая система реализует переименовывание, которое удаляет связь с местом назначения.
ls -il
прежде и после..., еслиtemp
число inode изменилось, Вы знаете, что это - другой файл с тем же именем. – Useless 19.12.2012, 16:12