Bem, como fazer isso é bastante fácil: ls
obtém sua lista de um syscall (ou, no Linux, da função libc) chamada readdir
. A mudança para um diretório é feita com um syscall separado, chdir
. stat
também é um syscall diferente, assim como a maioria das outras operações de arquivo.
Em suma, "o que há nesse diretório?" e "acessar este diretório" são solicitações completamente separadas do kernel - para que possam ser programadas para funcionar de maneira diferente.
Portanto, para criar um diretório que não apareça em ls -a
, basta o kernel omiti-lo dos resultados de readdir
. Mas ainda funciona com chdir
(etc.), porque é um syscall diferente.
Isto não é tão diferente de ter um diretório onde você tem +x
permission, mas não -r
: você pode acessar arquivos e diretórios dentro dele, cd
nele, etc ., mas ls
falhará. Acredito que outras coisas também usaram este arranjo - por exemplo (e isso é da memória fuzzy sem procurar) O AFS tinha uma espécie de namespace /afs
global onde você poderia se conectar a qualquer servidor AFS essencialmente por cd
'ing em seu nome; no entanto, um ls
on /afs
não mostraria todos os servidores do mundo. Eu vi sistemas de arquivos FUSE fazer semelhante (por exemplo, cd
para se conectar a um servidor FTP anônimo).
(Não tenho certeza se o acordo zfs está em conformidade com o POSIX).