一套有用的 Unix 实用程序-unix文件系统

编译自:%20https://www.ostechnix.com/moreutils-collection-useful-unix-utilities/%20

作者:%20Sk

译者:%20Andy%20Song

我们都了解%20GNU%20核心实用程序(GNU%20Core%20Utilities),所有类%20Unix%20操作系统都预装了它们。它们是%20GNU%20操作系统中与文件、Shell%20和%20文本处理相关的基础实用工具。GNU%20核心实用程序包括很多日常操作命令,例如%20cat、ls、rm、mkdir、rmdir、touch、tail%20和%20wc%20等。除了这些实用程序,还有更多有用的实用程序没有预装在类%20Unix%20操作系统中,它们汇集起来构成了%20moreutilis%20这个日益增长的集合。moreutils%20可以在%20GNU/Linux%20和包括%20FreeBSD,openBSD%20及%20Mac%20OS%20在内的多种%20Unix%20类型操作系统上安装。

截至到编写这份指南时,%20moreutils%20提供如下实用程序:

  • chronic%20–%20运行程序并忽略正常运行的输出
  • combine%20–%20使用布尔操作合并文件的行
  • errno%20–%20查询%20errno%20名称及描述
  • ifdata%20–%20获取网络接口信息,无需解析%20ifconfig%20的结果
  • ifne%20–%20在标准输入非空的情况下运行程序
  • isutf8%20–%20检查文件或标准输入是否采用%20UTF-8%20编码
  • lckdo%20–%20带锁运行程序
  • mispipe%20–%20使用管道连接两个命令,返回第一个命令的退出状态
  • parallel%20–%20同时运行多个任务
  • pee%20–%20将标准输入传递给多个管道
  • sponge%20–%20整合标准输入并写入文件
  • ts%20–%20为标准输入增加时间戳信息
  • vidir%20–%20使用你默认的文本编辑器操作目录文件
  • vipe%20–%20在管道中插入信息编辑
  • zrun%20–%20自动解压并将其作为参数传递给命令

在%20Linux%20上安装%20moreutils

由于%20moreutils%20已经被打包到多种%20Linux%20发行版中,你可以使用发行版对应的软件包管理器安装%20moreutils。

在%20Arch%20Linux%20或衍生的%20Antergos%20和%20Manjaro%20Linux%20上,运行如下命令安装%20moreutils:

$%20sudo%20pacman%20-S%20moreutils

在%20Fedora%20上,运行:

$%20sudo%20dnf%20install%20moreutils

在%20RHEL,CentOS%20和%20Scientific%20Linux%20上,运行:

$%20sudo%20yum%20install%20epel-release%20

$%20sudo%20yum%20install%20moreutils

在%20Debian,Ubuntu%20和%20Linux%20Mint%20上,运行:

$%20sudo%20apt-get%20install%20moreutils

Moreutils%20–%20打包更多有用的%20Unix%20实用程序

让我们看一下几个%20moreutils%20工具的用法细节。

combine%20实用程序

正如%20combine%20名称所示,moreutils%20中的这个实用程序可以使用包括%20and,not,or%20和%20xor%20在内的布尔操作,合并两个文件中的行。

  • and%20–%20输出%20file1%20和%20file2%20都包含的行。
  • not%20–%20输出%20file1%20包含但%20file2%20不包含的行。
  • or%20–%20输出%20file1%20或%20file2%20包含的行。
  • xor%20–%20输出仅被%20file1%20或%20file2%20包含的行

下面举例说明,方便你理解该实用程序的功能。这里有两个文件,文件名分别为%20file1%20和%20file2,其内容如下:

$%20cat%20file1%20

is%20

was%20

were%20

where%20

there%20

$%20cat%20file2%20

is%20

were%20

there

下面,我使用%20and%20布尔操作合并这两个文件。

$%20combine%20file1%20and%20file2%20

is%20

were%20

there

从上例的输出中可以看出,and%20布尔操作只输出那些%20file1%20和%20file2%20都包含的行;更具体的来说,命令输出为两个文件共有的行,即%20is,were%20和%20there。

下面我们换成%20not%20操作,观察一下输出。

