自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Linux工具:點的含義

系統(tǒng) Linux
在現(xiàn)實情況中,使用 shell 命令編寫的單行命令或腳本可能會令人很困惑。你使用的很多工具的名稱與它們的實際功能相差甚遠(yuǎn)(grep、tee 和 awk,還有嗎?),而當(dāng)你將兩個或更多個組合起來時,所組成的 “句子” 看起來更像某種外星人的天書。

[[256151]]

 Paul Brown 解釋了 Linux shell 命令中那個不起眼的“點”的各種意思和用法。

在現(xiàn)實情況中,使用 shell 命令編寫的單行命令或腳本可能會令人很困惑。你使用的很多工具的名稱與它們的實際功能相差甚遠(yuǎn)(grep、teeawk,還有嗎?),而當(dāng)你將兩個或更多個組合起來時,所組成的 “句子” 看起來更像某種外星人的天書。

因此,上面說的這些對于你并無幫助,因為你用來編寫一連串的指令所使用的符號根據(jù)你使用的場景有著不同的意義。

位置、位置、位置

就拿這個不起眼的點(.)來說吧。當(dāng)它放在一個需要一個目錄名稱的命令的參數(shù)處時,表示“當(dāng)前目錄”:

  1. find . -name "*.jpg"

意思就是“在當(dāng)前目錄(包括子目錄)中尋找以 .jpg 結(jié)尾的文件”。

ls .cd . 結(jié)果也如你想的那樣,它們分別列舉和“進入”到當(dāng)前目錄,雖然在這兩種情況下這個點都是多余的。

而一個緊接著另一個的兩個點呢,在同樣的場景下(即當(dāng)你的命令期望一個文件目錄的時候)表示“當(dāng)前目錄的父目錄”。如果你當(dāng)前在 /home/your_directory 下并且運行:

  1. cd ..

你就會進入到 /home。所以,你可能認(rèn)為這仍然適合“點代表附近目錄”的敘述,并且毫不復(fù)雜,對吧?

那下面這樣會怎樣呢?如果你在一個文件或目錄的開頭加上點,它表示這個文件或目錄會被隱藏:

  1. $ touch somedir/file01.txt somedir/file02.txt somedir/.secretfile.txt
  2. $ ls -l somedir/
  3. total 0
  4. -rw-r--r-- 1 paul paul 0 Jan 13 19:57 file01.txt
  5. -rw-r--r-- 1 paul paul 0 Jan 13 19:57 file02.txt
  6. $ # 注意上面列舉的文件中沒有 .secretfile.txt
  7. $ ls -la somedir/
  8. total 8
  9. drwxr-xr-x 2 paul paul 4096 Jan 13 19:57 .
  10. drwx------ 48 paul paul 4096 Jan 13 19:57 ..
  11. -rw-r--r-- 1 paul paul 0 Jan 13 19:57 file01.txt
  12. -rw-r--r-- 1 paul paul 0 Jan 13 19:57 file02.txt
  13. -rw-r--r-- 1 paul paul 0 Jan 13 19:57 .secretfile.txt
  14. $ # 這個 -a 選項告訴 ls 去展示“all”文件,包括那些隱藏的

然后就是你可以將 . 當(dāng)作命令。是的,你聽我說:. 是個真真正正的命令。它是 source 命令的代名詞,所以你可以用它在當(dāng)前 shell 中執(zhí)行一個文件,而不是以某種其它的方式去運行一個腳本文件(這通常指的是 Bash 會產(chǎn)生一個新的 shell 去運行它)

很困惑?別擔(dān)心 —— 試試這個:創(chuàng)建一個名為 myscript 的腳本,內(nèi)容包含下面一行:

  1. myvar="Hello"

然后通過常規(guī)的方法執(zhí)行它,也就是用 sh myscript(或者通過 chmod a+x myscript 命令讓它可執(zhí)行,然后運行 ./myscript)?,F(xiàn)在嘗試并且觀察 myvar 的內(nèi)容,通過 echo $myvar(理所當(dāng)然你什么也得不到)。那是因為,當(dāng)你的腳本賦值 "Hello"myvar 時,它是在一個隔離的bash shell 實例中進行的。當(dāng)腳本運行結(jié)束時,這個新產(chǎn)生的實例會消失并且將控制權(quán)轉(zhuǎn)交給原來的shell,而原來的 shell 里甚至都不存在 myvar 變量。

然而,如果你這樣運行 myscript

  1. . myscript

echo $myvar 就會打印 Hello 到命令行上。

當(dāng)你的 .bashrc 文件發(fā)生變化后,你經(jīng)常會用到 .(或 source)命令,就像當(dāng)你要擴展 PATH 變量那樣。在你的當(dāng)前 shell 實例中,你可以使用 . 來讓變化立即生效。

雙重麻煩

就像看似無關(guān)緊要的一個點有多個含義一樣,兩個點也是如此。除了指向當(dāng)前目錄的父級之外,兩個點(..)也用于構(gòu)建序列。

