Bene, questo è il mio modo molto personale di leggere le manpage:
Il manpager
Quando si apre una pagina di manuale utilizzando il man
comando, verrà visualizzato l'output / reso dal less
o more
comandi, o qualsiasi altro comando che verrà impostato come cercapersone (MANPAGER).
Se stai usando Linux probabilmente ti viene fornita la tua infrastruttura man già configurata per l'uso /usr/bin/less -is
(a meno che tu non abbia installato una minima distribuzione) come man(1)
, spiega nella sua sezione Opzioni:
-P pager
Specify which pager to use. This option overrides the MANPAGER environment variable,
which in turn overrides the PAGER variable. By default, man uses /usr/bin/less -is.
Su FreeBSD e OpenBSD è solo una questione di modifica della MANPAGER
variabile d'ambiente poiché la utilizzeranno principalmente more
, e alcune funzionalità come la ricerca e l'evidenziazione del testo potrebbero mancare.
C'è una buona risposta alla domanda di quali differenze more
, less
e most
sono qui (mai usato most
). La possibilità di scorrere all'indietro e scorrere in avanti per pagina con Spaceo in entrambi i modi per linea con ↓o ↑(anche, usando le vi
associazioni je k) è essenziale durante la navigazione delle pagine man. Premere hdurante l'utilizzo less
per visualizzare il riepilogo dei comandi disponibili.
Ed è per questo che ti consiglio di usare less
come cercapersone. less
hanno alcune funzionalità essenziali che verranno utilizzate durante questa risposta.
Come viene formattato un comando?
Convenzioni di utilità : The Open Group Base Specifiche Numero 7 - IEEE Std 1003.1, 2013 Edition. Dovresti visitare quel link prima di provare a capire una manpage. Questo riferimento online descrive la sintassi degli argomenti delle utility standard e introduce la terminologia utilizzata in POSIX.1-2017 per descrivere gli argomenti elaborati dalle utility. Questo ti indirizzerà anche indirettamente sul significato reale di parole come parametri, argomenti, opzione argomento ...
Il capo di qualsiasi pagina man ti sembrerà meno enigmatico dopo aver compreso la notazione delle convenzioni di utilità:
utility_name[-a][-b][-c option_argument]
[-d|-e][-f[option_argument]][operand...]
Tieni a mente cosa vuoi fare.
Quando hai fatto le tue ricerche su di xargs
te, l'hai fatto per un pubblico, giusto? Avevi un'esigenza specifica di leggere l'output standard ed eseguire i comandi in base a tale output.
Ma quando non so quale comando voglio?
Usa man -k
o apropos
(sono equivalenti). Se non so come trovare un file: man -k file | grep search
. Leggi le descrizioni e trova quella più adatta alle tue esigenze. Esempio:
apropos -r '^report'
bashbug (1) - report a bug in bash
df (1) - report file system disk space usage
e2freefrag (8) - report free space fragmentation information
filefrag (8) - report on file fragmentation
iwgetid (8) - Report ESSID, NWID or AP/Cell Address of wireless network
kbd_mode (1) - report or set the keyboard mode
lastlog (8) - reports the most recent login of all users or of a given user
pmap (1) - report memory map of a process
ps (1) - report a snapshot of the current processes.
pwdx (1) - report current working directory of a process
uniq (1) - report or omit repeated lines
vmstat (8) - Report virtual memory statistics
Apropos funziona con le espressioni regolari di default, ( man apropos
, leggi la descrizione e scopri cosa -r
fa), e in questo esempio sto cercando ogni manpage dove la descrizione inizia con "report".
Per cercare informazioni relative alla lettura dell'elaborazione standard input / output e al raggiungimento xargs
come opzione possibile:
man -k command| grep input
xargs (1) - build and execute command lines from standard input
Leggere sempre DESCRIPTION
prima di iniziare
Prenditi un po 'di tempo e leggi la descrizione. Leggendo semplicemente la descrizione del xargs
comando impareremo che:
xargs
legge da STDIN ed esegue il comando necessario. Questo significa anche che dovrai avere una certa conoscenza di come funziona l'input standard e di come manipolarlo attraverso i comandi da pipe a chain
- Il comportamento predefinito è agire come
/bin/echo
. Questo ti dà un piccolo suggerimento che se devi incatenarne più di uno xargs
, non devi usare l'eco per stampare.
- Abbiamo anche appreso che i nomi dei file unix possono contenere spazi vuoti e righe, che questo potrebbe essere un problema e l'argomento
-0
è un modo per impedire che le cose esplodano usando separatori di caratteri null. La descrizione avverte che il comando utilizzato come input deve supportare anche questa funzione e che GNU lo find
supporta. Grande. Usiamo un sacco di trovare con xargs
.
xargs
si arresterà se viene raggiunto lo stato di uscita 255.
Alcune descrizioni sono molto brevi e ciò è generalmente dovuto al fatto che il software funziona in modo molto semplice. Non pensare nemmeno di saltare questa parte della manpage ;)
Altre cose a cui prestare attenzione ...
Sai che puoi cercare i file usando find
. Ci sono un sacco di opzioni e se guardi solo a SYNOPSIS
, sarai sopraffatto da quelli. È solo la punta dell'iceberg. Escludendo NAME
, SYNOPSIS
e DESCRIPTION
, si avrà le seguenti sezioni:
AUTHORS
: le persone che hanno creato o assistito nella creazione del comando.
BUGS
: elenca tutti i difetti noti. Potrebbero essere solo limiti di implementazione.
ENVIRONMENT
: Aspetti della shell che potrebbero essere interessati dal comando o variabili che verranno utilizzate.
EXAMPLES
oppure NOTES
: autoesplicativo.
REPORTING BUGS
: Chi dovrai contattare se trovi bug su questo strumento o nella sua documentazione.
COPYRIGHT
: Persona che ha creato e dichiarazioni di non responsabilità sul software. Tutto in relazione con la licenza del software stesso.
SEE ALSO
: Altri comandi, strumenti o aspetti lavorativi correlati a questo comando e che non possono essere adattati a nessuna delle altre sezioni.
Molto probabilmente troverai informazioni interessanti sugli aspetti che desideri di uno strumento nella sezione esempi / note.
Esempio
Sui seguenti passi prenderò find
come esempio, poiché i suoi concetti sono "più semplici" che xargs
da spiegare (un comando trova i file e l'altro si occupa dello stdin e dell'esecuzione pipeline di altri output dei comandi). Facciamo solo finta di non sapere nulla (o molto poco) di questo comando.
Ho un problema specifico che è: devo cercare ogni file con l' .jpg
estensione e con 500 KiB (KiB = 1024 byte, comunemente chiamato kibibyte), o di dimensioni maggiori all'interno di una cartella del server ftp.
In primo luogo, aprire il manuale: man find
. Il SYNOPSIS
è sottile. Cerchiamo cose all'interno del manuale: digita /più la parola che vuoi ( size
). Indicizzerà molte voci -size
che contano dimensioni specifiche. Rimasto bloccato. Non so come cercare con "più di" o "meno di" una data dimensione, e l'uomo non me lo mostra.
Proviamo e cerchiamo la voce successiva trovata colpendo n. OK. Qualcosa trovato interessante: find
\( -size +100M -fprintf /root/big.txt %-10s %p\n \)
. Forse questo esempio ci sta mostrando che con -size +100M
esso troverà file con almeno 100 MB. Come posso confermare? Andare alla testa della manpage e cercare altre parole.
Ancora una volta, proviamo la parola greater
. Premendo gci porterà alla testa della manpage. /greater
e la prima voce è:
Numeric arguments can be specified as
+n for **greater** than n,
-n for less than n,
n for exactly n.
Suona alla grande. Sembra che questo blocco del manuale abbia confermato ciò che sospettavamo. Tuttavia, ciò non si applica solo alle dimensioni dei file. Si applicherà a tutti quelli n
che possono essere trovati in questa pagina di manuale (come diceva la frase: "Gli argomenti numerici possono essere specificati come").
Buono. Troviamo un modo per filtrare in base al nome: g /insensitive
. Perché? Insensibile? Wtf? Abbiamo un server ftp ipotetica, in cui la gente "che altro OS" potrebbero dare un nome di file con le estensioni come .jpg
, .JPG
, .JpG
. Questo ci porterà a:
-ilname pattern
Like -lname, but the match is case insensitive. If the -L
option or the -follow option is in effect, this test returns
false unless the symbolic link is broken.
Tuttavia, dopo aver cercato lname
, vedrai che questo cercherà solo collegamenti simbolici. Vogliamo file reali. La prossima voce:
-iname pattern
Like -name, but the match is case insensitive. For example, the
patterns `fo*' and `F??' match the file names `Foo', `FOO',
`foo', `fOo', etc. In these patterns, unlike filename expan‐
sion by the shell, an initial '.' can be matched by `*'. That
is, find -name *bar will match the file `.foobar'. Please note
that you should quote patterns as a matter of course, otherwise
the shell will expand any wildcard characters in them.
Grande. Non ho nemmeno bisogno di leggere -name
per vedere che -iname
è la versione insensibile alle maiuscole di questo argomento. Consente di assemblare il comando:
Comando: find /ftp/dir/ -size +500k -iname "*.jpg"
Cosa è implicito qui: la consapevolezza che il carattere jolly ?
rappresenta "qualsiasi carattere in una singola posizione" e *
rappresenta "zero o più di qualsiasi carattere". Il -name
parametro ti fornirà un riepilogo di questa conoscenza.
Suggerimenti che si applicano a tutti i comandi
Alcune opzioni, mnemoniche e "stile di sintassi" viaggiano attraverso tutti i comandi facendoti guadagnare un po 'di tempo senza dover aprire affatto la manpage. Quelli sono appresi dalla pratica e i più comuni sono:
- In generale,
-v
significa verboso. -vvv
è una variante "molto molto dettagliata" su alcuni software.
- Seguendo lo standard POSIX, generalmente è possibile impilare un trattino di argomenti. Esempio:
tar -xzvf
, cp -Rv
.
- Generalmente
-R
e / o -r
significa ricorsivo.
- Quasi tutti i comandi hanno un breve aiuto con l'
--help
opzione.
--version
mostra la versione di un software.
-p
, su copia o sposta utility significa "preserva le autorizzazioni".
-y
significa SÌ o "procedere senza conferma" nella maggior parte dei casi.
Si noti che quanto sopra non è sempre vero però. Ad esempio, l' -r
interruttore può significare cose molto diverse per software diverso. È sempre una buona idea controllare e assicurarsi che un comando possa essere pericoloso, ma si tratta di valori predefiniti comuni.
Valori predefiniti dei comandi.
Al pezzo di cercapersone di questa risposta, abbiamo visto che less -is
è il cercapersone di man
. Il comportamento predefinito dei comandi non viene sempre mostrato in una sezione separata nelle pagine man o nella sezione più in alto.
Dovrai leggere le opzioni per scoprire i valori predefiniti, o se sei fortunato, digitando /pager
ti porterà a quelle informazioni. Ciò richiede anche che tu conosca il concetto del cercapersone (software che scorre la manpage), e questa è una cosa che acquisirai solo dopo aver letto molte manpage.
Perché è importante? Questo aprirà la tua percezione se trovi differenze sul comportamento di scorrimento e colore durante la lettura man(1)
su Linux ( less -is
cercapersone) o FreeBSD man(1)
per esempio.
E la SYNOPSIS
sintassi?
Dopo aver ottenuto tutte le informazioni necessarie per eseguire il comando, è possibile combinare opzioni, opzioni-argomenti e operandi in linea per completare il lavoro. Panoramica dei concetti:
- Le opzioni sono le opzioni che determinano un comportamento del comando. " Fai questo " " Non farlo " o " agisci in questo modo ". Spesso chiamato switch.
- Gli argomenti-opzione sono usati nella maggior parte dei casi quando un'opzione non è binaria (on / off) come
-t
su mount, che specifica il tipo di un filesystem ( -t iso9660
, -t ext2
). " Fallo ad occhi chiusi " o "dai da mangiare agli animali, ma solo ai leoni ". Chiamato anche argomenti.
- Gli operandi sono cose su cui vuoi che quel comando agisca. Se lo usi
cat file.txt
, l'operando è un file all'interno della tua directory corrente e il suo contenuto verrà mostrato su STDOUT
. ls
è un comando in cui un operando è facoltativo. I tre punti dopo l'operando indicano implicitamente che cat
possono agire contemporaneamente su più operandi (file). Potresti notare che alcuni comandi hanno impostato il tipo di operando che utilizzerà. Esempio:cat [OPTION] [FILE]...
Articoli correlati sulla sinossi:
Quando questo metodo non funzionerà?
- Manpage che non hanno esempi
- Manpage in cui le opzioni hanno una breve spiegazione
- Quando si utilizza parole chiave generiche come
and
, to
, for
all'interno delle pagine di manuale
- Manpage non installate. Sembra ovvio ma, se non hai installato
lftp
(e le sue manpage) non puoi sapere che è un'opzione adatta come client ftp più sofisticato eseguendoman -k ftp
In alcuni casi gli esempi saranno piuttosto semplici e dovrai eseguire alcune esecuzioni del tuo comando per testare, o nel peggiore dei casi, Google.
Altro: linguaggi di programmazione ed i suoi moduli:
Se stai programmando o semplicemente creando script, tieni presente che alcune lingue hanno i propri sistemi manpage, come perl
( perldocs
), python ( pydocs
), ecc., Che contengono informazioni specifiche su metodi / funzioni, variabili, comportamento e altre informazioni importanti sul modulo stai cercando di usare e imparare. Mi è stato utile quando stavo creando uno script per scaricare e-mail IMAP non lette usando il perl Mail::IMAPClient
modulo.
Dovrai capire quelle specifiche manpage usando man -k
o cercando online. Esempi:
[root@host ~]# man -k doc | grep perl
perldoc (1) - Look up Perl documentation in Pod format
[root@host ~]# perldoc Mail::IMAPClient
IMAPCLIENT(1) User Contributed Perl Documentation IMAPCLIENT(1)
NAME
Mail::IMAPClient - An IMAP Client API
SYNOPSIS
use Mail::IMAPClient;
my $imap = Mail::IMAPClient->new(
Server => ’localhost’,
User => ’username’,
Password => ’password’,
Ssl => 1,
Uid => 1,
);
... tonnellate di altre cose qui, con sezioni come una normale manpage ...
Con Python:
[root@host ~]# pydoc sys
Help on built-in module sys:
NAME
sys
FILE
(built-in)
MODULE DOCS
http://www.python.org/doc/current/lib/module-sys.html
DESCRIPTION
This module provides access to some objects used or maintained by the
interpreter and to functions that interact strongly with the interpreter.
...again, another full-featured manpage with interesting info...
Oppure, la help()
funzione all'interno della shell python se vuoi leggere maggiori dettagli su alcuni oggetti:
nwildner@host:~$ python3.6
Python 3.6.7 (default, Oct 21 2018, 08:08:16)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> help(round)
Help on built-in function round in module builtins:
round(...)
round(number[, ndigits]) -> number
Round a number to a given precision in decimal digits (default 0 digits).
This returns an int when called with one argument, otherwise the
same type as the number. ndigits may be negative.
Bonus: il wtf
comando può aiutarti con gli acronimi e funziona come whatis
se non fosse trovato alcun acronimo nel suo database, ma ciò che stai cercando fa parte del database man. Su Debian questo comando fa parte del bsdgames
pacchetto. Esempi:
nwildner@host:~$ wtf rtfm
RTFM: read the fine/fucking manual
nwildner@host:~$ wtf afaik
AFAIK: as far as I know
nwildner@host:~$ wtf afak
Gee... I don't know what afak means...
nwildner@host:~$ wtf tcp
tcp: tcp (7) - TCP protocol.
nwildner@host:~$ wtf systemd
systemd: systemd (1) - systemd system and service manager