Come seguire i collegamenti nelle pagine man di linux?


92

C'è un modo per seguire i link menzionati in una pagina man? Ad esempio, ecco la pagina man di ps; come accedo al collegamento contrassegnato in rosso?

Schermata della pagina man ps


1
Inoltre, vedo che man is an interface to the on-line reference manualsciò (se non sbaglio) significa che dovrebbe essere in grado di estrarre tutte le informazioni da qualche pagina Web su Internet, giusto? Quindi, qualcuno ha la minima idea di cosa sia il link http: //?
its_me,

10
Qui "on-line" significa "sul computer" (al contrario di "su carta"), non "su Internet".
Gilles,

1
"On-Line": potresti ricordare quei giochi Quest "Adventure" per PC che sono stati sviluppati da una società (allora) di nome Sierra On-Line. pagine man: il modo migliore per sfogliare le pagine man è usare l'editor. In questo modo, navigando, cercando (ecc.) Il testo sarà così fluido come ogni scorciatoia è nella tua memoria muscolare da molto tempo. Inoltre, supponi di lavorare su un progetto di programmazione: potresti copiare da pagine man nel tuo codice. Nient'altro che interazione senza soluzione di continuità. Dai un'occhiata a questo e al mio commento alla risposta di @Gilles .
Emanuel Berg

Risposte:


52

Le pagine man risalgono alla prima edizione di Unix . Mentre l' ipertesto era stato inventato, era ancora nella prima infanzia; la rete era lontana due decenni e il manuale era un vero libro stampato, spesso con un comando per pagina se si adattava (ecco perché venivano chiamati pagine).

Il formato utilizzato per le pagine di manuale si è evoluto in qualche modo da allora, ma la maggior parte delle pagine non sono realmente progettate per l'ipertesto e il manprogramma predefinito non lo supporta (è solo un visualizzatore di testo semplice, con hack per supportare una formattazione di base). Esistono tuttavia programmi di visualizzazione delle pagine man che ricostruiscono alcuni collegamenti ipertestuali, principalmente collegamenti ad altre pagine man, che sono tradizionalmente scritte nel modulo in man(1)cui si mantrova il nome della pagina man ed 1è il numero di sezione :

  • tkman , un visualizzatore di pagine man GUI con collegamenti ipertestuali
  • WoMan ( wiki , man comparsion , precedentemente ), un browser di pagine man per Emacs, che supporta i collegamenti ipertestuali
  • man2html , un convertitore da uomo a HTML (più un browser web per leggere il risultato)

Puoi sfogliare le pagine di manuale di diversi sistemi operativi, convertiti in HTML da man2htmlo strumenti simili, su un numero di siti online, ad esempio:

Qualche tempo dopo che le pagine man sono diventate il formato di documentazione stabilito su unix e qualche tempo prima che fosse inventata la rete, il progetto GNU ha introdotto il formato di documentazione delle informazioni , più avanzato di man mentre si atteneva al semplice markup progettato per terminali di testo. La principale innovazione delle informazioni rispetto all'uomo era quella di avere una documentazione multi-pagina con collegamenti ipertestuali ad altre pagine. Le informazioni sono ancora il formato di documentazione preferito per i progetti GNU, sebbene la maggior parte delle pagine di informazioni siano generate da una fonte Texinfo (o talvolta altri formati) che possono anche generare HTML. Quando esiste la documentazione informativa per un programma, è spesso il manuale principale, mentre le pagine man contengono solo informazioni di base sugli argomenti della riga di comando.


5
Bella risposta! Vale anche la pena ricordare che esiste un'altra modalità per le pagine man in Emacs, quella (almeno io) ottenuta semplicemente M-x man(e lo C-h v mode-nameè Man): almeno in un aspetto, è superiore a WoManperché visualizza le tabelle ( screenshot ). Naturalmente, è anche hyperlink.
Emanuel Berg

1
L'interfaccia utente del programma info sembra sbagliata e controintuitiva. Non ho visto nessuno usarlo.
Pavel Šimerda,

