Sem o bit de execução, não é possível executar stat()
nos arquivos do diretório, o que significa que você não pode determinar as informações de inode desses arquivos. Para remover um arquivo, você deve saber as informações que seriam retornadas por stat()
.
Uma demonstração disso:
$ ls -ld test
drw------- 2 alienth alienth 4096 Sep 18 23:45 test
$ stat test/file
stat: cannot stat ‘test/file’: Permission denied
$ strace -e newfstatat rm test/file
newfstatat(AT_FDCWD, "test/file", 0x1a3f368, AT_SYMLINK_NOFOLLOW) = -1 EACCES (Permission denied)
newfstatat(AT_FDCWD, "test/file", 0x7fff13d4f4f0, AT_SYMLINK_NOFOLLOW) = -1 EACCES (Permission denied)
rm: cannot remove ‘test/file’: Permission denied
+++ exited with 1 +++
Você também pode demonstrar isso com um simples ls -l
. A informação de metadados do diretório pode ser legível e gravável para o seu usuário, mas sem executar você não pode determinar os detalhes do arquivo dentro do diretório.
$ ls -l test
ls: cannot access test/file: Permission denied
total 0
-????????? ? ? ? ? ? file