444
(只读),那么rm
怎么能删除它?如果我这样做:
echo test > test.txt
chmod 444 test.txt
rm test.txt
...
rm
会询问我是否要删除写保护的文件test.txt
。我本以为rm
无法删除此类文件,因此我必须先执行chmod +w test.txt
。如果我执行rm -f test.txt
,则rm
将删除文件,甚至不询问,即使它是只读的。 有人可以澄清吗?我正在使用Ubuntu 12.04 / bash。
#1 楼
rm
所需的全部是对父目录的写+执行权限。文件本身的权限是无关紧要的。这里有一个参考资料,它比我能更清楚地解释权限模型:
任何尝试访问文件的权限的尝试数据需要读取权限。任何尝试修改文件数据的操作都需要具有写权限。任何
执行文件(程序或脚本)的尝试都需要执行
权限...
因为目录的使用方式与常规文件不同,所以
权限的工作方式略有不同(但仅略有不同)。尝试
列出目录中的文件需要具有对
目录的读取权限,而不是其中的文件具有读取权限。尝试将文件添加到
目录,从目录中删除文件或重命名文件,所有
都需要对该目录具有写许可权,但是(也许令人惊讶)
并非其中的文件。执行权限不适用于
目录(目录也不能是程序)。但这
许可权位可用于其他目的的目录。
对目录有执行许可,才能将其cd进入该目录(即创建一个目录)您当前的工作目录)。
在目录上需要执行才能访问其中的文件的“ inode”信息。您需要使用它来搜索目录以读取其中的文件的
inode。因此,通常将对目录的执行权限称为搜索权限。
评论
因此,如果我想创建一个目录,其中的某些文件必须先执行chmod才能删除/更改,而另一些文件可以自由写入,那将不可能吗?我将不得不对目录555进行chmod,这意味着该目录中的任何文件都无法创建或修改。
–马格努斯
2012年9月19日上午8:50
@Magnus-当然,没有什么可以阻止您在只读目录中创建可写子目录,并将可写文件存储在其中。子目录本身不能删除,但是其内容可以删除。
–ire_and_curses
2012年9月19日在8:57
您是否不能使目录带有+ t标记,以便人们即使拥有对该目录的写访问权,也无法再修改或删除他们不拥有的目录中的文件?
– Shadur
2012年9月19日在12:10
@Magnus如果您具有root用户访问权限(包括sudo),则可以使用chattr将不可变标志添加到文件。如果不是,则ire_and_curses是非常正确的。
–詹姆斯·奥戈曼(James O'Gorman)
2012年9月19日在12:49
不使用rm -f仅在我清醒的情况下有效...此外,我也不知道我编写的智障bash脚本可能会或可能不会做什么
–马格努斯
2012年9月19日在16:27
#2 楼
好的,根据您对ire_and_curses的评论,您真正想要做的是使某些文件不可变。您可以使用chattr
命令执行此操作。例如:例如
$ cd /tmp
$ touch immutable-file
$ sudo chattr +i immutable-file
$ rm -f immutable-file
rm: remove write-protected regular empty file `immutable-file'? y
rm: cannot remove `immutable-file': Operation not permitted
$ mv immutable-file someothername
mv: cannot move `immutable-file' to `someothername': Operation not permitted
$ echo foo > immutable-file
-bash: immutable-file: Permission denied
您不能对不可变文件执行任何操作-您无法删除,编辑,覆盖它,重命名它,chmod或chown它或其他任何东西。唯一可以做的就是读取它(如果允许Unix权限)和(作为根用户)
chattr -i
以删除不可变位。 AFAIK,所有常见的linux文件系统(包括ext2 / 3/4和xfs都支持不可变的。zfsonlinux目前根本不支持属性)评论
偶尔有用。顺便说一句,甚至不是root都可以修改或删除不可变文件(并非不首先删除不可变属性)。顺便说一句,使用lsattr列出属性。
–cas
2012年9月19日上午9:13
+1-我忘记了属性,并且忙于回答有关rm的字面问题,以至于我什至没有想到...
–ire_and_curses
2012-09-19 9:16
这是特定于文件系统的,可能会给您带来更多需要解决的问题。
–StéphaneGimenez
2012年9月19日在12:44
@Magnus:可能的问题包括备份(并非所有备份实用程序都会备份属性-实际上,大多数备份都不会)和还原(如果还原到已经包含不可变文件的目录,则某些程序将无法覆盖该文件作为致命错误并中止)。如果忘记了使文件变得不可变并且无法弄清楚为什么无法删除它,也会引起混乱。.“不允许操作”错误消息与某些文件系统中看到的错误消息相同腐败,可能导致潜在的危险过度反应。
–cas
2012年9月19日在21:53
您可以复制(cp)不可变文件。
–章鱼
2015年5月5日15:07
#3 楼
这个问题的一个答案是,只有具有write
权限的文件才可以从目录中删除,这是完全错误的!就试一试吧!仅授予目录write
权限并尝试删除,就不能!要删除目录中的文件,您需要同时具有目录write
和execute
的权限。使用rm
,您只是从目录中删除其inode信息,即您不是从磁盘上。如果文件的inode信息不在目录中,则您将无法访问(也因为它未在其父目录中列出,因此您无法看到它),即为您删除了它。是目录权限;该文件的权限无关紧要
评论
澄清:我以普通用户身份而不是root用户身份运行这些命令。