新しいサーバーを起動し、それらすべてでCentOSを実行しています。 Ruby Enterprise Editionを正常にインストールした後、REE/bin(/usr/lib/Ruby-enterprise/bin
にあります)ディレクトリーを追加して、それをデフォルトにするRuby =サーバー上のインタープリター。
現在のシェルセッションに追加するだけで、次のことを試しました。
export PATH=/usr/lib/Ruby-enterprise/bin:$PATH
恒久的にすべてのユーザーの$ PATHにこのディレクトリを追加する正しいアプローチは何でしょうか。現在、rootとしてログインしています。
前もって感謝します!
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
変数が更新されます。
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ステートメントの下。これで私の問題は解決しました。
「対話型ログインシェルは、/ 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で動作しました。
申し訳ありませんが、次の回答は、ユーザーのプロファイル用の質問であり、誰かの役に立つ場合に備えて、質問を残しました。
.bash_profileを変更する
nano ~/.bash_profile
次に、ファイルのどこかに、次のように区切られたパスを追加/変更します。
PATH=$PATH:$HOME/bin:/your/path
export PATH
次に、プロファイルをリロードします
source ~/.bash_profile
またはログアウトして再度ログイン
pATHを確認すると、新しく追加されたパスが含まれているはずです
echo $PATH