Это может быть сделано путем сравнения номеров устройств.
В сценарии оболочки на Linux это может быть сделано со статистикой:
stat -c "%d" /path # returns the decimal device number
В Python:
os.lstat('/path...').st_dev
или
os.stat('/path...').st_dev
setfacl
имеет рекурсивную опцию (-R
) точно так же, как chmod
:
-R, --recursive Apply operations to all files and directories recursively. This option cannot be mixed with `--restore'.
это также допускает использование капитала-x X
разрешение, что означает:
execute only if the file is a directory or already has execute permission for some user (X)
так выполнение следующего должно работать:
setfacl -R -m u:colleague:rwX .
(все кавычки от man setfacl
для acl-2.2.52, как поставлено с Debian)
Как упоминалось umldute, команда setfacl -R
с заглавным "X" - это путь, как:
setfacl -R -m u:colleague:rwX .
Однако, для тех, кому нужно повторно применить ACL рекрутно (т.е. как "повторно применить разрешения на подкаталоги" в ля Windows).
find . -mindepth 1 | xargs -n 50 setfacl -b --set-file=<(getfacl . | sed -e 's/x$/X/')
Эта команда может быть разделена, чтобы избежать ошибки типа setfacl: foobar: Только каталоги могут иметь ACL по умолчанию
.
find . -mindepth 1 -type d| xargs -n 50 setfacl -b --set-file=<(getfacl . | sed -e 's/x$/X/')
find . -mindepth 1 -type f| xargs -n 50 setfacl -b --set-file=<(getfacl . | grep -v '^default:' | sed -e 's/x$/X/')
Обратите внимание, что синтаксис <( что-то )
- это Замена процесса, которая специфична для bash. Вам может понадобиться создать временный файл, если вы используете другую оболочку.
for i in $(find /data -mindepth 0 -type d)
do setfacl -m u:zabbix:r-x $i
echo "ACL rules set for "$i
done
Всегда, если вы хотите дать рекурсивное разрешение только на чтение каталога, всегда используйте r-x
.
Использовать данный CMD:setfacl -Rm u:user_name:permission /location/abc/xyz
Пример с объяснением:setfacl -Rm u:admin12:r-x /appl/work/load/
Here `setfacl` : used to set permission.
-Rm : R for recursive and m for modify those old permission on given path.
u : User which u want to add with given permission.
admin12 : its an user, same user wants permission for a given location.
/appl/work/load : Set a location where you want to give permission.
-X
не работает как ожидалось во включенном вsetfacl 2.2.49
. – phyatt 10.04.2018, 19:45