嘗試下這個:

  1. echo {1..10}

它會打印出從 1 到 10 的序列。在這種場景下,.. 表示 “從左邊的值開始,計數(shù)到右邊的值”。

現(xiàn)在試下這個:

  1. echo {1..10..2}

你會得到 1 3 5 7 9。..2 這部分命令告訴 Bash 輸出這個序列,不過不是每個相差 1,而是相差 2。換句話說,就是你會得到從 1 到 10 之間的奇數(shù)。

它反著也仍然有效:

  1. echo {10..1..2}

你也可以用多個 0 填充你的數(shù)字。這樣:

  1. echo {000..121..2}

會這樣打印出從 0 到 121 之間的偶數(shù)(填充了前置 0):

  1. 000 002 004 006 ... 050 052 054 ... 116 118 120

不過這樣的序列發(fā)生器有啥用呢?當(dāng)然,假設(shè)您的新年決心之一是更加謹(jǐn)慎控制您的帳戶花銷。作為決心的一部分,您需要創(chuàng)建目錄,以便對過去 10 年的數(shù)字發(fā)票進行分類:

  1. mkdir {2009..2019}_Invoices

工作完成。

或者你可能有數(shù)百個帶編號的文件,比如從視頻剪輯中提取的幀,或許因為某種原因,你只想從第 43 幀到第 61 幀每隔三幀刪除一幀:

  1. rm frame_{043..61..3}

很可能,如果你有超過 100 個幀,它們將以填充 0 命名,如下所示:

  1. frame_000 frame_001 frame_002 ...

那就是為什么你在命令中要用 043,而不是43 的原因。

花括號花招

說實話,序列的神奇之處不在于雙點,而是花括號({})的巫術(shù)??纯此鼘τ谧帜甘侨绾喂ぷ鞯摹_@樣做:

  1. touch file_{a..z}.txt

它創(chuàng)建了從 file_a.txtfile_z.txt 的文件。

但是,你必須小心。使用像 {Z..a} 這樣的序列將產(chǎn)生一大堆大寫字母和小寫字母之間的非字母、數(shù)字的字符(既不是數(shù)字或字母的字形)。其中一些字形是不可打印的或具有自己的特殊含義。使用它們來生成文件名稱可能會導(dǎo)致一系列意外和可能令人不快的影響。

***一件值得指出的事:包圍在 {...} 的序列,它們也可以包含字符串列表:

  1. touch {blahg, splurg, mmmf}_file.txt

將創(chuàng)建了 blahg_file.txtsplurg_file.txtmmmf_file.txt。

當(dāng)然,在別的場景中,大括號也有不同的含義(驚喜嗎?。?。不過那是別的文章的內(nèi)容了。

總結(jié)

Bash 以及運行于其中的各種工具已經(jīng)被尋求解決各種特定問題的系統(tǒng)管理員們把玩了數(shù)十年。要說這種有自己之道的系統(tǒng)管理員是一種特殊物種的話,那是有點輕描淡寫??偠灾?,與其他語言相反,Bash 的設(shè)計目標(biāo)并不是為了用戶友好、簡單、甚至合乎邏輯。

但這并不意味著它不強大 —— 恰恰相反。Bash 的語法和 shell 工具可能不一致且很龐大,但它們也提供了一系列令人眼花繚亂的方法來完成您可能想象到的一切。就像有一個工具箱,你可以從中找到從電鉆到勺子的所有東西,以及橡皮鴨、一卷膠帶和一些指甲鉗。

除了引人入勝之外,探明你可以直接在 shell 中達(dá)成的所有能力也很有趣,所以下次我們將深入探討如何構(gòu)建更大更好的 Bash 命令行。

在那之前,玩得開心!

責(zé)任編輯:龐桂玉 來源: Linux中國
相關(guān)推薦

2023-08-03 17:08:05

Linux退出碼

2009-10-22 16:31:48

2010-06-10 10:45:05

Internet協(xié)議

2013-05-14 15:39:08

Linux系統(tǒng)系統(tǒng)負(fù)載

2010-06-04 18:24:37

Linux uml工具

2012-05-09 10:13:54

2011-03-30 11:31:10

MRTG

2009-09-09 09:12:27

思科認(rèn)證CCNACCNA思科認(rèn)證

2010-06-25 15:32:07

2010-06-11 14:18:59

通訊協(xié)議

2009-03-25 17:10:50

Linux視頻轉(zhuǎn)換

2020-08-10 11:40:51

BashtopLinux命令

2010-06-30 12:46:18

Linux SNMP工

2024-07-12 14:02:08

2010-07-06 15:10:05

UDP協(xié)議

2010-07-13 15:31:49

ftp命令

2022-05-29 07:27:24

開放云云端云計算

2010-03-18 13:45:58

Linux系統(tǒng)

2018-06-27 08:48:48

Linux系統(tǒng)備份

2020-07-07 11:01:04

Linux工具命令
點贊
收藏

51CTO技術(shù)棧公眾號