Для данного файла, скажем, /var/some_dir_1/some_dir_2/some_dir_3/some_file , существует ли одна команда, в которой перечислены права доступа some_file и всех каталогов на его пути от root, то есть разрешения для var , some_dir_1 , some_dir_2 , some_dir_3?
2 ответа
Вы можете использовать namei с -l (long) по абсолютному пути:
namei -l /absolute/path/to/file
Это даст вам что-то вроде:
dr-xr-xr-x root  root   /
drwxr-xr-x root  root   absolute
drwx------ user1 group1 path
drwxr-xr-x user1 group1 to
-rw-r--r-- user1 group1 file
Вы должны предоставить полный путь. Если вы не хотите вводить его, вы можете использовать realpath или readlink .
namei -l $(readlink -m relative_path_to/file)
Следующий скрипт bash печатает все разрешения записи каталога, переданной в качестве аргумента, и всех ее родителей до /:
#!/usr/bin/env bash
[[ $# -eq 1 ]] || exit 1
FILEPATH="$1"
while true ; do
    ls -ld "$FILEPATH"
    [[ "$FILEPATH" != "/" ]] || exit
    FILEPATH="$( dirname "$FILEPATH" )"
done
Сохраните, например, parent_permissions.sh и запустите, используя /path/to/parent_permissions.sh /path/to/file .
Он работает только с абсолютными путями, если только он не объединен с readlink -f или сценарием abspath из этого ответа, и в этом случае вам нужно изменить начальное назначение FILEPATH на:
FILEPATH="$( abspath "$1" )"
В Linux это может работать (не проверено):
FILEPATH="$( readlink -f "$1" )"
Пример вывода:
drwxr-xr-x  66 danielbeck  staff  2244  2 Feb 12:38 /Users/danielbeck
drwxr-xr-x  11 root  admin  374  1 Feb 15:21 /Users
drwxrwxr-t  35 root  admin  1258 22 Jan 23:09 /
Добавьте аргументы в вызов ls или замените его, например, на getfacl , в зависимости от ситуации, в вашей системе, чтобы вывести ACL и расширенные атрибуты, если они вам интересны.
