コマンドとパスについてまとめました。
理解すべきことは以下です。
- コマンドは組み込みと外部の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
に登録することで、コマンド名だけで実行できるようにします。この作業をパスを通すといいます。
パスを通す作業は以下の手順で行います。
export PATH=$PATH:[パス]
でパスを登録する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
と表示することができました。
このように外部コマンドは実行ファイルを作ってパスを通すことで作成することができます。