查看权限/完整目录树的所有者


27

我记得做过类似“ XXX / home / user / dir / child / file”的操作,它返回了所有者和/或权限:

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

但是我不记得这个命令是什么。有人知道吗?


在OS X和Debian上apropos modeapropos permissions在OS X和Debian上看不到任何启发性的东西。您知道您使用的平台/发行版吗?可能是站点本地命令吗?您可以使用dirname和编写此类工具的脚本stat
mrb

使用Arch Linux,并进行了漂亮的原始安装,因此没有安装太多额外的工具。请注意,这是所有者的AND / OR权限,目前尚不确定。两者都会有用。
请删除我

Answers:


31

该命令可能是:

namei -m /home/user/dir/child/file

6
namei -mo很好,它也可以给您所有者。
EarthmeLon

2
注意:namei不会显示linux ACL或SELinux MAC。我发现ACL通过与sudo su nginx -s/bin/bash
Ray Foss

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 -仅打印目录

参考文献


3
我认为这是要显示/home/user/dir/child/file不是孩子的祖先。
拉斐尔·阿伦斯

@RaphaelAhrens-是的,我知道但是没有一个我知道的命令确实可以做到这一点,但是有一个树命令可以执行我所显示的内容,并且可疑地类似于OP的想法。
slm

-u真的有必要吗?似乎这是默认设置(GNU bash 4.2.45下的Tree版本1.6.0)。是否可以使“用户名/用户名”静音?
Nikos Alexandris

1
@NikosAlexandris-如果我放弃该开关,则不会获得用户名。我的版本:tree v1.6.0。我正在使用Fedora 19,GNU bash,版本4.2.45(1)-发行版(x86_64-redhat-linux-gnu)。
slm

bash版本之间有不同的“默认值”吗?感谢您的通知。
Nikos Alexandris

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应该给出完整的路径
Raphael Ahrens

1
@RaphaelAhrens否,最后它会为相对路径返回一个点。
2013年

1
另外,stat -l可能应该是statls -ld

0

在要了解其祖先的权限和所有者的目录中:

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

请注意,在那之后,您将进入/:)如果您想回到原来的位置,请将命令包装在里面

HERE=$(pwd)
...
cd ${HERE}

-1

您正在寻找列出权限和所有者/组的命令是ls -l

-l选项用于长列表格式。

ls -l / path / to / list

另外,如果要列出隐藏文件,则添加-a(all)选项。

ls -al / path / to / list

另外,如果要在子目录中列出权限,请使用-R(递归)选项。

ls -Rl / path / to / list

第一列显示权限(读(r),写(w),执行(x))和一些特殊权限(目录(d),-(常规文件)),第三和第四列显示文件/目录所有者和组。


2
我不认为这是要的。看起来像问问者正在寻找导致文件的目录的权限列表。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.