¿Cómo seguir los enlaces en las páginas de manual de Linux?

92

¿Hay alguna manera de seguir los enlaces mencionados en una página de manual? Por ejemplo, aquí está la página del manual para ps; ¿Cómo accedo al enlace marcado en rojo?

Captura de pantalla de la página man de ps

soy yo
fuente
1
Además, veo lo que man is an interface to the on-line reference manuals(si no me equivoco) significa que debería extraer toda la información de alguna página web en Internet, ¿verdad? Entonces, ¿alguien tiene idea de qué es el enlace http: //?
its_me
10
Aquí "en línea" significa "en la computadora" (en oposición a "en papel"), no "en Internet".
Gilles
1
"On-Line": es posible que recuerdes esos juegos de "Adventure" Quest para PC que fueron lanzados por una compañía (entonces) llamada Sierra On-Line. páginas man: la mejor manera de navegar por las páginas man es usar su editor. De esa manera, navegar, buscar (etc.) el texto será tan suave como cada atajo está en su memoria muscular desde hace mucho tiempo. Además, supongamos que trabaja en un proyecto de programación: puede copiar desde páginas de manual a su código. Nada menos que una interacción perfecta. Mira esto y mi comentario a la respuesta de @Gilles .
Emanuel Berg

Respuestas:

52

Las páginas de manual se remontan a Unix First Edition . Si bien se había inventado el hipertexto , todavía estaba en la infancia; la web estaba a dos décadas de distancia, y el manual era un libro impreso real, a menudo con un comando por página si encajaban (por eso se llamaban páginas).

El formato utilizado para las páginas manuales ha evolucionado un poco desde entonces, pero la mayoría de las páginas no están realmente diseñadas para hipertexto, y el manprograma predeterminado no lo admite (es solo un visor de texto sin formato, con hacks para admitir algunos formatos básicos). Sin embargo, existen programas de visualización de páginas de manual que reconstruyen algunos hipervínculos, principalmente enlaces a otras páginas de manual, que tradicionalmente se escriben en la forma man(1)donde manestá el nombre de la página de manual y 1el número de sección :

  • tkman , un visor de la página de manual de la GUI con hipervínculos
  • WoMan ( wiki , man comparsion , anteriormente ), un navegador de páginas man para Emacs, que admite hipervínculos
  • man2html , un convertidor de hombre a HTML (más un navegador web para leer el resultado)

Puede navegar por las páginas del manual de varios sistemas operativos, convertidos a HTML por man2htmlo herramientas similares, en varios sitios en línea, por ejemplo:

Algún tiempo después de que las páginas man se convirtieran en el formato de documentación establecido en Unix y algún tiempo antes de que se inventara la web, el proyecto GNU introdujo el formato de documentación de información , más avanzado que el hombre, mientras que se ajustaba al marcado simple diseñado para terminales de texto. La principal innovación de la información en comparación con el hombre fue tener documentación de varias páginas con hipervínculos a otras páginas. La información sigue siendo el formato de documentación preferido para los proyectos GNU, aunque la mayoría de las páginas de información se generan a partir de una fuente Texinfo (o, a veces, otros formatos) que también pueden generar HTML. Cuando existe documentación de información para un programa, a menudo es el manual principal, mientras que las páginas del manual solo contienen información básica sobre los argumentos de la línea de comandos.

