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

时间:2017-05-01 06:46:09

标签: linux nginx logging permissions ls

当我在命令行中写ls -la时,我得到了这个输出:

ls -la /var/log/nginx

d????????? ? ? ? ?            ? .
d????????? ? ? ? ?            ? ..
-????????? ? ? ? ?            ? access.log

此文件夹中的所有文件。

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

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

一切都好。

上述目录的权限:

drw-r--r--  2 nginx     adm        69632 Май  1 00:29 nginx    
drwxr-xr-x  2 root      root        4096 Апр 25 11:06 nginx_back

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

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

为什么?

1 个答案:

答案 0 :(得分:2)

此问题是权限问题。具体而言,它涉及目录上的执行位。

考虑以下示例

$ 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

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

$ 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

除非我们拥有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