日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > > 充電吧
[導(dǎo)讀]使 Bash 工作的更好的技巧。

使 Bash 工作的更好的技巧。

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

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

我們來看看一些基礎(chǔ)知識(shí)。

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

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

使用別名

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

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


1

2

alias mv='mv -i'

alias rm='rm -i'


讓你的 root 提示符脫穎而出

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

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

export PS1=”

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

u@h:w #

[$(tput sgr0)]


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

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

控制你的歷史

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

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

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


1

HISTCONTROL=ignorespace

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

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


1

HISTCONTROL=ignorespace:erasedups

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

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


1

HISTTIMEFORMAT="%F %T ?"

當(dāng)我輸入?history 5?時(shí),我得到了很好的完整信息,如下所示:


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

這使我更容易瀏覽我的命令歷史記錄并找到我兩天前用來建立到我家實(shí)驗(yàn)室的 SSH 連接(我一次又一次地忘記……)。

Bash 最佳實(shí)踐

我將在編寫 Bash 腳本時(shí)最好的(或者至少是好的,我不要求無所不知)11 項(xiàng)實(shí)踐列出來。

11、 Bash 腳本可能變得復(fù)雜,不過注釋也很方便。 如果你在考慮是否要添加注釋,那就添加一個(gè)注釋。 如果你在周末之后回來并且不得不花時(shí)間搞清楚你上周五想要做什么,那你是忘了添加注釋。

10、 用花括號(hào)括起所有變量名,比如?${myvariable}。 養(yǎng)成這個(gè)習(xí)慣可以使用?${variable}_suffix?這種用法了,還能提高整個(gè)腳本的一致性。

9、 計(jì)算表達(dá)式時(shí)不要使用反引號(hào);請(qǐng)改用?$()?語法。 所以使用:


1

for ?file in $(ls); do

而不使用:


1

for ?file in `ls`; do

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

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

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

6、 比較字符串時(shí),在?if?語句中給變量加上引號(hào)是個(gè)好主意,因?yàn)槿绻愕淖兞渴强盏模珺ash 會(huì)為這樣的行拋出一個(gè)錯(cuò)誤:


1

2

3

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

??echo "bar"

fi

對(duì)于這樣的行,將判定為?false:


1

2

3

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

??echo "bar"

fi

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

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

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


1

2

3

# we have failed

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

exit 1

這樣可以更容易地以編程方式從另一個(gè)腳本調(diào)用你的腳本并驗(yàn)證其成功完成。

3、 使用 Bash 的內(nèi)置機(jī)制為變量提供合理的默認(rèn)值,或者如果未定義你希望定義的變量,則拋出錯(cuò)誤:


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ā)該大型腳本,請(qǐng)考慮在函數(shù)內(nèi)部定義變量時(shí)使用?local?關(guān)鍵字。?local?關(guān)鍵字將創(chuàng)建一個(gè)局部變量,該變量只在該函數(shù)中可見。 這限制了變量沖突的可能性。

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

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


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

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