为什么更改目录权限时会出现问号字符?

Reg*_*ser 39 permissions command-line

我正在尝试临时更改一个文件夹的权限,其初始权限为

user@ubuntu:/var/log$ ls -l squid*
squid3:
total 4
-rw-r----- 1 proxy proxy    0 Jan 16 14:43 access.log
-rw-r----- 1 proxy proxy 1359 Jan 16 14:43 cache.log
ls: cannot open directory squid-deb-proxy: Permission denied
Run Code Online (Sandbox Code Playgroud)

一些事情

user@ubuntu:/var/log$ sudo chmod -R 644 squid*
user@ubuntu:/var/log$ ls -l squid*
squid3:
ls: cannot access squid3/cache.log: Permission denied
ls: cannot access squid3/access.log: Permission denied
total 0
-????????? ? ? ? ?            ? access.log
-????????? ? ? ? ?            ? cache.log

squid-deb-proxy:
ls: cannot access squid-deb-proxy/store.log: Permission denied
ls: cannot access squid-deb-proxy/cache.log: Permission denied
ls: cannot access squid-deb-proxy/access.log: Permission denied
total 0
-????????? ? ? ? ?            ? access.log
-????????? ? ? ? ?            ? cache.log
-????????? ? ? ? ?            ? store.log
Run Code Online (Sandbox Code Playgroud)

更改权限后,您会注意到到处都是问号。为什么会这样?我基本上想阅读访问日志以查看 squid-deb-proxy 服务器是否收到来自客户端的请求。

Fli*_*imm 51

要查看目录的权限,您需要将-d标志传递给ls,如下所示:

ls -ld squid3
Run Code Online (Sandbox Code Playgroud)

要读取文件,需要设置其读取权限。但是,要读取目录及其文件列表,需要设置读取和执行权限。如果不是,您会遇到像您遇到的那样的奇怪错误。

要递归设置文件的读取权限以及目录的读取和执行权限,请使用以下命令:

chmod -R a+rX directoryname
Run Code Online (Sandbox Code Playgroud)

这是对该命令的解释:

  • chmod 是命令的名称,用于更改文件的权限。
  • -R是递归标志。这意味着将此命令应用于目录及其所有子目录,以及其子目录的子目录,依此类推。
  • a 代表全部:将这些权限应用到文件的所有者、文件的组所有者和所有其他用户。
  • + 表示添加以下权限(如果尚未设置)。
  • r 表示读取权限。
  • X表示执行权限,但仅限于目录。小写x表示对文件和目录的执行权限。

命令联机帮助页中可以找到更多信息chmod联机帮助页图标.

  • @RegisteredUser:是的。644是`rw-r--r--`,适用于文件,不适用于目录。目录也需要设置执行权限,像这样:`rwxr-xr-x` 或 755。你提到的命令递归地取消设置所有文件和目录的执行权限,这会导致这些错误。 (6认同)
  • 使用`chmod -R 644 squid*`有什么问题吗 (3认同)