Gilles
fuente
55
¡Gran respuesta! También vale la pena mencionar que hay otro modo para las páginas de manual en Emacs, el que (al menos I) consigue solo M-x man(y C-h v mode-namees Man): al menos en un aspecto, es superior a WoManporque muestra tablas ( captura de pantalla ). Por supuesto, también está hipervinculado.
Emanuel Berg
1
La interfaz de usuario del programa de información se siente mal y contra intuitiva. No he visto a nadie usando eso.
Pavel Šimerda
@ PavelŠimerda> La interfaz de usuario del programa de información se siente mal y contra-intuitiva. <Emm, ¿comparado con qué? A menos (1) (que es el buscapersonas predeterminado para man (1) en GNU), esa cosa, donde debe recordar cómo desplazarse hacia atrás , ya que <backspace> no está vinculado (y <pgup> podría no funcionar en absoluto) ? La clave principal es b, de esa manera. Para un usuario de qué paradigma de interfaz esto podría ser intuitivo?
Dmitry Alexandrov
@ PavelŠimerda> No he visto a nadie usando eso. <Siempre use información (1) para páginas de manual de lectura cuando se quedaron encerrados en un terminal de texto por la razón exacta, que a diferencia de menos (1) que no convertir mudos page(N)enlaces en los hipervínculos. Me sorprendió bastante que no se mencionara en la respuesta de Gilles en esa calidad.
Dmitry Alexandrov
37

En primer lugar, no es un enlace. Es solo un subrayado. Las páginas de manual son solo documentos de texto con un poco de formato simple que un terminal puede manejar. El subrayado es solo un punto destacado, no hay ningún "enlace" involucrado.

El mancomando normal es solo un formateador de texto. De hecho, el mancomando ni siquiera muestra el texto, mansimplemente formatea la información almacenada en el archivo de la página de manual [1] y envía la salida formateada a otro programa (generalmente less) que muestra la salida formateada en la pantalla. Estos programas de visualización no tienen concepto de enlaces.

Hay algunos lectores de documentación especiales que podrían ver un formato como ese y hacer una suposición educada de que tal resaltado podría indicar que hay una página de manual relacionada que podría abrirse y crear un enlace, pero no sé cuales hacen Tal vez pinfo?

Si desea un formato web con hipervínculos, puede encontrar casi cualquier página de manual de UNIX en línea con enlaces agregados. Intente escribir man [anything]en google y seguramente obtendrá uno en los primeros dos aciertos.

En el caso de su ejemplo, el resaltado visual es una pista de que ese es otro nombre de programa que tiene su propia página de manual que puede extraer fácilmente. Tratar man 1 top. El 1 indica la sección de las páginas de manual para buscar. Vea esta pregunta para obtener una explicación de las secciones: ¿Qué significan los números en una página de manual?


[1] Si abre el manarchivo de página en un editor de texto, verá la manpágina sin formato que no está formateada para facilitar la lectura. La manpágina sin procesar se escribe en un lenguaje de marcado llamado troff. Para obtener más información sobre troffy cómo escribir una manpágina, consulte: https://liw.fi/manpages/ .

Caleb
fuente
¿Alguna idea de por qué es man 1 top? Quiero decir que debería ser algo así ps 1 topporque encontré el enlace en la página del manual ps. "man 1 top" no tiene sentido para mí. Por favor aclarar
its_me
También hay algunos recursos que hacen que las páginas man estén disponibles en Internet, con referencias reemplazadas por href, a las que se puede hacer clic.
Gabe.
1
Si desea seguir el top(1)"enlace", debe abrir topla página del manual desde la primera sección. Para obtener más información sobre las secciones, vea man (1). ps 1 topno tiene ningún sentido, ya que solo ejecutará pscomandos con algunos parámetros extraños.
rvs
2
@Aahan es man 1 top porque quieres ver la página del manual para el comando top en la primera sección de las páginas del manual en línea. La parte superior de referencia (1) significa exactamente eso, la parte superior de la primera sección de las páginas del manual. Para ver eso, escriba "man 1 top" en el indicador. Ver "hombre hombre"
gabe.
1
@Aaran: Las "secciones del manual cubren diferentes temas. La Sección 1 son los comandos del usuario (cosas que escribe en la solicitud) la sección 2 son las llamadas al sistema, etc. Algunas cadenas aparecen en más de una sección. En la máquina en la que estoy ahora readlinkaparece en la sección 1 y en la sección 2 y printfen las secciones 1 y 3. Si solo escribe man command, man intenta secciones en orden numérico y muestra lo primero que encuentra, o puede ser específico con man # commandlo que debe hacer para obtener la documentación para la readlinkllamada del sistema.
dmckee
12

