如果您想成为一名高效的开发人员,那么无论您使用什么技术,就离不开使用命令行。
下面列出了我多年来学到的最喜欢和最常用的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
总结
看了本文,你是不是觉得有更多的命令可以帮助您提高生产效率,以后遇到精彩的命令与技巧时,我会更新本文。你也可以把这篇文章收藏起来,以便将来可以参考。