書き込み権限を持つディレクトリ内のすべての.phpファイルを見つけます。

書き込み権限を持つディレクトリ内のすべての.phpファイルを見つけます。

私はサーバー上のすべての書き込み可能なディレクトリを検索し、.phpファイルと.htmlファイルを含むディレクトリを表示するLinuxコマンドを探しています。

それは次のとおりです。

find -type d -writable -exec find {} -iname '*.php' -o -iname '*.html' \;

10番!

答え1

ただ交換し-writableてください-perm

find -type d -perm -a=w  -exec find {} -iname '*.php' -o -iname '*.html' \;

答え2

find次のようにuniq使用しますsudo

find / -type f -iname '*.php' -execdir sudo -u #UID -- bash -c 'test -w ./ && pwd' ';' |uniq

UIDを存在しないユーザーIDに置き換えます。その後test -w、次のように真を取得できます。みんな書き込み権限。

答え3

4.8.0より厳密に高いGNUバージョンfind(2021年11月8日現在リリースされていない)の場合は、次のことができます。

find . -type d -perm -a=w -print0 |
  LC_ALL=C find -file0-from - -mindepth 1 -maxdepth 1 \
    '(' -iname '*.php' -o -iname '*.html' ')'

(現在の開発バージョンでは、最初のものがfind何も返さない場合は2番目の文句を言いますが、これは理想的ではありません。リリース前に修正されることを願っていますifne

-perm -a=wwすべてのビットが設定されているファイルを選択してくださいユーザーグループそしてその他ただし、これらのディレクトリを書き込み可能にするには、ユーザーはまだそのディレクトリに到達できる必要があり、したがってそこに続くすべてのパスコンポーネントへの検索アクセス権が必要です。また、メンバーがいないグループで書き込めないディレクトリは、まだ誰でも書くことができると見なすことができますが、ここでは報告されません。

-writableユーザー呼び出し自体として書き込むことができるファイルを選択しますfindaccess()システム呼び出しを使用するため、ファイル自体に対する権限のみは考慮されません)。

を使用すると、zsh次のことができます。

set -o extendedglob # best in ~/.zshrc
for d (**/*(ND/Ff[a+w])) print -rC1 -- $d/*.(#i)(php|html)(ND)

関連情報