每个开发人员都应该知道的 Unix/Linux 命令组合,使用他们节省时间

大多数使用基于 Unix 或类 Unix 操作系统的开发人员都喜欢通过终端向计算机发出指令。它们通常使用标准 (POSIX) Unix/Linux 命令和其他系统命令来处理文件操作、系统配置和进程控制。程序员通过遵循各种命令行提示来努力节省时间,例如使用终端键盘快捷键、设置别名和使用命令组合。在使用终端和 shell 脚本时,将多个 Unix/Linux 命令与逻辑、串联或管道运算符结合使用是提高工作效率的好方法。

在这个故事中,我将解释命令组合技术以及您在日常编程活动和 shell 脚本开发中可以使用的几种命令组合。

命令组合技巧

大多数时候,我们使用 Bash 作为终端命令解释器,输入一个命令并按下回车键来执行它。例如,我们经常使用mkdir并按下回车键,然后我们进入cd更改目录。Bash(和其他命令行解释器,即 Z shell)支持使用各种运算符组合命令,因此我们可以使用它们来合并多个命令并生成一个命令以提高编程效率。

查看以下命令串联技术:

  • command1 && command2:command1首先执行。然后,仅在未返回非零退出代码command2时才执行command1
  • command1 || command2:执行command1。command2然后,仅在command1返回非零退出代码时执行
  • command1 | command2: 通过将command1的标准输出发送到command2的标准输入来顺序执行这两个命令
  • command1 |& command2:与运算符类似|,但将标准输出和错误数据发送到command2
  • command1 ; command2:无论进程退出代码如何,都按顺序执行两个命令(与返回键相同)
  • command1 & command2 &:将两个命令作为后台作业执行

让我们看看如何在日常 Unix/Linux 命令中使用这些命令连接运算符!

浏览命令行历史记录并重新运行历史记录项

程序员通常不会频繁更改或放弃开发环境,因此他们经常不得不重新运行之前输入的命令。如果您需要再次运行最近执行的命令怎么办?您可以先尝试按向上箭头键并搜索特定命令。如果您之前输入过该命令,您可能会通过按 Ctrl + R 使用众所周知的反向搜索功能。

反向搜索功能快速且高效,但有时您需要在执行之前查看所有相关的过去命令。如果您需要从命令行历史记录中搜索、比较和执行命令,则有一种更好的内置反向搜索方法。history您可以通过组合和命令搜索命令行历史记录grep:

history | grep "npm install"

上面的命令列出了包含npm install唯一命令编号的所有命令:

每个开发人员都应该知道的 Unix/Linux 命令组合,使用他们节省时间

现在,您可以使用!<history_index>语法立即执行首选的历史记录项。例如,看下面的例子:

!1575 # Installs typescript

立即转到新创建的目录

在处理软件项目时,我们经常需要创建新目录。例如,如果你做一个重构任务,你可能需要创建几个目录来存放新重构的源代码。我们通常使用mkdir命令来创建一个新目录。然后,我们经常使用cd命令去新建的目录。我们可以把这两个动作合二为一,做一个组合命令,如下图:

mkdir app_settings && cd $_

上面的命令首先创建app_settings目录。接下来,它将当前工作目录更改为app_settings仅当目录创建成功时。在 Bash 中,$_参数扩展为上一个命令的最后一个参数,app_settings如上例所示。您甚至可以将此命令放入 Bash 函数中并定义命令mkdircd!

检测长时间运行的命令状态

我们经常在终端程序中输入相对较快的命令。例如,当我们输入cd更改当前工作目录时,它会立即完成工作。在某些情况下,我们还使用长时间运行的命令,这些命令由于网络操作、文件操作和各种 CPU 密集型处理活动而延迟命令执行。从包存储库安装大型软件工具是长时间运行命令的一个很好的例子。

我们通常在输入长时间运行的命令后切换到另一个任务,而不是查看和等待。你怎么知道命令完成(或失败)状态?

大多数 GNU/Linux 发行版都有预安装zenity和notify-send版本,因此我们可以使用它们在长时间运行的命令完成时创建通知。请看以下示例:

npm install; notify-send Done
apt update; notify-send Done

您还可以仅在特定命令失败时显示通知,如下所示:

make || notify-send Error

在 macOS 中,可以使用AppleScript创建通知。sleep 5; notif您可以为此创建一个别名(即)作为 Ubuntu 的alert别名(参见alert中的别名.bashrc)。

运行顺序和并行后台作业

我经常使用以下命令在后台为当前目录打开我最喜欢的Lite-XL代码编辑器程序:

lite . &

同样,我们都知道我们可以使用和号 ( &) 将任何命令作为后台作业执行。您还可以组合多个命令并&生成多个后台作业,如下所示:

npm install & lite . & 

上述命令使用并行命令执行方法生成两个后台作业。如果您只需要为多个命令创建一个后台作业怎么办?

使用&&运算符,&如下所示:

npm install && lite . &

上面的示例命令将在命令完成时打开代码编辑器npm install,而不会阻止终端交互。

使用带管道的标准 Unix 命令

DevOps工程师和系统管理员经常使用没有 GUI 的远程服务器计算机。同时,一些工程师使用面向 GUI 的 Unix 和类 Unix 系统。但他们中的大多数人通常更喜欢 CLI 而不是 GUI。在某些开发场景中,他们必须使用各种辅助命令来转换或分析其他命令的输出。基于 Unix 和类 Unix 的系统带有内置的传统标准辅助命令,例如wc, head, tail, sort, uniq, awk,sed等。

我们可以将这些命令与管道运算符一起使用来转换或分析命令输出。例如,您可以使用以下命令组合对列表进行排序和重复数据删除:

cat list.txt | sort -u

我们可以组合head并tail提取线段,如下所示:

cat list.txt | sort -u | tail -5 | head -3

上面的命令输出从 2 到 4 的排序行。或者(作为性能优先的选项),您sed也可以使用:

cat list.txt | sort -u | sed -n "2,4p"

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至81118366@qq.com举报,一经查实,本站将立刻删除。发布者:简知小编,转载请注明出处:https://www.jianzixun.com/71745.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
软文友链广告合作联系站长qq81118366