LinuxのコマンドってなんでPATHを書かなくても実行できるんだ?


はじめに

最近Linuxを触っている時に、ls,cd,pwdとかのコマンドってなんで実行ファイルまでのPATHを書かなくても実行できるんだと思ったのがこの記事を書くきっかけになりました。

目次

  1. 環境変数
  2. PATHを通す

1. 環境変数

PATHの話をする前にまずこの環境変数について触れなければなりません。

環境変数とは、OSが設定値などを永続的に保存し、利用者や実行されるプログラムから設定・参照できるようにしたもの。 プログラムの実行時などに必要となる、利用者やコンピュータごとに内容が異なる設定値などを記録するために用いられる。(IT用語辞典 e-Words)

簡単に言えば、ユーザーごとに変数にある値を設定することができるし、コンピュータ全体にも設定することができるって感じです。

では、どのように環境変数を設定するかと言うと


$ NAME=Tanaka
$ export NAME
    # or
$ export NAME=Tanaka

このようにしてLinuxでは環境変数を設定することが出来ます。
しかし、この状態では永続的には環境変数を保存することが出来ません。なのでここで~/.bash_profileに環境変数を設定しなければいけません。

#.bash_profile

NAME='Tanaka'
export NAME

こうすることで、永続的に環境変数を設定することができます。
soruce ~/.bash_profileとすることで、ログアウトしてログインせずに反映させることだできる。

2. PATHを通す

さて、この記事の本題であるls,pwd,cdといったLinuxのコマンドがPATHを通さずに実行することが出来るかというと、環境変数にPATHを設定しているということです。


$ echo $PATH
# 現在の変数PATHに設定している状態が表示される
# 例) /usr/bin:/usr/local/sbin など 

このPATHに対して設定することでls,cd,pwdなどがPATHを通さずに使用することが出来るのです。

# ~/bash_profile
PATH="$PATH:/usr/bin"
export PATH

まとめ

普段何気なく使っていたls,cd,pwd,yumなどがPATHを通さずに使えた理由が環境変数のPTAHに通すことで使用出来ているのです。何かの実行ファイルをダウンロードしてきた時にPATHを通す処理何かはそういことです。

次回は、詳しく触れなかった~/.bash_profilesourceコマンドについて記事を書いていきたいと思っています。

参考資料

https://ja.wikipedia.org/wiki/%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0
https://qiita.com/Naggi-Goishi/items/2c49ea50602ea80bf015