1. 程式人生 > >從零開始的linux 第九章

從零開始的linux 第九章

history 命令 歷史

從零開始的linux 第九章


大家早上好~~呼~今天天氣好冷~小編都快感冒惹~

技術分享

同學們要記得多穿衣服呀~~但是~~可不要穿太多哦~~不然可表現不出可愛的一面~~


技術分享

(小編此時看了看路人甲,仔細打量一下路人甲的著裝)

技術分享

(↑小編意味深長的眼神)

嗯,看來同學們還是很有品位的嘛~~~技術分享,既然這樣~作為你們啟蒙老師的小編,就不用給同學們灌輸...就不灌輸 哲♂學 思想啦~~馬上開始這一章的課程吧~~


小編先帶大家回顧一下上一章的內容:

上一章,小編給大家介紹了 PATH 變量hash 緩存及選項which顯示命令的完整路徑whami顯示當前登錄的用戶who am i顯示當前用戶及終端信息who查看當前登錄系統的用戶及其選項w 查看登錄當前系統的用戶並顯示他們在做什麽。這些命令具體的使用小編就不再做什麽過多的總結啦~~同學們可以翻閱上一章的內容。


那麽這章,小編同樣要給同學們介紹一個非常有用的命令:history命令歷史。

所謂命令歷史,就是我們使用過後的命令。當我們執行一條命令後,無論命令執行成功沒有,都會把我們在命令行輸入的內容給記錄下來,而這些被記錄下來的內容,就被稱為命令歷史。

history:查看命令歷史

技術分享

在命令行中直接輸入 history 即可查看曾經使用過的命令,這些命令前面的數字可以理解為該命令是命令歷史中的第幾個命令。(其實小編只截圖了一部分,小編的這個專門用來講課的機器已經有300多條命令歷史咯)

可是..小編可是剛開機,怎麽會有這麽多命令歷史呢?其實,history 命令是有一個配置文件的,而用戶每次登錄都會讀取這個配置文件,該配置文件中存放的就是用戶所執行過的命令。

~/.bash_history文件中存放了 history 的命令歷史,現在,小編就來看一下這個文件內容。

技術分享

↑這是小編直接在命令行輸入 history 所顯示的內容,而最後的4個,是小編剛才剛輸入的命令。


技術分享

↑這是小編查看 ~/.bash_history 所顯示的內容。

那,這兩個有什麽不同呢?沒錯,~/.bash_history這個文件中,沒有把小編剛才輸入的4條命令存在文件中,而這4條命令被放在了 history 緩存中,當用戶退出時,這些命令才會被 追加 到這個文件中。所以,新執行的命令不會在該文件中出現。

當用戶登錄時,會讀取這個文件,曾經使用過的命令可以用 history 查看。但是~~小編會告訴大家一些控制命令歷史的方法~~認真聽哦~~

小編剛才說,新執行的命令退出後會被追加到 命令歷史的文件(~/.bash_history) 中,可不可以不退出就可以將新執行的命令追加進去呢?

history -a:本次會話新執行的命令寫入到歷史文件中

技術分享

小編再來查看一下 命令歷史文件:

技術分享

新執行的命令都被添加到了歷史文件中。


阿啦~~被你們發現惹~~其實查看一個文件就是用的 cat 命令,不過具體用法小編以後再來說咯~

擁有相同功能的選項還有 -w

history -w:把歷史列表中的命令追加至歷史文件中

技術分享

技術分享

雖然看上去 history -w 與 history -a 沒什麽區別,但實際上他們是有區別的,一個是本次會話,另一個則是歷史列表。所以當使用兩個不同的終端時,用 -a 選項添加到歷史文件中的命令,不會包括其他終端輸入的命令,-w 包括所有終端輸入的命令。

說到添加,那我們能不能刪除呢?刪除歷史列表的指定的命令歷史:

history -d #(表示第幾條命令歷史):刪除指定的命令歷史

用 history 命令可查看歷史列表中的命令,這些命令前邊的數字就是表示該命令在歷史列表中的第幾條命令。

技術分享

比如小編現在要把第 392 這條命令歷史刪除。

技術分享

技術分享

與上圖相比,第 392 條命令歷史在歷史列表中被刪除,而其後面的所有命令歷史都向前移動了一位,原本第393條命令歷史是 history,現在變為第392條。


但這有什麽用呢?比如,你要對別人的電腦做一些小動作,並且是對方不被發現,但是你做的所有操作都會被記錄在命令歷史中,這時候就可以用這個功能將命令歷史刪除啦~~不過,刪除的動作會被看到哦~~小編等下再告訴同學們如何不被看到~~


-d 選項一次性刪除的命令歷史太少,我們也可以將所有的命令歷史列表清空:

history -c:清空命令歷史列表

技術分享

2333(大笑),這下做一些小小的動作就不會被發現了吧~~~但是,還是有些缺陷,對方回來後突然發現命令歷史列表空了就會有所察覺的~~嘛~不要急,小編等下告訴同學們更好的方法~


