Я обновился с Эль-Капитана до Высокой Сьерры (бета-версия 9). На Эль-Капитане работает команда chmod -R -r <path to dir>
работает отлично (рекурсивно отменяет права на чтение). На High Sierra я получаю сообщение об ошибке, не связанной со смыслом chmod: <path to dir>: Permission denied
,
Обратите внимание, что аддитивные команды, такие как chmod -R +r <path to dir>
делать отлично работает на Высокой Сьерре.
Я проверил это на основном системном томе моего внутреннего диска MPB (файловая система APFS, поскольку установщик автоматически преобразует тома HFS + на твердотельные накопители) и на RAM-диске HFS +. Поведение было таким же.
Это достойно сообщения об ошибке в Apple? Я что-то пропустил?
1
Любая папка или конкретная? Я думаю SIP ...
—
Tetsujin
Возможно ли, что High Sierra сначала начнет вносить изменения в папку TOP? То есть, может быть, он на самом деле удалил права на чтение в верхней папке, и это препятствовало дальнейшему снижению chmod?
—
jimtut
Хм, после еще нескольких тестов я обнаружил, что проблема также существует с El Capitan. Я обращаюсь к обычной пустой папке, которую я создал, на которую у меня (по умолчанию) есть разрешения drwxr-xr-x (итого 755 по сути). Допустим, эта папка находится в
—
NameZero912
/tmp/somefolder
, затем chmod -R -r /tmp/somedir
всегда терпит неудачу (независимо от того, есть ли у него дочерние объекты или нет), в то время как sudo chmod -R -r /tmp/somedir
преуспевает. Зачем мне нужны sudo / admin-permissions для рекурсивного удаления прав на чтение из dir?!?
После еще нескольких экспериментов я могу сказать, что, хотя
—
NameZero912
chmod -R -r /tmp/somedir
не удается, права на чтение отменяются для /tmp/somedir
, но не для каких-либо подкаталогов (если они есть) - sudo
требуется действительно выполнить изменение разрешения рекурсивно. Это не имеет никакого смысла, и предполагает, что chmod реализован очень плохо (и это никогда не было обнаружено по какой-то причине ... это просто не может быть правдой!). Мне кажется, что chmod сначала применяет операцию к каталогу самого высокого уровня, а затем не может применить ее к подкаталогам (и даже терпит неудачу, если их нет).
find <path> -d -exec chmod -r {} ";"
это путь