web-dev-qa-db-ja.com

すべてのユーザーに対してLinuxコマンドプロンプトを変更する最も効果的な方法は?

私はいくつかのマシンを持っていますが、ホスト名は本当に長いです。つまり、companyname-ux-staging-web1.companyname.comです。だから私のプロンプトは次のようになります

[root@mycompany-ux-staging-web1 ~]#

作業量が最も少ないすべてのマシンのすべてのユーザーに対して、これを短縮したいと思います。私が読んだことから、私にはいくつかの選択肢がありますが、それらにはすべて欠点があります。

ホスト名を変更することはできますが、それはアプリケーションに影響を与える可能性があります。良い選択ではありません。

また、ログイン時にすべてのユーザーの$ PS1を変更して、既存のユーザーのすべての.bashrcを編集し、潜在的な新しいユーザーの/etc/skel/.bashrcを編集することもできます。これは、10台を超えるマシンでの多くの作業です。

私の最善の選択肢は何ですか、または私が見落としているものは何ですか?

5
incredimike

おそらく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`
6
Michael Lowman

これらの10台のサーバーに新しい構成を展開するために使用している既存の構成管理よりも多くの作業を行う必要はありません。これが組織の持続的な問題である場合は、Puppet/Chef/Cfengineのような構成管理ツールとMCollective/RunDeck/Capistrano/Fabricのようなデプロイメントツールを検討する必要があります。

3
jgoldschrafe

/ etc/profileを編集します

/ etc/profileはユーザーがログインしたときに実行されます。〜/ .bashrcは他のシェルに対して実行されます(たとえば、xtermを開く)

エクスポートPS1 = "[\ e [0; 35m] [\ u\t\h\W]\$ [\ e [0m]"

あなたはおそらく\ hを取り出したいと思うでしょう

  • \ u:現在のユーザー名を表示します
  • \ h:ホスト名を表示します
  • \ W:現在の作業ディレクトリを出力します
  • \ H:FQDNホスト名を表示します
  • \ @:現在の時刻を午前/午後12時間形式で表示します
  • \ t:24時間HH:MM:SS形式の現在時刻
  • \ e:ASCIIエスケープ文字(033)

https://wiki.archlinux.org/index.php/Color_Bash_Prompt

3
jag7720

ディレクトリ/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プロンプトを変更するために、ファイルを変更する必要はありません。

3
DemonCcC

/ etc/bashrcでシステム全体のbashrcを編集できますが、シェルアクセス権を持つユーザーは簡単に上書きできます。 scpを使用して、ユーザーリストの新しい.bashrcをプッシュするスクリプトを簡単に作成できます。

1
egorgry

前述のように、scpはおそらく単純なスクリプトで最も簡単です。別のオプションはrsyncです。また、cronでsshキーを使用して実行することもできます。

1
Dan M.

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が苦手です。他の誰かがこの分野についてもっと洞察を提供できるかもしれません。この情報がお役に立てば幸いです。

0
Andy Shinn

私はこれを複数の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
0
Ulukai