并行处理 Linux 命令
并行处理命令可以简化在 Linux 中执行多个命令时的工作。作为 Linux 管理员,您可以并行处理多个命令来执行各种任务,例如重新启动服务、安装系统补丁和安装应用程序。
在命令行中组合两个或多个命令称为命令链接。您可以使用命令链接来并行执行多个命令。
您可以轻松地一次链接不同的命令来简化流程。因此,在本篇指南中,我们将解释您可以尝试的所有并行处理 Linux 命令的流程。
并行处理 Linux 命令
在 Linux 中,您可以使用多个运算符和命令并行运行多个命令。现在我们将了解如何在多种条件下通过不同的运算符并行运行多个命令。
使用 & 运算符
在 Linux 中,您可以在一个命令之后使用“&”符号同时运行多个命令。使用此内置的 bash 与号或运算符会导致 shell 运行下一个命令而不等待当前正在运行的命令完成,并且命令将并行运行。
:~$ command1 & command2…
例如,我们使用 & 运算符一起运行 ls 和 cat 命令。
:~$ ls & cat Linux.txt [1] 6178 Don't erase the existing data. Desktop file.sh Myfile prateek.pcap Templates
您可以看到同时运行以上两个命令会显示输出。cat 命令显示“Linux.txt”文件的内容,而 ls 命令显示当前目录中的所有文件。
使用 wait 和 & (& :)
您可以使用 wait (:) 和 & 运算符同时执行多个命令。“&”运算符的工作方式类似,但“wait (:)”会停止所有后台任务,直到它们完成,然后才将控制权返回给 shell。使用这种方法,您可以运行批处理操作,其语法如下所示:
:~$ command1 & : command2 . . . command3
为了更好地理解这种方法,让我们使用 & 运算符一起运行 bash 文件和 ls 命令。当这些命令向后运行时,我们通过运行 uptime 命令显示当前时间的信息。
:~$ ./file.sh & : ls [1] 3650 :~$ Desktop file.sh Myfile prateek.pcap Templates Documents uptime 19:06:59 up 1 min, 1 user, load average: 1.31, 0.55, 0.20 [1]+ Done ./file.sh
此方法的缺点之一是,您只能在所有批处理过程完成后才能启动新进程。为了解决这个问题,您可以使用 xargs 命令。
使用 Xargs
Linux 中的 xargs 命令指定您想要同时运行的进程数。您可以使用 xargs 命令并行执行 Linux 中的多个输入参数。在这里,我们将以下 xargs 命令与 ls 命令连接起来,以便它在 ls 输出的每个文件上并行使用 3 个进程。
:~$ ls | xargs -P 3 -n 2 Desktop Documents Downloads example.txt File.sh Linux.txt Pictures Points Prateek.pcap Public Snap source.sh Templates
一旦前一个进程完成,Xargs 就会启动另一个进程。在上面的示例中,我们使用 -P 和 -n 参数指定了并行任务的数量,以调用每次调用的参数数量。
使用分号 (;) 运算符
通过分号 (;) 运算符,您可以连续运行各种命令,无论您之前的命令是否成功。
:~$ command 1; command2;.....
在这里,我们将运行 pwd、ls 和 uptime 这三个命令,在终端中用分号 (;) 分隔它们,如下所示:
:~$ pwd; ls; uptime /home/prateek Desktop file.sh Myfile prateek.pcap Templates Documents 12:36:51 up 1 min, 1 user, load average: 3.14, 1.09, 0.39
[pwd] 查找您的当前目录,[ls] 显示当前目录的列表,[uptime] 提供与时间相关的信息,例如当前时间、负载平均值、在线用户数量等。在终端中一起运行这三个命令将立即告诉您所有上述信息。请记住,命令和分号之间不应该有任何空格。
使用 | (管道) 运算符
您可以使用管道运算符并行执行多个命令。通过此运算符,您可以顺序组合并执行两个或多个命令。
:~$ command 1 | command 2 | command 3….
例如,在这里我们将首先读取名为“Linux1.txt”的文本文件的内容,然后在第二个命令中搜索其中名为“erasing”的关键字。
:~$ cat Linux.txt | grep erasing Don't erase the existing data.
在这里,我们使用 cat 命令显示了“Linux.txt”文件的内容。通过 grep 命令,我们从该文件中搜索了关键字“erasing”,并用红色突出显示。
使用 GNU Parallel
GNU 是 Linux 中的一个命令行工具,您可以使用它在远程服务器或本地机器上并行执行 Linux 命令。它允许您同时运行多个命令实例,这些实例从标准输入或文件输入中获取输入。
此工具未预安装在 Linux 发行版中,但在存储库中。因此,您可以通过以下命令安装它:
sudo apt install parallel -y (for Debian/Ubuntu-based distros) yum install parallel (for RedHat-based distros)
使用 Bash 脚本
通过 bash 脚本,您可以并行运行多个命令。但是,您必须首先创建一个 bash 文件。您可以在此 bash 文件中输入要运行的所有命令。之后,您只需运行该 bash 脚本,然后您将获得所有命令的结果。
让我们通过以下命令创建一个名为“file.sh”的 bash 文件,并在其中输入所有命令:
:~$ nano file.sh #! /bin/bash touch myfile.txt echo "tutorials Point" > myfile.txt ls && cat myfile.txt
在此脚本中,我们首先使用 touch 命令创建了一个名为“myfile”的文件。
之后,使用 echo 命令在此文件中输入文本“Tutorials Point”。
最后,使用 ls 命令查找当前目录,然后使用 cat 命令查看文件“myfile”的内容。
按 Ctrl+O 保存此文件,然后按 Ctrl+X 退出。此外,我们可以通过以下 chmod 命令使该文件可执行:
:~$ chmod +x file.sh
让我们运行上面创建的 bash 文件,以便我们输入的任何命令都将并行运行并显示输出。
:~$ ./file.sh Desktop file.sh Myfile prateek.pcap Templates Documents Tutorials Point
从上面的输出中,系统已执行脚本中提到的所有命令。
使用 && (AND) 运算符
您可以使用“&&”运算符分隔多个命令并依次运行它们。在此运算符中,系统将在第一个命令成功执行后执行第二个命令。
:~$ command 1 && command 2…
例如,如果我们必须创建一个名为“MyFile”的目录,然后更改到该目录,我们可以通过“&&”运算符成功运行这两个过程。
:~$ mkdir MyFile && cd MyFile :~/MyFile$
您可以看到上面的命令已成功运行,首先创建了您的目录,然后您进入了该目录。
使用 (||) 运算符
在某些情况下,当您一起运行两个或多个命令时,您希望在第一个命令失败或出现错误时执行以下命令。您可以使用两个竖线 (||) 或逻辑或运算符。
“OR”运算符仅在第一个命令失败时才会执行以下命令。如果第一个命令成功运行,则不会执行下一个命令。
:~$ command 1 || command 2…
让我们检查系统中是否包含“Myfile”目录;如果不可用,则系统必须创建它。我们将使用以下命令使用逻辑“OR”运算符:
:~$ [ -d ~/Myfile ] || mkdir ~/Myfile
在此示例中,第一个命令 [ -d ~/Myfile ] 失败,因为没有名为“Myfile”的目录,因此系统的第二个命令 [mkdir ~/Myfile] 运行以创建 MyFile 目录。
组合多个运算符
您可以根据您的需要组合上述运算符并同时运行它们。让我们在这里组合 AND (&&) 和 OR (||) 运算符。例如,我们将检查系统中是否存在“myfile.txt”文件,但如果不存在,系统将创建它,否则打印消息“文件已存在”:
:~$ [ -f ~/myfile.txt ] && echo "File exists." || touch ~/myfile.txt File exists
您可以看到该文件已在文件系统中,因此它打印“文件已存在”。
结论
当您想要同时运行许多命令时,命令链接非常有用。在本文中,我们解释了使用多个命令和运算符并行处理 Linux 命令的各种方法。本教程包含几乎所有可能的方法,例如 (&) (||)、(;)、(|)、运算符、bash 方法、GNU parallel 方法,以及许多其他命令和运算符的使用。