Linux:ls -l仅打印问号:


11

我在使用ls -l列出某些目录时遇到问题:

$ ls -l ./directory
-????????? ? ? ? ?            ? file001.txt
-????????? ? ? ? ?            ? file002.txt

而ls效果很好:

$ ls ./directory
file001.txt file002.txt

怎么了?

Answers:


14

检查的权限./directory:如果您对此目录具有读取权限,但没有执行权限,则您具有足够的权限来读取该目录中的文件列表,但实际上无法使用这些文件或获取有关它们的信息。

会话示例:

$ cd /tmp/
$ mkdir /tmp/test
$ touch /tmp/test/file
$ ls -la test/
total 44
drwxr-xr-x  2 myself myself  4096 janv.  5 11:01 .
drwxrwxrwt 42 root   root   54242 janv.  5 11:01 ..
-rw-r--r--  1 myself myself     0 janv.  5 11:01 file
$ chmod a-x /tmp/test # remove execute permission for all
$ ls -la test/
total 0
d????????? ? ? ? ?            ? .
d????????? ? ? ? ?            ? ..
-????????? ? ? ? ?            ? file
$ ls -ld test/
drw-r--r-- 2 myself myself 4096 Jan  5 11:01 test/
$ cat test/file 
cat: test/file: Permission denied
$ chmod a+x /tmp/test # readd execute permission for all
$ ls -la test/
total 44
drwxr-xr-x  2 myself myself  4096 janv.  5 11:01 .
drwxrwxrwt 42 root   root   54242 janv.  5 11:01 ..
-rw-r--r--  1 myself myself     0 janv.  5 11:01 file
$ ls -ld test/
drwxr-xr-x 2 myself myself 4096 Jan  5 11:01 test/
$ cat test/file
$

某些ls版本无法显示文件信息时会显示错误消息。


但是ls怎么知道文件是否在test 目录内(请在d char中检查“。”和“ ..”)?
osgx

1
@osgx:这是文件列表的一部分,带有文件名和索引节点号。man readdir了解更多底层细节。请注意,此行为不是POSIX指定的。
BatchyX 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.