はじめに

こんにちは!今回はtypeコマンドについて解説します。

typeは、コマンドがどんな種類なのか(組み込みコマンドなのか、外部コマンドなのか、エイリアスなのか)を調べられるコマンドです。「このコマンド、何者?」って思った時に使います。

typeコマンドとは

typeは、指定したコマンドの種類や実体を表示するコマンドです。

例えば、cdは組み込みコマンドだけど、lsは外部コマンド。そういうのを一発で確認できます。デバッグやシステムの理解に超便利です。

基本構文

1
type [オプション] コマンド名

主なオプション

オプション 説明
-t コマンドの種類を1単語で表示
-p 外部コマンドの場合、そのパスを表示
-a すべての実行可能な候補を表示
-P 強制的にPATHから検索してパスを表示

使用例

例1: 組み込みコマンドを調べる

1
type cd

実行結果:

1
cd はシェル組み込み関数です

cdは組み込みコマンドだってわかります。

例2: 外部コマンドを調べる

1
type ls

実行結果:

1
ls は /usr/bin/ls です

lsは外部コマンドで、どこにあるかも表示されます。

例3: エイリアスを調べる

1
2
alias ll='ls -la'
type ll

実行結果:

1
ll は `ls -la' のエイリアスです

エイリアスの場合、何のエイリアスなのかも表示されます。

例4: 複数のコマンドを一度に調べる

1
type cd ls pwd echo

実行結果:

1
2
3
4
cd はシェル組み込み関数です
ls は /usr/bin/ls です
pwd はシェル組み込み関数です
echo はシェル組み込み関数です

複数指定すると、まとめて確認できます。

例5: -tオプションで種類だけ表示

1
2
3
type -t cd
type -t ls
type -t ll

実行結果:

1
2
3
builtin
file
alias
  • builtin: 組み込みコマンド
  • file: 外部コマンド(ファイル)
  • alias: エイリアス

シンプルに種類だけ知りたい時に便利です。

例6: -aオプションですべての候補を表示

1
type -a echo

実行結果:

1
2
3
echo はシェル組み込み関数です
echo は /usr/bin/echo です
echo は /bin/echo です

echoは組み込みコマンドと外部コマンドの両方が存在することがわかります。

例7: -pオプションでパスだけ表示

1
type -p ls

実行結果:

1
/usr/bin/ls

外部コマンドの場合、そのパスだけを取得できます。組み込みコマンドの場合は何も表示されません。

例8: 存在しないコマンドを調べる

1
type hogehoge

実行結果:

1
bash: type: hogehoge: 見つかりません

存在しないコマンドの場合、エラーメッセージが表示されます。

コマンドの種類

typeコマンドが識別できるコマンドの種類:

  1. 組み込みコマンド (builtin): シェルに組み込まれているコマンド

    • 例: cd, echo, pwd, export, alias
  2. 外部コマンド (file): 独立した実行ファイル

    • 例: ls, grep, find, cat
  3. エイリアス (alias): 別名として定義されたコマンド

    • 例: ll='ls -la'
  4. 関数 (function): シェルで定義された関数

    • 例: 自分で定義した関数
  5. キーワード (keyword): シェルの制御構文

    • 例: if, for, while

Tips・注意点

  • 組み込みコマンドと外部コマンドの違い: 組み込みコマンドの方が速い

    1
    
    type echo  # 組み込みコマンドが優先される
    
  • 実行されるコマンドを確認: エイリアスが設定されてると、思ってたのと違うコマンドが実行されることも

    1
    2
    
    alias ls='ls --color=auto'
    type ls  # エイリアスになってることがわかる
    
  • PATHの確認にも使える: 外部コマンドのパスを調べられる

    1
    
    type -p python3  # /usr/bin/python3
    
  • シェルスクリプトで活用: コマンドの存在チェックに使える

    1
    2
    3
    4
    5
    
    if type git > /dev/null 2>&1; then
      echo "Gitがインストールされています"
    else
      echo "Gitがインストールされていません"
    fi
    

実践的な使い方

コマンドが本当に存在するか確認

1
type docker

Docker使おうと思ったけど、そもそもインストールされてる?って時に確認できます。

エイリアスの内容を忘れた時

1
2
3
type ll
type la
type gs

「あれ、llって何のエイリアスだっけ?」って時に便利。

同じ名前のコマンドが複数ある時

1
type -a echo

組み込みコマンドと外部コマンドで同じ名前のがある時、どっちが実行されるか確認できます。基本的には組み込みコマンドが優先されます。

スクリプトでコマンドの存在チェック

1
2
3
4
5
6
7
8
#!/bin/bash

if ! type python3 > /dev/null 2>&1; then
  echo "Error: python3がインストールされていません"
  exit 1
fi

echo "python3が見つかりました: $(type -p python3)"

スクリプトの冒頭で必要なコマンドがあるか確認するのに使えます。

whichコマンドとの違い

1
2
3
4
5
6
7
8
# typeは組み込みコマンド、エイリアス、関数もわかる
type cd      # cd はシェル組み込み関数です
type ll      # ll は `ls -la' のエイリアスです

# whichは外部コマンドのパスしか返さない
which cd     # (何も表示されない)
which ll     # (何も表示されない)
which ls     # /usr/bin/ls

whichよりtypeの方が情報が多いので、基本的にはtype使った方が便利です。

まとめ

今回はtypeコマンドについて解説しました。

ポイント:

  • typeでコマンドの種類や実体を確認できる
  • 組み込みコマンド、外部コマンド、エイリアスなどを識別可能
  • -tオプションで種類だけ簡潔に表示
  • -aオプションですべての候補を表示
  • シェルスクリプトでコマンドの存在チェックに使える

「このコマンド、何?」って思った時はtypeコマンドを使ってみてください。思ってたのと違うものが実行されてた、なんてこともわかります。

次回もLinuxコマンドの学習を続けていきましょう!