Допустим, есть файл /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
?
решение1
Вы можете использовать namei
with -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)
решение2
Следующий bash
скрипт выводит все разрешения записи каталога, переданной в качестве аргумента, и всех ее родительских элементов вплоть до /
:
#!/usr/bin/env bash
[[ $# -eq 1 ]] || exit 1
FILEPATH="$1"
while true ; do
ls -ld "$FILEPATH"
[[ "$FILEPATH" != "/" ]] || exit
FILEPATH="$( dirname "$FILEPATH" )"
done
Сохраните как eg 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 и расширенные атрибуты, если они вам интересны.