過高效了!玩了這麼久的Linux,竟然不知道這7個終端快捷鍵!

你們好,我是良許。linux

做爲 Linux 用戶,你們確定在 Linux 終端下敲過無數的命令。有的命令很短,好比:lscdpwd 之類,這種命令你們毫無壓力。可是,有些命令就比較長了,好比:git

$ git push origin HEAD:refs/for/master複製代碼

這個時候,你要是敲錯了哪怕是一個字母,是否是很崩潰?面試

之前個人做法是,若是敲錯了命令,就把光標移動到錯誤的地方,再進行修改。相信不只是我,大部分的小夥伴都是這麼幹的吧。spa

命令比較短還好,萬一命令很長,是否是很抓狂?.net

今天,良許就給你們介紹 Bash 下 7 種能夠提升命令輸入的方法,萬一輸錯了命令,能夠高效糾正過來。code

1. 獲取命令最後的參數

!$ip

在 Bash 中,!$ 表明命令中的最後一個參數。咱們來如下面的場景來講明這個符號的做用。假如我想把某個文件移動到另外一個地方,但文件名寫錯了,好比:字符串

$ mv /path/to/錯誤的文件 /some/other/place
mv: cannot stat '/path/to/錯誤的文件': No such file or directory複製代碼

在這個狀況下,咱們會把光標移動到錯誤的文件名那邊,而後將文件名修改正確。這種方法固然能夠,但如何命令比較長,效率就會比較低。get

在這個狀況下,咱們能夠這樣操做:博客

$ mv /path/to/對的文件 !$
mv /path/to/對的文件 /some/other/place複製代碼

這樣咱們就沒必要再輸入最後一個參數,若是這個參數很長,那效率的提升將是顯而易見的。

2. 獲取命令的第 n 個參數

!:n

咱們常常會出現將命令的參數次序放錯的狀況,好比:

$ tar -cvf afolder afolder.tar
tar: failed to open複製代碼

這時候一般狀況下咱們會把放錯次序的參數刪掉,而後再輸入正確的參數。這時候若是參數很長的話,我估計你都有打爆屏幕的衝動。

這時候你能夠這麼操做:

$ !:0 !:1 !:3 !:2
tar -cvf afolder.tar afolder複製代碼

完美解決問題!可是,那幾個符號又是啥意思呢?

你仔細看的話,應該是能看出貓膩的。基於輸錯的那個命令,!:0 其實就是 tar!:1 就是 -cvf!:2 就是 afold!:3 不用我說了吧?說白了,就是位置參數。

因此咱們只要按位置參數把這幾個元素從新排好次序,就OK了,簡單吧?

PS: !: 表示的是最後一個位置元素。

3. 獲取全部參數

!:1-$

通常來說,一條命令的第一個元素就是具體的命令,後面跟的就是參數。若是咱們要獲取全部的參數,那就可使用 !:1-$

好比說,我本想使用 tar 命令,但寫成了 zip :

$ zip -cvf afolder.tar afolder複製代碼

這時候,你能夠這麼操做:

$ tar !:1-$複製代碼

固然,若是你不想獲取全部參數的話,也可使用 !:1-2 ,或者 !:3-9 來獲取參數子集,固然前提是你要有足夠多的參數。

4. 獲取倒數第n條命令的參數

!-n:$

在 Linux 下咱們會敲大量的命令,通常來說 ! 表明的是最後一條命令,它與 !-1 是至關的。假如咱們想獲取倒數第 n 條命令的參數,可使用 !-n:$

好比,咱們移動文件的時候若是提示文件不存在,咱們通常會用 ls 命令去看一眼對應的目錄下有啥文件:

$ mv /path/to/wrongfile /some/other/place
mv: cannot stat '/path/to/wrongfile': No such file or directory
$ ls /path/to/
rightfile複製代碼

這時候,咱們再使用 !$ 將獲取到 /path/to/ 這個元素,也就是當前最後一條命令的最後一個元素,可是咱們須要的是倒數第二條命令的元素,要怎麼辦呢?

咱們可使用 !-2:$

$ mv /path/to/rightfile !-2:$
mv /path/to/rightfile /some/other/place複製代碼

因此咱們在命令切來切去的時候,又須要以前的元素,就可使用這個快捷鍵了。

2020 精選 阿里/騰訊等一線大廠 面試、簡歷、進階、電子書 公衆號「良許Linux」後臺回覆「資料」免費獲取

5. 獲取文件對應的目錄

!$:h

假如咱們想打包一個文件,而後提示那個文件不存在:

$ tar -cvf system.tar /etc/afile
 tar: /etc/afile: Cannot stat: No such file or directory
 tar: Error exit delayed from previous errors.複製代碼

這個時候,咱們一般的做法是,進到 /etc 目錄,而後看下那裏面有啥文件。這樣固然能夠,但若是路徑名很長的話,那你可能又想戳破屏幕了。

咱們可使用 !$:h 來獲取最後一個參數對應的路徑。如今最後一個參數是 /etc/afile ,afile 所對應的路徑就是 /etc/ 。咱們可使用 !$:h 來獲取最後一個參數對應的路徑:

$ cd !$:h
cd /etc複製代碼

6. 獲取當前行第1個元素

!#:1

一般狀況下,咱們重命名一個文件,通常是這麼寫的:

$ mv /path/to/some/file /path/to/some/file.bak複製代碼

這兩個參數極其類似,只是後面一個加了個 .bak ,而咱們就須要寫兩遍,太浪費時間了!咱們可使用 !#:1 來獲取當前行的第一個參數,直接修改!

$ cp /path/to/some/file !#:1.bak
cp /path/to/some/file /path/to/some/file.bak複製代碼

這樣是否是能夠少敲至關多的字母?

7. 替換命令中的字符串

!!:gs

這個操做就更厲害了,它能夠直接替換以前命令的某些字符串。好比,咱們有這樣的一條命令:

$ echo my f key doef not work
my f key doef not work複製代碼

若是咱們想把 f 替換成 s ,能夠這樣操做:

$ !!:gs/f /s /
echo my s key does not work
my s key does not work複製代碼

一樣地,若是咱們想把 does 改爲 did ,能夠這樣:

$ !!:gs/does/did/
echo my s key did not work
my s key did not work複製代碼

經過這種方法,就能夠把命令中的關鍵詞改爲本身想要的內容。

小結

本文介紹了 7 個能夠提升命令輸入效率的快捷鍵,熟練使用它們的話會達到事半功倍的效果。這幾個方式還比較零散,若是你把他們放在一塊兒的,確定還會發揮出更強大的效果。

看完的都是真愛,點個贊再走唄?您的「三連」就是良許持續創做的最大動力!

  1. 關注原創公衆號「良許Linux」,第一時間獲取最新Linux乾貨!
  2. 公衆號後臺回覆【資料】【面試】【簡歷】獲取精選一線大廠面試、自我提高、簡歷等資料。
  3. 關注個人博客:lxlinux.net
相關文章
相關標籤/搜索