Команда для вывода списка разрешений файла и всех папок от корня до пути к файлу

Команда для вывода списка разрешений файла и всех папок от корня до пути к файлу

Допустим, есть файл /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

Вы можете использовать nameiwith -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 и расширенные атрибуты, если они вам интересны.

Связанный контент