我想澄清一些我注意到的关于 Linux 中文件处理的事情(基本上是 Ubuntu,但我认为这适用于每个发行版)。
我注意到,当文件由 root 在主目录中创建时,它们被认为是写保护的常规文件当尝试以通常的方式删除它们时,会显示一条消息:
$ sudo touch ~/test.txt
$ ls -l ~/test.txt
-rw-r--r-- 1 root root 0 Nov 24 10:27 /home/xxx/test.txt
$ rm ~/test.txt
rm: remove write-protected regular empty file '/home/gorfanidis/test.txt'? y
$ ls -l ~/test.txt
ls: cannot access '/home/gorfanidis/test.txt': No such file or directory
如果我不确认y
该文件也不会被删除(我知道我可以使用-f
例如跳过此消息,但我并不是要求这样做)。
不管怎样,我在文件夹所有者是 root 的另一个地方尝试了相同的操作(我猜这是区别,但不确定),如/usr/
$ sudo touch /usr/test.txt
$ rm /usr/test.txt
rm: remove write-protected regular empty file '/usr/test.txt'? y
rm: cannot remove '/usr/test.txt': Permission denied
所以,我的问题如下:
- 写保护的常规文件到底是什么意思?例如,什么文件是非常规的?我不清楚。在这种情况下,写保护意味着
root
所有者(权限)如所述这里例如。 - 当您实际上无法删除写保护文件时(根文件夹中的根文件的情况),请求删除写保护文件的权限有什么意义?
- Linux系统决定用户是否确实具有删除文件的权限的机制是什么:是文件所在的文件夹权限吗?有更详细的东西吗?
答案1
常规文件是实际包含其自己的数据的任何文件,而不是其他内容的文件系统表示(请参阅了解 UNIX 权限和文件类型了解详情)。
从
rm
的角度来看,写保护文件是当前用户无法写入的任何文件。在您的情况下,该文件只能由其所有者写入,并且当前用户不是所有者。该文件的所有者这一事实root
并没有增加任何内容。rm
首先检查文件本身是否可写;如果不是,它会提示用户。只有到那时它才会真正尝试删除该文件,此时操作系统“告诉”rm
用户没有删除该文件的权限(删除失败并出现“权限被拒绝”错误)。rm
不会尝试提前确定是否允许删除文件;即使它尝试这样做,检测也会是活跃且不完整的,并且它仍然必须处理它认为允许删除但操作系统另有决定的情况。文件删除需要允许写入父目录,是的。