来自终端的在线手册页

来自终端的在线手册页

冒着提出可能已经有答案的问题的风险,我想问是否有人知道是否以及如何可以使用在线资源/在我的终端中阅读未安装在我的系统中的程序/应用程序的手册页/在线工具。

我进行了 stackexchange 和谷歌搜索,但没有发现任何有关此问题的信息。

例如man grep将按预期提出 grep 手册。另一方面,由于未安装,man agrep因此会出现错误。agrep为了阅读,agrep manual我必须google agrep man pages得到这样的结果:https://linux.die.net/man/1/agrep

PS:顺便说一句,我觉得很奇怪http://man7.org/linux/man-pages/dir_all_alphabetic.html不提供agrep...

我想知道是否可以man agrep从我的终端运行或类似的命令(无需安装 agrep)并像通常的 man 工作一样在终端中阅读 agrep 手册页。

我不希望世界上所有的手册页都可以在本地获得;我只是想知道是否有任何棘手的方法可以使用 man (甚至其他命令)来搜索和显示未安装的 progs 的手册页,而无需打开浏览器,输入关键字,在结果中搜索等。

PS:正如 Kusalananda 所注意到的,提出网络查询可能会导致不适合特定发行版本的结果(会弹出不同版本的结果)。因此,最好的(在我的梦想中)是如果有一种发行版特定的(在我的例子中是 Debian)内部/内置命令(甚至是一个开关)可以专门为我的设置检索在线手册页(即类似:man --online agrep或者onlineman agrep)。看来不是。

答案1

您可以使用linkslinks -dump https://linux.die.net/man/1/agrep | less。只需更改类别和名称即可。

答案2

如果这是 Ubuntu,您可以使用包dman中的命令bikeshed。从man dman

dman   is   a   script   that   remotely   retrieves   manpages    from
http://manpages.ubuntu.com, but reads them on the local system.

This  is  often  useful  to read a manpage of a utility that you do not
have installed on the local system.

It will cycle through each manpage section available for a given TOPIC.

IIRCdman是一个脚本,因此可以修改它以使用https://manpages.debian.org

答案3

作为替代方案,您可以考虑山猫文本浏览器反而。这样,您只需输入:

lynx https://linux.die.net/man/1/agrep

它在很多情况下都对我有用,并且似乎在许多系统的软件存储库中广泛可用。

至于知道您获得了系统的版本,我认为如果不从您已安装的系统中获取版本号并查看您要阅读的手册页,就没有任何方法可以做到这一点。

答案4

使用在线服务来显示手册很酷,但是当我读到 @Kusalananda 关于从安装包中提取手册页的评论时,我就以某种方式痴迷于实现这项技术,以确保我将阅读我的发行版的正确手册。

下面的解决方案中的唯一错误是它基于 apt/dpkg 的最新版本,这些版本在 Debian Testing 8.6 中可用,但在其他系统中可能不可用。

从 .deb 文件中提取手册页,无需下载
找到 deb 文件,就像您计划安装相关软件包(即 yade)一样:

apt-get --print-uris download yade
'http://httpredir.debian.org/debian/pool/main/y/yade/yade_2016.06a-7_amd64.deb' yade_2016.06a-7_amd64.deb 1621148 SHA256:26c0d84484a92ae9c2828edaa63243eb764378d79191149970926aa3ec40cdd4

PS:--print-uris 开关打印 deb 包的 url,但 deb 并未下载。

找到隐藏在此 deb 文件中的手册页:

dpkg -c <(curl -sL -o- http://httpredir.debian.org/debian/pool/main/y/yade/yade_2016.06a-7_amd64.deb) |grep "man/man" |grep -vE "\/$" |awk '{print $NF}'
./usr/share/man/man1/yade-batch.1.gz
./usr/share/man/man1/yade.1.gz

阅读手册页 yade.1.gz(无需下载 deb):

man <(dpkg-deb --fsys-tarfile <(curl -sL -o- http://httpredir.debian.org/debian/pool/main/y/yade/yade_2016.06a-7_amd64.deb) |tar -xO ./usr/share/man/man1/yade.1.gz)

使用 man 应用程序可以正确显示手册页。

apt --version --> apt 1.4~beta2 (amd64)
dpkg --version --> Debian 'dpkg' package management program version 1.18.18 (amd64).
man --version --> man 2.7.6.1
tar --version --> tar (GNU tar) 1.29
curl --version --> curl 7.51.0 (x86_64-pc-linux-gnu) libcurl/7.51.0 GnuTLS/3.5.7 zlib/1.2.8 libssh2/1.7.0 nghttp2/1.17.0 librtmp/2.3  

另一种方法是下载 deb 文件:
基于经典 apt-get、ar 和 tar 的波纹管方法应该适用于任何发行版。
deb 文件被下载到当前工作目录中,提取手册页,然后删除文件。

pkg="$1"
apt-get download "$pkg" 2>/dev/null
debname=$(find . -name "$pkg*.deb")
datatar=$(ar t "$debname" |grep "data.tar") 
#ar t prints out the contents of the archive 

if [[ ${datatar##*.} == "gz" ]];then #extension check 
  options="z"
elif [[ ${datatar##*.} == "xz" ]];then
  options="J"
else
  echo "data.tar archive inside deb is not a gz or xz archive. Exiting"
  exit 1
fi

manpage+=($(ar p $debname $datatar | tar t"$options" |grep "man/man" |grep -vE "\/$" |awk '{print $NF}')) #tar t lists the files included in archive
man <(ar p "$debname" "$datatar" | tar xO"$options" ${manpage[@]}) 
#ar p and tar -O prints archive files / contents in stdout to be read by man
rm -f $debname #or rm -i for more control.

使用 manpages.debian.org
作为第三种选择,从 2017 年 1 月开始,有人可以使用别名/脚本从 debian nline 中提取手册页,基于全新的 debian 手册页网站,该网站会直接跳转到您所在软件包的正确/最新手册页。想:

alias debman='function __debman { links -dump https://manpages.debian.org/jump?q=$1 |awk "/Scroll to navigation/,0" |less; };__debman'

通过终端将其称为$ debman yade

相关内容