www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 芯聞號 > 充電吧
[導讀]使 Bash 工作的更好的技巧。

使 Bash 工作的更好的技巧。

每個行業(yè)都有一個該行業(yè)的大師們最常使用的工具。 對于許多系統(tǒng)管理員來說,這個工具就是他們的?shell。 在大多數(shù) Linux 和其他類 Unix 系統(tǒng)上,默認的 shell 是 Bash。

Bash 是一個相當古老的程序——它起源于 20 世紀 80 年代后期——但它建立在更多更老的 shell 上,比如 C shell(csh),csh 至少是它 10 年前的前輩了。 因為 shell 的概念是那么古老,所以有大量的神秘知識等待著系統(tǒng)管理員去吸收領悟,使其生活更輕松。

我們來看看一些基礎知識。

在某些時候,誰曾經(jīng)無意中以 root 身份運行命令并導致某種問題??舉手

我很確定我們很多人一度都是那個人。 這很痛苦。 這里有一些非常簡單的技巧可以防止你再次碰上這類問題。

使用別名

首先,為?mv?和?rm?等命令設置別名,指向?mv -i?和?rm -i。 這將確保在運行?rm -f /boot時至少需要你確認。 在 Red Hat 企業(yè)版 Linux 中,如果你使用 root 帳戶,則默認設置這些別名。

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


1

2

alias mv='mv -i'

alias rm='rm -i'


讓你的 root 提示符脫穎而出

你可以采取的防止意外發(fā)生的另一項措施是確保你很清楚在使用 root 帳戶。 在日常工作中,我通常會讓 root 提示符從日常使用的提示符中脫穎而出。

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

export PS1=”

[$(tput bold)$(tput setab 0)$(tput setaf 1)]

u@h:w #

[$(tput sgr0)]


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

使用了一些小技巧用于防止使用 root 帳戶時的“不小心的副作用”之后,讓我們看看 Bash 可以幫助你在日常工作中做的一些好事。

控制你的歷史

你可能知道在 Bash 中你按向上的箭頭時能看見和重新使用你之前所有(好吧,大多數(shù))的命令。這是因為這些命令已經(jīng)保存到了你家目錄下的名為?.bash_history?的文件中。這個歷史文件附帶了一組有用的設置和命令。

首先,你可以通過鍵入?history?來查看整個最近的命令歷史記錄,或者你可以通過鍵入?history 30?將其限制為最近 30 個命令。不過這技巧太平淡無奇了(LCTT 譯注: vanilla 原為香草,后引申沒拓展的、標準、普通的,比如 vanilla C++ compiler 意為標準 C++ 編譯器)。 你可以更好地控制 Bash 保存的內容以及保存方式。

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


1

HISTCONTROL=ignorespace

如果你需要以明文形式將密碼傳遞給一個命令,這就非常有用。 (是的,這太可怕了,但它仍然會發(fā)生。)

如果你不希望經(jīng)常執(zhí)行的命令充斥在歷史記錄中,請使用:


1

HISTCONTROL=ignorespace:erasedups

這樣,每次使用一個命令時,都會從歷史記錄文件中刪除之前出現(xiàn)的所有相同命令,并且只將最后一次調用保存到歷史記錄列表中。

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


1

HISTTIMEFORMAT="%F %T ?"

當我輸入?history 5?時,我得到了很好的完整信息,如下所示:


1

2

3

4

5

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、 用花括號括起所有變量名,比如?${myvariable}。 養(yǎng)成這個習慣可以使用?${variable}_suffix?這種用法了,還能提高整個腳本的一致性。

9、 計算表達式時不要使用反引號;請改用?$()?語法。 所以使用:


1

for ?file in $(ls); do

而不使用:


1

for ?file in `ls`; do

前一個方式是可嵌套的,更易于閱讀的,還能讓一般的系統(tǒng)管理員群體感到滿意。 不要使用反引號。

8、 一致性是好的。 選擇一種風格并在整個腳本中堅持下去。 顯然,我喜歡人們選擇?$()語法而不是反引號,并將其變量包在花括號中。 我更喜歡人們使用兩個或四個空格而不是制表符來縮進,但即使你選擇了錯誤的方式,也要一貫地錯下去。

7、 為 Bash 腳本使用適當?shù)尼尠閟hebang(LCTT 譯注:Shebang,也稱為?Hashbang?,是一個由井號和嘆號構成的字符序列?#!?,其出現(xiàn)在文本文件的第一行的前兩個字符。 在文件中存在釋伴的情況下,類 Unix 操作系統(tǒng)的程序載入器會分析釋伴后的內容,將這些內容作為解釋器指令,并調用該指令,并將載有釋伴的文件路徑作為該解釋器的參數(shù))。 因為我正在編寫B(tài)ash腳本,只打算用 Bash 執(zhí)行它們,所以我經(jīng)常使用?#!/usr/bin/bash?作為我的釋伴。 不要使用?#!/bin/sh?或?#!/usr/bin/sh。 你的腳本會被執(zhí)行,但它會以兼容模式運行——可能會產生許多意外的副作用。 (當然,除非你想要兼容模式。)

6、 比較字符串時,在?if?語句中給變量加上引號是個好主意,因為如果你的變量是空的,Bash 會為這樣的行拋出一個錯誤:


1

2

3

if [ ${myvar} == "foo" ]; then

??echo "bar"

fi

對于這樣的行,將判定為?false:


1

2

3

if [ "${myvar}" == "foo" ]; then

??echo "bar"

fi

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

5、 我想這是一個品味問題,但我更喜歡使用雙等號(?==?),即使是比較 Bash 中的字符串。 這是一致性的問題,盡管對于字符串比較,只有一個等號會起作用,我的思維立即變?yōu)椤皢蝹€?=?是一個賦值運算符!”

4、 使用適當?shù)耐顺龃a。 確保如果你的腳本無法執(zhí)行某些操作,則會向用戶顯示已寫好的失敗消息(最好提供解決問題的方法)并發(fā)送非零退出代碼:


1

2

3

# we have failed

echo "Process has failed to complete, you need to manually restart the whatchamacallit"

exit 1

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

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


1

2

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

echo ${myvar:=redhat}



1

2

# 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、 特別是如果你正在編寫大型腳本,或者是如果你與其他人一起開發(fā)該大型腳本,請考慮在函數(shù)內部定義變量時使用?local?關鍵字。?local?關鍵字將創(chuàng)建一個局部變量,該變量只在該函數(shù)中可見。 這限制了變量沖突的可能性。

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

在許多系統(tǒng)上,控制臺的默認寬度仍為 80 個字符。 如果你需要在控制臺上調試腳本并且該腳本有很長的行,那么你將成為一個悲傷的熊貓。 此外,具有較短行的腳本—— 默認值仍為 80 個字符——在普通編輯器中也更容易閱讀和理解!


本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