成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Linux工具:點的含義

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

[[256151]]

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

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

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

位置、位置、位置

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

  1. find . -name "*.jpg"

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

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

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

  1. cd ..

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

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

  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”文件,包括那些隱藏的

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

很困惑?別擔心 —— 試試這個:創建一個名為 myscript 的腳本,內容包含下面一行:

  1. myvar="Hello"

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

然而,如果你這樣運行 myscript

  1. . myscript

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

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

雙重麻煩

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

嘗試下這個:

  1. echo {1..10}

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

現在試下這個:

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

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

它反著也仍然有效:

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

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

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

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

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

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

  1. mkdir {2009..2019}_Invoices

工作完成。

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

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

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

  1. frame_000 frame_001 frame_002 ...

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

花括號花招

說實話,序列的神奇之處不在于雙點,而是花括號({})的巫術。看看它對于字母是如何工作的。這樣做:

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

它創建了從 file_a.txtfile_z.txt 的文件。

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

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

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

將創建了 blahg_file.txtsplurg_file.txtmmmf_file.txt

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

總結

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

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

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

在那之前,玩得開心!

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2023-08-03 17:08:05

Linux退出碼

2009-10-22 16:31:48

2010-06-10 10:45:05

Internet協議

2013-05-14 15:39:08

Linux系統系統負載

2010-06-04 18:24:37

Linux uml工具

2012-05-09 10:13:54

2011-03-30 11:31:10

MRTG

2010-06-25 15:32:07

2009-09-09 09:12:27

思科認證CCNACCNA思科認證

2010-06-11 14:18:59

通訊協議

2009-03-25 17:10:50

Linux視頻轉換

2020-08-10 11:40:51

BashtopLinux命令

2010-06-30 12:46:18

Linux SNMP工

2024-07-12 14:02:08

2022-05-29 07:27:24

開放云云端云計算

2010-07-06 15:10:05

UDP協議

2010-07-13 15:31:49

ftp命令

2018-06-27 08:48:48

Linux系統備份

2009-11-13 13:05:19

linux sar工具命令

2020-07-07 11:01:04

Linux工具命令
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本午夜视频 | 久在线 | 精品久久99 | 看一级毛片视频 | 国产精品毛片 | 国色天香综合网 | 一级二级三级在线观看 | 国产高清亚洲 | 麻豆精品一区二区三区在线观看 | 日韩欧美在 | 国产香蕉视频在线播放 | 国产精品一区二区视频 | 成年免费大片黄在线观看一级 | 91精品国产综合久久久久久丝袜 | 天天爽夜夜爽精品视频婷婷 | 欧美日韩在线高清 | 久久综合国产精品 | 欧美日韩在线免费 | 伊人成人免费视频 | 亚洲欧美视频一区二区 | 国产精品久久久久久婷婷天堂 | 超碰人人艹 | 中文在线一区二区 | 日本aa毛片a级毛片免费观看 | 国产精品一区一区三区 | 中文字幕 在线观看 | 日韩视频一区二区三区 | 精品久久久久一区 | 国产美女黄色片 | 请别相信他免费喜剧电影在线观看 | 国产精品揄拍一区二区 | 国产欧美精品区一区二区三区 | 91精品国产综合久久久动漫日韩 | 久久丁香| 99爱国产 | 久久综合久色欧美综合狠狠 | 日韩欧美精品一区 | 中文字幕一区二区三区四区 | 欧美日韩在线观看一区 | 黄色免费在线观看 | 亚洲综合大片69999 |