這篇文章主要介紹了Linux中點(diǎn)的含義是什么,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
創(chuàng)新互聯(lián),為您提供重慶網(wǎng)站建設(shè)公司、網(wǎng)站制作、網(wǎng)站營(yíng)銷推廣、網(wǎng)站開發(fā)設(shè)計(jì),對(duì)服務(wù)成都陽臺(tái)護(hù)欄等多個(gè)行業(yè)擁有豐富的網(wǎng)站建設(shè)及推廣經(jīng)驗(yàn)。創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司成立于2013年,提供專業(yè)網(wǎng)站制作報(bào)價(jià)服務(wù),我們深知市場(chǎng)的競(jìng)爭(zhēng)激烈,認(rèn)真對(duì)待每位客戶,為客戶提供賞心悅目的作品。 與客戶共同發(fā)展進(jìn)步,是我們永遠(yuǎn)的責(zé)任!
Paul Brown 解釋了 Linux shell 命令中那個(gè)不起眼的“點(diǎn)”的各種意思和用法。
在現(xiàn)實(shí)情況中,使用 shell 命令編寫的單行命令或腳本可能會(huì)令人很困惑。你使用的很多工具的名稱與它們的實(shí)際功能相差甚遠(yuǎn)(grep
、tee
和 awk
,還有嗎?),而當(dāng)你將兩個(gè)或更多個(gè)組合起來時(shí),所組成的 “句子” 看起來更像某種外星人的天書。
因此,上面說的這些對(duì)于你并無幫助,因?yàn)槟阌脕砭帉懸贿B串的指令所使用的符號(hào)根據(jù)你使用的場(chǎng)景有著不同的意義。
就拿這個(gè)不起眼的點(diǎn)(.
)來說吧。當(dāng)它放在一個(gè)需要一個(gè)目錄名稱的命令的參數(shù)處時(shí),表示“當(dāng)前目錄”:
find . -name "*.jpg"
意思就是“在當(dāng)前目錄(包括子目錄)中尋找以 .jpg
結(jié)尾的文件”。
ls .
和 cd .
結(jié)果也如你想的那樣,它們分別列舉和“進(jìn)入”到當(dāng)前目錄,雖然在這兩種情況下這個(gè)點(diǎn)都是多余的。
而一個(gè)緊接著另一個(gè)的兩個(gè)點(diǎn)呢,在同樣的場(chǎng)景下(即當(dāng)你的命令期望一個(gè)文件目錄的時(shí)候)表示“當(dāng)前目錄的父目錄”。如果你當(dāng)前在 /home/your_directory
下并且運(yùn)行:
cd ..
你就會(huì)進(jìn)入到 /home
。所以,你可能認(rèn)為這仍然適合“點(diǎn)代表附近目錄”的敘述,并且毫不復(fù)雜,對(duì)吧?
那下面這樣會(huì)怎樣呢?如果你在一個(gè)文件或目錄的開頭加上點(diǎn),它表示這個(gè)文件或目錄會(huì)被隱藏:
$ touch somedir/file01.txt somedir/file02.txt somedir/.secretfile.txt$ ls -l somedir/total 0-rw-r--r-- 1 paul paul 0 Jan 13 19:57 file01.txt-rw-r--r-- 1 paul paul 0 Jan 13 19:57 file02.txt$ # 注意上面列舉的文件中沒有 .secretfile.txt$ ls -la somedir/total 8drwxr-xr-x 2 paul paul 4096 Jan 13 19:57 .drwx------ 48 paul paul 4096 Jan 13 19:57 ..-rw-r--r-- 1 paul paul 0 Jan 13 19:57 file01.txt-rw-r--r-- 1 paul paul 0 Jan 13 19:57 file02.txt-rw-r--r-- 1 paul paul 0 Jan 13 19:57 .secretfile.txt$ # 這個(gè) -a 選項(xiàng)告訴 ls 去展示“all”文件,包括那些隱藏的
然后就是你可以將 .
當(dāng)作命令。是的,你聽我說:.
是個(gè)真真正正的命令。它是 source
命令的代名詞,所以你可以用它在當(dāng)前 shell 中執(zhí)行一個(gè)文件,而不是以某種其它的方式去運(yùn)行一個(gè)腳本文件(這通常指的是 Bash 會(huì)產(chǎn)生一個(gè)新的 shell 去運(yùn)行它)
很困惑?別擔(dān)心 —— 試試這個(gè):創(chuàng)建一個(gè)名為 myscript
的腳本,內(nèi)容包含下面一行:
myvar="Hello"
然后通過常規(guī)的方法執(zhí)行它,也就是用 sh myscript
(或者通過 chmod a+x myscript
命令讓它可執(zhí)行,然后運(yùn)行 ./myscript
)?,F(xiàn)在嘗試并且觀察 myvar
的內(nèi)容,通過 echo $myvar
(理所當(dāng)然你什么也得不到)。那是因?yàn)椋?dāng)你的腳本賦值 "Hello"
給 myvar
時(shí),它是在一個(gè)隔離的bash shell 實(shí)例中進(jìn)行的。當(dāng)腳本運(yùn)行結(jié)束時(shí),這個(gè)新產(chǎn)生的實(shí)例會(huì)消失并且將控制權(quán)轉(zhuǎn)交給原來的shell,而原來的 shell 里甚至都不存在 myvar
變量。
然而,如果你這樣運(yùn)行 myscript
:
. myscript
echo $myvar
就會(huì)打印 Hello
到命令行上。
當(dāng)你的 .bashrc
文件發(fā)生變化后,你經(jīng)常會(huì)用到 .
(或 source
)命令,就像當(dāng)你要擴(kuò)展 PATH
變量那樣。在你的當(dāng)前 shell 實(shí)例中,你可以使用 .
來讓變化立即生效。
就像看似無關(guān)緊要的一個(gè)點(diǎn)有多個(gè)含義一樣,兩個(gè)點(diǎn)也是如此。除了指向當(dāng)前目錄的父級(jí)之外,兩個(gè)點(diǎn)(..
)也用于構(gòu)建序列。
嘗試下這個(gè):
echo {1..10}
它會(huì)打印出從 1 到 10 的序列。在這種場(chǎng)景下,..
表示 “從左邊的值開始,計(jì)數(shù)到右邊的值”。
現(xiàn)在試下這個(gè):
echo {1..10..2}
你會(huì)得到 1 3 5 7 9
。..2
這部分命令告訴 Bash 輸出這個(gè)序列,不過不是每個(gè)相差 1,而是相差 2。換句話說,就是你會(huì)得到從 1 到 10 之間的奇數(shù)。
它反著也仍然有效:
echo {10..1..2}
你也可以用多個(gè) 0 填充你的數(shù)字。這樣:
echo {000..121..2}
會(huì)這樣打印出從 0 到 121 之間的偶數(shù)(填充了前置 0):
000 002 004 006 ... 050 052 054 ... 116 118 120
不過這樣的序列發(fā)生器有啥用呢?當(dāng)然,假設(shè)您的新年決心之一是更加謹(jǐn)慎控制您的帳戶花銷。作為決心的一部分,您需要?jiǎng)?chuàng)建目錄,以便對(duì)過去 10 年的數(shù)字發(fā)票進(jìn)行分類:
mkdir {2009..2019}_Invoices
工作完成。
或者你可能有數(shù)百個(gè)帶編號(hào)的文件,比如從視頻剪輯中提取的幀,或許因?yàn)槟撤N原因,你只想從第 43 幀到第 61 幀每隔三幀刪除一幀:
rm frame_{043..61..3}
很可能,如果你有超過 100 個(gè)幀,它們將以填充 0 命名,如下所示:
frame_000 frame_001 frame_002 ...
那就是為什么你在命令中要用 043
,而不是43
的原因。
說實(shí)話,序列的神奇之處不在于雙點(diǎn),而是花括號(hào)({}
)的巫術(shù)??纯此鼘?duì)于字母是如何工作的。這樣做:
touch file_{a..z}.txt
它創(chuàng)建了從 file_a.txt
到 file_z.txt
的文件。
但是,你必須小心。使用像 {Z..a}
這樣的序列將產(chǎn)生一大堆大寫字母和小寫字母之間的非字母、數(shù)字的字符(既不是數(shù)字或字母的字形)。其中一些字形是不可打印的或具有自己的特殊含義。使用它們來生成文件名稱可能會(huì)導(dǎo)致一系列意外和可能令人不快的影響。
***一件值得指出的事:包圍在 {...}
的序列,它們也可以包含字符串列表:
touch {blahg, splurg, mmmf}_file.txt
將創(chuàng)建了 blahg_file.txt
、splurg_file.txt
和 mmmf_file.txt
。
當(dāng)然,在別的場(chǎng)景中,大括號(hào)也有不同的含義(驚喜嗎!)。不過那是別的文章的內(nèi)容了。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Linux中點(diǎn)的含義是什么”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!