Esta es una respuesta muy tardía, pero use w3mman. w3mman es el localizador manual del sistema de w3m.

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

Puede probarlo instalando el paquete w3m. Creo que este paquete está registrado en los repositorios de software de la mayoría de las principales distribuciones de Linux / UNIX y Cygwin.

akawaguc
fuente
1
Una respuesta tardía que agrega alguna respuesta a la pregunta que aún no se menciona, ¡nunca es un problema! ¡Bienvenido a Unix y Linux StackExchange!
Bernhard
w3mmantambién se proporciona con la w3minstalación predeterminada de Macports . Es genial :) ¡Gracias!
sampablokuper
8

Permíteme intentar interpretar tu pregunta un poco más en un sentido en el que trato de seguir tu flujo de trabajo. Lo que probablemente le gustaría tener es una combinación de teclas dentro de una manpágina que lo lleve directamente a los comandos subrayados sobre los que está leyendo. Entonces, no tener que instalar otra cosa, ni abrir otra consola y olvidar la sintaxis exacta, por ejemplo.

Esta solución más simple es el signo de exclamación (si está utilizando lesspara mostrar las páginas de manual) y desea ir al subrayado top:

!man top

O

!man 1 top

Deberá cerrarlos presionando qvarias veces. Tenga en cuenta también que esto no funcionará si LESSSECURE=1se configura como una variable ambiental que haría que se ejecute lessen modo seguro y no le permita usar !. Te dirá algo como "Comando no disponible".

Anne van Rossum
fuente
1

Aunque w3mman es una solución para seguir enlaces, no usa toda la pantalla (al menos en ubuntu 12.10)

Prefiero usar:

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

agregue el último comando a ~ / .bash_aliases o un script de inicio similar para obtenerlo en cada sesión.

El -P w3m se debe a que el primer navegador para hman es lynx o sensible-browser pero prefiero w3m

hman es una herramienta incluida en html2man. Ver esto

Si salir con confirmación es molesto para usted, en cuanto a mí, use esto

albfan
fuente
Mi error, el paquete debe ser html2man
albfan
1

Específicamente para Ubuntu, hay Yelp. Está instalado de manera predeterminada y puede mostrar páginas de manual, aunque la invocación para hacerlo no es la misma que la del mancomando; un alias o una función de shell pueden funcionar alrededor del último punto (depende de su shell).

yelp 'man:exit'

Se establecerá de forma predeterminada en una sección de una manera que no sé. Recordatorio: para obtener la lista de secciones para un tema manual, use whatis, como en whatis exit.

Para solicitar a Yelp que muestre una página de manual de una sección específica, digamos 2, haga:

yelp 'man:exit(2)'

Problemas: yelp tiene errores y prepárate para obtener múltiples errores al invocarlo desde la línea de comandos. También, un alias o una función de shell personalizada pueden ayudar a redirigir todos los errores a/dev/null

Hibou57
fuente
1

Como dijeron, no fue diseñado para eso.

Puede usar info many luego presionar enter una vez que esté en la sección VER TAMBIÉN en su artículo.

info - leer documentos de información

senderos binarios
fuente
1

Tengo un (par de) hack (es).

piratear 1

Ponga esto en su ~ / .bashrc o su ~ / .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
}

Captura de pantalla..

manual en captura de pantalla vim

Asciinema ..

https://asciinema.org/a/130131

