1. 程式人生 > 其它 >Linux在批量伺服器管理中實用的PS1命令提示符格式

Linux在批量伺服器管理中實用的PS1命令提示符格式

作為一個大公司的運維,手頭管理了成百上千的伺服器是家常便飯,甚至更多。而我們一般都是用跳板機登陸,由於這些機器一般都是克隆或者虛擬化出來的,所以登陸後的命令列提示符幾乎是一個模子刻出來的,比如都是:[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 "