web-dev-qa-db-ja.com

すべてのユーザーのシステム$ PATHにパスを追加する方法

一部のプログラムを/opt/xxx/binにインストールした後、すべてのユーザーの非ログインシェルの/opt/xxx/binをシステム$PATHに追加します。私は何をすべきか?

7
Yang Bo

PAM(最近のほとんど)を使用するDebianおよびその他のシステムでは、/etc/environmentに環境変数(PATHを含む)を設定できます。これは pam_env モジュール(authセクションまたはsessionセクションのいずれか)を使用するすべてのログインメソッドで機能します。それらすべて(少なくともログインしてコマンドを実行する方法を提供するもの)である必要があります。

デフォルトのパスは、ジョーが言ったように/etc/profileで設定できますが、$HOME/.profileでも設定できます。自分でコンパイルしたパッケージもたくさんあります(共通のプロシージャ./configure --prefix=/opt/<name>を使用して)/optにインストールしました。追加の手間をかけずに/opt/<name>/binでバイナリを実行するには

OPTDIR=/opt

for i in $OPTDIR/* ; do
    BINDIR=$i/bin
    if [ -d $BINDIR ] ; then
        if [ -z $PATH ] ; then
            PATH=$BINDIR
        else
            PATH=$BINDIR:$PATH
        fi
    fi
done

export PATH

私の$HOME/.profileにあなたの場合は/etc/profileになります。今後、/optにパッケージをインストールしても、パスは自動的に/opt/.*/binに追加されるため、$PATHの関連バイナリにアクセスする必要はありません。

追加のソフトウェアは必ずしも安定している必要はないので、$HOME/.profileよりも/etc/profileを優先します。


小さな注意:/etc/.profileそれぞれ$HOME/profileはデフォルトのシェルではなくdashによって実行されます。ブートプロセス中の負荷を軽減するbashの軽量バリアント。

2
user1146332

Gilles によるserverfaultで最も優れた答えを見つけました:

DebianのすべてのユーザーのPATHをどのように設定しますか?

PATHが設定される最初の場所は/etc/login.defsです。 root用の設定と他のすべての人用の設定があります。

環境変数を定義できるもう1つの場所は/etc/environmentです。これらの設定はすべてのユーザーに適用されます(そこで任意のシェルコードを作成することはできません)。

環境変数を定義できる3番目の場所は/etc/profileです。そこで任意のシェルコードを書くことができます。ユーザー固有の設定が必要な場合は、対応するユーザーごとのファイル~www-data/.profileがあります。ただし、これはコンソールの対話型ログインにのみ適用されます。特に、明示的に/etc/profileをソースとしない限り、cronジョブには適用されません。

ユーザーのcrontabでそのPATH設定のみが必要な場合は、crontabの先頭に書き込むことができます。完全なリスト(PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/zend/bin)が必要ですが、変数置換は使用できません(PATH=$PATH:/usr/local/zend/binはそこで機能しません)。

1
Beetle

デフォルトのパスは/ etc/profileで設定できます

しかし、私はちょうど私のUbuntuシステムを探していて、それは/ etc/environmentに設定されています

0
Joe