• ベストアンサー

外部コマンド、組み込みコマンド、エイリアス

シェルの外部コマンド、組み込みコマンド、エイリアスのそれぞれについて何であるか詳しく教えてください。 自分の理解では、外部コマンドは、シェルとは別のプログラムで環境変数PATHに書かれた場所にあるものです。組み込みコマンドは、シェルそのものの機能であってシェル以外のプログラムではありません。エイリアスは、既存のコマンドにつける別名というところまではわかりますが、それ以上わかりません。 なぜ、このような疑問が生じたかと言いますと、lsコマンドが組み込みコマンドであるか外部コマンドであるかをtypeで調べようとしたら、訳のわからない言葉が出てきたからです。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10359)
回答No.3

理解はそれで合ってます。 type コマンドは、alias -> 組み込みコマンド(builtin) -> 外部コマンド の順に優先して表示します。 type -a とするとそれら全部を表示します。 一般に ls は何らかのオプション付きの ls としてalias定義されています。 type -a ls とすると、ls が /bin/ls なのがわかると思います。 なお、typeとよく似たコマンドにwhchという外部コマンドがありますが、which は標準的には外部コマンドだけを表示します。ただ、少なくともCentOSでは、 which is aliased to `alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' とalias定義されており、aliasも認識するようになっています。ただ、組み込みコマンドは認識しません。 なので、組み込みコマンドがらみでは正しく表示できません。 $ type set set is a shell builtin $ which set /usr/bin/which: no set in (/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/xxx/bin) #=> 組み込みコマンドを認識できない $ type test test is a shell builtin $ which test /usr/bin/test #=> 実際には test とだけかくと組み込みのtestが実行され、/usr/bin/test は実行されない つまり、whichは、そのコマンドが外部コマンドであると知っているときにその場所を知るために使います。 (対話的に)コマンドについて知りたいときには、type -a を使えば必要十分です。 alias type='type -a' と定義しておいても良いかも。

その他の回答 (2)

回答No.2

whichコマンドでパスが表示される物は外部コマンド。 パスが表示されないコマンドは内部コマンド。

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

>lsコマンドが組み込みコマンドであるか外部コマンドであるかをtypeで調べようとしたら、訳のわからない言葉が出てきたからです。 その「訳のわからない言葉」とやらはなんです? CentOS5.xでは… [user@localhost ~]$ type ls ls is aliased to `ls --color=tty' [user@localhost ~]$ となりましたが。 # 見ての通り、エイリアスだ…と。 普通にlsと入力すると、シェルがエイリアスを展開してls --color=ttyと入力したものとして処理してくれる……ということになりますかね。

関連するQ&A

専門家に質問してみよう