相信大家平時(shí)都有用 history 命令來(lái)查看命令歷史記錄,但是實(shí)際上 history 命令并非只有這個(gè)功能,history 還有很多有用的功能。尤其是 Bash 版本的 history 命令,它所提供的功能比所有其他的 Linux Shell history 命令所提供的都要多。
Bash 的歷史悠久,是一個(gè)古老的 Shell ,并且它還有一個(gè)更古老的前身 the Bourne Shell (sh) 。因此,Bash 的 history 命令是所有的 Linux Shell history 命令中功能最豐富的。Bash 版本的 history命令不僅支持反向搜索、快速調(diào)用,還支持重寫(xiě)歷史記錄等等功能。
善用 Bash history 命令以上的這些功能都可以提高你的工作效率,因此,讓良許為你一一講解 Bash history 命令以及它常用的功能。
history 是內(nèi)置的命令
history 命令與許多其他的命令不同。你可能習(xí)慣于命令都作為可執(zhí)行文件放置在常見(jiàn)的系統(tǒng)級(jí)的位置,例如 /usr/bin,/usr/local/bin 或 ?/ bin。但是,內(nèi)置的 history 命令并不在你的環(huán)境變量 PATH 保存的路徑中的。
實(shí)際上,history 命令并沒(méi)有保存在物理位置中:
$ which history
which: no history in [PATH]
history 其實(shí)是 Shell 本身的一個(gè)內(nèi)置函數(shù):
$ type history
history is a shell builtin
$ help history
history: history [-c] [-d offset] [n] or
history -anrw [filename] or
history -ps arg [arg.。。]
Display or manipulate the history list.
[。..]
由于 history 是 Shell 的內(nèi)置函數(shù),所以每種 Shell 的 history 函數(shù)都是獨(dú)一無(wú)二的。因此,你在 Bash 中能使用的功能可能無(wú)法在 Tcsh,F(xiàn)ish 或 Dash 中使用,同樣的,在 Tcsh,F(xiàn)ish 或 Dash 中能使用的功能也可能無(wú)法在 Bash 中使用。
查看你的 Bash 命令歷史記錄
history 命令最基本,最頻繁的用法就是查看你的 Shell 會(huì)話的命令歷史記錄:
$ echo “hello”
hello
$ echo “world”
world
$ history
1 echo “hello”
2 echo “world”
3 history
事件提示符
事件提示符 (?。?是按事件搜索歷史記錄的。這里的事件,指的是每一條記錄在歷史記錄里的命令。換句話說(shuō),它就是一行命令,并被數(shù)字索引標(biāo)記著以供引用。
要重新運(yùn)行歷史記錄中的一個(gè)命令,用 ! 直接加上 (無(wú)空格) 你想要運(yùn)行的命令前面的索引數(shù)字即可。例如,假設(shè)歷史記錄中的第一條指令是 echo hello ,然后你想重新運(yùn)行它:
$ !1
echo “hello”
hello
你還可以通過(guò)從歷史記錄中的當(dāng)前位置開(kāi)始提供負(fù)數(shù)的行來(lái)使用相對(duì)定位。例如,返回歷史記錄中倒數(shù)第3條命令:
$ echo “alvin”
alvin
$ echo “hello”
hello
$ echo “world”
world
$ !-3
echo “alvin”
alvin
如果你只想返回上一條命令,你可以使用簡(jiǎn)寫(xiě) !! 來(lái)替代 !-1。這整整節(jié)省了一次按鍵的時(shí)間!?。?/p>
$ echo “alvin”
alvin
$ ??!
echo “alvin”
alvin
字符串搜索
你也可以通過(guò)特定的字符串來(lái)搜索歷史記錄中的命令并運(yùn)行它。
若是想要搜索以特定字符串開(kāi)頭的命令,就用 ! 直接加上 (無(wú)空格) 你想要搜索的字符串:
$ echo “alvin”
alvin
$ true
$ false
$ !echo
echo “alvin”
alvin
你還可以搜索在任意位置包含特定字符串的命令。要做到這點(diǎn),你只需要用 ! 直接加上前后兩端都被 ? 包圍的特定字符串即可,像這樣:
$ echo “alvin”
alvin
$ true
$ false
$ !?alvin?
echo “alvin”
alvin
如果你知道你想要搜索的字符串在命令的最后面,那就可以省略字符串后面的 ?,像這樣:
$ echo alvin
alvin
$ ???alvin
echo alvin
alvin
值得注意的是,若是歷史記錄中包含目標(biāo)字符串的命令不止一條,則它只會(huì)執(zhí)行符合條件的命令中最后的一條:
$ echo “hello world”
hello world
$ echo “hello alvin”
hello alvin
$ ???hello?
echo “hello alvin”
hello alvin
字符串替換
你可以搜索一個(gè)特定的字符串并用新字符串替換它,從而更改命令:
$ echo “hello”
hello
$ echo “world”
world
$ ^hello^alvin
echo “alvin”
alvin
但是它只能替換第一次出現(xiàn)的目標(biāo)字符串,若是命令中出現(xiàn)兩次目標(biāo)字符串,則只有第一次出現(xiàn)的會(huì)被替換,像這樣:
$ echo “hello hello”
hello hello
$ ^hello^alvin
echo “alvin hello”
alvin hello
與字符串搜索一樣,當(dāng)歷史記錄中包含目標(biāo)字符串的命令不止一條時(shí),只替換并執(zhí)行最后一條:
$ echo “hello world”
hello world
$ echo “hello”
hello
$ ^hello^alvin
echo “alvin”
alvin
充分利用 history 命令
實(shí)際上,Bash 的 history 命令的功能遠(yuǎn)不止本文所提到的,但這是你習(xí)慣使用 history 命令的一個(gè)很好的開(kāi)始,而不僅僅是利用 history 來(lái)查看歷史記錄。要經(jīng)常使用 history 命令,看看你只利用 history 命令而不輸入具體的指令能完成多少事情,你會(huì)被驚艷到的。
責(zé)編AJX
-
Linux
+關(guān)注
關(guān)注
87文章
11378瀏覽量
211342 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
6942瀏覽量
124172 -
Shell
+關(guān)注
關(guān)注
1文章
368瀏覽量
23547
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
linux操作系統(tǒng)命令不能運(yùn)行
有關(guān)Linux history歷史命令的例子詳解
Linux之bash的主要介紹
Linux操作系統(tǒng)安裝與使用
Linux操作系統(tǒng)安裝與使用
Linux操作系統(tǒng)

Linux操作系統(tǒng)原理及應(yīng)用
linux的History命令代碼的詳細(xì)資料合集免費(fèi)下載
Linux操作系統(tǒng)的目錄結(jié)構(gòu)
Linux操作環(huán)境:將Python和shell命令的Bash結(jié)合在一起

開(kāi)發(fā)人員必看的 Linux 操作系統(tǒng)常用命令合集

評(píng)論