現在,小編的歷史列表空了,想找回其他命令怎麽辦呢??提問,路人丙回答~

路人丙:“唉??小編這次不提問路人甲和路人乙了麽?”

吵死啦,誰讓你是男生,人家是女生。

技術分享

(↑路人乙一臉嘲諷的看著路人丙)

(路人丙一臉無辜的表情):“既然能從歷史列表中向歷史文件中追加命令歷史,當然也能從歷史文件中讀取命令歷史到歷史列表中...”

嗯,還不笨嘛~~不愧是小編教的~~

history -r:從文件讀取命令歷史至歷史列表中

技術分享

技術分享

現在命令歷史重新回到歷史列表中啦~~但是剛才小編刪除之前未追加的歷史文件中的命令就丟失了~


history命令不僅可以將執行過的命令記錄下來,也可以強行將沒有執行過的命令寫入到歷史中。

history -s ‘COMMAND(命令)‘:強行將命令寫入歷史中但不執行

技術分享

技術分享

歷史列表中確實已經存在 ls /etc/ 這條命令(ls命令下面的history是小編用history來查看命令歷史)

那麽,問題來了~~既然可以強行寫入命令歷史而且不執行,那可不可以讓命令不寫入歷史中呢?當然可以~~

history -p ‘COMMAND‘:使用的命令不保存在歷史列表中

技術分享

但是小編可覺得這個沒有一點點作用哦~~畢竟並沒有執行單引號裏面的命令。


那麽,history 命令的選項小編就介紹這麽多,history 命令還有很多功能哦~~該命令還有一些環境變量:

HISTSIZE:查看shell進程可保留的歷史命令的條數(history命令雖然可以把曾經執行過的命令記錄下來,但存放量並不是無限大的,我們可以通過這個變量來查看存放量為多少)

小編之前已經說過如何去引用變量了,雖然...說的很簡潔就是了...

$:引用變量

echo $HISTSIZE:查看可保留的歷史命令條數

技術分享

從顯示結果可以看出,可保留的歷史命令條數最多1000條,但實際上,這個是可以改變的,但盡量還是不要去改了吧~畢竟1000條夠我們來調用啦~~等以後小編講到變量或者配置文件時,同學們自然就會如何修改啦~~

HISTFILE:查看永久保存命令歷史的文件路徑

技術分享

這個文件路徑是根據每個用戶來定的,因為小編現在是root用戶,所有這個文件就顯示在/root目錄下,默認都是用戶的家目錄。

HISTFILESIZE:查看命令歷史文件保留的命令條數

技術分享

命令歷史文件所能保留的命令條數默認也是1000條。

從上面看出,歷史列表和歷史文件中所能保存的命令歷史都是1000條,若超過了1000條怎麽辦呢?當我們使用第1001條命令時,歷史列表會將第一條命令刪除,所有命令向前移動一位,第1001條歷史也就成了第1000條歷史記錄,文件中也是如此。


HISTTIMEFORMAT="%F %T":顯示命令執行的時間

技術分享

技術分享

嗯,差不多就是這樣,不過這種賦值方式,僅僅對於當前終端有效,若想其他地方也有效,就在前面加上 export ,但是重啟之後也會丟失的~~向永久保存,就寫入配置文件中吧~~要寫入哪個配置文件呢??就留給同學們自己研究吧~~


嘛~這些都不重要,下面小編講一下 控制命令歷史記錄 的方式:

HISTCONTROL

↑該環境變量的取值有:ignoredups:忽略重復的命令(默認)

ignorespace:忽略以空白字符開頭的命令

ignoreboth:以上兩個同時生效

erasedups:刪除重復的命令


下面,小編就給大家演示一下:

ignoredups

技術分享

小編清空命令歷史後,執行了兩次 ls 命令,但是這個命令卻只在命令歷史列表中顯示一次,已經充分說明 HISTCONTROL 變量的默認值是 ignoredups.


ignorespace

技術分享

先把變量的值該成 ignorespace,之後,小編所執行的命令前面都加上空格。

技術分享

歷史中,只有改變變量值的歷史,而小編下面所執行的兩天命令都沒有出現在歷史列表中~


嗯...那..剩下那個變量參照著小編所做的步驟,同學們自己試一下~~但是,小編的那麽賦值方法僅僅是對當前的終端有效~換其他終端無效哦~~小編講了這麽多的命令歷史,那命令歷史到底有什麽用呢?既然存在命令歷史,我們就可以調用這些命令歷史來省去輸入重復命令的麻煩,當然這只是其中一個用法~~具體用法還是要視情況而定啦~~


至於如何調用命令歷史,小編下次再說吧~~好累~~小編要休息咯~

(生氣臉)路人甲:“每次講到有用的地方小編都跑了!”

路人乙:“就是,這種人就應該拖出去打死!”

技術分享

THE END

本文出自 “13125850” 博客,請務必保留此出處http://13135850.blog.51cto.com/13125850/1963974

從零開始的linux 第九章