助け合いフォーラム

LPIC

LPIC Lv1-101(Ver5.0)
問題ID : 3238
問題を開く
環境変数PATHに基づいて、指定したコマンドの実行ファイルの場所を表示するコマンドはどれか。(2つ選択)

正解

which

type

解説

シェルはパスの指定無しで入力されたコマンド(プログラム)を、環境変数PATHに設定されているディレクトリの中から検索して実行します。これらのディレクトリは「パスが通っている」という言い方をします。
パスが通っているディレクトリにあるコマンドであれば、コマンドの格納されているパスをいちいち指定せずに、コマンド名のみで実行できます。
例えば、ホームディレクトリで「/bin/ls」とせず「ls」だけでもコマンドを実行できるのは、環境変数PATHに「/bin」へのパスが通っているためです。

whichやtypeコマンドは、指定されたコマンドの実行ファイルを環境変数PATHに基づいて検索し、結果を出力します。

whichコマンドは指定したコマンドが格納されている場所を検索し、そのパスを表示します。検索するディレクトリは環境変数PATHで設定されている(パスが通っている)ディレクトリです。デフォルトでは、最初にコマンドが見つかったディレクトリのパスを表示します。

typeコマンドは、指定したコマンドをシェルがどのように解釈するか(通常のコマンドか、シェルの組み込みコマンドか、エイリアスかなど)を表示します。通常のコマンドの場合、そのコマンドの実行ファイルが格納されている場所の絶対パスを、環境変数PATHにあるディレクトリを参照して表示します。

したがって、正解は
・which
・type
です。

例)環境変数PATHで設定しているディレクトリのうち、cpコマンドのあるパスを表示する場合

$ which cp
/bin/cp

$ type cp
cp is /bin/cp

通常、管理者用のコマンド(例えば、/sbin、/usr/sbin、/usr/local/sbinにあるコマンドなど)の格納場所は、一般ユーザの環境変数PATHには含まれていません。
そのため、whichやtypeを使って一般ユーザが管理者用のコマンドの場所を確認することはできません。

その他の選択肢については、以下のとおりです。

・whereis
指定したコマンドの格納場所を検索する機能はありますが、環境変数PATHの値を参照しないため、誤りです。
whereisは、コマンドの格納される標準的なディレクトリの中から検索し、絶対パスで表示します。

・locatedb
存在しないコマンドのため、誤りです。
なお、似た名称のlocateコマンドは、あらかじめ作成された検索用データベースに沿って、検索パターンに合致したファイルやディレクトリを高速に検索するコマンドです。locateは検索場所に環境変数PATHの値を使用しません。
locateで使用する検索用のデータベースは、updatedbコマンドで更新します。

・grep
grepは、ファイルや標準入力から、正規表現のパターンにマッチする文字列を含む行を抽出するコマンドですので、誤りです。
上に戻る

正解が間違っています

投稿日 2022/07/15

whichの出力は絶対パスとは限りません(PATH環境変数の値に依ります).

$ touch cmd
$ chmod +x cmd
$ export PATH=.:$PATH
$ which cmd
./cmd

一方,whereisはPATH環境変数を参照し,PATH環境変数の値に依らず絶対パスになります.

$ touch cmd
$ chmod +x cmd
$ export PATH=.:$PATH
$ whereis cmd
cmd: /tmp/tmp.dBUCuH4J0I/cmd

よって,whereisが正解と考えます.

スタッフからの返信

s staff_meg

2022/07/19 16:15

ottijpさん、 ご指摘の点を修正致しました。 ご報告、誠にありがとうございました。

この投稿に対して返信しませんか?