Linux運維人員應該知道的Bash實踐經驗
今天小編要跟大家分享的文章是關于Linux運維人員應該知道的Bash實踐經驗。每個職業都有最常用的工具。對于許多系統管理員來說,shell可能是比較熟悉的。在大多數Linux和其他類Unix系統上,默認的shell是Bash。Linux入門新手和正在Linux學習的小伙伴快來看一看吧,希望能夠對大家有所幫助!
Bash是一個相當古老的程序,它起源于20世紀80年代后期。但它建立在更多,更老的shell上,比如C shell(csh)。我們來看看一些基礎知識。
相信你在某些時候,曾無意中以root身份運行命令并導致某種問題?這里有一些非常簡單的技巧可以防止你遇到這樣的問題。
1、使用別名
首先,為mv和rm等命令設置別名,指向mv -I和rm -I。這將確保運行rm -f/boot至少要求你確認。在紅帽企業版Linux中,如果你使用root帳戶,則默認設置這些別名。
如果你還要為普通用戶帳戶設置這些別名,只需將這兩行放入主目錄中名為.bashrc的文件中(這些也適用于sudo):
alias mv=’mv -i’
alias rm=’rm -i’
2、你的根提示符
你可以采取的另一項措施是防止意外發生,確保你在使用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個用法列出來(我是這樣認為的)。
1、 Bash腳本可能變得復雜,添加注釋沒那么復雜。因為如果你在周末之后回到工作中,不得不花時間搞清楚你上周五想要做什么的話,別忘了添加注釋。
2、 用花括號括起所有變量名,比如 {variable} _suffix成為可能,并提高整個腳本的一致性。
3、 評估表達式時不要使用反引號;請改用$()語法。可以使用:
for file in $(ls); do
反之:
for file in `ls`; do
前一個選項是可嵌套的,更易于閱讀,并使一般的系統管理員感到滿意。不要使用反引號。
4、 一致性很好。選擇一種風格并在整個腳本中堅持下去。顯然,我更喜歡人們在反引號中選擇()語法。可以使用:¨G6G反之:¨G7G前一個選項是可嵌套的,更易于閱讀,并使一般的系統管理員感到滿意。不要使用反引號。8.一致性很好。選擇一種風格并在整個腳本中堅持下去。顯然,我更喜歡人們在反引號中選擇()語法,并將其變量放在在花括號中。
5、 使用適當的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
此外,如果你不確定變量的內容(例如,在解析用戶輸入時),請引用變量以防止解釋某些特殊字符,并確保該變量被視為單個詞,即使它包含空格。
7、 更喜歡使用雙等號(==),即使比較Bash中的字符串。這是一致性的問題,盡管,對于字符串比較,只有一個等號會起作用,我的考慮立即變為“單個等于是一個賦值運算符!”
8、 使用適當的退出代碼。確保如果你的腳本無法執行某些操作,則會向用戶顯示已寫入的失敗消息(最好通過解決問題的方法)并發送非零退出代碼:
# we have failed
echo “Process has failed to complete, you need to manually restart the whatchamacallit”
exit 1
這樣可以更容易地以編程方式從另一個腳本調用腳本并驗證其成功完成。
9、使用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}
10、 特別是如果你正在編寫大型腳本,特別是如果你與其他腳本一起處理該大型腳本,請考慮在函數內部定義變量時使用local關鍵字。local關鍵字將創建一個局部變量,該變量只在該函數中可見。這限制了沖突變量的可能性。
11、 每個系統管理員有時必須這樣做:在控制臺上調試一些東西,可以是數據中心的真實服務器,也可以是虛擬化平臺的虛擬服務器。如果你必須以這種方式調試腳本,你會感謝你自己記住這個:不要讓你的腳本中的行太長!
在許多系統上,控制臺的默認寬度仍為80個字符。如果你需要在控制臺上調試腳本并且該腳本有很長的行,那么將是一個悲劇。此外,具有較短行的腳本,默認值仍為80個字符,在普通編輯器中也更容易閱讀和理解!
以上就是小編今天為大家分享的關于Linux運維人員應該知道的Bash實踐經驗的文章,希望本篇文章能夠對正在從事Linux相關工作的小伙伴們有所幫助。想要了解更多Linux相關知識記得關注馬哥教育官網。
聲明:文章來源于網絡,侵刪!