GNU/Linux >> Linux Esercitazione >  >> Linux

Come utilizzare le pagine man per imparare a usare i comandi?

Durante la ricerca di un altro problema, mi sono imbattuto in un comando,

locate something | xargs -I {} bash -c "if [ -d "{}" ]; then echo {}; fi"

di cui volevo saperne di più. Quindi ho eseguito man xargs e ottieni il seguente output:

XARGS(1)                    General Commands Manual                   XARGS(1)

NAME
       xargs - build and execute command lines from standard input

SYNOPSIS
       xargs  [-0prtx]  [-E  eof-str] [-e[eof-str]] [--eof[=eof-str]] [--null]
       [-d delimiter] [--delimiter delimiter]  [-I  replace-str]  [-i[replace-
       str]]    [--replace[=replace-str]]   [-l[max-lines]]   [-L   max-lines]
       [--max-lines[=max-lines]] [-n max-args] [--max-args=max-args] [-s  max-
       chars]  [--max-chars=max-chars]  [-P max-procs] [--max-procs=max-procs]
       [--interactive]      [--verbose]      [--exit]      [--no-run-if-empty]
       [--arg-file=file]   [--show-limits]   [--version]   [--help]   [command
       [initial-arguments]]

DESCRIPTION
       This manual page documents the GNU version of xargs...

Sto cercando di migliorare nell'uso della documentazione per conoscere i programmi Linux, ma quella sezione "Sinossi" intimidisce i nuovi utenti. Sembra letteralmente incomprensibile rispetto a man locate o man free .

Finora, ho capito che le parentesi quadre significano facoltativo e le parentesi nidificate significano opzioni in facoltativo. Ma come dovrei indurre un comando valido con quello?

Non sto chiedendo aiuto con xargs qui. Sto cercando aiuto per interpretare una pagina man per capire comandi complicati. Voglio smettere di fare dei blog web indicizzati da Google e dell'aiuto personale degli altri il mio primo approccio all'apprendimento dei comandi Linux.

Risposta accettata:

Bene, questo è il mio modo molto personale di leggere le manpage:

Il manpager

Quando apri una pagina di manuale usando man comando, l'output verrà visualizzato/renderizzato dal less o more comandi o qualsiasi altro comando che verrà impostato come pager (manpager).

Se stai usando Linux probabilmente hai la tua infrastruttura man già configurata per usare /usr/bin/less -is (a meno che tu non abbia installato una distribuzione minima) 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 questione di modificare il MANPAGER variabile di ambiente poiché utilizzeranno principalmente more e alcune funzioni come la ricerca e l'evidenziazione del testo potrebbero mancare.

C'è una buona risposta alla domanda su quali differenze more , less e most have here(mai usato more ). La possibilità di scorrere all'indietro e in avanti per pagina con Spazio o in entrambi i modi in linea con o (anche, usando vi collegamenti j e k ) è essenziale durante la navigazione nelle pagine di manuale. Premi h durante l'utilizzo di less per vedere il riepilogo dei comandi disponibili.

Ed è per questo che ti consiglio di usare less come tuo cercapersone. less hanno alcune caratteristiche essenziali che verranno utilizzate durante questa risposta.

Come viene formattato un comando?

Convenzioni di utilità:The Open Group Base Specifications Issue 7 – IEEE Std 1003.1, 2013 Edition. Dovresti visitare quel link prima di provare a capire una pagina di manuale. Questo riferimento in linea descrive la sintassi degli argomenti delle utilità standard e introduce la terminologia utilizzata in POSIX.1-2017 per descrivere gli argomenti elaborati dalle utilità. Questo ti aggiornerà anche indirettamente sul vero significato di parole come parametri, argomenti, opzioni di argomenti...

L'intestazione di qualsiasi pagina di manuale ti sembrerà meno criptica dopo aver compreso la notazione delle convenzioni di utilità:

utility_name[-a][-b][-c option_argument]
    [-d|-e][-f[option_argument]][operand...]

Pensa a cosa vuoi fare.

Quando fai le tue ricerche su xargs l'hai fatto per uno scopo, giusto? Avevi un'esigenza specifica che consisteva nella lettura dell'output standard e nell'esecuzione di 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 che meglio si 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 per impostazione predefinita, (man apropos , leggi la descrizione e scopri cosa -r fa), e in questo esempio sto cercando ogni pagina di manuale in cui la descrizione inizia con "report".

Per cercare informazioni relative alla lettura dell'elaborazione di input/output standard e al raggiungimento di xargs come opzione possibile:

man -k command| grep input
xargs (1)            - build and execute command lines from standard input

Leggi sempre la DESCRIPTION prima di iniziare

