close

在 Linux 中,有一個非常有用的命令可以向你顯示最近使用過的所有最後命令。該命令簡稱為history。

顯示時間戳

通常當你從命令行鍵入歷史記錄時,它會顯示命令# 和命令。出於審計目的,將時間戳與命令一起顯示可能會有所幫助,如下所示。

exportHISTTIMEFORMAT='%F%T'history|more12020-06-2519:02:39systemctlrestartnetwork22020-06-2519:02:43exit32020-06-2519:02:47id42020-06-2519:02:56cat/etc/hosts使用 Control+R 搜索歷史記錄

這可能是你歷史上最常用的功能。當你已經執行了一個很長的命令時,你可以簡單地使用關鍵字搜索歷史記錄並重新執行相同的命令,而無需完全鍵入它。

按 Control+R 並鍵入關鍵字。
當你看到你的命令時按回車鍵,這將執行歷史記錄中的命令。

在以下示例中,我搜索了host,它顯示cat /etc/hosts了歷史記錄中包含單詞的上一個命令host。

(reverse-i-search)`host':cat/etc/hostscat/etc/hosts#<ip-address><hostname.domain.org><hostname>11localhost.localdomainlocalhostserver1::1localhost.localdomainlocalhostserver1

有時你想在執行之前編輯歷史命令。例如,你可以搜索systemctl,它將

systemctlrestartnetwork

從命令歷史記錄中顯示,選擇此命令(按 ESC 鍵)並更改restart為stop並再次重新執行,如下所示。

(reverse-i-search)`systemctl':systemctlstopnetworksystemctlstopnetwork使用 4 種不同的方法快速重複上一個命令

有時你可能會因為各種原因重複前面的命令。以下是重複上次執行命令的 4 種不同方式。

使用up arrow查看上一條命令,按回車鍵執行。
類型!!,並按命令行輸入
!-1從命令行鍵入並按回車鍵。
按Control+P會顯示上一條命令,按回車鍵執行。

執行歷史記錄中的特定命令

在下面的例子中,如果你想重複命令#4,你可以做!4如下所示。

history | more

systemctlrestartnetworkexitidcat/etc/hosts

!4

cat/etc/hosts#<ip-address><hostname.domain.org><hostname>11localhost.localdomainlocalhostserver1::1localhost.localdomainlocalhostserver1執行以特定單詞開頭的上一個命令

輸入!後跟要重新執行的命令的開頭幾個字母。在以下示例中,輸入!ps並回車,執行以 開頭的上一個命令ps,即ps aux | grep yp。

!ps

psaux|grepyproot1694701365161264?Sl13:100:00ypbindroot17503004124740pts/0S+19:190:00grepyp控制歷史總行數

將以下兩行附加到.bash_profile並重新登錄到 bash shell 以查看更改。在此示例中,1500 命令將存儲在 bash 歷史記錄中。

vi ~/.bash_profile

HISTSIZE=1500HISTFILESIZE=1500更改歷史文件名

默認情況下,歷史記錄存儲在~/.bash_history文件中。將以下行添加到 .bash_profile 並重新登錄到 bash shell,將歷史命令存儲在.my_commandline文件而不是.bash_history文件中。當你想要使用不同的歷史文件名跟蹤從不同終端執行的命令時,會使用它。

vi ~/.bash_profile

HISTFILE=/root/.my_commandline消除歷史的連續重複輸入

在下面的例子pwd中輸入了 3 次,當你做 history 時,你可以看到它的所有 3 次連續出現。為了消除重複的,設置HISTCONTROL到ignoredups如下所示。

history | tail -4

44pwd45pwd46pwd47history|tail-4exportHISTCONTROL=ignoredupshistory|tail-356exportHISTCONTROL=ignoredups57pwd58history|tail-4擦除整個歷史中的重複項

上面顯示的 ignoreups 僅當它們是連續命令時才會刪除重複項。要消除整個歷史記錄中的重複項,請將 HISTCONTROL 設置為 erasedups,如下所示。

