完全なディレクトリツリーの表示権限/所有者


27

「XXX / home / user / dir / child / file」のような操作を行ったことを覚えていますが、次の所有者や許可が返されました。

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

しかし、このコマンドが何であったかは覚えていません。誰でもいいの?


OS XとDebian から、apropos modeまたはapropos permissionsOS XとDebianで啓発的なものは見られません。使用しているプラ​​ットフォーム/ディストリビューションを知っていますか?それはサイトローカルコマンドだったのでしょうか?dirnameとを使用して、このようなツールのスクリプトを作成できますstat
Mrb

Arch Linuxを使用し、かなりバニラをインストールしているため、余分なツールはあまりインストールされていません。所有者および/または許可であったことに注意してください、私はこの時点ではわかりません。どちらも便利です。
私を削除してください

回答:


31

コマンドは次のようになります。

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

6
namei -moそれはあなたに所有者を与えることも素晴らしいことです。
earthmeLon

2
注意:nameiはLinux ACLまたはSELinux MACを表示しません。ACLが手動でチェックすることによってnginxをブロックしていることがわかりました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 -ユーザー名/ユーザーID
  • -f - フルパス
  • -i -インデント行を印刷しません
  • -d -ディレクトリのみを印刷

参照資料


3
/home/user/dir/child/file子供ではなく先祖を表示するように頼まれたと思います。
ラファエルアーレンス

@RaphaelAhrens-はい
slm

ある-u本当に必要?ここではデフォルトのようです(GNU bash 4.2.45のツリーバージョン1.6.0)。「ユーザー名/ユーザーID」を黙らせるオプションはありますか?
ニコスアレクサン

1
@NikosAlexandris-そのスイッチをドロップしても、ユーザー名は取得されません。私のバージョン:ツリーv1.6.0。私はFedora 19、GNU bash、バージョン4.2.45(1)-release(x86_64-redhat-linux-gnu)を使用しています。
slm

bashバージョン間で異なる「デフォルト」?お知らせいただきありがとうございます。
ニコスアレクサン

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は完全なパスを与える必要があります
ラファエルアーレンス

1
@RaphaelAhrensいいえ、最後に相対パスのドットを返します。
ラッシュ、

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

最初の列にはパーミッション(read(r)、write(w)、execute(x))およびいくつかの特別なパーミッション(directories(d)、-(regular file))が表示され、3番目と4番目の列にはファイル/ディレクトリが表示されますそれぞれ所有者とグループ。


2
私はそれが求められているとは思わない。askerはファイルにつながるディレクトリのパーミッションのリストを探しているようです。
マット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.