Вы glen
являетесь владельцем каталога (см. .
Файл в вашем списке). Каталог - это просто список файлов, и у вас есть разрешение изменить этот список (например, добавить файлы, удалить файлы, изменить владельца, чтобы он снова стал вашим и т. Д.). Возможно, вы не сможете изменить содержимое файла напрямую, но вы можете прочитать и отсоединить (удалить) файл в целом и впоследствии добавить новые файлы. 1 Это может свидетельствовать только о том, что файл был изменен только при наличии свидетельства «до» и «после» .
Вим использует файлы подкачки и перемещает файлы вокруг под водой, так что объясняет , почему он , кажется , чтобы писать в тот же файл , как вы делаете в вашей оболочке, но это не то же самое. 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
1 Это важное различие в обработке прав доступа к файлам между Windows и Unices. В Windows обычно невозможно удалить файлы, для которых у вас нет разрешения на запись.
2 обновление: как отмечено в комментариях, Vim на самом деле не делает это таким образом для смены владельца, поскольку номер инода в 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
в моем случае). Я думаю, это объясняет, почему номер инода не меняется.
ls -il
до и после ... еслиtemp
номер инода изменился, вы знаете, что это другой файл с тем же именем.