私はいくつかのマシンを持っていますが、ホスト名は本当に長いです。つまり、companyname-ux-staging-web1.companyname.comです。だから私のプロンプトは次のようになります
[root@mycompany-ux-staging-web1 ~]#
作業量が最も少ないすべてのマシンのすべてのユーザーに対して、これを短縮したいと思います。私が読んだことから、私にはいくつかの選択肢がありますが、それらにはすべて欠点があります。
ホスト名を変更することはできますが、それはアプリケーションに影響を与える可能性があります。良い選択ではありません。
また、ログイン時にすべてのユーザーの$ PS1を変更して、既存のユーザーのすべての.bashrcを編集し、潜在的な新しいユーザーの/etc/skel/.bashrcを編集することもできます。これは、10台を超えるマシンでの多くの作業です。
私の最善の選択肢は何ですか、または私が見落としているものは何ですか?
おそらくPS1をエクスポートする必要があります。ユーザーのbashrcを編集する代わりに、システムのbashrcを編集する必要があります。ユーザーは自分の選択でプロンプトをオーバーライドできる必要があります。
次に、ファイルを配布するには、scpまたはclustersshのいずれかを使用します。 rsaキーを設定した場合、scpのパスワードを複数回入力する必要はありません。
eval `ssh-agent`
ssh-add
for h in `cat ~/hostlist`; do
scp ~/newbashrc ${h}:/etc/bashrc
done
eval `ssh-agent -k`
これらの10台のサーバーに新しい構成を展開するために使用している既存の構成管理よりも多くの作業を行う必要はありません。これが組織の持続的な問題である場合は、Puppet/Chef/Cfengineのような構成管理ツールとMCollective/RunDeck/Capistrano/Fabricのようなデプロイメントツールを検討する必要があります。
/ etc/profileを編集します
/ etc/profileはユーザーがログインしたときに実行されます。〜/ .bashrcは他のシェルに対して実行されます(たとえば、xtermを開く)
エクスポートPS1 = "[\ e [0; 35m] [\ u\t\h\W]\$ [\ e [0m]"
あなたはおそらく\ hを取り出したいと思うでしょう
ディレクトリ/etc/profile.d/に実行可能スクリプトを作成できます。例:/etc/profile.d/custom_Prompt.sh、次の内容を使用します。
#!/bin/sh
export Prompt_COMMAND=’export PS1="[\e[0;35m][\u \t \h \W]\$ [\e[0m]"‘
この方法では、すべてのユーザーのbashプロンプトを変更するために、ファイルを変更する必要はありません。
/ etc/bashrcでシステム全体のbashrcを編集できますが、シェルアクセス権を持つユーザーは簡単に上書きできます。 scpを使用して、ユーザーリストの新しい.bashrcをプッシュするスクリプトを簡単に作成できます。
前述のように、scpはおそらく単純なスクリプトで最も簡単です。別のオプションはrsyncです。また、cronでsshキーを使用して実行することもできます。
2番目のオプションは、ファイルを更新するために一度にすべてのサーバーにコマンドを送信できる場合に適しています。このためには、Linuxでpssh( http://code.google.com/p/parallel-ssh/ )またはPuTTY Command Sender( http://www.millardsoftware)を使用できます。 Windows上のPuTTYではcom/puttycs )。
Skel.bashrcファイルと/ etc/bashrcファイルおよびusersbashrcファイルの行を置き換えることができるsed/awkコマンドを作成できます。次に、これを1つのコマンドとしてすべてのシステムに送信します。
Sedコマンドが最も処理される可能性があります。残念ながら、私はsedとawkが苦手です。他の誰かがこの分野についてもっと洞察を提供できるかもしれません。この情報がお役に立てば幸いです。
私はこれを複数のubuntuサーバーに対して行う必要があり、すべてのユーザーに対して、ホスト名だけではなく(プロンプトの反対側に)完全なFQDNをプロンプトに表示したいと考えました。 /etc/bash.bashrcを変更するだけでは不十分であることがわかりました。また、異なるprofile.dファイルをいじってみましたが、ホーム.bashrcは常に最後に適用されるため、役に立たなかった。
私がやったことは、すべてのサーバーにansibleで以下のスクリプトをプッシュすることでした。
#!/bin/bash
for userfolders in `ls -d /home/*/`
do
for bashfiles in `ls -1 ${userfolders}.bashrc`
do
sed -i 's|u@\\h|u@\\H|g' $bashfiles
done
done
sed -i 's|u@\\h|u@\\H|g' /etc/bash.bashrc
sed -i 's|u@\\h|u@\\H|g' /etc/skel/.bashrc
sed -i 's|u@\\h|u@\\H|g' /root/.bashrc