@ PavelŠimerda> L'interfaccia utente del programma informativo sembra sbagliata e controintuitiva. <Emm, rispetto a cosa? A meno (1) (che è il pager predefinito per man (1) in GNU) - quella cosa, in cui devi ricordare come scorrere indietro , poiché <backspace> non è associato (e <pgup> potrebbe non funzionare affatto) ? La chiave primaria è b, in questo modo. Per un utente di quale paradigma di interfaccia potrebbe essere intuitivo?
Dmitry Alexandrov,

@ PavelŠimerda> Non ho visto nessuno usarlo. <Usare sempre informazioni (1) per le pagine man lettura quando viene però bloccato in un terminale di testo per il motivo esatto, che a differenza di meno (1) che non converte muti page(N)collegamenti in collegamenti ipertestuali. È stato abbastanza sorpreso che non sia stato menzionato nella risposta di Gilles in quella qualità.
Dmitry Alexandrov,

37

Prima di tutto, non è un collegamento. È solo una sottolineatura. Le pagine man sono solo documenti di testo con un po 'di formattazione semplice che un terminale può gestire. La sottolineatura è solo un punto culminante, non vi è alcun "collegamento" coinvolto.

Il normale mancomando è solo un formattatore di testo. In effetti il mancomando non visualizza nemmeno il testo, manma formatta solo le informazioni memorizzate nel file della pagina man [1] e invia l'output formattato a un altro programma (di solito less) che visualizza l'output formattato sullo schermo. Questi programmi di visualizzazione non hanno alcun concetto di collegamenti.

Ci sono alcuni lettori di documentazione speciale che potrebbero essere in grado di guardare alla formattazione in quel modo e fare un'ipotesi colta che un tale punto culminante potrebbe indicare che esiste una pagina man correlata che potrebbe essere tirata su e creare un collegamento, ma non lo so quali fanno. Forse pinfo?

Se vuoi una formattazione simile al web con i collegamenti ipertestuali puoi trovare quasi tutte le pagine man di UNIX online con i collegamenti aggiunti. Prova a digitare man [anything]su Google e quasi sicuramente ne otterrai uno nei primi due successi.

Nel caso del tuo esempio, l'evidenziazione visiva è un indizio del fatto che quello è un altro nome di programma che ha la sua pagina man che puoi facilmente estrarre. Prova man 1 top. L'1 indica la sezione delle pagine man in cui cercare. Vedi questa domanda per una spiegazione delle sezioni: Cosa significano i numeri in una pagina man?


[1] Se apri il manfile di paging in un editor di testo, vedrai la manpagina non formattata per una facile lettura. La manpagina non elaborata è scritta in un linguaggio di markup chiamato troff. Per ulteriori informazioni troffe su come scrivere una manpagina, consultare: https://liw.fi/manpages/ .


Qualche idea sul perché lo sia man 1 top?? Voglio dire, dovrebbe essere qualcosa del genere ps 1 topperché ho trovato il link nella pagina man di ps. "man 1 top" non ha senso per me. Si prega di precisare.
its_me,

Ci sono anche alcune risorse che rendono disponibili le pagine man su Internet, con riferimenti sostituiti da href's, che sono cliccabili.
gabe.

1
Se si desidera seguire il top(1)"collegamento", è necessario aprire topla pagina di manuale dalla prima sezione. Per maggiori informazioni sulle sezioni vedi man (1). ps 1 topnon ha alcun senso, dal momento che eseguirai il pscomando con alcuni parametri strani.
camper

2
@Aahan è man 1 top perché vuoi vedere la pagina di manuale per il comando top nella prima sezione delle pagine di manuale online. Il riferimento in alto (1) significa proprio questo, in alto nella prima sezione delle pagine del manuale. Per vederlo, digita "man 1 top" al prompt. Vedi "man man"
gabe.

