Linux: ls -l imprime apenas pontos de interrogação:

11

Estou com um problema com a listagem de algum diretório com ls -l:

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

e apenas ls funciona bem:

$ ls ./directory
file001.txt file002.txt

O que está errado?

osgx
fonte

Respostas:

14

Verifique as permissões de ./directory: se você possui permissões de leitura, mas não executa permissões neste diretório, possui direitos suficientes para ler a lista de arquivos nesse diretório, mas não pode realmente usá-los ou obter informações sobre eles.

sessão de exemplo:

$ 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
$

Algumas lsversões mostram mensagens de erro quando não conseguem exibir informações sobre arquivos.

BatchyX
fonte
Mas como é possível saber, o arquivo está dentro do test diretório ou não (verifique d char para '.' E '..')?
Osgx
1
@osgx: faz parte da lista de arquivos, com o nome do arquivo e o número do inode. man readdirpara obter mais detalhes de baixo nível. Observe que esse comportamento não é especificado pelo POSIX.
BatchyX