有一天,我在做一些清理工作,决定删除我开发环境中的一个日志文件,当我这样做的时候,我开始想权限不应该允许我这样做,我不应该有权限。我不需要这个文件,但是为什么它允许我这样做呢?以下是之前和之后的对比:
jim@jim-pop-os:~/development/apps/apoxeia/log$ ls -altr
total 441800
-rwxr-xr-x 1 jim jim 0 Jan 25 2020 .gitkeep
-rw-r--r-- 1 jim jim 0 Jan 25 2020 bullet.log
drwxr-xr-x 2 jim jim 4096 Apr 9 22:13 .
-rw-r--r-- 1 root root 759153 Apr 20 08:31 production.log
-rw-r--r-- 1 jim jim 1208297 May 3 18:03 development.log
-rw-rw-r-- 1 jim jim 449190680 May 6 08:07 test.log
drwxr-xr-x 25 jim jim 4096 May 6 08:14 ..
-rw-rw-r-- 1 jim jim 1214644 May 6 08:41 capistrano.log
jim@jim-pop-os:~/development/apps/apoxeia/log$ rm production.log
rm: remove write-protected regular file 'production.log'? y
jim@jim-pop-os:~/development/apps/apoxeia/log$ ls -altr
total 441052
-rwxr-xr-x 1 jim jim 0 Jan 25 2020 .gitkeep
-rw-r--r-- 1 jim jim 0 Jan 25 2020 bullet.log
-rw-r--r-- 1 jim jim 1208297 May 3 18:03 development.log
-rw-rw-r-- 1 jim jim 449190680 May 6 08:07 test.log
drwxr-xr-x 25 jim jim 4096 May 6 08:14 ..
-rw-rw-r-- 1 jim jim 1214644 May 6 08:41 capistrano.log
drwxr-xr-x 2 jim jim 4096 May 6 21:14 .
jim@jim-pop-os:~/development/apps/apoxeia/log$
请注意,文件 production.log 仅对 root 具有写入权限,但我删除了它,而没有 root 权限。
这是怎么回事?[抱歉格式不对。看了提示,但还是没找到更好的选择。]
答案1
删除文件并不会写入文件 - 它只会写入父目录,您已经拥有w
和x
权限。
(Linux 实际上没有“删除文件”系统调用——它只有一个解除链接调用该函数,其工作原理是删除指向该文件的目录条目……如果这是最后一个指针,则实际文件将被垃圾收集。它与关联通过添加目录条目来创建硬链接。)