Por que o chmod 0000 directory-name não limpa os bits especiais no diretório?

8
$ mkdir test 
$ chmod 0000 test 
$ ls -la | grep test | awk '{print $1}'
d---------.
$ chmod 6000 test
$ ls -la | grep test | awk '{print $1}'
d--S--S---.
$ chmod 0000 test
$ ls -la | grep test | awk '{print $1}'
d--S--S---.

Não sei por chmod 0000 testque não limpará todos os bits de permissão. O que não estou chegando aqui? Eu tentei comparar com uma calculadora , e eles não correspondem. O mesmo comportamento é visto no servidor em que eu fiz o SSH, RHEL, e minha própria máquina, Ubuntu. Eu tenho lido sobre isso por um tempo e gasto muito tempo tentando entender.

Encontrei este problema ao tentar todos os símbolos do primeiro octal, nunca tendo usado o chmod com 4 octais antes. Parece esclarecer a parte complicada, no entanto.

Leonardo
fonte

Respostas:

8

0000 foi considerado ambíguo, pois pode significar apenas 000, mais um zero inicial, uma vez que é octal.

http://lists.gnu.org/archive/html/bug-coreutils/2011-03/msg00162.html

0755 não é explícito - é ambíguo as pessoas que estão usando explicitamente printf% # 3o para gerar uma cadeia octal de 3 dígitos com o 0 inicial - acho que não podemos mudar isso.

Esse tópico de discussão do coreutils começa com alguém citando a página de manual do chmod, observando esta limitação:

você pode definir (mas não limpar) os bits com um modo numérico.

Nick Russo
fonte