コマンドパスについて

 

 

あるコマンドを実行しようとして、Command not foundというメッ

セージが出ることがある。

 

コマンドとは何だろうか。その実態は、たとえばc言語でプログラ

ムして作られた実行プログラムだったり、シェルのスクリプトだっ

たりといろいろである。ただしユーザから見れば一様にシステムの

コマンドプロンプト(よく見られる例は、ログイン後%文字が出て

いる状態)に対してコマンドとして決められている文字列(必要に

応じ、それに加えオプションパラメータ等も)を打ち込めば実行さ

れる。

 

コマンドは多くの場合特定のファイル名を指していると思えばよい

(例外的にシェルの中に埋め込まれているものがあるが)。今

moreコマンドがどんなものか調べてみよう。

%which more

/usr/ucb/more

 

この例ではmoreがどんなものかwhichコマンドで調べている。そ

の結果、/usr/ucbというディレクトリにある特定のmoreというファ

イルを指していることが分った。

 

(少し本筋から外れるが、file ファイル名とすると、そのファイル

がどんな種類のものか教えてくれる。今の場合、file

/usr/ucb/moreとすると、/usr/ucb/more:  ../bin/more へのシンボ

リックリンクという答えが返り、さらにfile /usr/bin/moreとする

と/usr/bin/more:  ELF 32-ビット MSB 実行可能形式 SPARC バー

ジョン 1[動的にリンクされています][ストリップされています] と

いう答えが返る)。

 

あるコマンドを実行するのに、コマンド名を打ち込むほかに、その

コマンドのあり場所をルートディレクトリからはじまる形式(絶対

パスという)で打ち込んでもよい。今の例だと/usr/ucb/moreと入

れても単にmoreと入れても同じ結果が得られる。

 

もともと、このようにコマンドを実行するのにいちいち絶対パスで

入れてもなんら構わない。ある意味で望ましくもある(同一名のコ

マンドが複数個存在することがあり、その場合絶対パスの方が間違

いが少ない。システム管理者はそのため時として絶対パスを使う)。

しかし普段それではいかにも煩わしい。

 

試しに自分の環境で

setenv | grep PATHとやってみよう。たとえば

% setenv | grep PATH

PATH=.:/home/home01/oshima/bin:/usr/local:/usr/ucb:/usr/bin:/us

r/local/bin:/usr/

etc:/usr/lib/uucp:/usr/hspice/h9007b/bin:/usr/local/X11R5/bin:/us

r/srd/aclab/bin

:/usr/srd/aclab/bin/old:/usr/srd/aclab/etc:/usr/srd/aclab/precise/b

in:/usr/srd/b

in:/usr/openware/bin:/usr/openwin/bin:/usr/openwin/bin/xview:/us

r/local:/usr/hos

ts:/usr/new:/etc:/usr/new/mh:/usr/ccs/bin:/opt/SUNWspro/bin:/usr

/local/X11R6.3/b

in:/usr/sbin

 

のようなものが得られる。これは、システムにコマンドを打ち込ん

だとき、ここに示されているようなディレクトリを(与えられた順

に)探すことを意味している。

 

冒頭のCommand not foundは与えられたPATHの中には求めるコ

マンドがなかったことを意味している。

 

あるユーザがあるシステムを使っていて、Command not foundが出

たら、そのシステムに全くそれに相当するものが無いか、PATHの

指定がされていないかである。初心者の場合はPATHの指定がな

されていないことが多い。

 

Command not foundが出た場合、別の(上級)ユーザにそのユーザ

の環境でwhich コマンド名をして、コマンドのあり場所(コマン

ドパス)を調べてもらうとよい。そして、.cshrcにあるPATHの項

にそのディレクトリを追加する(mule等で編集して)。

 

追加したら、一旦ログアウトして再ログインするか、source

~/.cshrcを行う。そしてwhich コマンド名をしてコマンドのファイ

ルのあり場所が示されるようになったら、使えるようになる。

 

他のユーザに聞いてもコマンドのあり場所が分からない場合、あり

場所の大体の見当をつけ(慣れないと見当をつけにくいが、/usr、

/optは必須検討場所)、例えば

 

du -a /usr/* | grep more のようにしてあり場所を探すことができる。

注意:この操作はcpu時間を食うので、閑散時に行うこと。

 

 

戻る

 

 

大島ホームページ

 

 

質問・連絡は   oshima%kaiyodai.ac.jpまで