LoginSignup
0
0

More than 1 year has passed since last update.

Envaderを利用して、PATHとは何かを学ぶ。

Last updated at Posted at 2022-03-16

30代後半、未経験からIT業界のエンジニア転職へ挑戦している、kobakichiです。

今回は、PATHを通す、の意味とその使い方について学んだので、自分なりにまとめようと思います。
正直今まで、PATHとは何か?PATHを通すとは何なのか?について何となく、フワッとした理解しかなかったので、Envaderを通して理解を深める事ができました。

初めに

今回学習するにあたり利用したのは、環境構築が不要で、オンラインでLinuxが学べる学習サービス、Envaderを利用しました。

Envaderについて気になる方がいましたら、リンクを貼っておきますので参考までにどうぞ。

Envader

コース一覧

今回使用したシナリオ

PATHとは

Linux環境を触っていると、絶対に避けて通れないのがこのPATHについての理解だと思っています。

相対パスや絶対パスなどもありますが、今回のPATHについては環境変数に設定されているPATHの事です。

この環境変数PATHが何を意味しているのかですが、シェルがコマンドを実行する際にコマンドの実行ファイルを探しにいくための道筋と順番を示しています。

lsとコマンドを叩くとカレントディレクトリにあるファイルが表示されますが、裏側ではこのPATHに記載されている道筋と順番を見ながらlsコマンドのパスを探しに行って、その実行ファイルを実行してくれている事になります。

こちらの記事がすごい分かりやすかったです。
PATHを通すとは? (Mac OS X)

PATHを実際に見てみる。

環境変数PATHを確認するには、echo $PATHで表示させる事ができます。

envader@172-19-1-2:~$ echo $PATH/sbin:/usr/sbin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

これが環境変数PATHに登録されている、コマンドを実行するときに探しに行くパスの順番と道筋になります。
これをコマンド検索パスとも表現できるそうです。

パスの表示は:で一区切りになっているので、上記をもう少し見やすくすると下記のように分解してみる事ができます。

/sbin #最初にコマンドを探すのはここ
/usr/sbin #なければここを探す
/usr/local/bin #なければここ
/usr/bin #下に続く
/bin
/usr/local/games
/usr/games

こうすると少し分かりやすいかなと思います。
コマンドを叩いたら、シェルがこの上から順番にそのコマンドの実行ファイルがある場所まで探しに行く。というシステムなんですね!

コマンド実行ファイルがどこにあるのかの確認方法

実際にlsと叩いた際に、PATHに登録されているコマンド検索パスをシェルが探しにいくのですが、実際にコマンドの実行ファイルがどこに格納されているのか見てみましょう。

確認するには、whichコマンドを使用します。

envader@172-19-1-2:~$ which ls
/bin/ls

これがlsコマンドの実行ファイルが格納されているパスになります。
lsと叩くと、シェルがこの/bin/lsまでファイルを検索して実行している。という事になりますね。

ちなみにこの/binディレクトリの中身を確認してみると、たくさんのコマンドが格納されていました。

envader@172-19-1-2:/bin$ ls
bash   dmesg          gzip      mount          rmdir       tempfile      zcmp
cat    dnsdomainname  hostname  mountpoint     run-parts   touch         zdiff
chgrp  domainname     kill      mv             sed         true          zegrep
chmod  echo           ln        nisdomainname  sh          umount        zfgrep
chown  egrep          login     original       sh.distrib  uname         zforce
cp     false          ls        pidof          sleep       uncompress    zgrep
dash   fgrep          lsblk     ps             stty        vdir          zless
date   findmnt        mkdir     pwd            su          wdctl         zmore
dd     grep           mknod     rbash          sync        which         znew
df     gunzip         mktemp    readlink       tailf       ypdomainname
dir    gzexe          more      rm             tar         zcat

こんな感じで、各コマンドを叩くとPATHに書いてあるコマンド検索パスを通じて、コマンドの実行ファイルを探しに行く。という事なんですね〜。

注意点

コマンド検索パスには優先順位があり、もしも同じ名前のコマンド実行ファイルが複数のコマンド検索パスに存在していた場合にはPATHに書いてある左側から順番に実行されるそうです。

echo $PATH/sbin:/usr/sbin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

これだと/sbinから順番に実行されるという事ですね。
/sbin/usr/sbinに同じ名前の実行ファイルがあった場合には、/sbinが実行されるため、注意が必要です。

なんかうまくいかないな〜、と言った場合にはパスの優先度が原因のときもあるそうなので、細かいところですがこう言った順番を頭に入れておくのも必要ですね。

PATHを追加してみる。

コマンド検索パスを追加したい!となった場合には、exportコマンドを使用します。

一度echo $PATHで現在のコマンド検索パスを再度表示してみます。

envader@172-19-8-2:~$ echo $PATH
/bin/original/:/sbin:/usr/sbin:/usr/local
/bin:/usr/bin:/bin:/usr/local/games:/usr/games

次に、exportコマンドを使用して、/home/sampleのPATHを通します。

exportコマンドを使用することで、

  • 環境変数を表示する事
  • 環境変数を設定する事
  • 環境変数を削除する事

ができるようになります。

コマンドサンプル

export PATH=$PATH:追加したいコマンド検索パス

#こちらのやり方でも同じ意味になります。少し大変ですが。
export PATH=/bin/original:/sbin:/usr/sbin:/usr/local
/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/sample

実際にやってみると下のようになります。

envader@172-19-8-2:~$ export PATH=$PATH:/home/sample

再度echo $PATHで追加されているか確認します。

envader@172-19-8-2:~$ echo $PATH
/bin/original:/sbin:/usr/sbin:/usr/local
/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/sample

末尾に/home/sampleが追加されていますね。

コマンド検索パスの順番を変更しながらPATHを追加する

先ほどもご紹介しましたが、コマンド検索パスには優先順位があり、PATHに記述されている左側から順にコマンドを探しにいきます。
なので、追加するパスの優先順位を上げたい時には以下のように書く事で、優先順位を上げてPATHに記述する事ができます。

export PATH=追加したいコマンドパス:$PATH

実際にやってみましょう。

envader@172-19-2-2:~$ export PATH=/usr/sample:$PATH

envader@172-19-2-2:~$ echo $PATH
/usr/sample:/bin/original:/sbin:/usr/sbin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

ちゃんと指定した/usr/sampleが最初に追加されているのが分かりますね!

まとめ

今回はEnvaderを使用して、PATHについての理解を深めました。

  • 環境変数PATHとは、コマンド検索パスとも表現でき、シェルがコマンドを実行する際にコマンドの実行ファイルを探しに行くための道筋と順番を表している。
  • コマンドを実行するときには、コマンド検索パスに記述されている左側から順に検索され、実行される。
  • exportコマンドを使って、環境変数を表示、設定、削除する事ができる。

最後まで読んでいただきありがとうございました。

参考にさせていただいた記事一覧

PATHを通すとは? (Mac OS X)

PATHを通すために環境変数の設定を理解する (Mac OS X)

Pathを通すとは、環境変数とは

【Linuxコマンド】exportで環境変数を設定する方法

export - 環境変数を定義・リスト表示する - Linuxコマンド

【 export 】コマンド――環境変数やシェル変数を設定する

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0