Linux / Unixで$ PATHを永続的に設定する方法は?


879

私は自分のパスにディレクトリを追加しようとしています。そのため、ディレクトリは常にLinuxパスにあります。私はもう試した:

export PATH=$PATH:/path/to/dir

これは機能しますが、ターミナルを終了して新しいターミナルインスタンスを起動するたびに、このパスが失われ、exportコマンドを再度実行する必要があります。

これを永続的に設定するにはどうすればよいですか?

回答:


230

それを行うには複数の方法があります。実際の解決策は目的によって異なります。

変数の値は通常、割り当てのリスト、またはシステムまたはユーザーセッションの開始時に実行されるシェルスクリプトに格納されます。シェルスクリプトの場合は、特定のシェル構文exportまたはsetコマンドを使用する必要があります。

システム全体

  1. /etc/environment一意の割り当てのリスト。参照を許可します。以下のようなシステム全体のディレクトリを追加するための完璧な/usr/local/something/binまでPATHの変数または定義しますJAVA_HOME。PAMおよびSystemDによって使用されます。
  2. /etc/environment.d/*.conf一意の割り当てのリスト。参照を許可します。以下のようなシステム全体のディレクトリを追加するための完璧な/usr/local/something/binまでPATHの変数または定義しますJAVA_HOME。構成は複数のファイルに分割できます。通常、各ツール(Java、Go、NodeJS)ごとに1つです。設計上、これらの値をユーザーログインシェルに渡さないSystemDによって使用されます。
  3. /etc/xprofileX Window Systemセッションの開始中にシェルスクリプトが実行されました。これは、X Window Systemにログインするすべてのユーザーに対して実行されます。のPATHようなすべてのユーザーに有効なエントリに適しています/usr/local/something/bin。ファイルは他のスクリプトに含まれているため、ユーザーシェルの構文ではなくPOSIXシェル構文を使用してください。
  4. /etc/profile/etc/profile.d/*シェルスクリプト。これはシェルのみのシステムに適しています。これらのファイルは、ログインモードのシェルによってのみ読み取られます。
  5. /etc/<shell>.<shell>rc。シェルスクリプト。これは単一のシェル固有であるため、不適切な選択です。非ログインモードで使用されます。

ユーザーセッション

  1. ~/.pam_environment。一意の割り当てのリスト。参照は許可されていません。すべてのユーザーセッションの開始時にPAMによって読み込まれ、X Window Systemセッションまたはシェルの場合は関係ありません。あなたは他の変数を含む参照できませんHOMEか、PATHそれは限られた用途を持つように。PAMによって使用されます。
  2. ~/.xprofileシェルスクリプト。これは、ユーザーがX Window Systemシステムにログインしたときに実行されます。ここで定義された変数は、すべてのXアプリケーションに表示されます。拡張するための完璧な選択PATHのような値を持つ~/binか、~/go/binまたはユーザーの特定を定義しますGOPATHNPM_HOME。ファイルは他のスクリプトに含まれているため、ユーザーシェルの構文ではなくPOSIXシェル構文を使用してください。グラフィカルテキストエディターまたはショートカットによって起動されたIDEには、これらの値が表示されます。
  3. ~/.profile~/.<shell>_profile~/.<shell>_loginシェルスクリプト。これは、ターミナルまたはターミナルエミュレータから起動したプログラムでのみ表示されます。シェルのみのシステムに適しています。ログインモードのシェルで使用されます。
  4. ~/.<shell>rc。シェルスクリプト。これは単一のシェル固有であるため、不適切な選択です。非ログインモードのシェルで使用されます。

ノート

Wayno上のGnomeは、環境を取得するためにユーザーログインシェルを起動します。これは、効果的にログインシェルの設定を使用しています~/.profile~/.<shell>_profile~/.<shell>_loginファイル。

マニュアル

  • 環境
  • 環境.d
  • バッシュ
  • ダッシュ

ディストリビューション固有のドキュメント

関連した

ログインシェルと非ログインシェルの違いは何ですか?


4
詳しい回答ありがとうございます、これはもっと高いはずです。たぶん.bash_profileリストにも追加する必要がありますか?
James Ko

2
4位だった@JamesKo
trve.fa7ad

1
最良の答えが提案されて/etc/environmentいると思います。しかし、ログアウトおよびログインせずに更新できますか?たまにbashやshを使わsource /etc/environmentないのでうまくいきません。
banan3'14

2
素晴らしい、そして私の意見では最も完全な答えです。はるかに高いはずです。
Peter Gloor

2
このトピックを検索した理由は、実は囲碁でした。.bashrcが適切な場所ではないことに気付いたのは私だけではないことを知ってうれしい。;)
Peter Gloor

1039

~/.profileまたは~/.bashrcファイルに追加する必要があります。 

export PATH="$PATH:/path/to/dir"

何をしているのかに応じて、バイナリにシンボリックリンクすることもできます。

cd /usr/bin
sudo ln -s /path/to/binary binary-name

これにより、残りのセッションのパスが自動的に更新されることはありません。これを行うには、次を実行する必要があります。

source ~/.profile 
or
source ~/.bashrc

11
いくつか質問があります。1)$PATHとの間にコロンがあってはいけません/usr/bin。2)あるはず/usr/binです。3)使用するべきではありません/usr/local/binか?
バタンドワ2014年

197
注意:bash PATHの末尾にコロンを残すことは、セキュリティホールと見なされることがよくあります。これは、bashが探している実行可能ファイルを見つけられない場合に、bashが現在のディレクトリを検索するためです。詳細情報を探しているこの投稿を見つけたユーザーには、このことを通知する必要があります。
erewok 2014年

51
@AdamRobertson安全ではありません-tarball cdを解凍し、解凍したディレクトリに移動して実行するシナリオを検討してくださいls---そしてtarballに悪意のあるプログラムが呼び出さlsれていることを認識してください。
リリーチョン

21
私にとっては、.profileではなく.bash_profileでした。これは誰にとっても異なるようです。
ドンキホーテ2014

9
私はこの回答の質を大幅に改善し、他のユーザーが持ち出したいくつかの問題に対処したと思います。すべてのパスのエクスポート、またはパスを調整するすべてのコマンドでは、必ず既存のパスをコロンで区切る必要があります。先頭または末尾のコロンは使用しないでください。また、現在のディレクトリをパスに含めないでください。
エリックロバートソン

243

Ubuntuでは、を編集します/etc/environment。その唯一の目的は、環境変数を格納することです。元々$ PATH変数はここで定義されています。これは私の/etc/environmentファイルからの貼り付けです:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

したがって、このファイルをrootとして開き、必要なものを追加できます。

即時の結果を得るには、次のように実行します(通常のユーザーおよび root として試行):

source /etc/environment && export PATH

更新:

zsh(別名Z Shell)を使用する場合は、次の行のコメントの直後にこの行を追加します/etc/zsh/zshenv

source /etc/environment

Ubuntu 15.10でこの小さな癖が発生しましたが、zshが正しいPATHを取得していない場合、これが原因である可能性があります


13
すべてのシステムに/ etc / environmentがあるわけではありません
user3439968

9
FWIW $PATH/etc/profileArch Linux でも定義されています。
スパーホーク2015

3
@ e-sushi本当にショックです。私はubuntu 14.04.1を使用しています。そして、私はあなたのファイルを約束することができますに建てられました。
trve.fa7ad

2
太陽の下で/ etc / environment以外のすべての提案を試みて、それらすべてが機能しないようにした後、私はようやくこれに遭遇しました。私もUbuntu 14.04を使用しています。これは、再起動後に実際にPATH変数を変更した唯一のものです。
Chockomonkey 2015年

4
ユーザーは、環境ファイルを更新した後、PCを再起動する必要があります。
Harish_N 2016年

70

export宣言をに入れ~/.bashrcます。私の.bashrcにはこれが含まれています:

export PATH=/var/lib/gems/1.8/bin:/home/fraxtil/.bin:$PATH

7
再起動が必要ですか?
2013

2
私がこれを.profile' に入れたときに動作しましたが、見つかりませんでした.bashrc
Upvote

それは正確なシステムに依存しているかもしれません。どのファイルが実行されるかを決定する条件は正確にはわかりません。問題は解決されてうれしいです。
Fraxtil 2013

12
@Click Upvote 構成source ~/.bashrcをリロードするために行う必要があり.bashrcます。その後、動作します
BigSack 2014

4
このexportキーワードはPATH、が環境変数としてフラグを立てられていない場合にのみ必要です-これは、ほとんど無条件です。単にPATH=/var/lib/gems/1.8/bin:/home/fraxtil/.bin:$PATH同じ効果があります。
Charles Duffy、

30

$PATH2つの方法で永続的に設定できます。

  1. 特定のユーザーのパスを設定するには:ユーザーの.bash_profileホームディレクトリにエントリを作成する必要がある場合があります。

    例えば私の場合、私はTomcatユーザープロファイルにJavaパスを設定します

    [tomcat]$ echo "export PATH=$PATH:/path/to/dir" >> /home/tomcat/.bash_profile
  2. すべてのシステムユーザーに共通のパスを設定するには、次のようにパスを設定する必要がある場合があります。

    [root~]# echo "export PATH=$PATH:/path/to/dir" >> /etc/profile

3
ファイルはディストリビューションで/etc/profilesと名付けられていsますか?鉱山はありませんs。タイプミスがあると思います。
クリスジョンソン

3
おそらく、プロファイルファイルに書き込んでいる$をエスケープしたいでしょう。例:echo "export PATH = \ $ PATH:/ path / to / dir" >> / etc / profile、そうすれば、スクリプトの実行時に実際に変数に追加するのではなく、この初期コマンドを実行した時刻。
BuvinJ 2016年

15

CentosまたはRHELでローカルユーザーを使用できます。

echo $"export PATH=\$PATH:$(pwd)" >> ~/.bash_profile

これにより、現在のディレクトリ(または他のディレクトリを使用できます)がPATHに追加され、永続的になりますが、次回のユーザーログオン時に有効になります。

再ログオンしたくない場合は、以下を使用できます。

source ~/.bash_profile

このリロードは、# User specific environment and startup programsこのコメントが存在する.bash_profile


12

次のいずれかのファイルを編集して、永続的に設定することもできます。

/etc/profile (すべてのユーザー向け)

~/.bash_profile (現在のユーザー向け)

~/.bash_login (現在のユーザー向け)

~/.profile (現在のユーザー向け)

を使用/etc/environmentして永続的なPATH環境変数を設定することもできますが、変数の展開はサポートされていません

抽出元:http : //www.sysadmit.com/2016/06/linux-anadir-ruta-al-path.html


7

昨日、自分のスクリプトを含むフォルダーをPATHに追加する方法を探していたときに、この質問に出くわしました。自分の~/.profileファイル(Linux Mint 18.1上)には既に次のファイルが含まれていることがわかり、驚いていました。

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

したがって、私がしなければならなかったのは、フォルダー~/binを作成してスクリプトをそこに置くことだけでした。


7

私は最もエレガントな方法だと思います:

1.〜/ .bashrcファイルにこれを追加しますこのコマンドを実行します

gedit〜/ .bashrc

その中にパスを追加します

エクスポートPATH = $ PATH:/ opt / node / bin

2.source〜/ .bashrc

(ウブントゥ)


6

その行をコンソール構成ファイル(例:.bashrc)または.profileに追加できます。


2
私はこれらのファイルをどちらも持っていません/home/(username)
Upvoteをクリックし

3
@ClickUpvote:どのシェルを使用していますか?(そして、ドットで始まるファイルは隠さls -aれています。それらを見るようなものが必要です。)
デビッド・シュワルツ

それらのファイル(bashrcまたはプロファイル)がない場合は、手動で作成して自動的に使用することができます
trve.fa7ad

4

PATH変数を永続的に追加する

グローバル:

echo "export PATH=$PATH:/new/path/variable" >> /etc/profile

ローカル(ユーザーのみ):

echo "export PATH=$PATH:/new/path/variable" >> ~/.profile

以下のためのグローバルな再起動。以下のためのローカル再ログイン。

前:

$ cat /etc/profile 

#!/bin/sh

export PATH=/usr/bin:/usr/sbin:/bin:/sbin

後:

$ cat /etc/profile 

#!/bin/sh

export PATH=/usr/bin:/usr/sbin:/bin:/sbin
export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/new/path/variable

または、プロファイルを編集することもできます。

$ cat /etc/profile 

#!/bin/sh

export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/new/path/variable

別の方法(gniourf_gniourfに感謝):

echo 'PATH=$PATH:/new/path/variable' >> /etc/profile

ここでは二重引用符を使用しないでください。echo 'export PATH = $ PATH:/ new / path / variable' ...そしてところで、PATH変数は既にエクスポート済みとしてマークされている可能性が高いため、exportキーワードはほとんど役に立たない可能性があります。– gniourf_gniourf


1
いいえ。ここでは二重引用符を使用しないでください。echo 'export PATH=$PATH:/new/path/variable'...ちなみに、変数はすでにエクスポート済みとしてマークされている可能性がexport高いため、キーワードはほとんど役に立たない可能性がありPATHます。
gniourf_gniourf 2014年

いいえ、一重引用符内の$ PATHは補間されないため、二重引用符を使用する必要があります。BTWエクスポートも便利です。
user3439968 2014年

わかった。エコーの実行時に$ PATHが補間されるか、/ etc / profileの実行時に補間されるため、二重引用符または単一引用符を使用できます。
user3439968 2014年

1
@ user3439968実際には、複数のファイルから$ PATHに追加すると、二重引用符で多くの問題が発生します。考慮:二重引用符を使用すると、$ PATHは、以前に定義されたすべてのPATHディレクトリを含む静的文字列に変換されます。を使用/usr/localしてそれに追加すると言います~/.bashrc。ここで、を使用/opt/binして同じ変数に追加する場合は/etc/bash.bashrc、$ PATHは同じ静的文字列に変換され、その結果、$ PATHは追加されるのでなく置き換えられます...ファイルの優先順位はシステム
によって異なり

4

1。「/ etc / profile」ファイルを変更します。

#vi /etc/profile

「i」キーを押して編集ステータスに入り、カーソルをファイルの最後に移動します。追加のエントリ:

export PATH=$PATH:/path/to/dir;

「Esc」キーを押して編集ステータスを終了します。 ':wq'ファイルを保存します。

2.構成を有効にする

source /etc/profile

説明:プロファイルファイルはすべてのユーザーに対して機能します。アクティブユーザーに対してのみ有効にする場合は、「。bashrc」ファイルを設定します


4

多くの調査の結果、私はこの簡単な解決策を見つけました(私は基本的なOSを使用しています)。次のリンクに触発されました。

次のコマンドを実行して、.bashrcファイルを編集モードで開きます。[viまたは他のエディタを使用することもできます]。

~$ sudo nano ~/.bashrc

ファイルの最後に次の行を追加して保存します。

export PATH="[FLUTTER_SDK_PATH]/flutter/bin:$PATH"

例えば ​​:

export PATH="/home/rageshl/dev/flutter/bin:$PATH"

ここに画像の説明を入力してください

私はこれがUbuntuディストリビューションのフラッターにパスを設定するための永久的な解決策だと思います

これがお役に立てば幸いです。


3

exportコマンドを追加するファイルは、ログインモードか非ログインモードかによって異なります。

ログインモードの場合、探しているファイルは/ etc / bashまたは/etc/bash.bashrcのいずれかです。

非ログインモードの場合は、ファイル/.profileまたはディレクトリ/.profiles.d内のファイルを探しています。

システム変数がある場合、上記のファイル。


3

次の行で/etc/profile.dフォルダスクリプトに追加[name_of_script].shexport PATH=$PATH:/dir/etc/profile.dフォルダ内のすべてのスクリプトは/etc/profile、ログイン時に自動的に実行されます。


環境のカスタマイズ方法として推奨される方法
Yuriy

1
これは、設定をシステム全体に適用したい場合のみです。これはおそらく最も一般的な使用例ではありません。ほとんどのユーザーは、パスをローカルに設定することを望んでいます(または必要とする必要があります)。ほとんどのユーザー/ロールは、状況に応じて異なる操作を実行しており、前提条件が少ないほど良いです。
mpowered

@mpowered、そうです、これはシステム全体のみです。ローカルでPATHを変更する場合は、同じエクスポートを〜/ .profileまたは〜/ .bashrcに追加する必要があります。ここでは、ログインシェルが〜/ .profileを読み取り、対話型シェルが〜/ .bashrcを読み取ることを検討する必要があります。たとえばsshはログインを行わないため、これは非常に重要です。したがって、〜/ .profileは読み取られません。/ etc / profile内のsuse source〜/ .bashrcのようないくつかの配布。しかし、すべてのLinuxに共通するわけではありません '
Yuriy

3

Zues77は正しい考えを持っています。OPは、「これを使って自分のやり方をハックする方法を教えてください」とは言いませんでした。OPは$ PATHに永続的に追加する方法を知りたがっていました。

sudo nano /etc/profile

これは、すべてに対して設定される場所であり、$ PATHを必要とするすべてのものに対して変更するのに最適な場所です。


3

私の答えはgo-langonの設定に関するものですUbuntu linux/amd64。環境変数(GOPATHGOBIN)のパスを設定し、端末出口でそれを失い、source <file_name>毎回それを再構築する という同じ問題に直面しました。パスを置くのは間違いでした(GOPATHそしてGOBIN~/.bash_profileフォルダー内。いくつかの良い時間を無駄にした後、私は解決策を配置することが分かったGOPATHGOBINして~/.bash_rcた方法でファイル:

export GOPATH=$HOME/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOPATH:$GOBIN

そうすることで、goインストールは正常に機能し、パスの損失はありませんでした。

編集1:この問題が関連する可能性のある理由は、ubuntuターミナルやgoコードを実行するgnome-terminalなどの非ログインシェル~./bash_rcの設定が~/.bash_profileファイルから取得され、ログインシェルの設定がファイルから取得されることです、そして~/.profileファイルから~/.bash_profileファイルに到達できないはファイル。


3

MacOSを実行していて、信頼できるバイナリがあり、システム全体で使用できるようにしたいが、バイナリが含まれるディレクトリをPATHに追加する必要がない場合は、コピー/移動を選択できます。へのバイナリ/usr/local/bin。これはすでにPATHに含まれているはずです。これにより、ターミナルですでにアクセスできる他のバイナリと同様に、バイナリが実行可能になります。


3

次のコマンドを使用して直接追加できます。

echo 'export PATH=$PATH:/new/directory' >> ~/.zshrc
source ~/.zshrc

2
質問にはのラベルが付いているbashため、あまり役に立ちません。
ローレンツアルベ2016

2
これは有効な回答です->タイトルはLinuxについてのみ言及しているので、bashとALSO zshも同様です...タグ付けが「bash」のみの場合、タグにも「zsh」を追加する必要があります
Carlos Saltos

2

最も簡単な方法は次の行です
PATH="<directory you want to include>:$PATH"
。ホームディレクトリの.bashrcファイル内。
ターミナルを閉じたり、PCを再起動してもリセットされません。その永久


1
@quantあなたが言うことをするなら、それはあなたの設定を永久に設定します。ターミナルを閉じても動作します。
エドワードトーバルズ2014年

1

私は最もエレガントな方法だと思います:

1.〜。/ bashrcファイルにこれを追加します

if [ -d "new-path" ]; then
  PATH=$PATH:new-path
fi

2.ソース / .bashrc

(ウブントゥ)


上記の後にパスを表示するには:printf "%s \ n" $ PATH
Robot70

1

パーマネントパスを追加する1つの方法は、私にとってはうまくいきました:

    cd /etc/profile.d
    touch custom.sh
    vi custom.sh 
    export PATH=$PATH:/path according to your setting/

コンピュータを再起動すると、ここでパスが恒久的に乾杯します。


実際にコンピュータを再起動する必要はありません。ログアウトして再度ログインするだけで十分です。ファイルを編集せずに変更を簡単にバックアウトできるため、これは非常に洗練されたソリューションです。ifステートメントを指定して、システムにディレクトリが存在しない場合でも、PATH変数に追加されないようにするのも簡単です。
ワーウィック、

0

debianディストリビューションの場合、次のことを行う必要があります。

    - edit ~/.bashrc  e.g: vim ~/.bashrc 
    - add export PATH=$PATH:/path/to/dir
    - then restart your computer. Be aware that if you edit ~/.bashrc  as root, your environment variable you added will work only for root

0

これはワンライナーです。行をに追加し.bashrcます。行は、ディレクトリがすでにパスに追加されているかどうかを確認し、追加されていない場合は追加します。これにより、ソーシングするたびにパスにディレクトリが複製されるのを防ぎます.bashrc

echo "[[ \":\$PATH:\" != *\":$(pwd)/path/to/add:\"* ]] && export PATH=\"\${PATH:+\${PATH}}:$(pwd)/path/to/add\"" >> ~/.bashrc

source ~/.bashrc
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.