如何遵循Linux手册页中的链接?


91

有没有一种方法可以跟踪手册页中提到的链接?例如,这是的手册页ps;如何访问标记为红色的链接?

ps手册页的屏幕截图


1
另外,我看到那man is an interface to the on-line reference manuals(如果我没记错的话)意味着它应该从互联网上的某个网页中提取所有信息,对吗?那么,有人知道http://链接是什么吗?
its_me 2011年

10
这里的“在线”是指“在计算机上”(而不是“在纸上”),而不是“在互联网上”。
吉尔斯

1
“在线”:您可能还记得那些名为Sierra On-Line的公司(当时)推出的PC版“冒险” Quest游戏。手册页:浏览手册页的最佳方法是使用编辑器。这样,导航,搜索(等)文本将很流畅,因为很长一段时间以来,每个快捷方式都在您的肌肉记忆中。另外,假设您在编程项目上工作-您可以将手册页中的内容复制到代码中。无缝互动无所不包。看看这个,以及我对@Gilles 答案的评论。
伊曼纽尔·伯格

Answers:


51

手册页追溯到Unix的第一版。虽然超文本已经发明,但仍处于起步阶段。网络距我们只有二十年的路程,而手册是一本实际的印刷书籍,如果适合的话,通常每页一个命令(这就是为什么将其称为页面)。

自那时以来,用于手动页面的格式已经有所发展,但是大多数页面并不是真正为超文本设计的,并且默认man程序不支持它(它只是纯文本查看器,带有支持某些基本格式的技巧)。然而,有那一些重建人的超链接页面观看节目,主要是链接到其他人的页面,这是传统的书面形式man(1)哪里man是男人页面的名称,1款号

您可以man2html在许多在线站点上浏览几种操作系统的手册页,这些手册已通过或类似工具转换为HTML ,例如:

在man页面成为UNIX上已建立的文档格式之后的某个时间,以及在Web发明之前的一段时间,GNU项目引入了信息文档格式,该信息文档格式比man更高级,同时坚持了为文本终端设计的简单标记。与人相比,信息的主要创新是拥有多页文档,以及指向其他页面的超链接。尽管大多数Info页面是从Texinfo源(或有时是其他格式)生成的,但该Info页面也可以生成HTML ,但Info仍然是GNU项目首选的文档格式。当存在程序的信息文档时,它通常是主要的手册,而手册页仅包含有关命令行参数的基本信息。


5
好答案!还值得一提的是,Emacs中还有另一种手册页模式,它(至少是I)是公正的M-x man(并且C-h v mode-nameMan):至少在一方面,它优于WoMan显示表(屏幕截图)。当然,它也是超链接的。
伊曼纽尔·伯格

1
信息程序用户界面感觉很错误并且违反直觉。我还没有看到任何人使用它。
PavelŠimerda'18

@PavelŠimerda> 信息程序用户界面感觉很错误并且违反直觉。<嗯,相比之下呢?对于less(1)(这是GNU中man(1)的默认分页器)—那件事,您必须回想起如何回滚,因为<backspace>没有绑定(并且<pgup>可能根本不起作用) ?这样,主键是b。对于哪种界面范例的用户来说,这可能很直观?
德米特里·亚历山德罗夫

@PavelŠimerda> 我还没有看到任何人使用它。 <出于确切原因,总是在被锁定在文本终端中时始终使用info(1)来阅读联机帮助页,这与less(1)不同,它确实将哑page(N)链接转换为超链接。令吉尔斯在回答中没有提到那样的品质感到非常惊讶。
德米特里·亚历山德罗夫

37

首先,它不是链接。这只是一个下划线。手册页只是文本文档,终端可以处理一些简单的格式。下划线仅是重点,不涉及“链接”。

普通man命令只是一个文本格式化程序。实际上,该man命令甚至不显示文本,man只是格式化存储在手册页文件[1]中的信息,并将格式化的输出发送到另一个程序(通常是less),该程序将格式化的输出显示在屏幕上。这些显示程序没有链接的概念。

有一些特殊的文档阅读器,他们可能能够看到这样的格式并做出有根据的猜测,这样的突出显示可能表明存在可以拉起并创建链接的相关手册页,但我不知道哪个做。也许pinfo吧?

如果您希望通过超链接进行类似于Web的格式设置,则几乎可以在线找到任何带有链接的UNIX手册页。尝试输入man [anything]google,几乎肯定会在第一批点击中获得成功。

