过高效了!玩了这么久的Linux,竟然不知道这7个终端快捷键!

你们好,我是良许。linux

做为 Linux 用户,你们确定在 Linux 终端下敲过无数的命令。有的命令很短,好比:lscdpwd 之类,这种命令你们毫无压力。可是,有些命令就比较长了,好比:git

$ git push origin HEAD:refs/for/master

这个时候,你要是敲错了哪怕是一个字母,是否是很崩溃?面试

之前个人做法是,若是敲错了命令,就把光标移动到错误的地方,再进行修改。相信不只是我,大部分的小伙伴都是这么干的吧。.net

命令比较短还好,万一命令很长,是否是很抓狂?code

今天,良许就给你们介绍 Bash 下 7 种能够提升命令输入的方法,万一输错了命令,能够高效纠正过来。ip

1. 获取命令最后的参数

!$字符串

在 Bash 中,!$ 表明命令中的最后一个参数。咱们来如下面的场景来讲明这个符号的做用。假如我想把某个文件移动到另外一个地方,但文件名写错了,好比:get

$ mv /path/to/错误的文件 /some/other/place
mv: cannot stat '/path/to/错误的文件': No such file or directory

在这个状况下,咱们会把光标移动到错误的文件名那边,而后将文件名修改正确。这种方法固然能够,但如何命令比较长,效率就会比较低。博客

在这个状况下,咱们能够这样操做:it

$ 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
相关文章
相关标签/搜索