成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

以Terminal歷史記錄來(lái)提高Linux操作效率

entner / 2279人閱讀

摘要:首先學(xué)習(xí)歷史命令記錄的查看搜索增加和刪除等基本操作。刪除命令刪除指定歷史命令位置的命令,可以通過(guò)如的命令實(shí)現(xiàn),如下示例如果歷史記錄如下所示,執(zhí)行會(huì)將這條記錄刪除。清空歷史命令會(huì)清空當(dāng)前會(huì)話終端中的所有歷史命令,重新記錄。

今天將聊的是每個(gè)用過(guò)Linux控制臺(tái)的朋友都知道的一個(gè)存在:terminal的歷史記錄。關(guān)于它最常見(jiàn)的操作就是使用上下方向鍵進(jìn)行歷史命令的切換。剛接觸命令行的同學(xué)會(huì)覺(jué)得這樣就找到歷史的操作真的非常棒。但是用的久了,會(huì)覺(jué)得每次上下鍵查看太煩人,甚至?xí)泻芏嘁蓡?wèn)和其他的一些需求。比如:

怎么快速找到之前執(zhí)行過(guò)的命令;

是否可以利用歷史記錄提高控制臺(tái)操作效率;

為什么有些命令明明執(zhí)行過(guò)但卻找不到;

還有很多其他要求。這篇文章會(huì)告訴你,哪些都可以做到,以及如何更好的利用。

先說(shuō)明一下,我的實(shí)驗(yàn)環(huán)境是centos7。首先按如下順序輸入一些命令:

$ cd /home/poloxue/Public/
$ mkdir Work
$ cd Work
$ mkdir web
$ mkdir app
$ mkdir logs
$ cd logs
$ cp /var/log/openvpnas.log .

執(zhí)行結(jié)束之后。首先學(xué)習(xí)歷史命令記錄的查看、搜索、增加和刪除等基本操作。

如何查看歷史命令 簡(jiǎn)單查閱

首先明確一點(diǎn),歷史命令是按照?qǐng)?zhí)行時(shí)間先后順序進(jìn)行排序的。簡(jiǎn)單查看可使用上下鍵查閱歷史命令;

除了上下鍵操作查看歷史命令之外,可以通過(guò)兩個(gè)快捷鍵(我常使用的方式):

ctrl+p 上查歷史命令,同向上鍵,prev;

ctrl+n 下查歷史命令,同向下鍵,next;

這是最常用的操作方式,這種方式查閱最近幾條執(zhí)行命令效率較高,同時(shí)我們的使用頻率也最高。但是對(duì)于較早時(shí)間執(zhí)行的命令查閱卻很是不便;

使用history命令

history命令是和歷史命令息息相關(guān)的一個(gè)命令,作用對(duì)象就是歷史命令。看一下history命令怎么查詢最近使用的命令記錄?

history [n] 展示最近執(zhí)行的n條記錄,例如:

$ history 3

按時(shí)間倒序展示最近歷史命令,結(jié)果如下:

$ mkdir logs
$ cd logs 
$ cp /var/log/openvpnas.log .

說(shuō)明一下,如果沒(méi)有追加任何的參數(shù),則展示全部歷史記錄;

歷史命令搜索

據(jù)我所知,history命令本身不支持搜索,兩種方式可以實(shí)現(xiàn)這個(gè)功能:ctrl+r快捷鍵和history+grep組合命令。

ctrl+r搜索查看功能

假設(shè)你搜索最近關(guān)于cp的操作,按下ctrl+r快捷鍵之后輸入cp,效果如下:

