コマンドの実体とパスを通すについてまとめ

コマンドとパスについてまとめました。

理解すべきことは以下です。

  • コマンドは組み込みと外部の2種類ある
  • コマンドの実体は実行ファイル
  • 実行ファイルのパスを指定することでコマンドを実行できる
  • 実行するたびにパスを指定するのは面倒なので、環境変数にパスを登録する

コマンドとは

コマンドとはコンピュータに対する命令のことです。

コマンドには組み込みコマンドと、外部コマンドの2種類あります。

組み込みコマンド

組み込みコマンドはシェル自体に実装されているコマンドです。

試しにコマンドの種類を確認するtypeコマンドでcdコマンドを確認してみます。

type cd
# cd is a shell builtin

するとcd is a shell builtinと表示されました。

これはcdコマンドがシェルのビルトインであるという意味です。つまり組み込みコマンドです。

外部コマンド

外部コマンドは、組み込みコマンドではないコマンドです。

外部コマンドの実体は、ただの実行ファイルです。つまり外部コマンドを実行するとは、ファイルに書かれているプログラムを実行していることになります。

試しにtypeコマンドでlsコマンドを確認してみます。

type ls
# ls is /bin/ls

するとls is /bin/lsと表示されました。

これによってlsコマンドが/bin/以下に存在することがわかります。

次にファイルの種類を識別するfileコマンドで/bin/lsを調べてみます。

file /bin/ls
# /bin/ls: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [arm64e:Mach-O 64-bit executable arm64e]
# /bin/ls (for architecture x86_64):   Mach-O 64-bit executable x86_64
# /bin/ls (for architecture arm64e):   Mach-O 64-bit executable arm64e

すると、長いメッセージが表示されました。ここで重要なのはexecutableです。これは実行ファイルであることを示します。

パスを通す

先ほどのlsコマンドは/bin/lsで実行することもできます。

しかし毎回コマンドのパスを入力するのは面倒です。

そこでコマンドのパスを環境変数PATHに登録することで、コマンド名だけで実行できるようにします。この作業をパスを通すといいます。

パスを通す作業は以下の手順で行います。

  1. export PATH=$PATH:[パス]でパスを登録する
  2. sourceで設定を反映する

環境変数とは、OS内のどこからでも使える変数のことです。

envコマンドを実行すると環境変数と格納されている値の一覧を表示することができます。

また、echoコマンドで個々の環境変数の値を確認できます。

1. export PATH=$PATH:[パス]でパスを登録する

簡易的なコマンドを作ってパスを通す作業を行います。

まずhelloという文字列を表示させるhello.shというファイルを作成します。

echo 'hello'

自分はMacを使っているので、/Users/keitaという自分のホームディレクトリにscriptsというディレクトリを作成し、その中にhello.shを格納します。

次にhello.shに実行権限を付与します。

chmod +x hello.sh

パスを登録するにはPATHという環境変数exportコマンドを使って、コマンドまでのディレクトリのパスを保存します。

以下のコマンドを実行します。

export PATH=$PATH:/Users/keita/scripts

:はパスを区切る文字です。

このとき$PATHを入力しないと、すでに保存されているパスが新しく保存したパスで上書きされて消えてしまうので注意です。

2. sourceで設定を反映する

exportで登録しただけだと、ターミナルのウィンドウを閉じると消えてしまいます。

永続的に設定するにはsourceコマンドを使います。

自分はzshを使っているので、~/.zshrcを指定して設定を反映します。

source ~/.zshrc

ここまででパスを通すことができたのでファイル名を入力してコマンドを実行してみます。

hello.sh
# hello

helloと表示することができました。

このように外部コマンドは実行ファイルを作ってパスを通すことで作成することができます。