1
@Aaran: Le "sezioni del manuale trattano argomenti diversi. La sezione 1 è comandi dell'utente (elementi che digiti al prompt) la sezione 2 è le chiamate di sistema e così via. Alcune stringhe appaiono in più di una sezione. Sulla macchina sono su ora readlinkappare nella sezione 1 e nella sezione 2 e printfnelle sezioni 1 e 3. Se digiti man command, man cerca le sezioni in ordine numerico e visualizza il primo che trova, oppure puoi essere specifico con man # command, che devi fare per ottenere la documentazione per la readlinkchiamata di sistema.
dmckee,

12

Questa è una risposta molto tardi, ma usa w3mman. w3mman è il cercapersone manuale del sistema di w3m.

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

Puoi provarlo installando il pacchetto w3m. Credo che questo pacchetto sia registrato nei repository software della maggior parte delle principali distribuzioni Linux / UNIX e Cygwin.


1
Una risposta tardiva che aggiunge una risposta alla domanda che non è ancora stata menzionata, non è mai un problema! Benvenuto in Unix & Linux StackExchange!
Bernhard,

w3mmanviene inoltre fornito con l' w3minstallazione predefinita di Macports . È fantastico :) Grazie!
sampablokuper,

8

Vorrei provare a interpretare la tua domanda un po 'di più in un senso in cui provo a seguire il tuo flusso di lavoro. Ciò che probabilmente vorresti avere è una combinazione di tasti all'interno di una manpagina che ti porta direttamente ai comandi sottolineati di cui stai leggendo. Quindi, non dover installare qualcos'altro, né aprire un'altra console e dimenticare l'esatta sintassi, ad esempio.

Questa soluzione più semplice è il punto esclamativo (se si utilizza lessper visualizzare le pagine man) e si desidera andare al sottolineato top:

!man top

O

!man 1 top

Dovrai chiuderli tutti premendo qpiù volte. Si noti inoltre che questo non funzionerà se LESSSECURE=1impostato come variabile ambientale che verrebbe eseguito lessin modalità protetta e non consentirebbe di utilizzarlo !. Ti dirà qualcosa come "Comando non disponibile".


1

Sebbene w3mman sia una soluzione per seguire i collegamenti, non usa tutto lo schermo (almeno su Ubuntu 12.10)

Preferisco usare:

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

aggiungi l'ultimo comando a ~ / .bash_aliases o uno script di avvio simile per ottenerlo in ogni sessione.

Il w3m -P è perché primo browser a hman è lynx o sensibile browser ma preferisco w3m

hman è uno strumento in bundle su html2man. Vedi questo

Se uscire con la conferma è fastidioso per te, per me è usare questo


Errore mio, il pacchetto deve essere html2man
albfan

1

In particolare per Ubuntu, c'è Yelp. È installato di default ed è di default in grado di visualizzare pagine di manuale, anche se l'invocazione per farlo, non è la stessa di quella del mancomando; un alias o una funzione di shell possono aggirare l'ultimo punto (dipende dalla shell).

yelp 'man:exit'

L'impostazione predefinita è una sezione in un modo che non conosco. Promemoria: per ottenere l'elenco delle sezioni per un argomento manuale, utilizzare whatis, come in whatis exit.

Per richiedere a Yelp di visualizzare una pagina di manuale da una sezione specifica, ad esempio 2, procedi come segue:

yelp 'man:exit(2)'

Problemi: yelp ha dei bug ed è pronto per ottenere più errori di output quando viene richiamato dalla riga di comando. Inoltre, un alias o una funzione shell personalizzata possono aiutare a reindirizzare tutti gli errori/dev/null


1

Come hanno detto, non è stato progettato per questo.

Puoi usare info mane poi premere invio una volta che sei nella sezione VEDI ANCHE sul tuo oggetto.

info: leggi i documenti informativi


1

Ho un (paio) di hack.

hack 1

Inseriscilo nel tuo ~ / .bashrc o nel tuo ~ / .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
}

Immagine dello schermo..

manuale nello screenshot di vim

Asciinema ..

https://asciinema.org/a/130131

