前言
?? 想要學(xué)好Linux,命令是基本功,企業(yè)中常用的命令大約200多個(gè),不管是寫shell腳本還是管理操作系統(tǒng),最常用的命令必須要牢牢掌握,像我們以前學(xué)乘法口訣一樣,爛熟于心,唯有如此,才能打牢基礎(chǔ)。
?? 只要地球不爆炸,我們永遠(yuǎn)不放假,只要宇宙不重啟,我們永遠(yuǎn)不休息,,風(fēng)里雨里節(jié)日里我們都在機(jī)房等著你
?? 知識最重要的是記憶,反復(fù)練習(xí)才能有所成就
?? 入門須知: 想要人生從容,必須全力以赴,努力才是你最終的入場券??????
?? 最后: 努力成長自己,愿我們都能在看不到的地方閃閃發(fā)光 ,一起加油進(jìn)步??????
大家好,我是沐風(fēng)曉月,平時(shí)除了吃飯,睡覺,就是學(xué)習(xí)哦,要一起成長的小伙伴,記得一鍵三連哦。
今天我們一起來看看linux中一個(gè)最重要的命令:歷史記錄命令history,以及一些常用的快捷鍵,不得不說,快捷鍵用起來超級順暢。
??
當(dāng)然我們平時(shí)敲的命令都會被歷史記錄,保存下來,我們一起來學(xué)習(xí)下吧
一、history作用
history有兩個(gè)作用:
- 用于顯示歷史記錄和執(zhí)行過的指令命令
- 當(dāng)?shù)卿泂hell或者是退出的時(shí)候會自動(dòng)進(jìn)行讀取和存儲
二、history常用語法
1. 常用用法
我們可以使用help來查看參數(shù)和用法
[root@mufengxiaoyue ~]# help history
history: history [-c] [-d 偏移量] [n] 或 history -anrw [文件名] 或 history -ps 參數(shù) [參數(shù)...]
顯示或操縱歷史列表。
帶行號顯示歷史列表,將每個(gè)被修改的條目加上前綴 `*'。
參數(shù) N 會僅列出最后的 N 個(gè)條目。
選項(xiàng):
-c 刪除所有條目從而清空歷史列表。
-d 偏移量 從指定位置刪除歷史列表。
-a 將當(dāng)前繪畫的歷史行追加到歷史文件中
-n 從歷史文件中讀取所有未被讀取的行
-r 讀取歷史文件并將內(nèi)容追加到歷史列表中
中
-w 將當(dāng)前歷史寫入到歷史文件中
并追加到歷史列表中
-p 對每一個(gè) ARG 參數(shù)展開歷史并顯示結(jié)果
而不存儲到歷史列表中
-s 以單條記錄追加 ARG 到歷史列表中
如果給定了 FILENAME 文件名,則它將被作為歷史文件。否則
如果 $HISTFILE 變量有值的話使用之,不然使用 ~/.bash_history 文件。
如果 $HISTTIMEFORMAT 變量被設(shè)定并且不為空,它的值會被用于
strftime(3) 的格式字符串來打印與每一個(gè)顯示的歷史條目想關(guān)聯(lián)的時(shí)
間戳,否則不打印時(shí)間戳。
退出狀態(tài):
返回成功,除非使用了無效的選項(xiàng)或者發(fā)生錯(cuò)誤。
可以看到我們執(zhí)行history只需要后面加上選項(xiàng)和參數(shù)即可:
# history (選項(xiàng))(參數(shù))
2. 常用參數(shù)
日常工作中我們常用的參數(shù)有以下幾個(gè):
參數(shù) | 描述 |
---|---|
n | 顯示最近的N條記錄 |
-a | 將歷史命令緩沖區(qū)中命令寫入歷史命令文件中 |
-c | 將目前的shell中的所有 history 內(nèi)容全部消除 (并非真的刪除) |
-r | 將歷史命令文件中的命令讀入當(dāng)前歷史命令緩沖區(qū) |
-w | 將當(dāng)前歷史命令緩沖區(qū)命令寫入歷史命令文件中 |
-d | 刪除歷史記錄的指定行 |
3. 常用案例舉例
3.1 獲取歷史記錄的最新兩條記錄
[root@mufenggrow ~]# history 2
9 cd
10 history 2
這種方式獲取的最新兩條記錄,也會把剛剛執(zhí)行的命令算上了,所以如果我們要獲取最新執(zhí)行的兩條命令,可以使用n+1
比如我們要查詢兩條,那就用 history 3 來獲取。
3.2 清除全部歷史記錄
-c 參數(shù)主要用來清空所有歷史記錄
[root@mufenggrow ~]# history -c
[root@mufenggrow ~]# history
1 history
[root@mufenggrow ~]#
這種方式類似 與clear,相當(dāng)于幸虧顯示,并不會把文件中的歷史記錄刪除,如果要真正的歷史記錄,需要用本文中第4條關(guān)于history的配置文件。
3.3 刪除某一行數(shù)據(jù)
-d 參數(shù),可以刪除某行數(shù)據(jù)。
比如刪除第358行數(shù)據(jù)
[root@mufenggrow ~]# history -d 358
這種方法的唯一不足就是,你得需要知道命令的行數(shù),比如先用history去查看,看看命令在第幾行,在調(diào)用history -d 來刪除。
4. 關(guān)于history的配置文件
所有我們用history命令看到的歷史記錄,都默認(rèn)保存在:
~/.bash_history
如果是root用戶就是在/root/.bash_history
直接刪掉這個(gè)文件會清除所有歷史記錄,再登陸系統(tǒng)會自動(dòng)重新生成這個(gè)文件。
Linux 命令的歷史記錄,有持久化存儲,默認(rèn)位置是當(dāng)前用戶家目錄的 .bash_history 文件。
當(dāng) Linux 系統(tǒng)啟動(dòng)一個(gè) Shell 時(shí),Shell 會從 .bash_history 文件中,讀取歷史記錄,存儲在相應(yīng)內(nèi)存的緩沖區(qū)中。
我們平時(shí)所操作的 Linux 命令,都會記錄在 緩沖區(qū) 中。包括 history 命令所執(zhí)行的歷史命令管理,都是在操作 緩沖區(qū) ,而不是直接操作 .bash_history 文件。
當(dāng)我們退出 Shell,比如按下 Ctrl+D 時(shí),Shell 進(jìn)程會把歷史記錄緩沖區(qū)的內(nèi)容,寫回到 .bash_history 文件中去。
5. 隱藏歷史記錄實(shí)戰(zhàn)
有時(shí)候我們覺得命令中出現(xiàn)了密碼不安全,比如我們執(zhí)行 MySQL -u root -p123456 這個(gè)命令的時(shí)候,其他人如果查看歷史記錄,也會看到我們的MySQL密碼,于是我們就有了隱藏某條歷史記錄的需求。
想要隱藏某條歷史記錄,會用到set +o
set +o history 表示開始隱藏
set -o history 表示結(jié)束隱藏
[root@mufenggrow ~]# set +o history ## 設(shè)置開啟隱藏
[root@mufenggrow ~]# mysql -uroot -p123456
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
## 這里的MySQL報(bào)錯(cuò)是因?yàn)闆]有MySQL服務(wù)
[root@mufenggrow ~]# history 3
1 history
2 history -d 358
## 查看歷史記錄發(fā)現(xiàn)沒有剛才執(zhí)行的帶有密碼的MySQL命令
[root@mufenggrow ~]# set -o history
## 取消history
[root@mufenggrow ~]# mysql -uroot -p123456
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
[root@mufenggrow ~]# history 3
3 mysql -uroot -p123456
4 histroy 3
5 history 3
## c此時(shí)發(fā)現(xiàn)有剛才執(zhí)行過的MySQL命令
6. linux命令審計(jì)
有時(shí)候我們需要對 Linux 系統(tǒng)做審計(jì),那為歷史記錄添加時(shí)間戳,就非常有用。
6.1 顯示歷史記錄的時(shí)間
export HISTTIMEFORMAT='%F %T ’
[root@mufenggrow ~]# export HISTTIMEFORMAT='%F %T '
[root@mufenggrow ~]# ping www.baidu.com
PING www.baidu.com (110.242.68.3) 56(84) bytes of data.
64 bytes from 110.242.68.3 (110.242.68.3): icmp_seq=1 ttl=52 time=26.4 ms
^C
--- www.baidu.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 26.470/26.470/26.470/0.000 ms
[root@mufenggrow ~]# history 3
17 2023-01-11 16:46:52 export HISTTIMEFORMAT='%F %T '
18 2023-01-11 16:46:57 ping www.baidu.com
19 2023-01-11 16:47:03 history 3
[root@mufenggrow ~]#
6.2 控制歷史記錄的總數(shù)
這里我們會用到一個(gè)變量 HISTSIZE ,查看變量信息用下面的命令:
echo $HISTSIZE 查看歷史記錄總數(shù)
[root@mufenggrow ~]# echo $HISTSIZE
1000
[root@mufenggrow ~]# export HISTISIZE=100
可以看到默認(rèn)的歷史記錄總條數(shù)為1000,實(shí)際上做審計(jì)的時(shí)候我們會適當(dāng)把記錄總數(shù)調(diào)大一點(diǎn)。
如果你想要讓上面的操作永久生生效,可以使用下面的方法:
echo "export HISTSIZE=10000" >> ~/.bash_profile
source ~/.bash_profile
這樣相當(dāng)于做了持久化,我們保存到文件里的內(nèi)容,不會因?yàn)槟阒貑⒎?wù)器而丟失數(shù)據(jù)。
總結(jié)
今天我們一起探討的是歷史記錄的命令history,后續(xù)我們在做審計(jì)的時(shí)候用到的比較多,平時(shí)可以直接執(zhí)行hsitory查看歷史記錄也比較方便。你學(xué)會了嗎?
?????? 好啦,這就是今天要分享給大家的全部內(nèi)容了,我們下期再見!? ? ?
??????如果你喜歡的話,就不要吝惜你的一鍵三連了~文章來源:http://www.zghlxwxcb.cn/news/detail-480280.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-480280.html
到了這里,關(guān)于linux基本功之歷史記錄history命令實(shí)戰(zhàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!