Mag*_*nus 101 permissions rm files readonly
如果我创建一个文件,然后将其权限更改为444(只读),如何rm删除它?
如果我这样做:
echo test > test.txt
chmod 444 test.txt
rm test.txt
Run Code Online (Sandbox Code Playgroud)
...rm会问我是否要删除写保护的文件test.txt。我原以为rm不能删除这样的文件,我必须先做一个chmod +w test.txt。如果我这样做rm -f test.txt,然后rm将删除文件,甚至没有要求,即使它是只读的。
任何人都可以澄清吗?我正在使用 Ubuntu 12.04/bash。
ire*_*ses 114
所有rm需要的是对父目录的写+执行权限。文件本身的权限无关紧要。
这是一个参考,它比我以往任何时候都更清楚地解释了权限模型:
任何访问文件数据的尝试都需要读取权限。任何修改文件数据的尝试都需要写权限。任何执行文件(程序或脚本)的尝试都需要执行权限...
因为目录的使用方式与常规文件的使用方式不同,所以权限的工作方式略有不同(但只是略有不同)。尝试列出目录中的文件需要对该目录具有读权限,但不需要对其中的文件具有读权限。尝试向目录中添加文件、从目录中删除文件或重命名文件,都需要对该目录具有写权限,但(也许令人惊讶)不需要对其中的文件具有写权限。执行权限不适用于目录(目录不能同时是程序)。但该权限位可用于其他目的的目录。
目录需要执行权限才能 cd 进入它(即,使某个目录成为您当前的工作目录)。
需要在目录上执行以访问其中文件的“inode”信息。您需要它来搜索目录以读取其中文件的 inode。出于这个原因,目录的执行权限通常被称为搜索权限。
cas*_*cas 53
好的,根据您对 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
Run Code Online (Sandbox Code Playgroud)
你不能对一个不可变的文件做任何事情——你不能删除它、编辑它、覆盖它、重命名它、chmod或chown它,或其他任何东西。你唯一能做的就是读取它(如果 unix 权限允许)和(作为 root)chattr -i删除不可变位。
并非所有文件系统都支持所有属性。AFAIK,所有常见的 linux 文件系统都支持 immutable(包括 ext2/3/4 和 xfs。zfsonlinux 目前根本不支持属性)