這時,我們肯定會經常遇到這樣一個困擾:動作伺服器時因某事中斷,回頭繼續操作的時候肯定會ifconfg確認下是否是我要操作的伺服器,因為無法從表象識別。
所以,我們很有必要將這個PS1命令列提示符最佳化一下。每個營運攻城獅肯定都有自己的習慣,不過我還是推薦一個伺服器批量管理中比較使用的PS1格式吧!
PS1是神馬?PS1是linux裡頭的一個預設的環境變數,至於當前系統的PS1是如何設定的,你可以使用命令“env|grep PS1”來查看 。
其實PS1就是用來設定命令提示字元格式的環境變數。
下面貼一下PS1的配置參數:
\d :代表日期,格式為weekday month date,例如:"Mon Aug 1"\H :完整的主機名稱。例如:我的機器名稱為:fc4.linux,則這個名稱就是fc4.linux\h :僅取主機的第一個名字,如上例,則為fc4,.linux則被省略\t :時間顯示為24小時格式,如:HH:MM:SS\T :時間顯示為12小時格式\A :時間顯示為24小時格式:HH:MM\u :目前使用者的帳號名稱\v :BASH的版本資訊\w :完整的工作目錄名稱。家目錄會以 ~代替\W :利用basename取得工作目錄名稱,所以只會列出最後一個目錄\# :下達的第幾個命令\$ :提示字元,如果是root時,提示符為:# ,普通使用者則為:$
當然,為了更好的識別,我們還可以加入一些顏色設定,這個就不贅述了,百度一下shell顏色即可,當然記得參考下文的PS1進行自訂。
為了更好的區分伺服器,我建議使用如下格式:
[username@ipaddress /pwd ]#|$ 比如:[root@192.168.1.1 /data/ ]
所以PS1可以如下設定:
export PS1='\[\e[32m\][\u@192.168.1.1:\[\e[m\]\[\e[33m\]\w\[\e[m\]\[\e[32m\]]\[\e[m\]\$ '
但是機器太多,這個IP總不能每次手動修改,所以還是寫個指令碼來修改吧!(當然,你也可以先擷取IP,賦值變數加入到PS1)
指令碼很簡單:
#!/bin/sh########################################################################## Update PS1 like [root@192.168.1.113 /data]# ###########################################################################先判斷網卡是否存在,我這邊eth1是內網網卡ifconfig eth1 >/dev/null 2>&1if [[ $? != 0 ]]then echo 'interface eth1 not exsit!'; exit 1fi#Centos/Redhat 7 ifconfig顯示的結果不是 inet addr: 而是 inet 直接加IP,所以這裡需要判斷下:function Get_eth1IP(){ if [[ $1 -eq 7 ]] then #for centos 7 eth1_IP=$(ifconfig eth1 |awk '/inet / {print $2}'|awk '{print $1}') else eth1_IP=$(ifconfig eth1 |awk -F":" '/inet addr:/ {print $2}'|awk '{print $1}') fi} test -f /etc/redhat-release && grep 7 /etc/redhat-release >/dev/null 2>&1 && Get_eth1IP 7test -f /etc/centos-release && grep 7 /etc/redhat-release >/dev/null 2>&1 && Get_eth1IP 7 || Get_eth1IP echo $eth1_IP | grep -E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" >/dev/null 2>&1 if [[ $? != 0 ]]then echo 'eth1_IP is empty!' exit 1fifunction Export(){ echo "export PS1='\[\e[32m\][\u@${eth1_IP}:\[\e[m\]\[\e[33m\]\w\[\e[m\]\[\e[32m\]]\[\e[m\]\\$ '">>${1} && \ echo -e "\033[32m Update \033[0m \033[33m${1}\033[33m \033[32mSuccess! Please relogin your system for refresh... \033[0m"} function home_env(){ if [[ ! -z $1 ]] then home=$1 else home=/root fi #有的使用者可能會在家目錄下自訂一些配置,即 .proflie這個隱藏檔案,所以也需要更新 test -f $home/.profile && ( sed -i '/export PS1=/d' $home/.profile Export $home/.profile )} #擷取目前使用者id,如果是root組的則可以操作/etc/profileuserid=$(id | awk '{print $1}' | sed -e 's/=/ /' -e 's/(/ /' -e 's/)/ /'|awk '{print $2}')if [[ $userid = 0 ]]then #for all sed -i '/export PS1=/d' /etc/profile Export /etc/profile #for root home_env #如果其他使用者需要修改,只要開啟一下三行,並將other修改成使用者名稱 #id other >/dev/null 2>&1 && ( # home_env ~other #)else #for userself home_env ~fi
好了,最後直接 source ./update_PS1.sh 即可看到效果:
重新登陸或source /etc/profile,就可以看到效果了:
這樣設定之後,就能清晰的知道現在操作的是伺服器是哪一台,而不至於混淆。