Answers:
您可能正在考虑的实用程序是namei
命令。根据手册页:
Namei将其参数用作任何类型的Unix文件(符号链接,文件,目录等)的路径名。然后,Namei跟随每个路径名,直到找到终点(文件,目录,char设备等)为止。如果找到符号链接,我们将显示该链接,然后开始跟随它,缩进输出以显示上下文。
可以按以下方式接收所需的输出:
$ 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软件包的一部分。有关更多详细信息,请参见 手册页。
namei -l $PWD/public_html/
从您当前的目录中,我们$ PWD获取直到您当前目录的权限列表。
我不知道任何命令,但是编写脚本非常容易:
#!/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
一个有趣的解决方案的递归bash函数如何:
[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#]
cd .. >/dev/null
我们这些人$CDPATH
设置一个集合(这会使cd在使用时输出当前目录,并且会干扰函数的输出。)
这很容易做成单线。这不是递归的,应该是在bash中相对快速的方法。在每个循环中调用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)
set -f
关闭glob。cd -P
遵循所有符号链接。
或者,考虑find
与tac
find /path -printf '%M %u %g %p\n' | tac