web-dev-qa-db-ja.com

CentOSの$ PATHにディレクトリを追加しますか?

新しいサーバーを起動し、それらすべてでCentOSを実行しています。 Ruby Enterprise Editionを正常にインストールした後、REE/bin(/usr/lib/Ruby-enterprise/binにあります)ディレクトリーを追加して、それをデフォルトにするRuby =サーバー上のインタープリター。

現在のシェルセッションに追加するだけで、次のことを試しました。

export PATH=/usr/lib/Ruby-enterprise/bin:$PATH

恒久的にすべてのユーザーの$ PATHにこのディレクトリを追加する正しいアプローチは何でしょうか。現在、rootとしてログインしています。

前もって感謝します!

90
vonconrad

CentOSがこのファイルの更新を公開するたびにすべての変更が失われるため、このようなことを行うために/etc/profileを編集することはお勧めできません。これがまさに/etc/profile.dの目的です。

# echo 'pathmunge /usr/lib/Ruby-enterprise/bin' > /etc/profile.d/ree.sh
# chmod +x /etc/profile.d/ree.sh

再度ログインして、(安全に)更新されたPATHをお楽しみください。

# echo $PATH
/usr/lib/Ruby-enterprise/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
# which Ruby
/usr/lib/Ruby-enterprise/bin/Ruby

再度ログインする代わりに、プロファイルをリロードすることができます:

# . /etc/profile

これにより、$PATH変数が更新されます。

119
Mike Conigliaro

Fmonkのアドバイスに従って、チェックアウトしました/etc/bashrc、「環境に関するものは/ etc/profileに入っている」と書いてあることに気づきました。 /etc/profile、 これを見た:

pathmunge () {
    if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then
       if [ "$2" = "after" ] ; then
          PATH=$PATH:$1
       else
          PATH=$1:$PATH
       fi
    fi
}

[...]

# Path manipulation
if [ "$EUID" = "0" ]; then
    pathmunge /sbin
    pathmunge /usr/sbin
    pathmunge /usr/local/sbin
fi

私の問題を解決するために、私はpathmunge /usr/lib/Ruby-enterprise/bin ifステートメントの下。これで私の問題は解決しました。

11
vonconrad

「対話型ログインシェルは、/ etc/passwdファイルを読み取ることにより、/ bin/loginを使用してログインが成功した後に開始されます。このシェルの呼び出しは、通常、起動時に/ etc/profileおよびそれに相当するプライベートな〜/ .bash_profileを読み取ります。

対話型の非ログインシェルは通常、シェルプログラム([Prompt] $/bin/bashなど)を使用してコマンドラインで起動するか、/ bin/suコマンドで起動します。対話型の非ログインシェルも、グラフィカル環境内からxtermやkonsoleなどのターミナルプログラムで起動します。このタイプのシェル呼び出しは通常、親環境をコピーし、ユーザーの〜/ .bashrcファイルを読み取って、追加の起動構成手順を確認します。 " http://www.linuxfromscratch.org/blfs/view/6.3/postlfs/profile .html

したがって、私は環境変数をbashrcに配置しません。これは、一般的な慣習に反するだけでなく、グラフィカルデスクトップ環境から端末を呼び出すときにbashrc変数も見逃してしまうためです。

Redhatの/etc/profileで、次のコメントを見つけました:

「システム全体のエイリアスと関数は/ etc/bashrcに配置する必要があります。個人用の環境変数とスタートアッププログラムは〜/ .bash_profileに配置する必要があります。個人用のエイリアスと関数は〜/ .bashrcに配置する必要があります。」

したがって、ユーザーごとに環境変数を設定する場合は、ユーザーの.bash_profileファイルで設定します。

私が読んだ.bash_profileに向かいます:

「個人的な環境変数とスタートアッププログラム。

個人のエイリアスと関数は〜/ .bashrcに配置する必要があります。システム全体の環境変数と起動プログラムは/ etc/profileにあります。システム全体のエイリアスと関数は/ etc/bashrcにあります。 "

結論
たとえば、/ sbinにあるプログラムをrootだけに表示させたい場合は、そのパスをrootの.bash_profileファイルに追加します。ただし、ボックスにインストールされているルート固有のプログラムをすべてのユーザーに表示する場合は、/sbin/etc/.profileに入れます。これで、すべてのユーザーがタブ補完を使用してルート固有のプログラムを検索し、必要に応じて権限を昇格できます。

特殊なケース:SSH
コマンドラインでsshを起動すると、対話型ログインシェルが起動します。ただし、この場合/etc/profileは読み取られません。各ユーザーの.bash_profileファイルで環境変数を定義すると、sshで動作しました。

4
user54883

申し訳ありませんが、次の回答は、ユーザーのプロファイル用の質問であり、誰かの役に立つ場合に備えて、質問を残しました。

.bash_profileを変更する

nano ~/.bash_profile

次に、ファイルのどこかに、次のように区切られたパスを追加/変更します。

 PATH=$PATH:$HOME/bin:/your/path
 export PATH

次に、プロファイルをリロードします

source ~/.bash_profile

またはログアウトして再度ログイン

pATHを確認すると、新しく追加されたパスが含まれているはずです

echo $PATH
3
GiorgosK