Prenditi del tempo e leggi la descrizione. Leggendo semplicemente la descrizione di xargs comando impareremo che:

  • xargs legge da STDIN ed esegue il comando necessario. Ciò significa anche che dovrai avere una certa conoscenza di come funziona l'input standard e come manipolarlo tramite pipe per concatenare i comandi
  • Il comportamento predefinito è agire come /bin/echo . Questo ti dà un piccolo suggerimento che se hai bisogno di concatenare più di un xargs , non è necessario utilizzare echo per stampare.
  • Abbiamo anche appreso che i nomi di file unix possono contenere spazi vuoti e nuove righe, che questo potrebbe essere un problema e l'argomento -0 è un modo per impedire che le cose esplodano utilizzando separatori di caratteri nulli. La descrizione ti avverte che il comando utilizzato come input deve supportare anche questa funzione e che GNU find supportalo. Grande. Usiamo molto find con xargs .
  • xargs si fermerà se viene raggiunto lo stato di uscita 255.
Correlati:Impara l'inglese - Il significato di lasciare indietro qualcuno [in inglese americano]?

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 file usando find . Ci sono un sacco di opzioni e se guardi solo il SYNOPSIS , sarai sopraffatto da quelli. È solo la punta dell'iceberg. Escluso NAME , SYNOPSIS e DESCRIPTION , avrai le seguenti sezioni:

  • AUTHORS :le persone che hanno creato o aiutato nella creazione del comando
    .

  • BUGS :elenca tutti i difetti noti. Potrebbero essere solo limitazioni di implementazione.

  • ENVIRONMENT :Aspetti della tua shell che potrebbero essere influenzati dal comando o variabili che verranno utilizzate.

  • EXAMPLES o NOTES :Autoesplicativo.

  • REPORTING BUGS :Chi dovrai contattare se trovi bug su questo strumento o nella sua documentazione.

  • COPYRIGHT :Persona che ha creato e declinazioni di responsabilità sul software. Tutto relativo alla licenza del software stesso.

  • SEE ALSO :Altri comandi, strumenti o aspetti di lavoro correlati a questo comando e che non potrebbero rientrare in nessuna delle altre sezioni.

Molto probabilmente troverai informazioni interessanti sugli aspetti che desideri da uno strumento nella sezione esempi/note.

Esempio

Nei passaggi seguenti eseguirò find ad esempio, poiché i suoi concetti sono "più semplici" di xargs per spiegare (un comando trova i file e l'altro si occupa dello stdin e dell'esecuzione pipeline di altri output del comando). Facciamo finta di non sapere nulla (o molto poco) di questo comando.

Ho un problema specifico che è:devo cercare ogni file con il .jpg estensione e con dimensioni di 500 KiB (KiB =1024 byte, comunemente chiamato kibibyte) o più all'interno di una cartella del server ftp.

Per prima cosa, apri il manuale:man find . La SYNOPSIS è magro. Cerchiamo cose all'interno del manuale:digita / più la parola che desideri (size ). Indicizzerà molte voci -size che conterà dimensioni specifiche. Rimasto bloccato. Non so come cercare con "più di" o "meno di" una determinata dimensione e l'uomo non me lo mostra.

Proviamo e cerchiamo la voce successiva trovata premendo n . OK. Trovato qualcosa di interessante:find ( -size +100M -fprintf /root/big.txt %-10s %pn ) . Forse questo esempio ce lo mostra con -size +100M troverà file con 100 MB o più. Come potrei confermare? Andare all'inizio della manpage e cercare altre parole.

Di nuovo, proviamo la parola greater . Premendo g ci porterà all'inizio 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.

Sembra fantastico. Sembra che questo blocco del manuale abbia confermato quanto sospettavamo. Tuttavia, questo non si applicherà solo alle dimensioni dei file. Si applicherà a qualsiasi n che può essere trovato in questa manpage (come diceva la frase:"Gli argomenti numerici possono essere specificati come").

Bene. Troviamo un modo per filtrare per nome:g / insensitive . Come mai? Insensibile? Perché? Abbiamo un ipotetico server ftp, in cui le persone di "quell'altro sistema operativo" potrebbero dare un nome file con 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 voce successiva:

   -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 su -name per vedere quel -iname è la versione senza distinzione tra maiuscole e minuscole di questo argomento. Assembliamo il comando:

Comando: find /ftp/dir/ -size +500k -iname "*.jpg"

Cosa è implicito qui:la conoscenza che il carattere jolly ? rappresenta "qualsiasi carattere in una singola posizione" e * rappresenta "zero o più di qualsiasi carattere". Il -name parametro ti darà un riepilogo di questa conoscenza.

Suggerimenti che si applicano a tutti i comandi

Alcune opzioni, mnemonici e "stile sintassi" viaggiano attraverso tutti i comandi facendoti guadagnare un po' di tempo non dovendo aprire la manpage. Quelli si imparano con la pratica e i più comuni sono:

  • In genere, -v significa prolisso. -vvv è una variazione "molto molto dettagliata" su alcuni software.
  • Seguendo lo standard POSIX, generalmente è possibile impilare argomenti con un trattino. Esempio:tar -xzvf , cp -Rv .
  • Generalmente -R e/o -r significa ricorsivo.
  • Quasi tutti i comandi hanno un breve aiuto con --help opzione.
  • --version mostra la versione di un software.
  • -p , su utilità di copia o spostamento significa "conserva i permessi".
  • -y significa SÌ, o "procedi senza conferma" nella maggior parte dei casi.

