Moreutils – 更多有用的 Unix 实用程序的集合

我们都知道 GNU 核心实用程序 它预装了所有 Linux 和类 Unix 操作系统。 这些是 GNU 操作系统的基本文件、shell 和文本操作实用程序。 GNU 核心实用程序包含用于执行日常操作的命令,例如 cat、ls、rm、mkdir、rmdir、touch、tail、wc 等等。 在这些实用程序中,还有一些其他有用的 Unix 实用程序集合,它们默认不包含在类 Unix 操作系统中。 见面 更实用的, 越来越有用的 Unix 实用程序的集合。 moreutils 可以安装在 GNU/Linux 和各种 Unix 风格上,例如 FreeBSD、openBSD 和 Mac OS。

在编写本指南时,Moreutils 提供了以下实用程序:

  • 慢性的 – 安静地运行命令,除非它失败。
  • 结合 – 使用布尔运算合并两个文件中的行。
  • 错误号 – 查找 errno 名称和描述。
  • 数据 – 在不解析 ifconfig 输出的情况下获取网络接口信息。
  • 万能 – 如果标准输入不为空,则运行程序。
  • isutf8 – 检查文件或标准输入是否为 utf-8。
  • 力克多 – 执行一个持有锁的程序。
  • 误管 – 管道两个命令,返回第一个的退出状态。
  • 平行线 – 一次运行多个作业。
  • 撒尿 – 三通标准输入到管道。
  • 海绵 – 吸收标准输入并写入文件。
  • ts – 时间戳标准输入。
  • 视频 – 在文本编辑器中编辑目录。
  • 毒蛇 – 将文本编辑器插入管道。
  • 兹伦 – 自动解压缩命令的参数。

内容

  1. 在 Linux 上安装 moreutils
  2. Moreutils – 更多有用的 Unix 实用程序的集合
    1. “组合”实用程序
    2. “ifdata”实用程序
    3. “小便”命令
    4. “海绵”实用程序
    5. “ts”实用程序
    6. “Vidir”实用程序
    7. “Vipe”实用程序

在 Linux 上安装 moreutils

moreutils 为许多 Linux 发行版打包,因此您可以使用发行版的包管理器安装它。

Arch Linux 和衍生品,例如 安特戈斯, Manjaro Linux,运行以下命令安装moreutils。

$ sudo pacman -S moreutils

Fedora

$ sudo dnf install moreutils

RHEL, 中央操作系统, 科学Linux

$ sudo yum install epel-release
$ sudo yum install moreutils

Debian, Ubuntu, Linux 薄荷糖

$ sudo apt-get install moreutils

Moreutils – 更多有用的 Unix 实用程序的集合

下面我们来看看一些moreutils工具的使用细节。

“组合”实用程序

顾名思义, 结合 实用程序使用布尔运算(例如“and”、“not”、“or”、“xor”)组合来自两个文件的行集。

  • – 如果文件 2 中也存在,则输出文件 1 中的行。
  • 不是 – 输出在 file1 但不在 file2 中的行。
  • 或者 – 输出 file1 或 file2 中的行。
  • 异或 – 输出文件 1 或文件 2 中的行,但不在两个文件中。

让我给你看一个例子,这样你就可以理解这个实用程序究竟会做什么。 我有两个文件,即 文件 1文件2. 这是这两个文件的内容。

$ cat file1 is was were where there
$ cat file2 is were there

现在,让我使用“和”布尔运算将它们组合起来。

$ combine file1 and file2 is were there

正如您在上面的示例中看到的,“and”布尔运算符输出 file1 中的行(如果它们也存在于 file2 中)。 为了更清楚地说明这一点,它显示了两个文件中都存在的公共行(例如,是,曾经,那里)。

现在让我们使用“not”运算符并查看结果。

$ combine file1 not file2 was where

正如您在上面的输出中看到的,“not”运算符显示仅在 file1 中的行,而不是在 file2 中的行。

“ifdata”实用程序

“ifdata”实用程序可用于检查网络接口是否存在,以获取有关网络接口的信息,例如其 IP 地址。 与“ifconfig”或“ip”等内置命令不同,ifdata 具有易于解析的输出,旨在方便 shell 脚本使用。

要显示网络接口的 IP 地址详细信息,比如 wlp9s0,请运行:

$ ifdata -p wlp9s0 192.168.43.192 255.255.255.0 192.168.43.255 1500

要仅显示网络掩码,请运行:

$ ifdata -pn wlp9s0 255.255.255.0

检查网卡的硬件地址:

$ ifdata -ph wlp9s0 A0:15:46:90:12:3E

要检查 NIC 是否存在,请使用“-pe”标志。

$ ifdata -pe wlp9s0 yes

“小便”命令

它有点类似于“tee”命令。

让我们看一个“tee”命令用法的例子。

$ echo "Welcome to OSTechNIx" | tee file1 file2 Welcome to OSTechNIx

上面的命令将创建两个文件,即 文件 1文件2. 然后,在两个文件上附加“欢迎使用 OSTechNix”行。 最后在您的终端中打印消息“欢迎使用 OSTechNix”。

“Pee”命令执行类似的功能,但与“tee”命令略有不同。 看下面的命令:

$ echo "Welcome to OSTechNIx" | pee cat cat Welcome to OSTechNIx Welcome to OSTechNIx