Adesso..

  1. quando si digita man vim, ad esempio, si aprirà questa pagina man in vim

    • se digiti man man vim, per esempio, aprirà prima manil manuale e dopo aver chiuso vim, aprirà vimil manuale
  2. quando premi K(che è la capitale k) quando ti trovi in ​​un'altra pagina man in fondo (la sezione VEDERE ANCHE ), passerai a questo manuale (purtroppo all'interno di un cercapersone meno - questo è perché abbiamo let no_man_maps = 1; se non lo fai fallo, allora vim costringerà qad esserlo :qe non sarai in grado di registrare facilmente una macro, e vim potrebbe comportarti in modo strano in altri modi).

    • uscendo da questo secondo manuale che hai inserito ti riporterà al manuale precedente che stavi visualizzando
  3. ottieni un'evidenziazione della sintassi molto carina poiché hai caricato ftplugin / man.vim e ft è (automaticamente) impostato su man.

  4. puoi copiare e incollare, navigare liberamente in vim e persino modificare il buffer e :w ~/usefulfile. Puoi fare tutto ciò che normalmente faresti in vim, inclusi i record di macro, trascina negli appunti con "+y(se hai +clipboard), ecc. Ecc.

Lo trovo molto più bello di meno .

L'unica battuta d'arresto minore che ho trovato (che esiste ancora se usi meno come cercapersone) è se vuoi avere più manuali aperti in una sessione vim. Non vedo davvero un modo per farlo.

Alcune note:

  1. se provi a salvare il buffer, otterrai E382: Cannot write, 'buftype' option is set

    • Mi piace il fatto che non è possibile salvare in quanto impedisce di salvarlo accidentalmente
  2. puoi ancora salvare come :w /tmp/man.man

    • se lo salvi con .manun'estensione, aprendolo imposterai il tipo di file manper te
    • se non lo salvi con .manun'estensione, puoi semplicemente impostare ft maneseguendolo:set ft=man
  3. se devi fare delle cose quando apri le pagine man puoi usare autocmd VimEnter *.~ echom 'hooray, we are using vim for man pages!', per esempio.

  4. Ho inserito quanto segue nel mio vimrc in modo da poter premere Kper provare ad aprire il manuale, quindi premere Gper tornare al manuale precedente:


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

hack 2

mettilo nel tuo ~ / .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[@]}"
}

Immagine dello schermo..

più manuali in vim

Asciinema ..

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

Questo risolve il problema che hackera 1 e meno faccia (ora puoi visualizzare più manuali in un buffer), ma è meno elegante.

Appunti:

  1. IMPORTANTE se vuoi che hack2 funzioni, devi inserire il :let no_man_maps = 1tuo ~/.vimrc. Questo perché vim si procurerà .../vim80/man.vime qverrà forzatamente rimappato :q.

  2. c'è più pulizia in gioco (ora memorizzi ogni manuale in /tmp/*.man )

  3. ora puoi, tuttavia, visualizzare più pagine man in una sessione, come notato sopra

  4. se premi K, aprirai comunque una nuova sessione di vim

    • se vuoi puoi associare un autocmd (usando un autocmd come quello sopra) per fare qualcosa di simile 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 qualcosa di folle come quello ( non testato )

ci scusiamo per gli asciinema di colore mal colorato. I colori sembrano molto più belli nel mio terminale.
Dylan,

0

Sono stato in grado di utilizzare l' --htmlargomento per manaprirlo nel browser definito dalla variabile d'ambiente $ BROWSER, quindi:

BROWSER=google-chrome man ps --help

Sto usando Fedora. Non sei sicuro che funzioni per la tua distribuzione, per favore prova e segnala nei commenti.


L'opzione sembra riconosciuta su Ubuntu 12.04, ma non riesce.
Hibou57,

OK, il pacchetto groffdeve essere installato. Il groffcomando potrebbe essere lì mentre il pacchetto con lo stesso nome non lo è (il comando viene fornito groff-base, non il groffpacchetto completo ). Lo faccio man --html="surf file%c//%s" <command>, e va bene. Vi è però un ipertesto molto molto limitato: - /.
Hibou57,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.