$%20combine%20file1%20not%20file2%20

was%20

where

从上面的输出中可以看出,not%20操作输出%20file1%20包含但%20file2%20不包含的行。

ifdata%20实用程序

ifdata%20实用程序可用于检查网络接口是否存在,也可用于获取网络接口的信息,例如%20IP%20地址等。与预装的%20ifconfig%20和%20ip%20命令不同,ifdata%20的输出更容易解析,这种设计的初衷是便于在%20Shell%20脚本中使用。

如果希望查看某个接口的%20IP%20地址,不妨以%20wlp9s0%20为例,运行如下命令:

$%20ifdata%20-p%20wlp9s0%20

192.168.43.192%20255.255.255.0%20192.168.43.255%201500

如果只查看掩码信息,运行如下命令:

$%20ifdata%20-pn%20wlp9s0%20

255.255.255.0

如果查看网络接口的物理地址,运行如下命令:

$%20ifdata%20-ph%20wlp9s0%20

A0:15:46:90:12:3E

如果判断接口是否存在,可以使用%20-pe%20参数:

$%20ifdata%20-pe%20wlp9s0%20

yes

pee%20命令

该命令某种程度上类似于%20tee%20命令。

我们先用一个例子看一下%20tee%20的用法。

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

Welcome%20to%20OSTechNIx

上述命令首先创建两个文件,名为%20file1%20和%20file2;接着,将%20“Welcome%20to%20OSTechNix”%20行分别附加到两个文件中;最后,在终端中打印输出%20“Welcome%20to%20OSTechNix”。

pee%20命令提供类似的功能,但与%20tee%20又稍微有些差异。查看下面的例子:

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

Welcome%20to%20OSTechNIx%20

Welcome%20to%20OSTechNIx

从上面的命令输出中可以看出,有两个%20cat%20命令实例获取%20echo%20命令的输出并执行,因而终端中出现两个同样的输出。

sponge%20实用程序

这是%20moreutils%20软件包中的另一个有用的实用程序。sponge%20读取标准输入并写入到指定的文件中。与%20Shell%20中的重定向不同,sponge%20接收到完整输入后再写入输出文件。

查看下面这个文本文件的内容:

$%20cat%20file1%20

I%20

You%20

Me%20

We%20

Us

可见,文件包含了一些无序的行;更具体的说,这些行“没有”按照字母顺序排序。如果希望将其内容安装字母顺序排序,你会怎么做呢?

$%20sort%20file1%20>%20file1_sorted

这样做没错,对吧?当然没错!在上面的命令中,我将%20file1%20文件内容按照字母顺序排序,将排序后的内容保存在%20file1_sorted%20文件中。但如果使用%20sponge%20命令,你可以在不创建新文件(即%20file1_sorted)的情况下完成同样的任务,命令如下:

$%20sort%20file1%20|%20sponge%20file1

那么,让我们检查一下文件内容是否已经按照字母顺序排序:

$%20cat%20file1%20

I%20

Me%20

Us%20

We%20

You

看到了吧?并不需要创建新文件。在脚本编程中,这非常有用。另一个好消息是,如果待写入的文件已经存在,sponge%20会保持其%20权限信息(permissions)不变。

ts%20实用程序

正如名称所示,ts%20命令在每一行输出的行首增加%20时间戳(timestamp)。

查看如下命令的输出:

$%20ping%20-c%202%20localhost%20

PING%20localhost(localhost.localdomain%20(::1))%2056%20data%20bytes%20

64%20bytes%20from%20localhost.localdomain%20(::1):%20icmp_seq=1%20ttl=64%20time=0.055%20ms%20

64%20bytes%20from%20localhost.localdomain%20(::1):%20icmp_seq=2%20ttl=64%20time=0.079%20ms%20

---%20localhost%20ping%20statistics%20---%20

2%20packets%20transmitted,%202%20received,%200acket%20loss,%20time%201018ms%20

rtt%20min/avg/max/mdev%20=%200.055/0.067/0.079/0.012%20ms

下面,结合%20ts%20实用程序运行同样地命令:

$%20ping%20-c%202%20localhost%20|%20ts%20

