如何在 Linux 中查找最长的手册页

所有命令’ 手册页 存储在 /usr/share/man/ Linux 中的目录。 手册页被压缩在 压缩包 (.gz) 格式。 想知道哪个命令在您的 Linux 系统上拥有最大的手册页吗? 这里最大的意思是,我说的是手册页中的行数。 这与打印时的文件大小或页数无关。 如果您想知道如何在 Linux 和 Unix 发行版中找到最长的手册页,请遵循此处给出的任何一种方法。

在 Linux 中查找最长的手册页

我们可以通过计算其中的行数和单词数来找到最大和最长的手册页。 这 厕所 命令用于计算文件中的行数和字数。 例如,要计算中的行数 ls 命令的手册页,运行:

$ man ls | wc -l

同样,要计算 ls 手册页中的单词数,请使用 -w 像下面这样的标志。

$ man ls | wc -w

在 linux 的手册页中查找行数和单词数

但是,计算每个手册页中的行数是乏味的、耗时的,而且找出整个系统中最长的手册页可能是一个愚蠢的想法。 我们可以使用 for 循环 如下所示。

for i in {1..8}; do f=/usr/share/man/man$i/$(ls -1S /usr/share/man/man$i/ | head -n1); printf "%s: %9dn" "$f" $(man "$f" 2>/dev/null | wc -l); done

此命令将分析手册目录(1 到 8)并按降序显示每个目录中最长的手册页。 这将需要几分钟,具体取决于系统中手册页的数量。

这是我的 Ubuntu 18.04 系统的输出:

/usr/share/man/man1/ffmpeg-all.1.gz: 25468
/usr/share/man/man2/perf_event_open.2.gz: 1732
/usr/share/man/man3/Net::SSLeay.3pm.gz: 8738
/usr/share/man/man4/st.4.gz: 423
/usr/share/man/man5/proc.5.gz: 3087
/usr/share/man/man6/espdiff.6.gz: 50
/usr/share/man/man7/groff_mdoc.7.gz: 1826
/usr/share/man/man8/dnsmasq.8.gz: 1337

在 Linux 和 Unix 中查找最长的手册页

如您所见,最长的手册页是 ffmpeg 全部25468 线总数。

你可以交叉检查它 厕所 命令如下。

$ man ffmpeg-all | wc -l
25468

如果您想根据字数而不是行数找到最长的人,请运行:

for i in {1..8}; do f=/usr/share/man/man$i/$(ls -1S /usr/share/man/man$i/ | head -n1); printf "%s: %9dn" "$f" $(man "$f" 2>/dev/null | wc -w); done

样本输出:

/usr/share/man/man1/ffmpeg-all.1.gz: 130475
/usr/share/man/man2/perf_event_open.2.gz: 11031
/usr/share/man/man3/Net::SSLeay.3pm.gz: 37886
/usr/share/man/man4/st.4.gz: 4358
/usr/share/man/man5/proc.5.gz: 22939
/usr/share/man/man6/espdiff.6.gz: 294
/usr/share/man/man7/groff_mdoc.7.gz: 11919
/usr/share/man/man8/dnsmasq.8.gz: 16875

使用命令检查是否正确:

$ man ffmpeg-all | wc -w
130475

在 Linux 中查找最长手册页的简单脚本

这是一个简单的 BASH 脚本,用于查找 Linux 系统中最长的手册页。

创建一个文件,用于 example longman.sh(简称 最长的人 页):

$ nano longman.sh

在其中添加以下行:

#!/usr/bin/env bash
cd /usr/share/man/
for fn in $(find -maxdepth 1 -type d -iname 'man[1-8]'); do
  fn=${fn#./}
  ls -1Sp "$fn" | head -n 10 | sed -Ee "s,^,$PWD/$fn/," | while read manpage; do
    shortname=$(echo "$manpage" | sed -e "s,$PWD/man,," -e "s,/,"$'t'",")
    printf '%9dt%sn' $(man "$manpage" 2>/dev/null | wc -l) "$shortname"
  done
done | sort -n

如果要计算字数而不是行数,请使用 wc -w 在上面的脚本中。 该脚本获取每个 man 目录中的前 10 个,编译一个表并按行数对其进行排序。 如果您的系统上不存在任何编号的部分 1-8,它也会排除它们。

Save 和 close 该文件并使用命令使其可执行:

$ chmod +x longman.sh

现在,运行此脚本以查找系统中最长的手册页:

$ ./longman.sh

最长的手册页显示在底部。 如果要在顶部显示最长的手册页,请在上述脚本中使用“sort -rn”。

样本输出:

[...]
14236   1   ffmpeg-filters.1.gz
15470   1   x86_64-linux-gnu-g++-7.1.gz
15470   1   x86_64-linux-gnu-gcc-7.1.gz
20579   1   ffplay-all.1.gz
20797   1   ffprobe-all.1.gz
24856   1   ffserver-all.1.gz
25468   1   ffmpeg-all.1.gz

在 Linux 中查找最长手册页的 Bash 脚本

在 Linux 中查找最长手册页的 Bash 脚本

中间的数字表示 手册页部分.

要了解有关手册页的更多详细信息,请运行:

$ man man
$ man -k man
$ info man

建议阅读:

  • 如何在 Ubuntu 上安装缺少的命令手册页
  • 如何创建和维护自己的手册页

希望这很有用。