Ubuntu中命令“ls -la”输出中的问号

use*_*247 6 linux permissions logging ls nginx

当我写ls -lao 命令行时,我得到这个输出:

ls -la /var/log/nginx

d????????? ? ? ? ?            ? .
d????????? ? ? ? ?            ? ..
-????????? ? ? ? ?            ? access.log
Run Code Online (Sandbox Code Playgroud)

对于此文件夹中的所有文件。

当我为另一个文件夹执行此操作时:

ls -la /var/log/nginx_back/

drwxr-xr-x  2 root root       4096 ??? 25 11:06 .
drwxrwxr-x 15 root ssh        4096 ???  1 00:29 ..    
-rw-r--r--  1 root root  220793880 ??? 25 11:04 access.log-20170401.gz
Run Code Online (Sandbox Code Playgroud)

一切都好。

对上述目录的权限:

drw-r--r--  2 nginx     adm        69632 ???  1 00:29 nginx    
drwxr-xr-x  2 root      root        4096 ??? 25 11:06 nginx_back
Run Code Online (Sandbox Code Playgroud)

只有当我不是 root 时,我才会有这些问号。

我已将我的用户添加到组中nginx,添加了所有权限,创建了另一个用户,但系统不想为目录中的非超级用户显示文件的属性/var/log/nginx

这是为什么?

Zer*_*odf 6

这个问题是权限问题。具体来说,它与目录上的执行位有关。

考虑下面的例子

$ mkdir -p remove_execute/remove_execute_test     
$ touch remove_execute/remove_execute_test/test_file.txt 
$ ls -la remove_execute/remove_execute_test/ 
total 8 
drwxrwxr-x 2 zerodf zerodf 4096 Nov 21 10:51 . 
drwxrwxr-x 3 zerodf zerodf 4096 Nov 21 10:51 ..
-rw-rw-r-- 1 zerodf zerodf    0 Nov 21 10:51 test_file.txt
Run Code Online (Sandbox Code Playgroud)

现在,如果我们删除目录的执行权限,我们将无法获取统计信息。

$ sudo chmod a-x remove_execute/remove_execute_test/ 
$ ls -la remove_execute/remove_execute_test/ 
ls: cannot access remove_execute/remove_execute_test/..: Permission denied 
ls: cannot access remove_execute/remove_execute_test/test_file.txt: Permission denied 
ls: cannot access remove_execute/remove_execute_test/.: Permission         denied 
total 0 
d????????? ? ? ? ?            ? . 
d????????? ? ? ? ?            ? ..
-????????? ? ? ? ?            ? test_file.txt
Run Code Online (Sandbox Code Playgroud)

除非我们有root权限。

$ sudo ls -la remove_execute/remove_execute_test/
total 8
drw-rw-r-- 2 zerodf zerodf 4096 Nov 21 10:51 .
drwxrwxr-x 3 zerodf zerodf 4096 Nov 21 10:51 ..
-rw-rw-r-- 1 zerodf zerodf    0 Nov 21 10:51 test_file.txt
Run Code Online (Sandbox Code Playgroud)