有没有办法查看路径中所有中间目录的权限..?

有没有办法查看路径中所有中间目录的权限..?

我有一个文件路径..是否有任何单个命令可以查看路径中所有中间目录的文件/目录权限..?

答案1

Linux 附带了namei命令主要用于显示路径中的符号链接,但也可以显示所有权。

$ namei -nom ~   
f: /home/gilles
 drwxr-xr-x root   root   /
 drwxr-sr-x root   staff  home
 drwxr-xr-x gilles gilles gilles

否则,这是一种迭代包含给定文件的连续目录(不是唯一的目录,如本页其他答案所示)并列出其内容的方法。

d=$PWD; set /;
while [ -n "$d" ]; do set -- "$@" "$d/"; d=${d%/*}; done;
ls -ld "$@"

请注意,如果存在符号链接,此列表可能会有点误导。例如,如果/foo/bar是一个符号链接,/hello/world它本身就是 的符号链接/one/two,并且所有/foo/hello/world都是世界可读的(例如模式 755),但/hello用户 Alice 无法读取,那么 Alice 将无法访问/foo/bar,但上面的列表将仅显示世界可读的目录。

答案2

这是两个单线。ls每个路径组件一次调用:

$ (IFS=/; set -f -- $PWD; for arg; do path="${path%/}/$arg"; ls -dal "$path"; done)

输出:

# drwxr-xr-x  31 root  admin  1122  4 Nov 22:08 /
# drwxr-xr-x  9 root  admin  306  3 Nov 17:36 /Users
# drwxr-xr-x+ 67 janmoesen  staff  2278  7 Nov 14:46 /Users/janmoesen
# drwxr-xr-x+ 53 janmoesen  staff  1802  4 Nov 22:07 /Users/janmoesen/Sites
# drwxr-xr-x  28 janmoesen  staff  952  7 Nov 15:01 /Users/janmoesen/Sites/example.com

ls只需对所有路径进行一次调用:

$ (IFS=/; set -f -- $PWD; for arg; do path="${path%/}/$arg"; paths+=("$path"); done; ls -dal "${paths[@]}")

输出:

# drwxr-xr-x  31 root       admin  1122  4 Nov 22:08 /
# drwxr-xr-x   9 root       admin   306  3 Nov 17:36 /Users
# drwxr-xr-x+ 67 janmoesen  staff  2278  7 Nov 14:46 /Users/janmoesen
# drwxr-xr-x+ 53 janmoesen  staff  1802  4 Nov 22:07 /Users/janmoesen/Sites
# drwxr-xr-x  28 janmoesen  staff   952  7 Nov 15:01 /Users/janmoesen/Sites/example.com

答案3

#!/bin/bash

(( $# )) || set -- "$PWD"

IFS='/'
for _arg; do
    if ! [[ -e "${_arg}" ]]; then
        printf '%s\n' "${_arg} does not exist!"
        exit 1
    fi

    read -ra _dirs <<< "${_arg}"
    (( _length = ${#_dirs[@]} + 1 ))
    for (( _offset = 2 ; _offset < _length ; _offset++ )); do
        _current_dir="${_dirs[*]::_offset}"
        _perms=$(ls -ld "${_current_dir}" | awk '{ print $1" "$3" "$4 }')
        printf '%s %s\n' "${_perms}" "${_current_dir}"
    done
done

答案4

没那么复杂,但我想这会对你有所帮助。

find . -type d -exec ls -lrt {} \;

相关内容