![为什么我不能像之前那样 chmod 这些文件?](https://linux22.com/image/38590/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E4%B8%8D%E8%83%BD%E5%83%8F%E4%B9%8B%E5%89%8D%E9%82%A3%E6%A0%B7%20chmod%20%E8%BF%99%E4%BA%9B%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我试图为文件夹中的 sh 文件添加执行权限。为此,我错误地使用了:
find . -print0 -iname '*.sh' | xargs -0 chmod -v 744
输出是:
mode of `.' changed from 0755 (rwxr-xr-x) to 0744 (rwxr--r--)
mode of `./codis.sh' changed from 0644 (rw-r--r--) to 0744 (rwxr--r--)
mode of `./ne fil.sw' changed from 0644 (rw-r--r--) to 0744 (rwxr--r--)
mode of `./.whois1.sh.swo' changed from 0644 (rw-r--r--) to 0744 (rwxr--r--)
mode of `./new file' changed from 0644 (rw-r--r--) to 0744 (rwxr--r--)
mode of `./ezik.sh' changed from 0644 (rw-r--r--) to 0744 (rwxr--r--)
mode of `./.whois1.sh.swp' changed from 0600 (rw-------) to 0744 (rwxr--r--)
mode of `./whois1.sh' retained as 0744 (rwxr--r--)
我现在知道 find 部分的正确用法是
find . -iname '*.sh' -print0
所以我创建了另一个像这样的发现:
find . \! -iname '*.sh' -print0 | xargs -0 chmod 600
这样我就可以设置非 sh 文件的权限(是的,我看到有些文件有 644 权限,而不是 600,但现在没关系)。该命令的输出是:
chmod: cannot access `./ne fil.sw': Permission denied
chmod: cannot access `./.whois1.sh.swo': Permission denied
chmod: cannot access `./new file': Permission denied
chmod: cannot access `./.whois1.sh.swp': Permission denied
我也用过sudo
,但是还是没啥效果……
我发现我没有正确理解权限...如果我理解正确,我也需要x
目录的权限direc
才能在所述目录中执行命令。
答案1
您的find
cmd 还会找到当前目录“ .
”。然后,该目录的权限将被设置为600
,因此您将失去访问该目录中文件的权限。
所以cd ..
,chmod 700
说目录,然后运行你的恢复find
,它现在排除当前目录,如下所示:
find . \! -path . \! -iname '*.sh' -print0 | xargs -0 chmod 600