銘記歷史,圓夢中華。在Linux操作系統(tǒng)中,對于管理員操作的命令進行查詢也是非常重要,而且熟練掌握調(diào)用命令歷史能提高管理員管理系統(tǒng)的效率。
創(chuàng)新互聯(lián)專注于山南企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城網(wǎng)站定制開發(fā)。山南網(wǎng)站建設(shè)公司,為山南等地區(qū)提供建站服務(wù)。全流程按需網(wǎng)站策劃,專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
history的命令緩存數(shù)目是由一個在/etc/profile文件名為HISTSIZE的變量決定,可以通過env命令查看當(dāng)前設(shè)定的數(shù)目,也可以通過修改HISTSIZE的數(shù)值來決定緩存多少條命令。建議修改添加至自己家目錄下面的.bash_profile,不要修改全局的變量。以下所有變量我均是添加在自己的家目錄下面的.bash_profile,若有需要請自行在/etc/profile修改
常用選項
n 列出當(dāng)前的n條命令
-a 清除緩存中的所有命令
-c 清除當(dāng)前shell中緩存的命令
-r :將 histfiles 的內(nèi)容讀到目前這個 shell 的 history 記憶中
-w :將目前的 history 記憶內(nèi)容寫入 histfiles。Linux系統(tǒng)當(dāng)你在shell(控制臺)中輸入并執(zhí)行命令時,shell會自動把你的命令記錄到歷史列表中,一般保存在用戶目錄下的.bash_history文件中。默認保存1000條,你也可以更改這個值。如果你鍵入 history, history會向你顯示你所使用的前1000個歷史命令,并且給它們編了號,你會看到一個用數(shù)字編號的列表快速從屏幕上卷過。你可能不需要查看1000個命令中的所有項目, 當(dāng)然你也可以加入數(shù)字來列出最近的 n 筆命令列表。linux中history命令不僅僅讓我們可以查詢歷史命令而已. 我們還可以利用相關(guān)的功能來幫我們執(zhí)行命令。運行特定的歷史命令history會列出bash保存的所有歷史命令,并且給它們編了號,我們可以使用“嘆號接編號”的方式運行特定的歷史命令.
常用用法:
!NUMBER 執(zhí)行第NUMBER條命令
!! 和crtl+p 都是執(zhí)行上一條命令
! COMMAND e.g !c 執(zhí)行最近的以c開頭的命令,切記是從后往前最近的一條以C開頭的命令。 常用案例
1、查看history命令使用的時間
由于history列出的命令很多,我們可以通過管道命令將history命令送給less命令方便查看,e.g history |less ;
同時我們可以設(shè)置history的環(huán)境變量HISTTIMEFORMAT讓其顯示每條命令執(zhí)行時間,方便查看和了解當(dāng)前系統(tǒng)何時執(zhí)行過什么命令.
export HISTTIMEFORMAT='%F %T '
若要是想永久讓history命令顯示時間,將上面這條命令追加至當(dāng)前用戶的家目錄下面.bash_profile里面。
2、用Ctrl + R搜索歷史命令
我非常確信這應(yīng)該是你最常使用的history特性,當(dāng)你執(zhí)行了一串相當(dāng)長的命令之后,你只要用關(guān)鍵字搜索一下歷史命令然后重新執(zhí)行這條命令而不需要將整條命令再輸一遍。方法是:按下Ctrl +R然后輸入關(guān)鍵字。 在以下示例中,我搜索“sys”,則顯示以前的命令中含有”sys”的命令“cat/etc/system-release”。
[注:在命令行提示符下按下Ctrl+R,終端將顯示如下提示―reverse-i-search‖]
(reverse-i-search)`sys`: cat/etc/system-release
[注:當(dāng)看到你要的命令后按回車鍵,就可以重新執(zhí)行這條命令了]
cat /etc/system-release
而有的時候你需要在執(zhí)行一條歷史命令之前編輯它.比如,你可以像下面那樣搜索“sys”,終端顯示歷史命令“cat /etc/system-release”,選擇它把"system"改為“centos”然后執(zhí)行它
[注: 在命令提示符下按 Ctrl+R , 將會顯示提示符‖reverse-i-search‖]
(reverse-i-search)`sys`:cat /etc/system-release
[注: 看到你想要的命令后按下左鍵或者右鍵,就可以在執(zhí)行這條命令之前編輯它了]
cat /etc/centos-release
3、使用HISTFILE改變歷史文件名
默認情況下,命令歷史被儲存在.bash_history文件中,把下面的一行添加到.bash_profile文件中,重新登錄shell,則.commandline_warrior文件將取代.bash_history文件用來儲存歷史命令。你可以使用這個命令來追蹤不同終端中執(zhí)行的命令,屆時只需要將不同終端中所執(zhí)行的命令保存在不同的歷史文件中即可。這樣就能知道系統(tǒng)出問題到底是誰在操作導(dǎo)致的。
vim ~/.bash_profile
HISTFILE=/root/.commandline_warrior
4、使用HISTCONTROL來消除命令歷史中的連續(xù)重復(fù)條目;
cat /etc/profile
if [ "$HISTCONTROL" = "ignorespace" ] ; then
export HISTCONTROL=ignoreboth
else
export HISTCONTROL=ignoredups
fi
這個HISTCONTROL變量就是控制是否顯示連續(xù)的重復(fù)條目,連續(xù)敲三次ls, 這三次ls就叫做連續(xù)重復(fù)命令;假若敲一次ls,一次cd,再一次ls,這不叫做連續(xù)重復(fù)命令;
ignoreups就是ignoredups去除連續(xù)重復(fù)的命令,只能剔除連續(xù)的重復(fù)條目;要清除整個命令歷史中的重復(fù)條目,可以將 HISTCONTROL 設(shè)置成 erasedups;
ignorespce 是以空格開頭的命令在history中不顯示,e.g [spcace] ls ,再去history就不能發(fā)現(xiàn)ls這個命令,但是我們能看到這個命令是執(zhí)行了的。
ignoreboth 就是同時帶著上面兩種選項的結(jié)果。
5、將上一個命令的參數(shù)傳遞給當(dāng)前命令。
!!:$將上一個命令的參數(shù)傳遞給當(dāng)前命令
e.g cat /etc/profile
vim !!:$ 這個打開還是/etc/profile 這個文件
!^ 將上一個命令中的第一個參數(shù)傳遞給當(dāng)前命令
cp /etc/profile /tmp
vim !^ 打開的文件就是 /etc/profile
6、替換特定命令的特定參數(shù)
在下例中,!cp:2 在命令歷史中查找以cp開頭的命令,并將其第二個參數(shù)做為當(dāng)前命令(ls -l)的參數(shù)。
cp /etc/profile /tmp
ls -l !cp:2
ls -l /tmp
在下面的例子中“!cp:$”尋找先前以cp為開頭的命令,并把該條指令的最后一個參數(shù)(在這個例子中依舊是第二個參數(shù))替換到“l(fā)s –l”中。
ls -l !cp:$
ls -l /tmp
同理,ls -l !cp:^ 就是需要以cp開頭命令,并把該條命令的第一個參數(shù)替換到“l(fā)s -l”中
ls -l !cp:^
ls-l /etc/profile
7、用HISTIGNORE讓history在存儲時忽略某些指令
有時你不想在記錄里看到諸如“pwd”,“l(fā)s”之類的基本指令,可以用HISTIGNORE忽略這些指令。
注意在HISTIGNORE中添加“l(fā)s”,只忽略“l(fā)s”不忽略“l(fā)s –l”。一定要準(zhǔn)確的寫出要忽略的的指令。
#export HISTIGNORE=“pwd:ls:”
同理這條命令可以追加進家目錄下的.bash_profile。
本文標(biāo)題:history的命令詳解
本文網(wǎng)址:http://jinyejixie.com/article14/jopsde.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、網(wǎng)站營銷、云服務(wù)器、Google、用戶體驗、
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)