我们都知道 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 – 时间戳标准输入。
- 视频 – 在文本编辑器中编辑目录。
- 毒蛇 – 将文本编辑器插入管道。
- 兹伦 – 自动解压缩命令的参数。
内容
在 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/
上面的命令会打开你的指定目录 我们 编辑。 编辑目录中的每个项目都将包含一个数字。 您现在可以像在 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工具