为什么 chmod 644 使目录无法访问?

Oli*_*Oli 8 permissions

我有一堆混合了各种权限的媒体文件(只需要 644)。有些是组或全局可写的,所以我想,为了安全起见,我会将它们全部改回 644。

问题是存在一个目录层次结构,并且对于在此捕获的所有目录将ls -l它们显示为:

d????????? ? ? ? ?            ? Dirname
Run Code Online (Sandbox Code Playgroud)

如果我 chmod 到 744,它是固定的。

我的问题是:这里发生了什么?目录是否需要可执行?

小智 7

chmod与权限相关的联机帮助页中所述:

字母 rwxXst 为受影响的用户选择文件模式位:读取(r)、写入(w)、执行(或搜索目录)(x)、仅当文件是目录或已经对某些文件具有执行权限时才执行/搜索用户 (X)

文件夹上的可执行位在上面解释为“搜索”权限;即执行位仅允许您在文件浏览器中访问文件夹或通过运行cd命令或运行ls ~/folder以列出文件夹中的文件从终端移动到文件夹。

该文件夹必须是所有者的可执行文件,尽管超级用户仍然可以访问该文件夹,因为在使用sudo任何文件或目录时都可以访问或删除。此外,在 Stackoverflow 上这篇有用的文章中进一步解释了目录和文件权限。

同样重要的是要注意,“执行”文件夹并不意味着您实际上正在运行任何代码或命令,例如在运行可执行二进制文件或脚本时。

对于家庭桌面用户(尽管可能不适用于您的服务器)$HOME,如果使用stat ~/myfolder以下方式查看,其中的大多数文件夹都为用户、组和其他人设置了执行权限(摘录如下):

Access: (0755/drwxr-xr-x)  Uid: ( 1000/    mike)   Gid: ( 1000/    mike)
Run Code Online (Sandbox Code Playgroud)

对文件夹的标准权限 $HOME是755或775和文件他们是644。然而,文件系统的其余部分将有所不同。同样,文件夹必须具有所有者的执行位,否则他将无法打开它们。chmod在更改权限时要小心,尤其是在递归执行时要小心,因为情况可能很快就会混乱。

欲了解更多信息,请参阅man chmodUbuntu的联机帮助页,这文章的超级用户