Linux在批量伺服器管理中實用的PS1命令提示符格式
阿新 • • 發佈:2022-05-05
作為一個大公司的運維,手頭管理了成百上千的伺服器是家常便飯,甚至更多。而我們一般都是用跳板機登陸,由於這些機器一般都是克隆或者虛擬化出來的,所以登陸後的命令列提示符幾乎是一個模子刻出來的,比如都是:[root@localhost ~]#
這時,我們肯定會經常遇到這樣一個困擾:操作伺服器時因某事中斷,回頭繼續操作的時候肯定會 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 ]#|$
比如:
[[email protected] /data/ ]
所以 PS1 可以如下設定:
export PS1='[e[32m][[email protected]:[e[m][e[33m]w[e[m][e[32m]][e[m]$ '
但是機器太多,這個 IP 總不能每次手動修改,所以還是寫個指令碼來修改吧!(當然,你也可以先獲取 IP,賦值變數加入到 PS1)
指令碼很簡單:
#!/bin/sh
#########################################################################
# Update PS1 like [[email protected] /data]# #
#########################################################################
#先判斷網絡卡是否存在,我這邊eth1是內網網絡卡
ifconfig eth1 >/dev/null 2>&1
if [[ $? != 0 ]]
then
echo 'interface eth1 not exsit!';
exit 1
fi
#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 7
test -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 1
fi
function Export()
{
echo "export PS1='[e[32m][u@${eth1_IP}:[e[m][e[33m]w[e[m][e[32m]][e[m]\$ '">>${1} &&
echo -e "