如果您想成为一名高效的开发人员,那么无论您使用什么技术,都没有办法绕开使用命令行。

下面列出了我多年来学到的最喜欢和最常用的Shell命令和技巧。我相信你肯定知道其中的一些命令或技巧,那么就请跳过,但其他的命令可能会给你提高生产力。

免责声明:我在Ubuntu 20.04上使用默认的终端使用这些命令。只要您在类似Unix的操作系统上运行类似bash的shell,这些命令也应该适用于您。但是如果你在Windows上运行Powershell,那么祝你好运!

cd –

您可能知道可以使用cd切换到某个目录。

但是您知道您可以使用破折号(-)作为参数返回上一个目录吗?

linuxmi@linuxmi:~/www.linuxmi.com$ cd
linuxmi@linuxmi:~$ cd –
/home/linuxmi/www.linuxmi.com
linuxmi@linuxmi:~/www.linuxmi.com$ cd –
/home/linuxmi

如下图:

温馨提示:破折号参数也适用于git checkout,所以你可以使用它在主分支和工作分支之间进行快速切换。

Shell 历史

这可能是本人最常用的一个shell技巧:(连续)按向上箭头以选择我的shell历史记录中的最后一个命令。

您也可以按ctrl + r(依次)按LRU顺序通过关键字反向搜索Shell历史记录。

或者直接键入history来查看终端中的整个shell历史记录。然后您可以写入![number]以在历史记录中的位置编号处选择命令。

linuxmi@linuxmi:~/www.linuxmi.com$ history

linuxmi@linuxmi:~/www.linuxmi.com$ !849

你甚至可以使用负数作为索引来选择倒数第n个命令,就像这样:

linuxmi@linuxmi:~/www.linuxmi.com$ !-2

 

!^ !$

前一个命令的第一个 (!^) 和最后一个 (!$) 参数也有快捷方式:

linuxmi@linuxmi:~/www.linuxmi.com$ echo linuxmi linux ubuntu java python
linuxmi linux ubuntu java python
linuxmi@linuxmi:~/www.linuxmi.com$ echo !^ !$
echo linuxmi python
linuxmi python

如下图:

!!

如果您只需要最后一条命令,则可以添加!! 在您当前的命令中,它将替换为最后的命令并执行:

linuxmi@linuxmi:~/www.linuxmi.com$ uname -r
5.12.0-051200-generic
linuxmi@linuxmi:~/www.linuxmi.com$ !!
uname -r
5.12.0-051200-generic

如下图:

!:[index]

或者,您可以通过在命令中包含!:[index]来选择所需命令的一部分,然后插入前一个命令的索引[index]处的参数。

linuxmi@linuxmi:~/www.linuxmi.com$ echo linuxmi linux ubuntu java python
linuxmi linux ubuntu java python
linuxmi@linuxmi:~/www.linuxmi.com$ echo !:1
echo linuxmi
linuxmi

你甚至可以用[index]-[index]来选择范围:

linuxmi@linuxmi:~/www.linuxmi.com$ echo linuxmi linux ubuntu java python
linuxmi linux ubuntu java python
linuxmi@linuxmi:~/www.linuxmi.com$ echo !:2-3
echo linux ubuntu
linux ubuntu

编辑当前行

当你刚从历史记录中选择了需要稍作更改的命令时,那么这个功能特别有用。

您可以通过按ctrl + a将光标移动到行的开头,并通过按ctrl + e将光标移动到行的结尾(请记住:e表示结尾,a表示字母的开头)。

此外还有:

ctrl + k 剪切光标及其后边的内容;
ctrl + u 剪切光标之前的内容;
ctrl + y 在光标处粘贴上两个命令,粘贴方式和被剪切方式相同;
ctrl + c 结束正在运行的程序或命令;
ctrl + d 结束当前命令窗口;
ctrl + r 输入关键字可弹出曾经用过的命令;
ctrl + l 清屏;(和clear效果相同)

ctrl + x + e

如果你意识到你仙子啊需要做一个更大的编辑或写一个非常长的命令,可能带有一些循环或一些复杂的解析逻辑,需要更多的编辑功能,你也可以切换到你的编辑器,请按ctrl + e + x

Vim(或Nano或VI等)就会马上打开,并且您已经在缓冲区中键入的命令已打开。

如下图:

使用一个命令处理多个文件

你以前应该使用过cp或mv之类的命令来处理文件。

不过现在介绍的是{}参数扩展。

通过使用{},您可以指示shell扩展大括号中的每个值:

linuxmi@linuxmi:~/www.linuxmi.com$ mv linuxmi.{py,sh} linux

这个命令将移动linuxmi.py文件和linuxmi.java文件,而不用键入两次linuxmi。

如下图:

此外,你还可以使用如下的例子

以下命令将五个文件(linuxmi1.png,linuxmi2.png,linuxmi3.png 何 linuxmi4.png)复制到 linux/目录:

linuxmi@linuxmi:~/www.linuxmi.com$ cp linuxmi{1..4}.png linuxmi/

从历史记录粘贴修改后的命令

您也可以在一个步骤中完成,而不是检索最后一个命令,然后在两个单独的步骤中修改它。

^x^y就是用y代替x的命令:

linuxmi@linuxmi:~/www.linuxmi.com$ unaem -r

Command ‘unaem’ not found, did you mean:

command ‘uname’ from deb coreutils (8.30-3ubuntu2)

Try: sudo apt install <deb name>

linuxmi@linuxmi:~/www.linuxmi.com$ ^unaem^uname
uname -r
5.12.0-051200-generic

总结

看了本文,你是不是觉得有更多的命令可以帮助您提高生产效率,以后遇到精彩的命令与技巧时,我会更新本文。你也可以把这篇文章收藏起来,以便将来可以参考。

同时,别忘了在留言中分享你最喜欢的命令。

发表评论