私はサーバー上のすべての書き込み可能なディレクトリを検索し、.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=w
w
すべてのビットが設定されているファイルを選択してくださいユーザー、グループそしてその他ただし、これらのディレクトリを書き込み可能にするには、ユーザーはまだそのディレクトリに到達できる必要があり、したがってそこに続くすべてのパスコンポーネントへの検索アクセス権が必要です。また、メンバーがいないグループで書き込めないディレクトリは、まだ誰でも書くことができると見なすことができますが、ここでは報告されません。
-writable
ユーザー呼び出し自体として書き込むことができるファイルを選択しますfind
(access()
システム呼び出しを使用するため、ファイル自体に対する権限のみは考慮されません)。
を使用すると、zsh
次のことができます。
set -o extendedglob # best in ~/.zshrc
for d (**/*(ND/Ff[a+w])) print -rC1 -- $d/*.(#i)(php|html)(ND)