當前位置:
首頁 > 知識 > Linux系統管理員的Bash指南,11條Bash實踐經驗!

Linux系統管理員的Bash指南,11條Bash實踐經驗!


來自:Linux中國


鏈接:https://linux.cn/article-9919-1.html


原文:https://opensource.com/article/18/7/admin-guide-bash


每個職業都有最常用的工具。對於許多系統管理員來說,shell可能是比較熟悉的。在大多數Linux和其他類Unix系統上,默認的shell是Bash。


Bash是一個相當古老的程序,它起源於20世紀80年代後期。但它建立在更多,更老的shell上,比如C shell(csh)。我們來看看一些基礎知識。


相信你在某些時候,曾無意中以root身份運行命令並導致某種問題?這裡有一些非常簡單的技巧可以防止你遇到這樣的問題。


使用別名


首先,為mv和rm等命令設置別名,指向mv -I和rm -I。這將確保運行rm -f/boot至少要求你確認。在紅帽企業版Linux中,如果你使用root帳戶,則默認設置這些別名。


如果你還要為普通用戶帳戶設置這些別名,只需將這兩行放入主目錄中名為.bashrc的文件中(這些也適用於sudo):

alias

 mv=』mv -i』

alias

 rm=』rm -i』

你的根提示符


你可以採取的另一項措施是防止意外發生,確保你在使用root帳戶時知道。我通常這樣做是為了讓我的正常日常工作中使用的提示能夠很好地突出根提示符。


如果將以下內容放入root的主目錄中的.bashrc文件中,你將看到一個黑色的紅色根提示符,清楚地表明你(或其他任何人)應該謹慎操作。

export

 PS1=」[

$(tput bold)

$(tput setab 0)

$(tput setaf 1)

]u@h:w 

# [$(tput sgr0)]」



實際上,你應該儘可能避免以root用戶身份登錄,而是通過sudo運行大多數系統管理命令,但這是另一回事。

實施了一些小技巧來幫助防止使用root帳戶的「無意的副作用」,讓我們看看Bash可以給你你在日常工作中帶來怎樣的幫助?


控制history文件你可能知道,當在Bash中按向上箭頭鍵時,你可以查看並重複使用以前的所有命令。這是因為這些命令已保存到主目錄中名為.bash_history的文件中。該歷史文件附帶了一組非常有用的設置和命令。


首先,你可以通過鍵入歷史記錄來查看整個最近的命令歷史記錄,或者你可以通過鍵入歷史記錄,或將其限制為最近30個命令。你可以更好地控制Bash保存的內容以及保存方式。


例如,如果將以下內容添加到.bashrc,則任何以空格開頭的命令都不會保存到歷史記錄列表中:

HISTCONTROL

=ignorespace

如果你需要用命令寫入明文形式的密碼。(是的,這太可怕了,但它仍然會發生。)


如果你不希望在歷史記錄中顯示經常執行的命令,請使用:

HISTCONTROL

=ignorespace:erasedups

這樣,每次使用命令時,都會從歷史記錄文件中刪除之前發生的所有事件,並且只將最後一次調用保存到歷史記錄列表中。


我特別喜歡的歷史記錄設置是HISTTIMEFORMAT設置。這將在歷史記錄文件中添加時間戳前的所有條目。例如,我使用:

HISTTIMEFORMAT

=」%F %T 「

當我輸入五條歷史記錄時,我得到了很好的完整信息,如下所示:

1009 2018-06-11 22:34:38 cat /etc/hosts

1010 2018-06-11 22:34:40 

echo

 

$foo

1011 2018-06-11 22:34:42 

echo

 

$bar

1012 2018-06-11 22:34:44 ssh myhost

1013 2018-06-11 22:34:55 vim .bashrc

這使我更容易瀏覽我的命令歷史記錄,並找到我兩天前用來建立到家中的SSH隧道。


最好的Bash實踐


在編寫Bash腳本時,我將用最好的11個用法列出來(我是這樣認為的)。


