Просмотр прав / владелец полного дерева каталогов

27

Я помню, что делал что-то вроде «XXX / home / user / dir / child / file», и он возвращал владельца и / или разрешение:

/home
/home/user
/home/user/dir
/home/user/child
/home/user/child/file

Но я не помню, что это была за команда. Есть идеи?

пожалуйста, удалите меня
источник
Не видя ничего поучительного от apropos modeили apropos permissionsна OS X и Debian. Знаете ли вы, какую платформу / дистрибутив вы использовали? Это могла быть локальная команда? Вы можете написать скрипт для такого инструмента, используя dirnameи stat.
mrb
Использование Arch Linux и довольно ванильная установка, поэтому не нужно устанавливать слишком много дополнительных инструментов. Обратите внимание, что это были владельцы И / ИЛИ разрешения, я не уверен в этом. Либо было бы полезно.
пожалуйста, удалите меня

Ответы:

31

Команда могла бы быть:

namei -m /home/user/dir/child/file
user59736
источник
6
namei -moздорово, что это также дает вам владельца.
earthmeLon
2
ВНИМАНИЕ: namei не будет отображать ACL для Linux или SELinux для MAC. Я выяснил, что ACL блокирует nginx, проверяя вручнуюsudo su nginx -s/bin/bash
Рэй Фосс
28

Я думаю, что вы можете думать о treeкоманде. Например:

$ tree -pufid apps/glassfish3/ | less
apps/glassfish3
[drwxr-xr-x saml    ]  apps/glassfish3/bin
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/bin
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/config
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/docs
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/docs/api
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/docs/api/doc-files
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/docs/api/javax
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/docs/api/javax/annotation
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/docs/api/javax/annotation/security
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/docs/api/javax/annotation/sql
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/docs/api/javax/decorator
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/docs/api/javax/ejb
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/docs/api/javax/ejb/embeddable
...
...

Вышеуказанные переключатели делают следующее:

  • -p - разрешения
  • -u - имя пользователя / идентификатор пользователя
  • -f - полный путь
  • -i - не печатать отступы
  • -d - только каталоги печати

Ссылки

SLM
источник
3
Я думаю, что попросили показать предков /home/user/dir/child/fileне детей.
Рафаэль Аренс
@RaphaelAhrens - да, я понимаю, что нет команды, о которой я знаю, которая делает именно это, однако есть команда дерева, которая делает то, что я показал, и она подозрительно похожа на то, о чем думал ОП.
SLM
Это -uдействительно необходимо? Кажется, это по умолчанию здесь (Tree вер. 1.6.0 под GNU Bash 4.2.45). Есть ли возможность отключить "username / userid"?
Никос Александрис
1
@NikosAlexandris - если я опущу этот переключатель, я не получу имя пользователя. Мой вер: дерево v1.6.0. Я нахожусь на Fedora 19, GNU bash, версия 4.2.45 (1) -релиз (x86_64-redhat-linux-gnu).
SLM
Различные "значения по умолчанию" между версиями Bash? Спасибо за информирование.
Никос Александрис
3

Подумав, я придумал это

#!/bin/sh
l_path=$1
while [ "$l_path" != / -a "$l_path" != . ]; do
     ls -ld $l_path
     l_path=$(dirname -- "$l_path")
done

Вывод выглядит так

-rw------- 1 tant tant 181016423 Jun 25 23:49:17 2013 /home/tant/test_file
drwxr-xr-x 85 tant tant 5632 Jul  9 19:40:11 2013 /home/tant
lrwxr-xr-x 1 root wheel 8 Sep  4 23:53:27 2012 /home -> usr/home

Я надеюсь, что это нормально, что это в обратном порядке.

Основываясь на комментариях, вот способ перечислить от корня вниз:

#!/bin/sh
l_path=$1
while [ "$l_path" != / -a "$l_path" != . ]; do
     ls -ld $l_path
     l_path=$(dirname -- "$l_path")
done | sed '1!G;h;$!d'
Рафаэль Аренс
источник
1
Вы можете изменить, | tacесли у вас есть, или | sed '1!G;h;$!d'если нет.
mrb
2
Это сломается для относительных путей. Делай [ "$l_path" != / -a "$l_path" != . ]вместо этого.
@Evan Teitelman dirname должен указывать полный путь
Рафаэль Аренс
1
@RaphaelAhrens нет, в конце он вернет точку для относительного пути.
Раш
1
Кроме того, stat -lвероятно , должно быть statили ls -ld.
0

В каталоге, в котором вы хотите знать разрешения и владельцев предка:

for i in $(seq 0 $(pwd | tr -cd / | wc -c)) ; do pwd ; ls -lad ; cd .. ; done

Обратите внимание, что после этого вы будете в /:), если вы хотите вернуться туда, где вы были, оберните команду внутри

HERE=$(pwd)
...
cd ${HERE}
yPhil
источник
-1

Командой, в которой вы ищете список разрешений и владельцев / групп, является ls -l .

-l опция используется для длинного формата листинга.

ls -l / path / to / list

Кроме того, если вы хотите получить список и скрытые файлы, добавьте опцию -a (все) .

ls -al / path / to / list

Также, если вы хотите перечислить разрешения в ваших подкаталогах, используйте опцию -R (рекурсивный) .

ls -Rl / path / to / list

В первом столбце отображаются разрешения (чтение (r), запись (w), выполнение (x)) и некоторые специальные разрешения (каталоги (d), - (обычный файл)), а в 3-м и 4-м столбцах показан файл / каталог. владелец и группа соответственно.

dastergon
источник
2
Я не думаю, что об этом просят. Похоже, что спрашивающий ищет список разрешений каталогов, которые ведут к файлу.
Мат