Ahora..

  1. cuando escribe man vim, por ejemplo, se abrirá esta página de manual en vim

    • si escribe man man vim, por ejemplo, primero abrirá manel manual y después de salir de vim, abrirá vimel manual
  2. cuando presiona K(eso es mayúscula k) cuando está en otra página de manual en la parte inferior (la sección VER TAMBIÉN ), saltará a este manual (desafortunadamente dentro de un buscapersonas menos , esto es porque lo hemos hecho let no_man_maps = 1; si no haga eso, entonces vim forzará qa ser :qy no podrá grabar una macro fácilmente, y vim puede comportarse de manera extraña de otras maneras).

    • al salir de este segundo manual que ha ingresado, volverá al manual anterior que estaba viendo
  3. obtienes resaltado de sintaxis muy bonito ya que has cargado ftplugin / man.vim y el ft está (automáticamente) configurado en man.

  4. puede copiar y pegar, navegar libremente en vim e incluso modificar el búfer y :w ~/usefulfile. Puede hacer todo lo que normalmente haría en vim, incluidas las macros de grabación, tirar al portapapeles con "+y(si lo tiene +clipboard), etc., etc.

Lo encuentro mucho más agradable que menos .

El único inconveniente menor que he encontrado (que todavía existe si usa menos como buscapersonas) es si desea tener múltiples manuales abiertos en una sesión de vim. Realmente no veo una manera de hacer esto.

Algunas notas

  1. si intenta guardar el búfer, obtendrá E382: Cannot write, 'buftype' option is set

    • Me gusta que no puedas guardar, ya que evita guardarlo accidentalmente
  2. todavía puedes guardar como :w /tmp/man.man

    • si lo guarda con una .manextensión, abrirlo configurará el tipo de archivo manpara usted
    • si no lo guarda con una .manextensión, simplemente puede configurar el ft manejecutando:set ft=man
  3. si necesita hacer cosas al abrir páginas man, puede usar autocmd VimEnter *.~ echom 'hooray, we are using vim for man pages!', por ejemplo.

  4. He puesto lo siguiente en mi vimrc para poder presionar Kpara intentar abrir el manual, y luego presionar Gpara volver al manual anterior:


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

piratear 2

pon esto en tu ~ / .bashrc o ~ / .zshrc

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

Captura de pantalla..

múltiples manuales en vim

Asciinema ..

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

Esto resuelve el problema que piratea 1 y menos cara (ahora puede ver varios manuales en un búfer), pero es menos elegante.

Notas:

  1. IMPORTANTE si quieres que hack2 funcione, entonces debes ponerlo :let no_man_maps = 1en tu ~/.vimrc. Esto se debe a que vim generará .../vim80/man.vimy qserá reasignado a la fuerza :q.

  2. hay más limpieza involucrada (ahora almacena todos los manuales en /tmp/*.man )

  3. ahora, sin embargo, puede ver varias páginas de manual en una sesión, como se indicó anteriormente

  4. si presiona K, aún abrirá una nueva sesión de vim, sin embargo

    • si lo desea, puede vincular un autocmd (usando un autocmd como el anterior) para hacer algo así autocmd VimEnter man.~ nnoremap <buffer> K :execute "normal! Byt(:silent !man \<c-r>\" > /tmp/\<c-r>\".man\<cr>:edit /tmp/\<c-r>\".man\<cr>"o algo loco como eso ( no probado )
Dylan
fuente
disculpas por el asciinema mal coloreado. Los colores se ven mucho mejor en mi terminal.
Dylan
0

Pude usar el --htmlargumento para manabrirlo en el navegador definido por la variable de entorno $ BROWSER, así que:

BROWSER=google-chrome man ps --help

Estoy usando Fedora. No estoy seguro si esto funciona para su distribución, por favor pruebe e informe en los comentarios.

tutuDajuju
fuente
La opción parece reconocida en Ubuntu 12.04, pero falla.
Hibou57
OK, el paquete groffnecesita ser instalado. El groffcomando puede estar allí mientras que el paquete del mismo nombre no lo está (el comando viene groff-base, no el groffpaquete completo ). Yo sí man --html="surf file%c//%s" <command>, y está bien. Sin embargo, existe un hipertexto muy limitado: - /.
Hibou57