我想输出拥有最多系统手册页的已安装软件包的名称。有命令可以做到这一点吗?
答案1
对于基于 Debian 的系统,获取最多的软件包已安装手册页:
dpkg -S '/usr/share/man/*.gz' | cut -d: -f1 | sort | uniq -c | sort -rn | head -1 | awk '{print $2}'
要获取包含最多可用手册页的软件包(无论是否安装):
apt-file search /usr/share/man | cut -d: -f1 | uniq -c | sort -rn | head -1 | awk '{print $2}'
在我的系统上,具有最多可用手册页的软件包是linux-manual-3.2
.
解释
pkg
采用用于一次创建一个步骤的管道:
apt-file search /usr/share/man
这将返回层次结构中所有文件的包和文件名
/usr/share/man
。cut -d: -f1
这会删除列表的文件名,以便我们只有包列表。
uniq -c
这会计算每个包中的手册页数量。 (通常,在使用之前需要进行排序
uniq -c
,但apt-find
一次生成一个包的输出,使得这一步骤变得不必要。)sort -rn
这会按降序进行数字排序,以便包含最多手册页的包位于顶部,而包含最少手册页的包位于底部。
head -1
这将选择具有最多手册页的第一行。
awk '{print $2}'
这将从该行选择包名称。
我发现仅使用此管道的一部分很有趣:
apt-file search /usr/share/man | cut -d: -f1 | uniq -c | sort -rn | less
这将通过 来显示less
按手册页数量降序排列的包列表。在我的系统上,前五名是:
3453 linux-manual-3.2
3384 liblapack-doc-man
2350 freebsd-manpages
1916 manpages-ja-dev
1905 manpages-fr-dev
答案2
在我的 gentoo box 命令上
qfile /usr/share/man/*/* | awk '{print $1}' | sort | uniq -c | sort -n
给出
864 sys-libs/ncurses
1139 sys-apps/man-pages-posix
1283 dev-libs/openssl
2209 sys-apps/man-pages
2246 x11-libs/libxcb
但包括之后全部带有一点**
模式帮助的子目录
qfile /usr/share/man/**/* | awk '{print $1}' | sort | uniq -c | sort -n
手册页获胜:
933 sys-libs/ncurses
1142 sys-apps/man-pages-posix
1352 dev-libs/openssl
2254 x11-libs/libxcb
2310 sys-apps/man-pages
答案3
Debian/Ubuntu/Mint 的替代方案...
$ cd /var/lib/dpkg/info &&
grep -c '^/usr/share/man/.*/' *.list | sort -t: -k2rn | less -XF
给我:
manpages-dev.list:1962
libssl-doc.list:1171
tcl8.6-doc.list:813
perl-doc.list:719
libdatetime-locale-perl.list:470
tcllib.list:407
答案4
该解决方案有效中央操作系统和RHEL机器。
rpm -qf $(man -w $(compgen -ac)) | sort | uniq -c | sort -nr | head -1
我可以使用 生成系统中可用的所有命令的列表compgen -ac
。现在,man -w
可以知道该命令对应的手册页了。
我将此手册页作为输入,rpm -qf
它将为我提供拥有它的包。现在,我对输出进行排序,然后找到总出现次数,然后获取第一行,该行将给出包名称以及与该包对应的手册页数。运行上述命令后,我得到的输出是,
329 netpbm-progs-10.47.05-11.el6.x86_64
因此,上面的输出表明我有 329 个软件包提供的命令的手册页条目,netpbm-progs-10.47.05-11.el6.x86_64
这是我的系统中最高的。
参考