見出し画像

[CentOS7]環境変数PATHの変更方法_一時的と永続的

こんにちは。

タイトルの通り、環境変数PATHの設定変更方法について
一時的に変更する方法と永続的に変更する方法を
書いておこうと思います。

いつも忘れてしまうのですよね・・・
ググれば色々出てくるので、大きな問題はないのですが、
「自分の記事を見れば即決出来る」状態にすれば
時短にもなりそうなので・・・


この記事の目次は以下になります。

1.PATHを通すとは何か?

この議題については数多くの非常に優秀な方々が分かりやすい説明を
されているので、自分のような若輩者が今更コメントを入れるのは
意味のない行為かもしれませんが、一応。

私の中ではPATHを通すというのは次の用なイメージを持っています。


画像1

figure created by draw.io


環境変数PATHって聞くと難しいと認識しちゃうかもしれませんけど、
「OSが参考にしている辞書的なもの」
みたいなイメージだとわかりやすいのかなと思っています。

PATHという辞書は目次のようなもので、コマンドの内容を
確認する為にどこに見に行けばいいかが書いています。

例えば

cat /etc/hosts

ってユーザが入力してきたら、それを入力されたOS君は
「/etc/hostsをcatすればいいんだな!」ってまずは認識します。

ですが、catの意味が分かりません。
読めばいいのでしょうか?それとも削除すればいいのでしょうか?

それを確認する為にPATHを見に行きます。
PATHには各コマンドがどのような処理を行うのか、
それが記載されているファイルがある可能性のあるディレクトリが
書かれています。

OS君は、そのディレクトリを1つずつ見に行って、
もしファイルを見つけられたら、その内容を実行する
もし見つけられなかったら、ユーザに「そんなものはねぇ!」
と怒る。そういう感じだと認識しています。



2.一時的にPATHを変更する方法

一時的に環境変数PATHを変更する為には

export PATH = $PATH:(追加したいディレクトリ)

というように記載してあげることで、一時的にはなりますが、
PATHを通すことが出来ます。


例えば、/usr/pgsql-13/bin/の配下にコマンドの処理内容が記載されている
ファイルがあったとします。

[postgres@ssh_server ~]$ ls /usr/pgsql-13/bin/ 
clusterdb   initdb             pg_controldata  pg_receivewal  pg_test_timing   postgres                    reindexdb 
createdb    pg_archivecleanup  pg_ctl          pg_resetwal    pg_upgrade       postgresql-13-check-db-dir  vacuumdb 
createuser  pg_basebackup      pg_dump         pg_restore     pg_verifybackup  postgresql-13-setup 
dropdb      pg_checksums       pg_dumpall      pg_rewind      pg_waldump       postmaster 
dropuser    pg_config          pg_isready      pg_test_fsync  pgbench          psql


このコマンドのどれかを実行する時、普通であればフルパスではなく
コマンド名のみで実行しようとすると思います。
つまり、以下の○の様に入力はするが×の様には入力しないかなと思います。
※フルパスで指定してあげれば、環境変数PATHを編集しなくとも
 コマンドを実行することが可能です。

○ initdb ~~~~~
× /usr/pgsql-13/bin/initdb ~~~~~


もし上記の○の様にコマンドを入力し、実行したいのであれば
環境変数PATHにディレクトリを追加する必要があります。
デフォルトの状態のPATHを確認してみると以下の様になっており、
/usr/pgsql-13/bin/は登録されていないことが分かります。
登録されていないからOSは「どこにもねぇよ!」と怒っているわけです。

[postgres@ssh_server ~]$ echo $PATH 
/sbin:/bin:/usr/sbin:/usr/bin 


PATHに登録してみて再度確認してみます。
入っていることが確認出来ますね。
この状態でコマンドを実行すると正常に処理が通ります。
OSが/usr/pgsql-13/bin/を確認しに行くからですね。

[postgres@ssh_server ~]$ export PATH=$PATH:/usr/pgsql-13/bin/ 
[postgres@ssh_server ~]$ echo $PATH 
/sbin:/bin:/usr/sbin:/usr/bin:/usr/pgsql-13/bin/


このPATHの通し方でもいいのですが、これで通すと
例えばrebootとかをすると設定内容が消えてしまいます。

また登録しなおすのは非常に関口メンディー(=面倒)だと
思いますので次に永続的に変更する方法を記載します。



3.永続的にPATHを変更する方法

永続的にPATHを変更する方法は、
ユーザのホームディレクトリにある.bash_profileの内容を
変更することで実現可能です。

まずPATHを設定したいユーザのホームディレクトリ上に
.bash_profileがあることを確認します。
※「.」から始まるのでこれは隠しファイルになります。
 lsコマンドだけでは出力されないのでls -a等で確認します。

[postgres@ssh_server ~]$ pwd 
/home/postgres 
[postgres@ssh_server ~]$ ls -a 
.  ..  .bash_history  .bash_logout  .bash_profile  .bashrc  .psql_history  data 


この.bash_profileの中身を確認してみると以下のようになっていると思います。
このファイルの最終行に、追加したいディレクトリを記載してあげると
永続的にPATHを通すことが出来ます。

[postgres@ssh_server ~]$ cat .bash_profile 
# .bash_profile 
# Get the aliases and functions 
if [ -f ~/.bashrc ]; then 
       . ~/.bashrc 
fi 
# User specific environment and startup programs 
PATH=$PATH:$HOME/.local/bin:$HOME/bin 
export PATH 


今回の場合だと/usr/pgsql-13/bin/を追加したいので、
以下の様に追記をしてあげます。

[postgres@ssh_server ~]$ cat .bash_profile 
# .bash_profile 
# Get the aliases and functions 
if [ -f ~/.bashrc ]; then 
       . ~/.bashrc 
fi 
# User specific environment and startup programs 
PATH=$PATH:$HOME/.local/bin:$HOME/bin 
export PATH 
export PATH=$PATH:/usr/pgsql-13/bin/ 

この記事が気に入ったらサポートをしてみませんか?