$
(reverse-i-search)`cp": cp /var/log/openvpnas.log .

此時(shí)按下enter鍵選中便可選中命令并執(zhí)行。需要注意,ctrl+r搜索結(jié)果為最近執(zhí)行符合搜索要求的一條命令。

history+grep搜索查看功能:

為什么需要?ctrl+r只能搜索最近執(zhí)行的命令,如果需要所有滿足匹配的歷史記錄,或者不能完整記住有關(guān)單詞的情況下,history+grep組合可以滿足我們的要求。

例如,搜索所有關(guān)于openvpn的操作。

$ history | grep openvpn

history列出所有歷史記錄,然后利用grep的強(qiáng)大搜索功能,如支持通配符,正則等高級(jí)特性,基本可以滿足你的任何需求;

記錄歷史命令(寫(xiě)入與刪除)

個(gè)人認(rèn)為,歷史命令存在于兩個(gè)區(qū)域,一是每開(kāi)啟一個(gè)新終端都會(huì)加載的HISTFILE文件,二是當(dāng)前會(huì)話終端開(kāi)啟后執(zhí)行的命令,這些命令可以理解為存儲(chǔ)在內(nèi)存中,但尚未寫(xiě)入HOSTFILE文件中的部分。

默認(rèn)寫(xiě)入

當(dāng)前會(huì)話終端關(guān)閉后,會(huì)自動(dòng)將此會(huì)話終端執(zhí)行的歷史命令追加到$HISTFILE文件中。

手動(dòng)寫(xiě)入

默認(rèn)需要關(guān)閉終端才能將當(dāng)前終端的歷史命令寫(xiě)入到$HISTFILE中,如需手動(dòng)寫(xiě)入可執(zhí)行如下命令:

$ history -w

效果與關(guān)閉終端效果一樣,會(huì)將當(dāng)前終端執(zhí)行的沒(méi)有寫(xiě)入到HISTFILE中。

刪除命令

刪除指定歷史命令位置的命令,可以通過(guò)如history -d n的命令實(shí)現(xiàn),如下示例:

$ history -d 1

如果歷史記錄如下所示,執(zhí)行history -d 1會(huì)將mkdir public這條記錄刪除。

1 mkdir Public
2 cd Public/
3 mkdir work
4 cd work
5 mkdir web
6 mkdir app
7 mkdir logs
8 cd logs
7 cp /var/log/openvpnas.log
清空歷史命令

history -c 會(huì)清空當(dāng)前會(huì)話終端中的所有歷史命令,重新記錄。但此時(shí)只是改變了當(dāng)前會(huì)話終端中的記錄,并沒(méi)有記錄到$HISTFILE文件中。

哪些配置項(xiàng)

歷史記錄的控制方式我們也可以通過(guò)配置項(xiàng)來(lái)改變。

HISTSIZE與HISTFILESIZE

HISTSIZE 定義了控制臺(tái)輸出命令記錄數(shù)量;

HISTFILESIZE 定義了HISTFILE文件中存放命令記錄的數(shù)量;

$ echo $HISTSIZE
 2000
$ echo $HISTFILESIZE
 2000

我們可以看到打印的默認(rèn)配置HISTSIZE與HISTFILESIZE大小一樣。當(dāng)歷史命令超過(guò)規(guī)定數(shù)量會(huì)自動(dòng)覆蓋,為了更好的利用和防止歷史命令,可以將HISTFILESIZE與HISTSIZE調(diào)整的大一些;

$ vim .bashrc

在/$HOME/.bashrc添加如下內(nèi)容:

export HISTFILESIZE=3000
export HISTSIZE=3000

關(guān)于HISTTIMEFORMAT顯示命令執(zhí)行時(shí)間戳

默認(rèn)情況下,執(zhí)行history會(huì)輸出記錄編號(hào)和歷史命令。如果為了審查目的,想知道某條命令具體的執(zhí)行時(shí)間,配置HISTTIMEFORMAT??梢耘渲肏ISTTIMEFORMAT為"%F %T "

$ export HISTTIMEFORMAT="%F %T "

此時(shí)執(zhí)行history命令,如下效果:

1 2019-03-15 18:50:12 mkdir Public
2 2019-03-15 18:50:15 cd Public/
3 2019-03-15 18:50:17 mkdir work
4 2019-03-15 18:50:19 cd work
5 2019-03-15 18:50:22 mkdir web
6 2019-03-15 18:50:23 mkdir app
7 2019-03-15 18:50:25 mkdir logs
8 2019-03-15 18:50:29 cd logs
7 2019-03-15 18:50:39 cp /var/log/openvpnas.log

從上圖可以看出,除了顯示記錄編號(hào)與歷史命令之外,還多了執(zhí)行時(shí)間一列。如果此功能經(jīng)常用到,可以將export HISTTIMEFORMAT="%F %T " 添加到/$HOME/.bashrc文件中。

HISTCONTROL與HISTIGNORE

HISTCONTROL與HISTIGNORE可提高文件有限的利用率。通過(guò)上面的了解,我們知道歷史命令的記錄數(shù)量是有上限的。為了提高歷史命令的利用,可以使用兩種方式:一是增加歷史命令的HISTFILESIZE和HISTSIZE,二是減少無(wú)用歷史命令記錄,增加固定大小HISTFILESIZE的空間利用率;

第一種方式就不做介紹,第二種方式就使用兩個(gè)配置項(xiàng):HISTCONTROL與 HISTIGNORE。

    去除連續(xù)重復(fù)命令

設(shè)置HISTCONTROL為ignoredups,如下:

$ export HISTCONTROL=ignoredups

如我們執(zhí)行已經(jīng)執(zhí)行了如下的命令列表:

$ ls
$ export HISTCONTROL=ignoredups
$ ls
$ history
$ pwd
$ pwd

執(zhí)行history查看歷史,輸出效果如下:

1 ls
2 export HISTCONTROL=ignoredups
3 ls
4 history
5 pwd
6 history

從上圖可以看出,當(dāng)HISTCONTROL為ignoredups,重復(fù)兩次的pwd會(huì)合并為一條。但是從上圖中可以看出,對(duì)于不連續(xù)的history仍然保留了兩條,下面解決一下這個(gè)問(wèn)題。

    去除全局重復(fù)歷史命令

上面的示例提出了一個(gè)問(wèn)題,HISTCONTROL為ignoredups并沒(méi)有去除非連續(xù)的重復(fù)命令。下面將HISCONTROL設(shè)置為erasedups,如下:

$ export HISTCONTROL=erasedups

效果如下:

$ ls 
$ pwd
$ cd .
$ pwd
$ ls openvpn-as-2.0.10-CentOS7.x86_64.rpm

執(zhí)行history,輸出j結(jié)果如下:

1 ls
2 cd
3 pwd
4 ls openvpn-as-2.0.10-CentOS7.x86_64.rpm
5 history

由此可知,雖然執(zhí)行兩次pwd,而且是非連續(xù)的,但是只保存了一條記錄。這樣就可以高效的使用歷史命令有限的存儲(chǔ)空間,但是如果你有需求要保留每次命令執(zhí)行情況,以便日后審查,那就不能干了。

    空格隱去無(wú)用歷史命令

有沒(méi)有這樣一種需求?有些命令我執(zhí)行了,但是我不想讓別人知道。實(shí)現(xiàn)這種需求有兩種方式:

一種是通過(guò)配置空格隱去無(wú)用歷史命令

二是通過(guò)配置指定某些命令需要隱去。

我們來(lái)先說(shuō)第一種。首先,進(jìn)行設(shè)置HISTCONTROL為ignorespace,如下所示:

$ export HISTCONTROL=ignorespace

作用是所執(zhí)行命令以空格開(kāi)頭,不做歷史記錄。執(zhí)行命令如下:

$ history
$  pwd
$  cd 
$ ls

pwd和cd前面都增加了空格,history此時(shí)輸出:

1 history
2 ls
3 history

pwd和cd以空格開(kāi)頭,而history和ls為正常輸入。此時(shí)記錄中只有history與ls。不過(guò),個(gè)人感覺(jué)這種方式不是很好且具有不可控性,有可能產(chǎn)生誤操作導(dǎo)致想要的歷史命令丟失歷史等情況。那有沒(méi)有辦法指定某些命令被忽略,比如ls, history這些不想保留在歷史中。繼續(xù)往下看...

    指定忽略的命令

為了實(shí)現(xiàn)指定命令忽略,需要另外一個(gè)配置項(xiàng):HISTIGNORE。如需要隱去ls, ls -l,pwd, history的執(zhí)行記錄,可以通過(guò)如下設(shè)置:

$ export HISTIGNORE="pwd:ls:ls -l:history"

測(cè)試一下,先來(lái)按順序執(zhí)行如下命令:

$ history
$ pwd
$ ls -l
$ ls Public/

然后看一下history的輸出結(jié)果:

1 ls Public/

我們執(zhí)行了history, pwd, ls -l, ls Public/,但是記錄中我們只發(fā)現(xiàn)只有 ls Public/ 被記錄了下來(lái)。

突然覺(jué)得這個(gè)功能真的好強(qiáng)大,有效利用可以減少無(wú)用歷史命令的存儲(chǔ),還可以啟到安全作用。當(dāng)然,具體省略哪些命令要因人具體情況而定,也不能省略太多。

配置HISTFILE

通過(guò)配置HISTFILE可以改變記錄歷史命令的文件文件,默認(rèn)/$HOME/.bashrc。這就不多說(shuō)了。一般情況不會(huì)改變?cè)撐募奈恢谩?/p> 利用歷史命令快速編輯

上面說(shuō)了那么多,主要是為了更高效的使用。接下來(lái)介紹些更牛的用法:

快速指定歷史命令

快速選中指定命令,一種是使用 ! ,通過(guò)命令執(zhí)行順序編號(hào)或者通過(guò)命令開(kāi)頭選中,二可以通過(guò)ctrl+r搜索快速選中,前面已作過(guò)介紹,不多說(shuō)。下面看看第一種情況,假設(shè)此刻歷史命令如下:

1 ls Public/
2 export HISTCONTROL=erasedups
3 ls HISTCONTROL=erasedups
4 ls
5 history

我們直接通過(guò)示例來(lái)說(shuō)明:

$ !1               // 執(zhí)行命令為ls public
$ !-1              // 執(zhí)行命令為history
$ !!               // 等同于!-1
$ !export          // 執(zhí)行命令為export HISTCONTROL=erasedups

從上面可以看出,!的幾種常見(jiàn)用法:

!n 指定編號(hào)命令

!-n 倒序n處命令

!! !-1的簡(jiǎn)寫(xiě),也就是最近的一條命令

!str 以str開(kāi)頭的最近一條命令,這種方式str中不能存在空格,可使用ctrl+r快捷鍵代替。

快速選中指定參數(shù)

通常在執(zhí)行命令時(shí),參數(shù)的復(fù)雜度都大于命令自身。如果能夠?qū)崿F(xiàn)快速選中命令的某個(gè)參數(shù)那就非常cool了。非常幸運(yùn),這也可以做到。假設(shè)歷史命令如下:

$ history
history
ls public/
ls example01 example02 public/
export HITCONTROL=erasedups
ls ~

示例說(shuō)明:

    引用某命令的第一個(gè)參數(shù) 例如,引用第三條命令的第一個(gè)參數(shù)

$ ls -l !3:^

上述命令的效果相當(dāng)于ls -l example01

例如,引用最新一條以export開(kāi)頭的命令的第一個(gè)參數(shù)

$ ls -l !export:^

效果相當(dāng)于ls -l HISTCONTROL=erasedups。我們可以記住一個(gè)簡(jiǎn)寫(xiě),最近命令的第一個(gè)參數(shù) !!:^ ,簡(jiǎn)寫(xiě) !^。

    引用某條命令的最后一個(gè)參數(shù)

例如,引用第三條命令的最后一個(gè)參數(shù)

$ ls -l !3:$

效果相等于ls -l Public/。對(duì)于引用最新命令的最后一個(gè)參數(shù)同樣有 !!:和 ! 兩種簡(jiǎn)寫(xiě)。

    引用命令任意位置的參數(shù)

除了像開(kāi)頭結(jié)尾這種特殊位置參數(shù)外,我們也可以引用任意位置參數(shù)。還是以上圖中的第三條命令為例,現(xiàn)在我希望引用此命令的第二個(gè)參數(shù):

$ ls -l !3:2

如上面所示命令,此時(shí)的!3:2為example02。以此類推,簡(jiǎn)單測(cè)試一下我們可以知道,!3:0為ls, !3:1為example01, !3:3為Public/。由此可以得出,分號(hào)之后的數(shù)字指定的就是命令參數(shù)的位置,從0計(jì)數(shù)。

    關(guān)于引用命令參數(shù)任意區(qū)間列表

除了指定某一個(gè)參數(shù)之外,選擇參數(shù)時(shí),我們還可以指定參數(shù)區(qū)間,如選擇1-2位置的參數(shù),開(kāi)頭至結(jié)尾處的參數(shù)等。格式:cmd:offset1-offset2。 以第三條歷史命令為例,如下:

$ echo !3:^-$    // 打印全部參數(shù)列表,即example01 example02 Public/
$ echo !3:1-2    // 打印1至2位置參數(shù),即example01 exmple02

從上面的示例,可以看出引用命令參數(shù)的格式通過(guò)分號(hào)分為兩部分,一是從哪條命令,二是哪個(gè)位置的參數(shù)。

歷史命令替換

歷史命令替換用處不多,也只在有比較長(zhǎng)的命令比較高效,格式如下:

cmd:offset1-offset2:s/old/new/:s/old/new/

例如,替換歷史命令第3條命令參數(shù)example01位example1,example02為example2,Public為Work,如下:

$ echo !3:1-3:s/01/1/:s/02/2/:s/Public/Work/

如果比較熟悉vim的話,我們會(huì)發(fā)現(xiàn)某些操作和vim非常類似,比如這里的命令替換。

總結(jié)

這些技巧理解起來(lái)比較簡(jiǎn)單,但是真正用好且確實(shí)提高效率是還需我們不斷實(shí)踐。介紹的部分功能是我們經(jīng)常使用的,但也有些功能在平時(shí)工作中很少用到。但合理用好它們,在我們遇到一些特殊場(chǎng)景時(shí),將會(huì)幫助我們更好解決問(wèn)題。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/7223.html

相關(guān)文章

  • 打造高效個(gè)性Terminal(一)之 iTerm

    摘要:歡迎來(lái)我的博客閱讀打造高效個(gè)性一之打造高效個(gè)性二之前言作為一個(gè)集效率控顏值控強(qiáng)迫癥患者標(biāo)簽于一身的患者,對(duì)待自己工作用到的,自然是諸多要求。簡(jiǎn)介是一款免費(fèi)的,專為用戶打造的命令行應(yīng)用。新建窗口新建垂直新建水平新建打造高效個(gè)性二之 歡迎來(lái)我的博客閱讀:「打造高效個(gè)性Terminal(一)之 iTerm」「打造高效個(gè)性Terminal(二)之 zsh」 前言 作為一個(gè)集效率控、顏值控、強(qiáng)迫...

    jubincn 評(píng)論0 收藏0
  • Java 命令行交互輸入庫(kù) JLine 入門(mén)

    摘要:實(shí)際上,中使用庫(kù)的軟件非常多,這使得同時(shí)也成為了一個(gè)事實(shí)上的命令行交互標(biāo)準(zhǔn)。對(duì)語(yǔ)言來(lái)說(shuō),就是這樣一個(gè)幫助你搭建一個(gè)命令行交互界面的庫(kù)。命令行會(huì)將用戶輸入的一行原樣打印出來(lái)。 我們都知道,軟件的用戶界面無(wú)非分為 GUI (圖形用戶界面)和 CLI (命令行用戶界面)。對(duì)于我們經(jīng)常使用 Linux 的人來(lái)說(shuō),命令行界面一定非常熟悉。無(wú)論是 Shell 里輸入命令的界面,還是如 GDB 等軟...

    quietin 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<