我们都知道GNU核心实用程序,它预装在所有类Unix操作系统上。它们是GNU操作系统中与文件、shell和文本处理相关的基本实用程序。GNU核心实用程序包括许多用于日常操作的命令,例如cat、ls、rm、mkdir、rmdir、touch、tail和wc。除了这些实用程序之外,还有许多没有预装在类Unix操作系统中的更有用的实用程序,它们组合在一起形成了不断增长的moreutilis集合。moreutils可以安装在GNU/Linux和各种Unix风格的操作系统上,包括FreeBSD、openBSD和MacOS。在编写本指南时,moreutils提供了以下实用程序:chronic-运行程序并忽略正常运行的输出combine-使用布尔运算组合文件行errno-查询错误号名称和描述ifdata-获取网络接口信息而不解析ifconfig结果ifne-如果标准输入不为空则运行程序isutf8-检查文件或标准输入是否为UTF-8编码lckdo-运行程序带锁的mispipe-管道两个命令,返回第一个命令状态的退出parallel-同时运行多个任务pee-将标准输入传递到多个管道sponge-合并标准输入并写入文件ts-将时间戳信息添加到标准输入vidir-使用您的默认文本编辑器来操作目录文件vipe-在管道中插入信息编辑zrun-自动解压缩并传递它作为命令的参数在Linux上安装moreutils由于moreutils已打包在各种Linux发行版中,您可以使用发行版对应的包管理器来安装moreutils。在ArchLinux或衍生版Antergos和ManjaroLinux上,运行以下命令安装moreutils:$sudopacman-Smoreutils在Fedora上,运行:$sudodnfinstallmoreutils在RHEL、CentOS和ScientificLinux上,运行:$sudoyuminstallepel-release$sudoyuminstallmoreutils在Debian、Ubuntu和LinuxMint上,运行:$sudoapt-getinstallmoreutilsMoreutils-打包更多有用的Unix实用程序让我们看看几个moreutils工具的使用细节。combine实用程序顾名思义,这个来自moreutils的实用程序可以使用布尔运算(包括and、not、or和xor)组合来自两个文件的行。and–包含在file1和file2中的输出行。not–包含在file1但不包含在file2中的输出行。or–输出file1或file2中包含的行。xor-仅输出file1或file2中包含的行以下示例旨在帮助您理解此实用程序的功能。这里有两个名为file1和file2的文件,内容如下:$catfile1iswaswerethere$catfile2iswerethere下面,我使用and布尔运算合并这两个文件。$combinefile1andfile2iswerethere从上面例子的输出可以看出,and布尔运算只输出那些同时包含在file1和file2中的行;更具体地说,命令输出是两个文件共有的行,即is、were和there。接下来,让我们将其替换为not操作并观察输出。$combinefile1notfile2waswhere从上面的输出可以看出,not操作输出file1包含但file2不包含的行。ifdata实用程序ifdata实用程序可用于检查网络接口是否存在并获取有关网络接口的信息,例如IP地址等。与预安装的ifconfig和ip命令不同,ifdata的输出更易于解析,并且它的设计为了便于在shell脚本中使用。如果想查看某个接口的IP地址,不妨以wlp9s0为例,执行如下命令:$ifdata-pwlp9s0192.168.43.192255.255.255.0192.168.43.2551500如果只想查看掩码信息,运行以下命令:$ifdata-pnwlp9s0255.255.255.0要查看网络接口的物理地址,运行以下命令:$ifdata-phwlp9s0A0:15:46:90:12:3E确定是否接口存在,可以使用-pe参数:$ifdata-pewlp9s0yespee命令这个命令有点类似于tee命令。我们先通过一个例子来看一下tee的用法。$echo"欢迎来到OSTechNIx"|teefile1file2WelcometoOSTechNIx上面的命令首先创建了两个名为file1和file2的文件;然后,将“WelcometoOSTechNix”行分别附加到两个文件;***,在终端中打印出“WelcometoOSTechNix”。pee命令提供类似的功能,但与tee略有不同。查看以下示例:$echo"WelcometoOSTechNIx"|peecatcatWelcometoOSTechNIxWelcometoOSTechNIx从上面命令的输出可以看出,cat命令有两个实例来获取和执行echo命令的输出,所以两次输出相同。sponge实用程序这是moreutils包中的另一个有用的实用程序。sponge读取标准输入并写入指定文件。与shell中的重定向不同,sponge在写入输出文件之前接收完整的输入。查看下面文本文件的内容:$catfile1IYouMeWeUs表明该文件包含一些乱序行;更具体地说,这些行“不”按字母顺序排序。如果您想按字母顺序对内容进行排序,您会怎么做?$sortfile1>file1_sorted没有错,对吧?你当然是!在上面的命令中,我将file1的内容按字母顺序排序,并将排序后的内容保存在文件file1_sorted中。但是如果你使用sponge命令,你可以在不创建新文件(即file1_sorted)的情况下完成同样的任务,命令如下:$sortfile1|spongefile1那么,让我们检查文件内容是否已经按字母顺序排序:$catfile1IMeUsWe你看到了吗?无需创建新文件。在脚本中,这非常有用。另一个好消息是,如果要写入的文件已经存在,sponge会保持其权限信息不变。tsUtility顾名思义,ts命令会在每行输出的开头添加一个时间戳时间戳。检查以下命令的输出:$ping-c2localhostPINGlocalhost(localhost.localdomain(::1))56databytes64bytesfromlocalhost.localdomain(::1):icmp_seq=1ttl=64time=0.055ms64来自localhost.localdomain(::1)的字节:icmp_seq=2ttl=64time=0.079ms---localhostping统计---2个数据包传输,2个接收,0%数据包丢失,时间1018msrttmin/avg/max/mdev=0.055在/0.067/0.079/0.012毫秒以下,使用ts实用程序运行相同的命令:$ping-c2localhost|tsAug2113:32:28PING本地主机(本地主机(::1))56个数据字节8月21日13:32:28来自本地主机(::1)的64个字节:icmp_seq=1ttl=64时间=0.063msAug2113:32:2864bytesfromlocalhost(::1):icmp_seq=2ttl=64time=0.113msAug2113:32:28Aug2113:32:28---localhostpingstatistics---Aug2113:32:28发送2个包,接收2个,0%丢包,时间4msAug2113:32:28rttmin/avg/max/mdev=0.063/0.088/0.113/0.025ms对比输出可以看出ts加了时间戳在每一行的开头。这是另一个例子:$ls-l|tsAug2113:34:25总计120Aug2113:34:25drwxr-xr-x2sk用户12288Aug2020:05DesktopAug2113:34:25drwxr-xr-x2sk用户4096Aug1018:44DocumentsAug2113:34:25drwxr-xr-x24skusers12288Aug2113:06Downloads[...]vidir实用程序vidir实用程序允许您使用vi编辑器(或$EDITOR环境变量指定的其他编辑器)编辑指定目录的内容。如果没有指定目录,vidir将默认编辑您的当前目录。以下命令编辑Desktop目录的内容:$vidirDesktop/vidir上述命令使用vi编辑器打开指定目录,目录下的文件会对应一个编号。接下来可以根据vi的运行方式编辑目录下的这些文件:比如删除一行就是删除目录下对应的文件,修改该行的字符串就是重命名文件。您还可以编辑子目录。以下命令将编辑当前目录和所有子目录:$find|vidir-请注意命令末尾的-。如果-被指定为要编辑的目录,vidir将从标准输入读取一系列文件名并列出它们供您编辑。如果只想编辑当前目录下的文件,可以使用如下命令:$find-typef|vidir-只想编辑特定类型的文件,例如.PNG文件?可以使用如下命令:$vidir*.png此时该命令只会编辑当前目录下后缀为.PNG的文件。vipe实用程序,即vipe命令,允许您使用默认编辑器接受Unix管道输入,并在编辑后管道输出以用于下一个程序。执行以下命令会打开vi编辑器(当然是我默认使用的编辑器),可以编辑echo命令的管道输入(即“WelcometoOSTechNix”),最后将编辑的内容输出到终端。$echo"欢迎来到OSTechNIx"|vipeHelloWorld从上面的输出中可以看出,我将“WelcometoOSTechNix”通过管道传输到vi编辑器中,将内容编辑为“HelloWorld”,最后显示内容。好了,介绍到此为止。我只介绍了一小部分实用程序,moreutils包含许多更有用的实用程序。我在文章开头列出了moreutils包中包含的实用程序,您可以通过man帮助页面获得有关相关命令的更多详细信息。例如,如果你想了解vidir命令,请运行:$manvidir希望这对你有帮助。我会继续分享其他有趣实用的指南,如果你觉得这些内容对你有帮助,欢迎分享到社交网络或专业圈,也欢迎你支持OSTechNix项目。