在您的示例中,视觉高亮显示了一个线索,那就是另一个程序名称具有自己的手册页,您可以轻松地将其调出。尝试man 1 top。1表示要查看的手册页部分。有关此部分的说明,请参见此问题:手册页中的数字是什么意思?


[1]如果man在文本编辑器中打开页面文件,您将看到man未格式化的原始页面,以便于阅读。原始man页面是使用称为的标记语言编写的troff。有关troff如何编写man页面以及如何编写页面的更多信息,请参见:https : //liw.fi/manpages/


知道为什么man 1 top吗?? 我的意思是应该这样,ps 1 top因为我在的手册页上找到了链接ps。“男人1顶”对我来说没有意义。请澄清。
its_me 2011年

也有一些资源可以使手册页在Internet上可用,并用可替换的href代替了引用。
gabe。

1
如果要遵循top(1)“链接”,则需要top从第一部分打开手册页。有关各节的更多信息,请参见man(1)。ps 1 top没有任何意义,因为您只需要ps使用一些奇怪的参数来运行命令即可。
rvs

2
@Aahan是man 1顶部,因为您想在在线手册页的第一部分中看到top命令的手册页。参考top(1)就是指手册页第一部分的顶部。要看到这一点,请在提示符下键入“ man 1 top”。参见“男人”
gabe。

1
@Aaran:“手册的各节涵盖了不同的主题。第1节是用户命令(在提示符下键入的内容),第2节是系统调用,依此类推。某些字符串出现在一个以上的段中。现在readlink出现在第1节和第2节以及printf第1和3节中。如果您仅键入man command,man会以数字顺序尝试各部分并显示找到的第一个部分,或者您可以特定于man # command,这是获取文档所必须要做的对于readlink系统调用。
dmckee

12

这是很晚的回复,但请使用w3mman。w3mman是w3m的系统手册寻呼机。

https://linux.die.net/man/1/w3mman

您可以通过安装w3m软件包来尝试。我相信此软件包已在大多数主要Linux / UNIX发行版和Cygwin的软件存储库中注册。


1
较晚的答复为尚未提及的问题添加了一些答案,这从来没有问题!欢迎来到Unix&Linux StackExchange!
Bernhard

w3mmanMacports的默认w3m安装中还提供了该工具。太好了:)谢谢!
sampablokuper 2014年

8

在尝试遵循您的工作流程的意义上,让我尝试多解释一下您的问题。您可能想要的是man页面内的按键组合,可直接将您引向您正在阅读的带下划线的命令。因此,不必安装其他东西,也不必打开其他控制台并忘记确切的语法。

这个最简单的解决方案是感叹号(如果您正在使用它less来显示手册页),并且您想转到带下划线的地方top

!man top

要么

!man 1 top

您必须按q多次将其关闭。还要注意,如果将LESSSECURE=1它设置为环境变量将使其less在安全模式下运行并且不允许您使用,这将无效!。它将告诉您类似“命令不可用”的信息。


1

尽管w3mman是跟踪链接的解决方案,但并未使用所有屏幕(至少在ubuntu 12.10上)

我更喜欢使用:

$ sudo su -
# apt-get install w3m man2html
# exit
$ alias man=' hman -P w3m'

将最后一个命令添加到〜/ .bash_aliases或类似的启动脚本中,以在每个会话中获取它。

-P的w3m是因为第一个浏览器来HMAN是山猫还是明智的浏览器,但我更喜欢的w3m

HMAN是捆绑在html2man的工具。看到这个

如果退出确认对您来说很烦,对我来说就是这样


我的错误,该程序包必须为html2man
albfan 2013年

1

专门针对Ubuntu,有Yelp。它是默认安装的,并且默认情况下能够显示手册页,尽管调用的方式与man命令的显示方式不同。别名或外壳函数可以解决后一点(取决于您的外壳)。

yelp 'man:exit'

默认情况下,它将以我不知道的方式显示到某个部分。提醒:要获取手册主题的章节列表,请使用whatis,如中所示whatis exit

要请求Yelp显示特定部分(例如2)的手册页,请执行以下操作:

yelp 'man:exit(2)'

问题:yelp存在错误,并准备从命令行调用它时输出多个错误。此外,别名或自定义外壳函数可以帮助将所有错误重定向到/dev/null


1

就像他们说的那样,它不是为此而设计的。

您可以在项目的“ 另请参阅”部分info man下使用并按回车。

信息-阅读信息文档


1

我有(一对)黑客。

骇客1

把它放在你的〜/ .bashrc或你的〜/ .zshrc中

