Qual é a diferença entre 'ls' e 'ls -l' quando não tenho permissão de execução nesse diretório?

11

Eu criei um diretório chamado folder e tirei a permissão de execução.

$ mkdir folder
$ touch folder/innerFile
$ mkdir folder/innerFolder
$ chmod -x folder

Agora, se eu fizer

$ ls folder

gera uma lista de arquivos, mas quando eu faço

$ ls -l folder

Eu obtenho

ls: innerFile: Permission denied
ls: innerFolder: Permission denied

Por que isso?

    
por Shnd 03.11.2014 / 01:54

1 resposta

18

ls -l em uma pasta tenta stat seu conteúdo , enquanto ls não:

$ strace ls folder -l
...
lstat("folder/innerFolder", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
getxattr("folder/innerFolder", "system.posix_acl_access", 0x0, 0) = -1 ENODATA (No data available)
getxattr("folder/innerFolder", "system.posix_acl_default", 0x0, 0) = -1 ENODATA (No data available)
lstat("folder/innerFile", {st_mode=S_IFDIR|0755, st_size=40, ...}) = 0
getxattr("folder/innerFile", "system.posix_acl_access", 0x0, 0) = -1 ENODATA (No data available)
getxattr("folder/innerFile", "system.posix_acl_default", 0x0, 0) = -1 ENODATA (No data available)
...

É por isso que você recebe uma "permissão negada" com ls -l e não com ls .

    
por 03.11.2014 / 02:32