最近、あるユーザーが私に助けを求めて、次のように書きました。
「通話に
man /bin/find
誤った文字が表示されるのはなぜですか?」
man
私は彼がパスを提供することによってそれを誤って使用していると答えました。つまり、man
実行可能ファイルをマニュアルページのソースファイルとして解釈し、パスなしでテーマ名のみを提供する必要があると答えました。言い換えれば、man find
彼は私がパニックになる質問を思い出しました。
「では、rootで実行するとなぜ動作しますか
sudo man /bin/find
?」
私はそれを試しましたが、rootシェルを使用したり、rootsudo
シェルからrootとして呼び出すと、実行可能ファイルのsudo man /bin/find
代わりにマニュアルページが表示されます。
- 特別なことはありません
find
。これはすべての実行可能ファイルに適用されます。 - これはRHEL 7と8で発生しますが、Mac OSではバイナリをrootまたはユーザーとしてマークします。
- のマニュアルページにこれに関する言及がありません
man
。 - 私は現実のチェックを行い、
ls -i man
同じsudo ls -i man
インデックスノードを返しました。についても同様です/bin/find
。 man
まだエイリアスが指定されていません。- シェルで実行すると、
bash -x
代替項目は表示されません。
私は間違いなく簡単なものを見落としています。この現象の説明は何ですか?
ベストアンサー1
私はそれをテストし、あなたは正しいです。man /usr/bin/find
バイナリではなくディスプレイページを監督します。さらに、追加すると、/bin
バイナリ$PATH
の代わりにページも表示されますman /bin/find
。実際のルート(sudoではない)がバイナリを表示していることを確認することもできます。
では、ここで何が起こっているのでしょうか?
Man
このパスが存在する場合は、パラメータからそのパスを削除してください$PATH
。実行可能なパスを削除してもバイナリが表示されないことは明らかですman
。おそらく、彼らは引数の用語とバイナリ法を区別する他の方法がないかもしれません。- 承認されていないコマンドが実行されるのを防ぐために、sudoはELシステムに独自の定義を持ち、
PATH
すべてのコマンドは異なる環境で実行されます。secure_path
/etc/sudoers
/sbin:/bin:/usr/sbin:/usr/bin
sudo
PATH
- ELシステムでは、
/bin/find
これはハードリンクであり、デフォルト/usr/bin/find
では/bin
追加されません$PATH
。これはman
これがバイナリであることを理解していませんでしたが、追加されsudo
たので、/bin
今$PATH
理解できるman
ようになりました。