function man(){
    for arg in "$@"; do
        vim -c 'execute "normal! :let no_man_maps = 1\<cr>:runtime ftplugin/man.vim\<cr>:Man '"${arg}"'\<cr>:wincmd o\<cr>"'
    done
}

截图..

vim屏幕截图中的手册

腹水..

https://asciinema.org/a/130131

现在..

  1. man vim例如,当您键入时,它将在vim中打开此手册页。

    • man man vim例如,如果键入,它将首先打开man的手册,退出vim之后,它将打开vim的手册。
  2. 当您在底部的另一手册页(另请参阅部分)上按K(大写k)时,您将跳到本手册(不幸的是在一个较小的寻呼机内) –这是因为我们有;如果您没有这样做,那么vim将被迫成为,并且您将无法轻松地记录宏,并且vim可能会以其他方式异常运行。let no_man_maps = 1q:q

    • 退出您输入的第二本手册将使您返回到正在查看的上一手册
  3. 因为已经加载了ftplugin / man.vim,并且ft被(自动)设置为,所以您会得到非常漂亮的语法突出显示man

  4. 您可以复制和粘贴,在vim中自由导航,甚至可以修改缓冲区和:w ~/usefulfile。您可以执行通常在vim中所做的所有事情,包括记录宏,使用"+y(如果有的话+clipboard)拖到剪贴板等,等等。

我认为这是非常漂亮较少

我发现的唯一的小挫折(如果您使用较少的传呼机,该挫折仍然存在)是您想在一个vim会话中打开多个手册。我真的没有办法做到这一点。

一些注意事项:

  1. 如果您尝试保存缓冲区,您将获得 E382: Cannot write, 'buftype' option is set

    • 我喜欢您无法保存,因为它可以防止意外保存
  2. 你仍然可以像 :w /tmp/man.man

    • 如果您将其保存为.man扩展名,则将其打开会将文件类型设置man
    • 如果不将其与保存.man的扩展,你可以设置英尺到man运行:set ft=man
  3. 例如,如果您在打开手册页时需要执行某些操作,则可以使用autocmd VimEnter *.~ echom 'hooray, we are using vim for man pages!'

  4. 我在vimrc中添加了以下内容,以便可以按K尝试打开手册,然后按G退回到上一手册:


augroup man
    autocmd!
    autocmd VimEnter *.~ nnoremap B :execute "normal! `Z"<cr>
    autocmd VimEnter *.~ nnoremap <buffer> K :execute "normal! mZyiw:Man \<lt>c-r>\"\<lt>cr>"<cr>
augroup END

骇客2

把它放在你的〜/ .bashrc或〜/ .zshrc中

function man(){
    declare -a args
    for arg in "$@"; do
        command man "$arg" > "/tmp/${arg}.man"
        args+=("/tmp/${arg}.man")
    done
    vim "${args[@]}"
}

截图..

vim中的多本手册

腹水..

https://asciinema.org/a/9Q6Si90Pi46cDVUknxFxfIwsv

这解决了破解1个面孔和减少面孔的问题(现在您可以在一个缓冲区中查看多个手册),但是它不太美观。

笔记:

  1. 重要提示:如果您希望hack2正常工作,则必须:let no_man_maps = 1输入~/.vimrc。这是因为Vim会.../vim80/man.vimq将被强制重新映射到:q

  2. 还有更多清理工作(现在您将每本手册存储到/tmp/*.man

  3. 您现在可以如上所述在一个会话中查看多个手册页,如上所述

  4. 如果按K,仍然会打开一个新的vim会话。

    • 如果您愿意,可以绑定一个autocmd(使用上面的autocmd)来做类似的事情autocmd VimEnter man.~ nnoremap <buffer> K :execute "normal! Byt(:silent !man \<c-r>\" > /tmp/\<c-r>\".man\<cr>:edit /tmp/\<c-r>\".man\<cr>"或类似的事情(未经测试

对于颜色不好的子午线表示歉意。在我的终端上,颜色看起来好多了。
迪伦

0

我能够使用--html参数to man,以便在$ BROWSER环境变量定义的浏览器中将其打开,因此:

BROWSER=google-chrome man ps --help

我正在使用Fedora。不确定这是否适合您的发行版,请测试并在评论中报告。


该选项在Ubuntu 12.04上似乎可以识别,但是失败了。
Hibou57 2014年

好的,该软件包groff需要安装。该groff命令可能在其中,而没有相同名称的软件包(该命令随附groff-base,不是完整的groff软件包)。我会的man --html="surf file%c//%s" <command>,这很好。但是,超文本非常有限:-/。
Hibou57 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.