Nota che quanto sopra non è sempre vero però. Ad esempio, il -r switch può significare cose molto diverse per software diversi. È sempre una buona idea controllare e assicurarsi quando un comando potrebbe essere pericoloso, ma si tratta di valori predefiniti comuni.

Correlati:Impara l'inglese – Viene spesso usato "il tuo tempo è finito"?

Valori predefiniti dei comandi.

Nella parte del 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 delle pagine man o nella sezione più in alto.

Dovrai leggere le opzioni per scoprire le impostazioni predefinite o, se sei fortunato, digitare / pager ti condurrà a quelle informazioni. Ciò richiede anche che tu conosca il concetto di pager (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 nel comportamento di scorrimento e colore durante la lettura di man(1) su Linux(less -is pager) o FreeBSD man(1) per esempio.

E che dire della SYNOPSIS sintassi?

Dopo aver ottenuto tutte le informazioni necessarie per eseguire il comando, puoi combinare opzioni, argomenti di opzioni e operandi in linea per completare il tuo lavoro. Panoramica dei concetti:

  • Le opzioni sono le opzioni che determinano il comportamento di un comando. "Fai questo
    non farlo ” o “agisci in questo modo “. Spesso chiamati interruttori.
  • Gli argomenti-opzione vengono utilizzati nella maggior parte dei casi in cui un'opzione non è
    binaria(on/off) come -t su mount, che specifica il tipo di un
    filesystem(-t iso9660 , -t ext2 ). "Fai questo ad occhi chiusi ” o
    nutri gli animali, ma solo i leoni “. Chiamati anche argomenti.
  • Gli operandi sono cose su cui vuoi che agisca quel comando. Se usi cat file.txt , l'operando è un file all'interno della directory
    corrente e il suo contenuto verrà mostrato su STDOUT . ls è un comando
    in cui un operando è facoltativo. I tre punti dopo l'operando
    ti dicono implicitamente che cat può agire su più operandi (file) contemporaneamente. Potresti notare che alcuni comandi hanno impostato il tipo di operando
    che verrà utilizzato. Esempio:cat [OPTION] [FILE]...

Cose relative alla sinossi:

  • Comprendi la sinossi nella pagina di manuale

Quando questo metodo non funzionerà?

  • Manpage che non hanno esempi
  • Manpage in cui le opzioni hanno una breve spiegazione
  • Quando utilizzi parole chiave generiche come and , da to , for all'interno delle manpage
  • Manpage non installate. Sembra ovvio ma, se non hai lftp (e le sue manpage) installato non puoi sapere che è un'opzione adatta come client ftp più sofisticato eseguendo man -k ftp

In alcuni casi gli esempi saranno piuttosto semplici e dovrai eseguire alcune esecuzioni del tuo comando per testarlo o, nel peggiore dei casi, farlo su Google.

Altro:Linguaggi di programmazione e relativi moduli:

Se stai programmando o semplicemente creando script, tieni presente che alcuni linguaggi hanno i propri sistemi di pagine di manuale, come perl (perldocs ), python(pydocs ), ecc., contenenti informazioni specifiche su metodi/funzioni, variabili, comportamento e altre informazioni importanti sul modulo che stai cercando di utilizzare e imparare. Questo mi è stato utile quando stavo creando uno script per scaricare e-mail IMAP non lette utilizzando il perl Mail::IMAPClient modulo.

Dovrai capire quelle pagine man specifiche usando man -k o cercando in linea. Esempi:

[[email protected] ~]# man -k doc | grep perl
perldoc              (1)  - Look up Perl documentation in Pod format


[[email protected] ~]# 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,
         );

...un sacco di altre cose qui, con sezioni come una normale manpage...

Con Python:

[[email protected] ~]# 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, il help() funzione all'interno della shell python se vuoi leggere maggiori dettagli di alcuni oggetti:

[email protected]:~$ 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 viene trovato nessun acronimo sul suo database, ma quello che stai cercando fa parte del database man. Su Debian questo comando fa parte di bsdgames pacchetto. Esempi:

[email protected]:~$ wtf rtfm
RTFM: read the fine/fucking manual
[email protected]:~$ wtf afaik
AFAIK: as far as I know
[email protected]:~$ wtf afak
Gee...  I don't know what afak means...
[email protected]:~$ wtf tcp
tcp: tcp (7)              - TCP protocol.
[email protected]:~$ wtf systemd
systemd: systemd (1)          - systemd system and service manager

Linux
  1. Come usare i comandi della cronologia di Bash

  2. Come usare i comandi Grep su Linux o FreeBSD

  3. Come utilizzare efficacemente le pagine man sotto Linux

  4. Come posso usare i comandi con alias con xargs?

  5. Come leggere le pagine man di Linux?

Come installare le pagine man mancanti dei comandi su Ubuntu

Impara a usare le pagine man in modo efficiente in Linux

Come visualizzare una sezione specifica nelle pagine man in Linux

Come installare le pagine man in Alpine Linux

Come usare i comandi FTP di Linux

Come usare il comando xargs in Linux?