分享生产力Shell命令和命令行技巧

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

 如果您想成为一名高效的开发人员,那么无论您使用什么技术,就离不开使用命令行。

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

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

cd -

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

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

  1. linuxmi@linuxmi:~/www.linuxmi.com$ cd  
  2. linuxmi@linuxmi:~$ cd -  
  3. /home/linuxmi/www.linuxmi.com  
  4. linuxmi@linuxmi:~/www.linuxmi.com$ cd -  
  5. /home/linuxmi 

如下图:

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

Shell 历史

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

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

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

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

 

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

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

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

 

!^ !$

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

  1. linuxmi@linuxmi:~/www.linuxmi.com$ echo linuxmi linux ubuntu java python  
  2. linuxmi linux ubuntu java python  
  3. linuxmi@linuxmi:~/www.linuxmi.com$ echo !^ !$  
  4. echo linuxmi python 
  5. linuxmi python  

如下图:

!!

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

  1. linuxmi@linuxmi:~/www.linuxmi.com$ uname -r  
  2. 5.12.0-051200-generic  
  3. linuxmi@linuxmi:~/www.linuxmi.com$ !!  
  4. uname -r  
  5. 5.12.0-051200-generic  

如下图:

!:[index]

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

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

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

  1. linuxmi@linuxmi:~/www.linuxmi.com$ echo linuxmi linux ubuntu java python  
  2. linuxmi linux ubuntu java python  
  3. linuxmi@linuxmi:~/www.linuxmi.com$ echo !:2-3  
  4. echo linux ubuntu  
  5. 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扩展大括号中的每个值: 

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

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

如下图:

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

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

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

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

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

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

  1. linuxmi@linuxmi:~/www.linuxmi.com$ unaem -r  
  2. Command 'unaem' not found, did you mean:  
  3. command 'uname' from deb coreutils (8.30-3ubuntu2)  
  4. Try: sudo apt install <deb name>  
  5. linuxmi@linuxmi:~/www.linuxmi.com$ ^unaem^uname  
  6. uname -r  
  7. 5.12.0-051200-generic 

总结

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

 

责任编辑:庞桂玉 来源: Linux公社
相关推荐

2017-11-14 11:26:06

命令行技巧生产力

2018-05-07 15:50:59

LinuxmoroNodeJS

2009-12-23 14:14:09

Linux高级命令行

2010-02-05 14:59:31

C++命令行模式编译设

2017-03-08 11:10:39

LinuxShell命令

2010-12-02 14:29:07

nmap

2023-02-13 08:34:26

Linux键盘快捷键

2021-10-08 09:06:42

LinuxLinux命令

2024-03-06 15:57:56

ShellLinux

2009-12-16 11:23:29

VS命令

2017-09-05 08:57:02

Linux命令行技巧

2013-09-27 09:56:25

2015-09-29 16:03:43

2019-05-21 10:38:17

Linux命令行

2009-11-18 13:46:11

PHP命令行

2009-12-25 16:04:06

shell命令行

2010-07-20 14:27:46

Perl命令行

2018-03-14 14:27:00

2014-07-31 18:23:41

Process

2010-07-15 12:45:30

Perl命令行
点赞
收藏

51CTO技术栈公众号