Aug%2021%2013:32:28%20PING%20localhost(localhost%20(::1))%2056%20data%20bytes%20

Aug%2021%2013:32:28%2064%20bytes%20from%20localhost%20(::1):%20icmp_seq=1%20ttl=64%20time=0.063%20ms%20

Aug%2021%2013:32:28%2064%20bytes%20from%20localhost%20(::1):%20icmp_seq=2%20ttl=64%20time=0.113%20ms%20

Aug%2021%2013:32:28%20

Aug%2021%2013:32:28%20---%20localhost%20ping%20statistics%20---%20

Aug%2021%2013:32:28%202%20packets%20transmitted,%202%20received,%200acket%20loss,%20time%204ms%20

Aug%2021%2013:32:28%20rtt%20min/avg/max/mdev%20=%200.063/0.088/0.113/0.025%20ms

对比输出可以看出,ts%20在每一行行首增加了时间戳。下面给出另一个例子:

$%20ls%20-l%20|%20ts%20

Aug%2021%2013:34:25%20total%20120%20

Aug%2021%2013:34:25%20drwxr-xr-x%202%20sk%20users%2012288%20Aug%2020%2020:05%20Desktop%20

Aug%2021%2013:34:25%20drwxr-xr-x%202%20sk%20users%204096%20Aug%2010%2018:44%20Documents%20

Aug%2021%2013:34:25%20drwxr-xr-x%2024%20sk%20users%2012288%20Aug%2021%2013:06%20Downloads%20

[...]

vidir%20实用程序

vidir%20实用程序可以让你使用%20vi%20编辑器(或其它%20$EDITOR%20环境变量指定的编辑器)编辑指定目录的内容。如果没有指定目录,vidir%20会默认编辑你当前的目录。

下面的命令编辑%20Desktop%20目录的内容:

$%20vidir%20Desktop/

vidir

上述命令使用%20vi%20编辑器打开了指定的目录,其中目录内的文件都会对应一个数字。下面你可以按照%20vi%20的操作方式来编辑目录中的这些文件:例如,删除行意味着删除目录中对应的文件,修改行中字符串意味着对文件进行重命名。

你也可以编辑子目录。下面的命令会编辑当前目录及所有子目录:

$%20find%20|%20vidir%20-

请注意命令结尾的%20-。如果%20-%20被指定为待编辑的目录,vidir%20会从标准输入读取一系列文件名,列出它们让你进行编辑。

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

$%20find%20-type%20f%20|%20vidir%20-

只想编辑特定类型的文件,例如%20.PNG 文件?你可以使用如下命令:

$ vidir *.webp

这时命令只会编辑当前目录下以 .PNG 为后缀的文件。

vipe 实用程序

vipe 命令可以让你使用默认编辑器接收 Unix 管道输入,编辑之后使用管道输出供下一个程序使用。

执行下面的命令会打开 vi 编辑器(当然是我默认使用的编辑器),你可以编辑 echo 命令的管道输入(即 “Welcome to OSTechNix”),最后将编辑过的内容输出到终端中。

$ echo "Welcome to OSTechNIx" | vipe

Hello World

从上面的输出可以看出,我通过管道将 “Welcome to OSTechNix” 输入到 vi 编辑器中,将内容编辑为 “Hello World”,最后显示该内容。

好了,就介绍这么多吧。我只介绍了一小部分实用程序,而 moreutils 包含更多有用的实用程序。我在文章开始的时候已经列出目前 moreutils 软件包内包含的实用程序,你可以通过 man 帮助页面获取更多相关命令的细节信息。举个例子,如果你想了解 vidir 命令,请运行:

$ man vidir

希望这些内容对你有所帮助。我还将继续分享其它有趣且实用的指南,如果你认为这些内容对你有所帮助,请分享到社交网络或专业圈子,也欢迎你支持 OSTechNix 项目。

干杯!


via: https://www.ostechnix.com/moreutils-collection-useful-unix-utilities/

作者: SK 选题: lujun9972 译者: pinewall 校对: wxy

本文由 LCTT 原创编译, Linux中国 荣誉推出

点击“了解更多”可访问文内链接

推荐阅读