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

时间:2020-03-21 11:46:21  来源:igfitidea点击:

GNU核心实用程序包含用于执行日常操作的命令,例如cat,ls,rm,mkdir,rmdir,touch,tail,wc等。
在这些实用程序中,还有一些其他有用的Unix实用程序集合,这些类在默认的类Unix操作系统中默认不包含。
认识moreutilis,这是越来越有用的Unix实用程序的集合。
moreutils可以安装在GNU/Linux以及各种Unix版本上,例如FreeBSD,openBSD和Mac OS。

在Linux上安装moreutils

moreutils是为许多Linux发行版打包的,因此我们可以使用发行版的软件包管理器进行安装。

在Arch Linux及其衍生版本(例如Antergos,Manjaro Linux)上,运行以下命令以安装moreutils。

$sudo pacman -S moreutils

在Fedora上:

$sudo dnf install moreutils

在RHEL,CentOS和Scientific Linux上:

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

在Debian,Ubuntu和Linux Mint上:

$sudo apt-get install moreutils

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

让我们看看一些moreutils工具的用法细节。

“合并”实用程序

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

  • 和-如果文件2中也存在文件,则输出文件1中的行。
  • 否-输出文件1中但不在文件2中的行。
  • 或者-输出file1或者file2中的行。
  • xor-输出在file1或者file2中但不在两个文件中的行。

让我向我们展示一个示例,以便我们可以确切了解此实用程序将执行的操作。
我有两个文件,分别为file1和file2.
这是这两个文件的内容。

$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 theitroad" | tee file1 file2
Welcome to theitroad

上面的命令将创建两个文件,分别为file1和file2.
然后,在两个文件上都添加“ Welcome to theitroad”行。
最后在终端上打印消息“ Welcome to theitroad”。

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

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

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

“海绵”实用程序

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

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

$cat file1 
I
You
Me
We
Us

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

$sort file1 > file1_sorted

是的,不是吗?
当然!如我们在上面的命令中看到的,我已经按字母顺序对file1的内容进行了排序,并将它们保存在一个名为“ file1_sorted”的新文件中。
但是,我们可以执行以下操作而无需使用“ sponge”命令创建新文件(即file1_sorted),如下所示。

$sort file1 | sponge file1

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

$cat file1 
I
Me
Us
We
You

看到了吗?
我们不需要创建新文件。
这在脚本编写中非常有用。
好处是海绵可以保留输出文件的权限(如果已有的话)。

“ ts”实用程序

“ ts”实用程序在每行输入的开始处添加一个时间戳。

查看以下命令的输出:

$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”实用程序允许我们在vi编辑器中编辑指定目录的内容(或者$EDITOR中的任何内容)。
如果未指定目录,它将编辑当前工作目录。

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

$vidir Desktop/

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

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

$find | vidir 

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

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

$find -type f | vidir 

是否要编辑特定的文件类型,例如.PNG文件?
那么我们将使用:

$vidir *.png

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

“ Vipe”实用程序

使用“ vipe”命令,我们可以在Unix管道的中间运行默认编辑器,并编辑在程序之间传递的数据。

以下命令将打开vi编辑器(当然是默认编辑器),并允许我们编辑“ echo”命令的输入(即Welcome to theitroad)并显示最终结果。

$echo "Welcome to theitroad" | vipe
Hello World

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

“ moreutils”具有更多有用的实用程序。

我们可以阅读手册页以获取有关上述命令的更多详细信息。
例如,要了解有关“ vidir”命令的更多信息,请运行:

$man vidir