ユーザーがシェルでディレクトリを検索し、エコーする権限を持つすべてのディレクトリを見つけます。

ユーザーがシェルでディレクトリを検索し、エコーする権限を持つすべてのディレクトリを見つけます。

ユーザーが検索にアクセスできるすべてのディレクトリを見つけて、そのfindディレクトリをシェルに表示する必要があります。 USERはkshから読み取られます。

たとえば、

read user

findユーザーがディレクトリ内で作業するには、そのディレクトリへの「読み取りアクセス」と「実行アクセス」が必要です。r入力したユーザーのすべてのディレクトリとアクセス権を確認する必要があります。x

答え1

正確なコードを提供するわけではありませんが、これを達成するための手順は提供できます。

  • ディレクトリの所有者を探します。これがuser検索しているディレクトリと一致する場合は、ディレクトリの所有者権限を確認してください。r+x(5)あるいは、r+w+x(7)ユーザーはそのディレクトリ内で検索できます。そうしないと検索できません。

  • ディレクトリの所有者がユーザーと一致しない場合は、ディレクトリが属するグループを確認して、入力した内容がuserそのグループに属していることを確認してください。ユーザーが属している場合。ディレクトリのグループ権限を確認してください。r+x(5)あるいは、r+w+x(7)ユーザーはそのディレクトリ内で検索できます。そうしないと検索できません。

  • 入力した内容がuserディレクトリが属するグループに属していない場合は、そのディレクトリの他の権限を確認してください。r+x(5)あるいは、r+w+x(7)ユーザーはそのディレクトリ内で検索できます。そうしないと検索できません。

上記のアルゴリズムが目的のタスクを実行すると思います。

編集する:

方法1:

findコマンドを使用してこれを実行できます。

$ find / -maxdepth 1 -type d -perm -u=rx

これにより、ユーザー権限レベル 1 内/最大のすべてのディレクトリが検索されます。少なくとも(読み取り+実行).

方法2:

$ stat <filename/directoryname>  | grep Access | head -1 | awk 'BEGIN{FS="[/)]"} {print $2}'  

これにより、rwx表記法(drwxr-xr-xなど)に対する権限が付与されます。

$ stat <filename/directoryname>  | grep Access | head -1 | awk 'BEGIN{FS="[(/]"} {print $2}'

これにより、755の表記法(0755など)で権限が付与されます。

答え2

現在の質問をよく理解していません。

読み取りアクセス権のないディレクトリ内に読み取りアクセス権を持つサブディレクトリを配置することに興味がない場合は、単に次のことを実行できます。

find . -type d -perm -u+r

特定のユーザーにディレクトリに対する読み取り権限があるかどうかを知りたい場合は、そのユーザーが属するグループを確認してください。

groups $userID

そして、次のことを行います。

find . -type d -group $groupID -perm -g+r

関連情報