不知道大家接觸 Linux 系統(tǒng)有多久了,可曾了解過 Linux 中有哪些特殊的字符呢?其實(shí)啊,那些特殊字符都大有用處呢,今天的文章就給大家簡單地科普一下 Linux 中你需要了解的 15 個(gè)特殊字符,想學(xué)或剛學(xué) Linux 的小伙伴趕緊上車了為!
主目錄
這個(gè)波浪號 ~ 指的是主目錄,也就是我們用戶的個(gè)人目錄,無論你身在何方,輸入 cd ~
它將帶你回家!
更高端的玩法就是在它后面加上具體的路徑,直接定位到家目錄中的指定位置,是不是很方便呢?
cd ~/work/archive
.當(dāng)前目錄
英文句號 . 代表當(dāng)前目錄,我們來看一下當(dāng)前目錄下的全部文件:
紅圈里的 . 就是指當(dāng)前目錄,不過這沒什么意義,我們更多的是在命令中使用它,如下:
./script.sh
這樣做是在告訴 bash 只要在當(dāng)前目錄中查找并執(zhí)行 script.sh
文件就好了,不用在路徑中找了。
.. 父目錄
兩個(gè)英文句號 .. 代表父目錄,也就是當(dāng)前目錄的上一級目錄。假設(shè)我們要回到上一級目錄:
跟前面一樣,你可以在它后面加具體的目錄,這里的意思就是定位到與當(dāng)前目錄同級的其它目錄:
cd ../projects/
/ 路徑目錄分隔符
斜杠 '/' 指的是路徑目錄分隔符,這里沒什么好說的。
但是,有意思的是,如果 / 路徑目錄分隔符前面沒有東西的話,是不是就是意味著這是最上級的目錄了?由于 Linux 系統(tǒng)的目錄樹均始于 / ,所以僅僅一個(gè) / 代表了我們常說的系統(tǒng)根目錄。
cd /
# 注釋
以 # 開頭,代表這句話是注釋。
雖然上面那段話就被忽略了,但它還是會添加到您的命令歷史記錄中。
更厲害的做法如下:
先定義一個(gè)變量并給它賦值字符串 “amazing alvin”
this_string='amazing alvin'
${this_string#amazing} 返回的是被注釋掉 amazing 的 this_string 字符串變量,可以 echo 輸出看下結(jié)果:
amazing 只是被注釋掉而已,它并未被刪除,去掉注釋它就回來了:
echo $this_string
? 單字符通配符
問號 '?',指的是單字符通配符。Bash Shell 支持三種通配符。
它代表文件名中任意一個(gè)字符的匹配,例如:
注意,它與 badge.txt 是不匹配滴,因?yàn)?badge 后面沒有字符。
正因?yàn)?'?' 匹配單個(gè)字符,所以這里有個(gè)看似很厲害的玩法,就是你想要的找的文件的文件名有多少個(gè)字符,你就輸入多少個(gè) '?' 。
ls ?????.txt
看著挺厲害,不過我怎么感覺這好別扭?????
* 字符序列通配符
星號 * 代表的是任意字符序列,匹配任意字符,包括空字符,以剛才的 badge 為例:
可以看到,badge.txt 都匹配到了。
匹配任意類型的文件:
ls source.*
[] 字符集通配符
方括號 '[]' 指的是字符集通配符,文件名中的相關(guān)字符必須與字符集中的至少一個(gè)字符匹配。通過例子來體會一下它的作用吧:
ls badge_[01][789].txt
; 命令分隔符
這跟我們?nèi)粘J褂玫?';' 差不多,就不細(xì)說了,主要是用來分隔命令的。
ls > count.txt; wc -l count.txt; rm count.txt
這里注意,用 ; 分隔命令時(shí),即使第一個(gè)命令失敗,第二個(gè)命令也會運(yùn)行,即使第二個(gè)命令失敗,第三個(gè)命令也會運(yùn)行,依此類推。
如果要在一個(gè)命令失敗的情況下就停止,請使用 '&&' ,如下:
& 后臺處理
有時(shí)候在終端正在運(yùn)行一個(gè)命令時(shí),例如 vim,你想運(yùn)行另外一個(gè)命令怎么辦?這里有個(gè)小技巧就是在命令后面加一個(gè) '&' 符號,將這個(gè)程序放在后臺啟動,這樣你就能在終端實(shí)現(xiàn)后臺多任務(wù)的效果了。
vim command_address.page &
上面顯示的是這個(gè)后臺進(jìn)程的 ID 。
< 輸入重定向
許多 Linux 命令接受一個(gè)文件作為參數(shù),并從該文件中獲取數(shù)據(jù)。這些命令中的大多數(shù)還可以從流中獲取輸入。要?jiǎng)?chuàng)建一個(gè)流,可以使用左尖括號 '<' ,如下將文件重定向到命令中:
上面將 words.txt 文件的內(nèi)容并進(jìn)行了排序。
注意:它是不顯示數(shù)據(jù)來源文件的文件名的。
wc words.txt
> 輸出重定向
輸入和輸出是相反的,很好理解。用右尖括號 '>' 將命令的輸出重定向,通常是重定向到文件中。
ls > files.txt
高端玩家還可以和數(shù)字一同使用:
wc doesntexist.txt 2> errors.txt
這里的 2 是一個(gè)文件描述符,表示標(biāo)準(zhǔn)錯(cuò)誤(stderr)
大家感興趣的可以去搜索下文件描述符 stdin,stdout,stderr 是什么?
| 連接命令
我們可以將 ' | ' 看成將命令鏈接在一起的管道。它從一個(gè)命令獲取輸出,并將其作為輸入送入下一個(gè)命令。管道命令的數(shù)量是任意的。
cat words.txt | grep [cC] | sort -r
解釋下,上面先使用 cat 將 words.txt 文件的內(nèi)容輸入 grep , 然后 grep 提取包含小寫或大寫(C/c)的任何行,接著 grep 將這些行傳遞給 sort ,最后 sort 進(jìn)行 -r 反向排序。
! 邏輯非
這跟編程語言中的 ' ! ' 差不多,我們直接拿個(gè)例子來說吧:
第一個(gè)命令 -d 判斷當(dāng)前目錄是否存在 backup 的目錄文件,外面加個(gè)邏輯非 ! 判斷, 第二個(gè)命令是創(chuàng)建 backup 目錄文件, 中間的 && 上面說過。 總的來說就是當(dāng) backup 目錄不存在時(shí),創(chuàng)建 backup 目錄;當(dāng)不存在時(shí)則不執(zhí)行第二條命令。
不妨看下文件夾的備份狀態(tài):
ls -l -d backup
' ! ' 的另一個(gè)用法就是重新運(yùn)行歷史命令:
!!
' !! ' 是重新運(yùn)行上一條命令的意思。
$ 變量表達(dá)式
'$' 開頭通常表示變量,下面是一些系統(tǒng)變量:
echo $HOME
當(dāng)然,你也可以自己定義變量然后輸出:
ThisDistro=Ubuntu
echo $ThisDistro
我們還可以通過 '{}' 解鎖更高級的玩法:
先定義一個(gè)變量 MyString 并給它賦值 123456qwerty
MyString=123456qwerty
正常輸出
加個(gè) ':6' 返回從索引位置 6 開始的一直到最后的字符串
echo ${MyString:6}
顯示從索引位置從 0 開始往后 6 個(gè)字符的字符串
顯示從索引位置從 4 開始往后 4 個(gè)字符的字符串
echo ${MyString:4:4}
引用特殊字符
說了那么多,那么就有個(gè)問題了,就是我只想在命令里面將這些特殊字符作為一般的符號顯示怎么辦?這種我們稱之為引用,Linux 中有三種引用方法。
用雙引號 '' 括起來,不過這對 '$' 無效。
用單引號 '' 括起來,停止所有特殊字符的功能。
echo 'Today is $(date)'
反斜杠 \ 轉(zhuǎn)義,這在很多場合都有通用的。
今天的科普文章有點(diǎn)長,大家慢慢消化哈。
聯(lián)系客服