我有几台机器,主机名很长。例如 companyname-ux-staging-web1.companyname.com。所以我的提示符看起来像
[root@mycompany-ux-staging-web1 ~]#
我想用最少的工作量为所有机器上的所有用户缩短这一过程。据我所知,我有几个选择,但它们都有缺点。
我可以更改主机名,但这可能会影响应用程序。这不是一个好选择。
我还可以通过编辑现有用户的所有 .bashrc 来更改所有用户登录时的 $PS1,并为潜在的新用户编辑 /etc/skel/.bashrc。这在 10 台以上的机器上需要做大量工作。
我的最佳选择是什么或者我忽略了什么?
答案1
您可能应该导出 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`
答案2
您可以在目录 /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
它不应该比您用来在这十台服务器上部署新配置的任何现有配置管理工作量更大。如果这对您的组织来说是一个长期存在的问题,您肯定希望研究像 Puppet/Chef/Cfengine 这样的配置管理工具和像 MCollective/RunDeck/Capistrano/Fabric 这样的部署工具。
答案4
您可以在 /etc/bashrc 中编辑系统范围的 bashrc,但任何具有 shell 访问权限的用户都可以轻松覆盖它。您可以非常轻松地编写脚本,使用 scp 为用户列表推送新的 .bashrc。