11.Bash腳本可能變得複雜,添加註釋沒那麼複雜。因為如果你在周末之後回到工作中,不得不花時間搞清楚你上周五想要做什麼的話,別忘了添加註釋。


10.用花括弧括起所有變數名,比如

 {variable} _suffix成為可能,並提高整個腳本的一致性。


9.評估表達式時不要使用反引號;

請改用$()語法。可以使用:

for

 file 

in

 $(ls); 

do



反之:

for

 file 

in

 

`ls`

do



前一個選項是可嵌套的,更易於閱讀,並使一般的系統管理員感到滿意。不要使用反引號。


8.一致性很好。選擇一種風格並在整個腳本中堅持下去。顯然,我更喜歡人們在反引號中選擇

使

¨

G

6

G

¨

G

7

G

使

滿

使

8

.

()語法,並將其變數放在在花括弧中。


7.使用適當的shebang作為Bash腳本。因為我正在編寫Bash腳本,只打算用Bash執行它們,所以我經常使用#!/ usr / bin / bash作為我的shebang。不要使用#!/ bin / sh或#!/ usr / bin / sh。你的腳本將執行,但它將以兼容模式運行。可能會產生許多意外的副作用。(當然,除非你想要兼容模式。)


6.比較字元串時,在if語句中引用變數是個好主意,因為如果你的變數是空的,Bash會為這樣的行拋出一個錯誤:

if

 [ 

${myvar}

 == 「foo」 ]; 

then

echo

 「bar」

fi



對於這樣的行,將評估為false:

if

 [ 「

${myvar}

」 == 「foo」 ]; 

then

echo

 「bar」

fi



此外,如果你不確定變數的內容(例如,在解析用戶輸入時),請引用變數以防止解釋某些特殊字元,並確保該變數被視為單個詞,即使它包含空格。


5.我想這是一個品味問題,但我更喜歡使用雙等號(==),即使比較Bash中的字元串。這是一致性的問題,儘管,對於字元串比較,只有一個等號會起作用,我的考慮立即變為「單個等於是一個賦值運算符!」


4.使用適當的退出代碼。確保如果你的腳本無法執行某些操作,則會向用戶顯示已寫入的失敗消息(最好通過解決問題的方法)並發送非零退出代碼:

# we have failed

echo 「Process has failed 

to

 complete, you need 

to

 manually restart the whatchamacallit」

exit

 

1



這樣可以更容易地以編程方式從另一個腳本調用腳本並驗證其成功完成。


3.使用Bash的內置機製為變數提供合理的默認值,或者如果未定義你希望定義的變數,則拋出錯誤:

# this sets the value of $myvar to redhat, and prints 『redhat』

echo

 

${myvar:=redhat}

# this throws an error reading 『The variable myvar is undefined, dear reader』 if $myvar is undefined

${myvar:?The variable myvar is undefined, dear reader}



2.特別是如果你正在編寫大型腳本,特別是如果你與其他腳本一起處理該大型腳本,請考慮在函數內部定義變數時使用local關鍵字。local關鍵字將創建一個局部變數,該變數只在該函數中可見。這限制了衝突變數的可能性。


1.每個系統管理員有時必須這樣做:在控制台上調試一些東西,可以是數據中心的真實伺服器,也可以是虛擬化平台的虛擬伺服器。如果你必須以這種方式調試腳本,你會感謝你自己記住這個:不要讓你的腳本中的行太長!


在許多系統上,控制台的默認寬度仍為80個字元。如果你需要在控制台上調試腳本並且該腳本有很長的行,那麼將是一個悲劇。此外,具有較短行的腳本,默認值仍為80個字元,在普通編輯器中也更容易閱讀和理解!


●編號574,輸入編號直達本文



●輸入m獲取文章

目錄

推薦↓↓↓

 



運維


更多推薦

18個技術類微信公眾號


涵蓋:程序人生、演算法與數據結構、黑客技術與網路安全、大數據技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Linux學習 的精彩文章:

Linux 下 cut 命令的 4 個基礎實用的示例
Linus 又開懟:有時候標準就是一坨屎!

TAG:Linux學習 |