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

11

Criei um diretório chamado foldere tirei a permissão de execução.

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

Agora se eu fizer

$ ls folder

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

$ ls -l folder

eu recebo

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

Por que é que?

Shnd
fonte
4
Verifique esta resposta. Tem respostas para sua pergunta.
Ramsh #
2
"Qual é a diferença entre 'ls' e 'ls -l' quando não tenho permissão de execução nesse diretório?" Basicamente, é o mesmo que a diferença entre 'ls' e 'ls -l' quando você não tem permissão de execução no diretório.
G-Man diz 'Reinstate Monica'

Respostas:

18

ls -lem uma pasta tenta statseu conteúdo, enquanto lsque 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 -le não com ls.

muru
fonte