正如您在上面的输出中看到的,“cat”命令的两个实例接收“echo”命令的输出,并在终端中显示两次。

“海绵”实用程序

这是 moreutils 包中另一个有用的实用程序。 海绵 读取标准输入并将其写入指定文件。 与 shell 重定向不同,海绵在写入输出文件之前会吸收其所有输入。

查看以下文本文件的内容。

$ cat file1  I You Me We Us

如您所见,该文件包含一些随机行,尤其是按字母顺序排列的“非”行。 您想按字母顺序对内容进行排序。 你会怎么做?

$ sort file1 > file1_sorted

正确的,不是吗? 当然! 正如你在上面的命令中看到的,我已经对 文件 1 按字母顺序并将它们保存在一个名为的新文件中 “file1_sorted”. 但是,您可以在不使用“海绵”命令创建新文件(即 file1_sorted)的情况下执行相同操作,如下所示。

$ sort file1 | sponge file1

现在,检查内容是否按字母顺序排序。

$ cat file1  I Me Us We You

看? 我们不需要创建新文件。 它在编写脚本时非常有用。 好消息是如果输出文件已经存在,海绵会保留它的权限。

“ts”实用程序

“ts”实用程序将时间戳打印到任何 Linux 命令输出中每一行的开头。

查看以下命令的输出:

$ ping -c 2 localhost PING localhost(localhost.localdomain (::1)) 56 data bytes 64 bytes from localhost.localdomain (::1): icmp_seq=1 ttl=64 time=0.055 ms 64 bytes from localhost.localdomain (::1): icmp_seq=2 ttl=64 time=0.079 ms  --- localhost ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1018ms rtt min/avg/max/mdev = 0.055/0.067/0.079/0.012 ms

现在,使用“ts”实用程序运行相同的命令,如下所示。

$ ping -c 2 localhost | ts Aug 21 13:32:28 PING localhost(localhost (::1)) 56 data bytes Aug 21 13:32:28 64 bytes from localhost (::1): icmp_seq=1 ttl=64 time=0.063 ms Aug 21 13:32:28 64 bytes from localhost (::1): icmp_seq=2 ttl=64 time=0.113 ms Aug 21 13:32:28  Aug 21 13:32:28 --- localhost ping statistics --- Aug 21 13:32:28 2 packets transmitted, 2 received, 0% packet loss, time 4ms Aug 21 13:32:28 rtt min/avg/max/mdev = 0.063/0.088/0.113/0.025 ms

正如您在上面的输出中看到的, ts 在每行的开头添加了一个时间戳。 这是另一个例子。

$ ls -l | ts Aug 21 13:34:25 total 120 Aug 21 13:34:25 drwxr-xr-x  2 sk users 12288 Aug 20 20:05 Desktop Aug 21 13:34:25 drwxr-xr-x  2 sk users  4096 Aug 10 18:44 Documents Aug 21 13:34:25 drwxr-xr-x 24 sk users 12288 Aug 21 13:06 Downloads [...]

“Vidir”实用程序

“Vidir”实用程序允许您编辑指定目录的内容 我们 编辑器(或者,无论你在 $编辑器)。 如果没有指定目录,它将编辑您当前的工作目录。

以下命令编辑名为“Desktop”的目录的内容。

$ vidir Desktop/

使用 vidir 编辑目录的内容

上面的命令会打开你的指定目录 我们 编辑。 编辑目录中的每个项目都将包含一个数字。 您现在可以像在 vi 编辑器中那样编辑文件。 例如,删除行以从目录中删除文件,或编辑文件名以重命名文件。

您也可以编辑子目录。 以下命令编辑当前工作目录及其子目录。

$ find | vidir -

请注意命令末尾的“-”。 如果“-”被指定为要编辑的目录,它会从标准输入读取文件名列表并显示这些文件名进行编辑。

如果只想编辑当前工作目录中的文件,可以使用以下命令:

$ find -type f | vidir -

想要编辑特定的文件类型,比如 .PNG 文件? 那么你会使用:

$ vidir *.png

此命令仅编辑当前目录中的 .png 文件。

“Vipe”实用程序

“vipe”命令允许您在 Unix 管道中间运行默认编辑器并编辑在程序之间通过管道传输的数据。

以下命令打开 vi 编辑器(当然是默认编辑器)并允许您编辑“echo”命令的输入(即 Welcome To OSTechNix)并显示最终结果。

$ echo "Welcome to OSTechNIx" | vipe Hello World

正如您在上面的输出中看到的,我将输入“Welcome to OSTechNix”传递给 vi 编辑器并将它们编辑为“Hello World”并显示最终输出。

推荐下载免费电子书:“5 天学习 Linux”

而且,这就是现在的全部。 我只介绍了几个实用程序。 “moreutils”有更多有用的实用程序。 我已经在介绍部分提到了 moreutils 包中当前包含的实用程序。 您可以阅读手册页以获取有关上述命令的更多详细信息。 例如,要了解有关“vidir”命令的更多信息,请运行:

$ man vidir

希望这可以帮助。

资源:

  • GNU 核心实用程序
  • Moreutils 网站

命令行LinuxLinux基础Linux命令Linux技巧更多utilsUnix有用的Unix工具