exportHISTCONTROL=erasedupspwdsystemctlrestartnetworkhistory|tail-338pwd39systemctlrestartnetwork40history|tail-3ls-lsystemctlrestartnetworkhistory|tail-635exportHISTCONTROL=erasedups36pwd37history|tail-338ls-l39systemctlrestartnetwork40history|tail-6強制歷史記錄不記住特定命令

當你執行命令時,你可以通過設置HISTCONTROL為ignorespaceAND 在命令前鍵入一個空格來指示歷史記錄忽略該命令,如下所示。我可以看到很多初級系統管理員對此感到興奮,因為他們可以從歷史記錄中隱藏命令。了解ignorespace工作原理是很好的。但是,作為最佳實踐,不要有目的地向歷史隱瞞任何事情。

exportHISTCONTROL=ignorespacels-ltrpwdsystemctlrestartnetwork#Notethatthereisaspaceatthebeginningofservice,toignorethiscommandfromhistory

history | tail -3

67ls-l68pwd69history|tail-3清除所有以前的歷史記錄

有時你可能想清除所有以前的歷史記錄,但又想讓歷史記錄向前推進。

history -c

替換歷史命令中的單詞

當你搜索歷史記錄時,你可能想要執行不同的命令,但使用剛剛搜索的命令中的相同參數。

在下面的示例中,!!:$vi 命令的 next 獲取從前一個命令到當前命令的參數。

lsnginx.confnginx.confvi!!:$vinginx.conf`

在下面的示例中,!^vi 命令的next 獲取從前一個命令(即cp命令)到當前命令(即vi命令)的第一個參數。

cpnginx.confnginx.conf.bakvi!^

vi nginx.conf

將特定參數替換為特定命令

在下面的示例中,!cp:2搜索歷史記錄中以 cp 開頭的上一個命令,並採用 cp 的第二個參數並將其替換為 ls -l 命令,如下所示。

cp~/longname.txt/really/a/very/long/path/long-filename.txtls-l!cp:2ls-l/really/a/very/long/path/long-filename.txt

在下面的示例中,!cp:$搜索歷史記錄中以 cp 開頭的上一個命令,並採用 cp 的最後一個參數(在這種情況下,也是如上所示的第二個參數)並將其替換為 ls -l 命令,如下所示.

ls -l !cp:$

ls-l/really/a/very/long/path/long-filename.txt禁用歷史的使用

如果你想同時禁用歷史記錄並且不希望 bash shell 記住你輸入的命令,請將 設置HISTSIZE為 0,如下所示。

exportHISTSIZE=0history#Notethathistorydidnotdisplayanything忽略歷史記錄中的特定命令

有時你可能不想用基本命令(例如pwd和 )弄亂你的歷史記錄ls。使用HISTIGNORE你想從歷史中忽略指定的所有命令。請注意,添加ls到HISTIGNOREignores onlyls而不是ls -l. 因此,你必須提供你希望從歷史記錄中忽略的確切命令。

exportHISTIGNORE="pwd:ls:ls-ltr:"pwdlsls-lsystemctlrestartnetwork

history | tail -3

79exportHISTIGNORE="pwd:ls:ls-l:"80systemctlrestartnetwork81history[Notethathistorydidnotrecordpwd,lsandls-l]

熱文推薦

藍隊應急響應姿勢之Linux

通過DNSLOG回顯驗證漏洞

記一次服務器被種挖礦溯源

內網滲透初探 | 小白簡單學習內網滲透

實戰|通過惡意 pdf 執行 xss 漏洞

免殺技術有一套(免殺方法大集結)(Anti-AntiVirus)

內網滲透之內網信息查看常用命令

關於漏洞的基礎知識

任意賬號密碼重置的6種方法

乾貨 | 橫向移動與域控權限維持方法總匯

手把手教你Linux提權

歡迎關注LemonSec


覺得不錯點個「贊」、「在看」哦

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 鑽石舞台 的頭像
    鑽石舞台

    鑽石舞台

    鑽石舞台 發表在 痞客邦 留言(0) 人氣()