给定一个文件,比如说/var/some_dir_1/some_dir_2/some_dir_3/some_file
,是否有一条命令可以列出从根目录开始的其路径中所有目录的权限,即、、、some_file
的权限?var
some_dir_1
some_dir_2
some_dir_3
答案1
您可以在绝对路径上使用(long)namei
:-l
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
另存为 egparent_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 和扩展属性(如果您对它们感兴趣)。