Это зависит от Вашего определения быстро. Ответы уже здесь дают хорошее решение для того, чтобы на самом деле удалить каталоги из файловой системы, но если то, в чем Вы действительно нуждаетесь, должно освободить имя каталога максимально быстро, переименовывание в той же файловой системе мгновенно:
{ mv directory directory.gone && rm -rf directory.gone; } &
Технически это обманывает, так как я не ускорил фактическое удаление, но практически это очень полезно: Я использую этот прием все время, таким образом, я не должен ожидать медленных операций удаления.
действующих
разрешений формируются с помощью ANDing действительных (реальных?) разрешений с маской
. Так как маска
вашего файла имеет значение rw-
, все действующие разрешения с маской
имеют выключенный бит x
.
Короткий ответ: если вы хотите замаскировать с включенным битом выполнения, вы должны явно установить его с помощью setfacl
после touch
. Безопасность запрещает его неявную настройку.
setfacl -n -m m::rwx foo
"-n" для подавления пересчета маски (может не понадобиться).
"m::rwx" устанавливает значение маски равным "rwx". Обратите внимание, что "m::x" отключит все операции чтения и записи.
Я не могу показать, почему маска "rw-". Я предполагаю, что каталог по умолчанию, в котором touch
создает файл, остается неизменным для всего примера OP.
В записи каталога для 'foo' должен отображаться владелец 'root' (из-за команды sudo и группы 'guards', потому что для каталога установлен бит SUID. Разрешения будут по умолчанию '-rw-...r- -' с групповыми разрешениями каталога '-...rx...' (из-за того, что бит SUID отображается как маленькая буква s).
Затем идут ACL, которые должны быть каталогом по умолчанию. Учитывая, что ACL наследуют , я не ожидаю, что будут созданы какие-либо ACLe, а маска ACLE будет использоваться по умолчанию для каталога, 'rwx'.
Но если они будут созданы, я ожидаю, что новые ACLe будут подготовлены по умолчанию, снова оставив маска в 'rwx'. Если они не загрунтованы от значений по умолчанию, это, казалось бы, противоречит идее ACL по умолчанию - ACL "по умолчанию" будет предоставлять только ACL именованных пользователей и именованных групп.
Это теперь умоляет Вопрос о том, какой должна быть маска ACLe. Я ожидаю, что это будет «rwx» из записи маски по умолчанию. Но она может быть создана с пустой маской, и тогда применяются всевозможные юридические аспекты.
setfacl
, предполагая, что те же правила применяются к созданию файлов. Существует пункт:
Если ACL содержит записи именованных пользователей или именованных групп, а записи маски не существует, создается запись маски, содержащая те же разрешения, что и запись группы.
Это установит маску ACL на «r-x», если запись группы ACL была создана из записи каталога файлов, или «r-x», если запись группы ACL поступила из ACL по умолчанию. (В любом случае, в этом случае результат тот же.)
Также есть пункт:
Если список ACL по умолчанию содержит именованные записи пользователей или именованных групп, а запись маски не существует, запись маски, содержащая добавляются те же разрешения, что и для записи группы ACL по умолчанию. ... разрешения записи маски дополнительно настраиваются, чтобы включить объединение всех разрешений, затронутых записью маски.
Если применяется это правило, маска будет начинаться как «r-x» (та же логика), что и в предыдущем предложении), а затем будет изменена на «объединение всех разрешений, затронутых записью маски».
«Разрешения, на которые влияет ввод маски», не определены в документации по команде setfacl
. В документации POSIX ACL говорится:
Маска представляет собой комбинацию всех прав доступа группы-владельца и всех записей пользователей и групп.
Укажите слово «союз», которое является аддитивным, я бы прочитал «сочетание» как логическое ИЛИ.Другими словами, если какая-либо группа или пользователь ACLe имеет разрешение «x», маска будет содержать «x».
Приведенное выше рассуждение должно быть ошибочным, так как x для выполнения не появляется в маске.
Следовательно, должно существовать какое-то правило о том, как вычисляется маска, которое было «скрыто» от общих источников документации (или мы нашли ошибку).
Мой вывод состоит в том, что 'x' всегда безоговорочно удаляется, а документация слабая.
Это изменение, вероятно, было сделано по соображениям «безопасности» — ни один файл не должен быть неявно исполняемым, но должен иметь включенный исполняемый бит после его создания.