假设您有写入文件的权限,但没有删除它的权限。
我们谈论什么权利?
读写权限?
答案1
要写入现有文件,您需要具有该文件的写权限。
要删除文件,您需要具有包含该文件的文件夹的写权限。
答案2
Florian 的回答在我的系统上并不十分完整:为了删除目录中的文件,我需要对该目录的写入和执行权限。
示例会话:
我正在运行一个使用 ext4 文件系统的 Debian。我创建了一个包含文件的目录,然后在尝试删除该文件之前更改了目录和文件的权限。
文件系统 ext4:
testuser@www:~$ df -T .
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/sda3 ext4 152326340 44429904 100196624 31% /
让我们在其中创建一个目录和一个文件:
testuser@www:~$ mkdir d
testuser@www:~$ ls -ld d
drwxr-xr-x 2 testuser testuser 4096 May 21 16:19 d
testuser@www:~$ echo kjhkjh > d/f
testuser@www:~$ ls -l d/f
-rw-r--r-- 1 testuser testuser 7 May 21 16:19 d/f
预期:如果没有写入权限,则无法更改文件目录:
testuser@www:~$ chmod 100 d && ls -ld d
d--x------ 2 testuser testuser 4096 May 21 16:19 d
testuser@www:~$ rm d/f
rm: cannot remove 'd/f': Permission denied
意外:在没有执行权限的情况下无法更改文件目录:
testuser@www:~$ chmod 200 d && ls -ld d
d-w------- 2 testuser testuser 4096 May 21 16:19 d
testuser@www:~$ rm d/f
rm: cannot remove 'd/f': Permission denied
我需要对其具有写入和执行权限:
testuser@www:~$ chmod 300 d && ls -ld d
d-wx------ 2 testuser testuser 4096 May 21 16:19 d
testuser@www:~$ rm d/f
另外:当文件(但不是目录)被写保护时,rm
删除前会请求权限。毕竟,删除文件可以被视为一种极端的写入方式。在文件没有其他硬链接的常见情况下,echo -n "" > d/f
数据丢失与删除之间没有区别。rm d/f
testuser@www:~$ !echo
echo kjhkjh > d/f
testuser@www:~$ chmod 700 d && ls -ld d
drwx------ 2 testuser testuser 4096 May 21 16:21 d
testuser@www:~$ chmod 000 d/f && ls -l d/f
---------- 1 testuser testuser 7 May 21 16:21 d/f
testuser@www:~$ rm d/f
rm: remove write-protected regular file 'd/f'? y
testuser@www:~$ ls -l d
total 0
testuser@www:~$