Pourquoi chmod 0000 nom-répertoire n'effacera-t-il pas les bits spéciaux du répertoire?

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---.

Je ne sais pas pourquoi chmod 0000 testn'effacera pas tous les bits d'autorisation. Qu'est-ce que je ne reçois pas ici? J'ai essayé de comparer avec une calculatrice , et ils ne correspondent pas. Le même comportement est vu sur le serveur dans lequel j'ai ssh'd, RHEL, et ma propre machine, Ubuntu. Je lis à ce sujet depuis un moment et je passe trop de temps à essayer de comprendre.

J'ai rencontré ce problème en essayant tous les symboles pour le premier octal, n'ayant jamais utilisé chmod avec 4 octales auparavant. Cela semble cependant effacer la partie collante.

Leonardo
la source

Réponses:

8

0000 était considéré comme ambigu, car il pouvait signifier simplement 000, plus un zéro de tête car il était octal.

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

0755 n'est pas explicite - il est ambigu avec les personnes qui utilisent explicitement printf% # 3o pour sortir une chaîne octale à 3 chiffres avec 0 en tête - je ne pense pas que nous puissions changer cela.

Ce fil de discussion coreutils commence par quelqu'un citant la page de manuel chmod notant cette limitation:

vous pouvez définir (mais pas effacer) les bits avec un mode numérique.

Nick Russo
la source