どういう意味ですかfind . exec /bin/bash -p \; -quit
?
.
私はそれが/bin/bash
。
注文に関連していますか-p
?/bin/bash
find
\;
とはどういう-quit
意味ですか?
答え1
find . -exec /bin/bash -p \; -quit
(これはGNUfind
またはそれと互換性があると仮定します-quit
)起動します。これは(現在の作業ディレクトリ)から始まり、ディレクトリツリーの下に降りて、find
各ファイルに対して独自に起動して実行されます(実行されるコマンドの終了場所を示します)、コマンドが成功すると終了します。.
.
/bin/bash -p
\;
find
-quit
コマンドfind
自体はあまり役に立ちません。これは始まる複雑な方法ですbash
。これは、-p
このコマンドの後に隠された(邪悪な)意図に関するヒントを提供します。
-p
bash
昇格したコンテキスト(たとえば、setuid実行可能ファイルを実行したプロセス)から呼び出されると、その権限を放棄できなくなります。
ユーザーが制限されたコマンドセットのみを実行できる制限されたコンテキストにあるようです。たとえば、制限されたシェルでこれを行うことができます。
しかしfind
、これは許可されたコマンドのリストの1つであり、制限された環境を設定した人は、シェル(シェルの組み込みではない)に設定された制限に関係なく、任意のfind
コマンドを実行できることを無視しました。find
したがって、find . -exec /bin/bash -p \; -quit
誰かがこの制限を回避するためにこのコマンドを実行しているようです。
答え2
コマンドはfind
実際にオプションを使用する必要があります。-exec
、これはエスケープされたセミコロンで終わらなければなりません。これは、シェルコマンド間の区切り文字ではなくfind
コマンドの一部にするためにエスケープが必要であることを説明するすべてのマニュアルにあります。find
-quit
あなたの例に示されているオプション。
さて、-quit
特定の実装を参照しているようです(例:GNUを探す)には表示されないからです。POSIX:
-quit
すぐに終了します(エラーが発生しない場合、戻り値は0です)。これは違う-prune
なぜなら-prune
ディレクトリの内容をクリーンアップする場合にのみ機能しますが、-quit
findがすぐに停止するようにします。子プロセスは引き続き実行されません。すべてのビルドされたコマンドライン-exec
...\+
または-execdir
...\+
プログラムが終了する前に呼び出されます。後ろに-quit
実行後、コマンドラインで指定されたファイルは処理されなくなります。たとえば、一般的な使用法はfind /tmp/foo /tmp/bar -print -quit
次のとおりです。/tmp/foo
-quit
必要なものが見つかったら、ファイルシステムの検索を停止します。たとえば、1つのファイルのみを見つけるには、次のようにします。
find / -name needle -print -quit
この-p
オプションは次のとおりです。バッシュマニュアル:
Bashの起動時に有効なユーザー(グループ)IDが実際のユーザー(グループ)IDと同じでない場合
-p
オプションが指定されず、起動ファイルが読み取られず、シェル関数が環境から継承されず、SHELLOPTS、BASHOPTS、CDPATH、およびGLOBIGNORE変数(環境に表示される場合)が無視され、有効なユーザーIDが実際のユーザーIDに設定されます。ユーザーID。呼び出し時に-pオプションを指定した場合、起動動作は同じですが、有効なユーザーIDはリセットされません。