<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          誰(shuí)動(dòng)了我的 Linux?原來(lái) history 這么強(qiáng)大!

          共 3842字,需瀏覽 8分鐘

           ·

          2021-05-05 07:00


          當(dāng)我們頻繁使用 Linux 命令行時(shí),有效地使用歷史記錄,可以大大提高工作效率。
          在平時(shí) Linux 操作過(guò)程中,很多命令是重復(fù)的,你一定不希望大量輸入重復(fù)的命令。如果你是系統(tǒng)管理員,你可能需要對(duì)用戶操作進(jìn)行審計(jì),管理好 Linux 命令歷史記錄顯得非常重要。
          今天我們來(lái)介紹一下,在 Linux 使用 history 來(lái)減少重復(fù)命令的幾個(gè)實(shí)用技巧。


          1 基本原理

          Linux 命令的歷史記錄,會(huì)持久化存儲(chǔ),默認(rèn)位置是當(dāng)前用戶家目錄的 .bash_history 文件。

          當(dāng) Linux 系統(tǒng)啟動(dòng)一個(gè) Shell 時(shí),Shell 會(huì)從 .bash_history 文件中,讀取歷史記錄,存儲(chǔ)在相應(yīng)內(nèi)存的緩沖區(qū)中。

          我們平時(shí)所操作的 Linux 命令,都會(huì)記錄在緩沖區(qū)中。包括 history 命令所執(zhí)行的歷史命令管理,都是在操作緩沖區(qū),而不是直接操作 .bash_history 文件。

          當(dāng)我們退出 Shell,比如按下 Ctrl+D 時(shí),Shell 進(jìn)程會(huì)把歷史記錄緩沖區(qū)的內(nèi)容,寫回到 .bash_history 文件中去。

          2 使用詳解

          清楚了 history 的基本原理,我們來(lái)具體學(xué)習(xí)一下如何使用它。

          (一)基礎(chǔ)用法

          直接輸入 history 命令,可以看到最近操作的所有命令都顯示出來(lái)了

          $ history   1  bash   2  ls   3  vim .bash_history   4  cat .bash_history   5  history   6  bash

          有時(shí)候我不需要顯示所有的歷史命令,只顯示最后的 10 條歷史記錄,可以在命令后加數(shù)字 N 即可

          $ history 10

          正常情況下,只有在 Shell 正常退出時(shí),才會(huì)將緩沖區(qū)內(nèi)容保存到文件。如果你想主動(dòng)保存緩沖區(qū)的歷史記錄,執(zhí)行 -w 選項(xiàng)即可

          $ history -w


          當(dāng)然,如果你執(zhí)行了一些敏感的命令操作,可以執(zhí)行 -c 將緩沖區(qū)內(nèi)容直接刪除


          $ history -c

          (二)重復(fù)執(zhí)行命令

          如果要重復(fù)執(zhí)行一些命令,可以使用 ! 來(lái)快速執(zhí)行重復(fù)的命令。

          舉個(gè)例子,重復(fù)執(zhí)行第 1024 歷史命令,可以執(zhí)行如下命令

          $ !1024

          1024 這個(gè)編號(hào)可以通過(guò) history 查看哦

          重復(fù)執(zhí)行上一條命令

          $ !!

          重復(fù)執(zhí)行倒數(shù)第 6 條歷史命令,可以通過(guò)負(fù)數(shù)表示,-6 表示倒數(shù)第 6 條記錄

          $ !-6

          (三)搜索歷史命令

          有時(shí)候,需要重復(fù)執(zhí)行某字符串開頭的最后一個(gè)命令,同樣可以通過(guò) ! 來(lái)操作,然后按 Enter 執(zhí)行即可

          比如,剛才執(zhí)行了一個(gè)很長(zhǎng)命令,只記錄命令開頭是 curl,這時(shí)就可以通過(guò) !curl 快速執(zhí)行該命令

          $ !curl

          這個(gè)用法很高效,但存在不安全因素,因?yàn)橛锌赡軋?zhí)行的命令不是你想要執(zhí)行的,那就壞事了??梢酝ㄟ^(guò) :p 來(lái)安全地執(zhí)行。

          $ !curl:pcurl www.sina.com.cn


          加上 :p 后,只是打印出了搜索到的命令,如果要執(zhí)行,請(qǐng)按 Up 鍵,然后回車即可。
          如果你只知道某條命令包含了 x 信息,不是以 x 開頭,同樣可以通過(guò) ? 來(lái)執(zhí)行包含字符串的命令


          (四)交互式搜索歷史命令


          在 Linux 搜索歷史命令,還可以通過(guò)交互式的搜索方式,簡(jiǎn)直高效直接。在命令行輸入 Ctrl+R 后,進(jìn)入交互界面,鍵入需要搜索的關(guān)鍵字,如果匹配到多條命令,可以多次鍵入 Ctrl+R 來(lái)切換上一條匹配的命令。


          (reverse-i-search)`sina': echo sina

          可以看到,我輸入了 sina 后,就自動(dòng)匹配到最近一次和 sina 匹配的命令,這時(shí)按下回車就可以執(zhí)行該命令。

          (五)重復(fù)執(zhí)行上條命令

          在這里總結(jié)下多種重復(fù)執(zhí)行上條命令的方式,你可以選擇一種自己喜歡的就可以啦

          • !!

          • !-1

          • Ctrl+p

          • Up

          • Ctrl+R

          (六)顯示時(shí)間戳

          有時(shí)候需要對(duì) Linux 系統(tǒng)做審計(jì),那為歷史記錄添加時(shí)間戳,顯示非常有用。

          $ export HISTTIMEFORMAT='%F %T '$ history 3  46  2021-04-18 15:21:33 curl baidu.com  47  2021-04-18 15:21:35 pwd  48  2021-04-18 15:21:39 history 3


          可以看到,歷史記錄已經(jīng)顯示了時(shí)間戳。其實(shí)這些對(duì)于審計(jì)需求,還不夠,可以加上更詳細(xì)的信息:


          $ export HISTTIMEFORMAT="%F %T `who -u am i 2>/dev/null| awk '{print $NF}'|sed \-e 's/[()]//g'` `whoami` "  6  2021-04-18 16:07:48 113.200.44.237 root ls  7  2021-04-18 16:07:59 113.200.44.237 root pwd  8  2021-04-18 16:08:14 113.200.44.237 root history

          (七)控制歷史記錄總數(shù)

          默認(rèn)情況下,Linux 系統(tǒng)最多存儲(chǔ) 1000 條歷史記錄,可以通過(guò) HISTSIZE 環(huán)境變量查看

          $ echo $HISTSIZE1000

          對(duì)于需要做審計(jì)的場(chǎng)景,1000 條歷史記錄可能會(huì)太少了,我們可以修改為合適的值

          $ export HISTSIZE=10000

          注意,HISTSIZE 變量只能控制緩沖區(qū)中的歷史記錄數(shù)量,如果需要控制 .bash_history 文件存儲(chǔ)的最大記錄數(shù),可以通過(guò) HISTFILESIZE 進(jìn)行控制

          上述命令行修改只在當(dāng)前 Shell 環(huán)境生效,如果需要永久生效,需要寫入配置文件

          $ echo "export HISTSIZE=10000" >> ~/.bash_profile$ echo "export HISTFILESIZE=200000" >> ~/.bash_profile$ source ~/.bash_profile

          (八)更改歷史記錄文件名

          有時(shí),為了方便管理和備份,需要更改歷史記錄文件的路徑和名稱。簡(jiǎn)單,同樣可以通過(guò)環(huán)境變量 HISTFILE 更改它的文件名稱

          $ echo "export HISTFILE=/data/backup/chopin.bash_history" >> ~/.bash_profile$ souce ~/.bash_profile

          (九)禁用歷史記錄

          處于某種特殊環(huán)境,我們需要禁用歷史記錄

          $ echo "export HISTSIZE=0" >> ~/.bash_profile$ echo "export HISTFILESIZE=0" >> ~/.bash_profile$ source ~/.bash_profile

          哈哈,直接把上述兩個(gè)變量的值設(shè)置為 0,就實(shí)現(xiàn)了禁用歷史記錄的功能

          (十)黑客必知的一個(gè)小技巧

          最后分享一個(gè)不為人知的,黑客必知的小技巧。

          在命令前額外多加一個(gè)空格,這樣的命令是不會(huì)被記錄到歷史記錄的,感覺是不是很酷

          這個(gè)技巧如果在你的系統(tǒng)不管用,請(qǐng)查看下環(huán)境變量 HISTCONTROL 是否包含 ignorespace,貌似 centos 系統(tǒng)默認(rèn)沒有設(shè)置這個(gè)值。

          3 總結(jié)時(shí)間

          在 Linux 系統(tǒng),history 命令可以非常方便,幫助我們管理歷史命令,平時(shí)我們命令都會(huì)先記錄在緩存區(qū),在 Shell 退出時(shí)才會(huì)記錄到文件中。

          history 命令提供了很方便的管理功能,合理去配置和管理歷史記錄,可以讓你的 Linux 系統(tǒng)更加健壯和安全。

          好了,老規(guī)矩,貼心的肖哥還是來(lái)總結(jié)一下 history 命令常用方法

          • history n只顯示最近的 n 條歷史記錄

          • history -c清除緩存區(qū)中的歷史記錄

          • history -w將緩存區(qū)的歷史記錄保存到文件

          • history -d N刪除第 N 條歷史記錄

          幾種重復(fù)執(zhí)行命令的方法:!!、!-1、!N、!string 等交互式歷史命令搜索,請(qǐng)使用 Ctrl+R 快捷鍵合適使用幾個(gè)相關(guān)的環(huán)境變量,讓你的 Linux 系統(tǒng)更安全:

          • HISTSIZE控制緩沖區(qū)歷史記錄的最大個(gè)數(shù)

          • HISTFILESIZE控制歷史記錄文件中的最大個(gè)數(shù)

          • HISTIGNORE設(shè)置哪些命令不記錄到歷史記錄

          • HISTTIMEFORMAT設(shè)置歷史命令顯示的時(shí)間格式

          • HISTCONTROL擴(kuò)展的控制選項(xiàng)

          如果在生產(chǎn)環(huán)境,這些環(huán)境變量需要持久化到配置文件 ~/.bash_profile

          export HISTCONTROL=ignoreboth# ignorespace: 忽略空格開頭的命令# ignoredups: 忽略連續(xù)重復(fù)命令# ignoreboth: 表示上述兩個(gè)參數(shù)都設(shè)置
          # 設(shè)置追加而不是覆蓋shopt -s histappend
          export HISTSIZE=1000export HISTFILESIZE=200000export HISTTIMEFORMAT="%F %T "export HISTIGNORE="ls:history"


          更多精彩內(nèi)容,關(guān)注我們▼▼
          瀏覽 55
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  99久久久无码国产一区二区三区 | 亚洲色婷婷在线播放 | 看一级黄色片 | 免费一区二区三区无码 | 日本少妇做爱视频 |