「-p\;-quit」と-execはどういう意味ですか?

「-p\;-quit」と-execはどういう意味ですか?

どういう意味ですかfind . exec /bin/bash -p \; -quit

.私はそれが/bin/bash

注文に関連していますか-p/bin/bashfind

\;とはどういう-quit意味ですか?

答え1

find . -exec /bin/bash -p \; -quit

(これはGNUfindまたはそれと互換性があると仮定します-quit)起動します。これは(現在の作業ディレクトリ)から始まり、ディレクトリツリーの下に降りて、find各ファイルに対して独自に起動して実行されます(実行されるコマンドの終了場所を示します)、コマンドが成功すると終了します。../bin/bash -p\;find-quit

コマンドfind自体はあまり役に立ちません。これは始まる複雑な方法ですbash。これは、-pこのコマンドの後に隠された(邪悪な)意図に関するヒントを提供します。

-pbash昇格したコンテキスト(たとえば、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はリセットされません。

関連情報