Почему chmod 0000 directory-name не очищает специальные биты в каталоге?

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

Я не уверен, почему chmod 0000 testне очистит все биты разрешения. Что я не получаю здесь? Я пытался сравнить с калькулятором , и они не совпадают. Такое же поведение наблюдается на сервере, на котором у меня есть ssh'd, RHEL, и на моей собственной машине, Ubuntu. Я читал об этом некоторое время и тратил слишком много времени, пытаясь понять.

Я столкнулся с этой проблемой, когда пробовал все символы для первого восьмеричного числа, никогда раньше не использовал chmod с четырьмя восьмеричными числами. Тем не менее, похоже, что он проясняет проблему.

Leonardo
источник

Ответы:

8

0000 считалось неоднозначным, поскольку оно могло означать просто 000 плюс начальный ноль, поскольку оно восьмерично.

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

0755 не является явным - это неоднозначно с людьми, которые явно используют printf% # 3o для вывода 3-значной восьмеричной строки с начальным 0 - я не думаю, что мы можем изменить это.

Эта ветка обсуждения coreutils начинается с того, что кто-то цитирует справочную страницу chmod, отмечая это ограничение:

Вы можете установить (но не очистить) биты в числовом режиме.

Ник Руссо
источник