chmod 777 后权限设置为未知

chmod 777 后权限设置为未知

我刚刚注意到跑步后

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 当然是我们的目录名称。一旦我们这样做,一切就会恢复正常。

相关内容