我刚刚注意到跑步后
chmod 777 *
在包含子目录的目录中执行的操作与预期一致。它将所有内容(包括子目录)的权限设置为 777。但是,如果您决定不这样做,请运行
chmod 644 *
现在子目录的内容被设置了未知的权限,并且您无法将其改回。
为什么会发生这种情况?这是预期行为还是错误?有没有办法恢复文件权限?
由于我拥有的文件位于另一个位置的 zip 文件中,因此我删除了整个目录,然后再次解压该 zip 文件,但我想知道这个“问题”的原因及其补救措施。
一些额外的信息,我正在通过 SSH 在远程机器上运行这些命令。
答案1
对于这种事情,最好使用 find 。
目录需要 x 访问权限,文件则不需要,因此权限设置不同。
# Files
find . -type f -exec chmod 644 '{}' \;
# Directories
find . -type d -exec chmod 755 '{}' \;
答案2
文件和目录的权限位解释方式不同。详情请参阅info coreutils 'File permissions'
和man 2 chmod
。为什么要让所有内容对所有者、组和所有人可读、可写、可执行?
由于证据已消失,我只能猜测,在 之后,您失去了对(当前目录) chmod
的写入权限。可以通过以下方法修复此问题:.
chmod u+w $PWD
然后,您可以更改文件的模式(权限)$PWD
通过执行此操作chmod 644 *
,您还删除了执行任何具有它的文件的权限,因此它们不再可由任何所有者、组或世界执行。
答案3
当您想要设置目录和子目录的权限时,您应该使用:
chmod -R
-R, --recursive 递归更改文件和目录
答案4
我找到了我所遇到的问题的解决方案。
首先,感谢所有发帖的人,你们的回答确实很有帮助。
问题在于为当前目录中的所有文件分配权限 664:
chmod 644 *
删除目录的执行权限,这些目录需要执行权限才能正常工作。解决方案很简单。我们只需要像这样更改目录的权限:
chmod 744 dir_name
其中 dir_name 当然是我们的目录名称。一旦我们这样做,一切就会恢复正常。