Как я рекурсивно проверяю полномочия наоборот?

Если Вы рассматриваете файл как ряд строк, и файлы отсортированы, существует comm.

Если Вы рассматриваете файл как (много) набор строк, и строки не отсортированы, grep может сделать различие и пересечение (оно достигает разности множеств и пересечения, но не уважает счет для мультимножеств). Объединение справедливо cat.

grep -xF -f small large >intersection
grep -vxF -f small large >difference
cat small large >union

25
15.01.2011, 13:14
6 ответов

Утилита, о которой можно думать, namei команда. Согласно странице руководства:

Namei использует свои аргументы в качестве путей к любому типу файла Unix (символьные ссылки, файлы, каталоги, и т.д). Namei затем следует за каждым путем, пока терминальная точка не найдена (файл, каталог, символьное устройство, и т.д.). Если это находит символьную ссылку, мы показываем ссылку и запускаемся следующий за нею, располагая вывод с отступом для показа контекста.

Вывод, которого Вы требуете, может быть получен следующим образом:

$ namei -l /usr/src/linux-headers-2.6.35-22/include/
f: /usr/src/linux-headers-2.6.35-22/include/
drwxr-xr-x root root /
drwxr-xr-x root root usr
drwxrwsr-x root src  src
drwxr-xr-x root root linux-headers-2.6.35-22
drwxr-xr-x root root include

namei команда является частью linux-util-ng пакета программного обеспечения. Дополнительную информацию см. в странице руководства.

28
27.01.2020, 19:40
  • 1
    , которым это могло бы быть, кажется, что это только делает это для символьных ссылок, хотя я не помню то, что я использовал и было ли это на символьной ссылке. –  xenoterracide 16.01.2011, 06:16
  • 2
    В то время как я видел более старые страницы руководства, которые только упомянули символьные ссылки, и как мой пример и как шоу страницы справочника, это слова для всех типов файлов и каталогов. –  Steven D 16.01.2011, 11:00
  • 3
    не для меня :( это долго, дает длинный список как этот, для меня, с символьными ссылками. –  xenoterracide 20.01.2011, 16:43
  • 4
    , какую версию Вы используете? Я использую 2,18 –  xenoterracide 20.01.2011, 16:44
  • 5
    другой полезный способ использовать namei для тех, кто ленив. namei -l $PWD/public_html/ От Вашего текущего dir нас $PWD для получения списка перманента до текущего dir –  nelaaro 22.02.2015, 15:27

Я не знаю ни о каких командах, но довольно легко записать сценарий:

#!/bin/bash    
ARG=$1
while [[ "$ARG" != "." && "$ARG" != "/" ]]
do
        ls -ld -- "$ARG"
        ARG=`dirname -- "$ARG"`      
done

Пример:

$ perms.sh /tmp/1/2/3/hello.txt

-rw-rw-r--    1 user    group          0 Jan 14 16:59 /tmp/1/2/3/hello.txt
drwxrwxr-x    2 user    group       4096 Jan 14 16:59 /tmp/1/2/3
drwxrwxr-x    3 user    group       4096 Jan 14 16:43 /tmp/1/2
drwxrwxr-x    3 user    group       4096 Jan 14 16:43 /tmp/1
drwxrwxrwt   12 root     root       4096 Jan 14 17:02 /tmp
7
27.01.2020, 19:40

Как насчет рекурсивного удара функционируют для забавного решения:

[bash#] function uptree { ( \ls -ld -- "$PWD"; [ "$PWD" = '/' ] && return; cd ..; uptree ) | column -t ; } 

[bash#] pwd
/home/frielp/bin/dev

[bash#] uptree
drwxrwxr-x.  2   frielp  frielp  4096  Dec  14  14:50  /home/frielp/bin/dev
drwxr-xr-x.  15  frielp  frielp  4096  Aug  23  10:48  /home/frielp/bin
drwxr-xr-x.  60  frielp  frielp  4096  Jan  14  16:48  /home/frielp
drwxr-xr-x.  4   root    root    4096  Dec  1   09:14  /home
dr-xr-xr-x.  23  root    root    4096  Jan  14  08:18  /

[bash#] pwd
/home/frielp/bin/dev
[bash#] 
2
27.01.2020, 19:40
  • 1
    , Это - мой фаворит, потому что это не требует никаких зависимостей. Мог бы хотеть сделать его cd .. >/dev/null хотя для тех из нас с a $CDPATH набор (который заставляет CD производить текущий dir, когда он используется и это вмешивается в вывод от Вашей функции.) –  beporter 04.06.2014, 20:03

Это могло легко быть сделано остротой. Это не рекурсивно и должно быть относительно быстрым способом сделать это в ударе. Вызов pwd в каждом цикле не особенно быстр, поэтому избегайте, если Вы можете.

#!/bin/bash
if [ -n "$1" ]; then
    echo "Usage: $0 [FILE]"
    exit 1
fi
cd -P -- "$1"
IFS="/"
set -f # turn off globbing for the expansion of $PWD below
for dir in $PWD; do
    stat -c "$PWD %A" .
    cd ..
done

Альтернатива, острота для текущего каталога.

(IFS="/"; set -f; for dir in $PWD; do stat -c "$PWD %A" .; cd ..; done)
1
27.01.2020, 19:40
  • 1
    Это - острота? Я пропускал что-то? –  phunehehe 15.01.2011, 07:26
  • 2
    Как острота для pwd: $ pushd (pwd)>/dev/null; $IFS OIFS=; IFS = "/"; для dir в $ (pwd); сделайте статистику-c "$ (pwd) %A".; CD..;готово; $OIFS IFS=; popd>/dev/null –  ewindisch 15.01.2011, 07:33
  • 3
    Ваш сценарий не будет работать с именами файлов, содержащими пробелы или globbing символы. –  Gilles 'SO- stop being evil' 15.01.2011, 18:32
  • 4
    Gilles, я предполагаю нет. Это имело первоначально, но я испачкал его в редактировании. Я удалил xargs, и он должен работать правильно снова. –  ewindisch 16.01.2011, 02:54
  • 5
    Почему использование pushd и popd? Или оценка, в этом отношении? Можно использовать подоболочку (круглые скобки) для хранения всех изменений локальными. Вам нужны двойные кавычки для защиты имен каталогов с пробелами, и set -f выключить globbing. cd -P следует за всеми символьными ссылками. –  Gilles 'SO- stop being evil' 16.01.2011, 03:19

Я думаю команда Вы, где поиск:

namei -l `pwd`

который при выполнении в/tmp/foo/bar дает Вам список как:

drwxr-xr-x root   root   /
drwxrwxrwt root   root   tmp
drwxr-xr-x user   group  foo
drwxr-xr-x user   group  bar
2
27.01.2020, 19:40

, в качестве альтернативы рассмотрите возможность использования find с tac

find /path -printf '%M %u %g %p\n' | tac
1
27.01.2020, 19:40

Теги

Похожие вопросы