GNU/Linux >> Znalost Linux >  >> Linux

Jak používat manuální stránky, abyste se naučili používat příkazy?

Při zkoumání dalšího problému jsem narazil na příkaz

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

o kterých jsem se chtěl dozvědět více. Tak jsem spustil man xargs a získejte následující výstup:

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...

Snažím se zlepšit používání dokumentace, abych se dozvěděl o linuxových programech, ale tato sekce „Synopsi“ je pro nové uživatele zastrašující. V porovnání s man locate to vypadá doslova jako blábol nebo man free .

Zatím chápu, že hranaté závorky znamenají volitelné a vnořené závorky znamenají možnosti v volitelném. Ale jak s tím mám vyvolat platný příkaz?

Nežádám zde o pomoc s xargs. Hledám pomoc s interpretací manuálové stránky, abych pochopil komplikované příkazy. Chci přestat dělat webové blogy indexované Googlem a osobní pomoc od ostatních můj první přístup k učení příkazů Linuxu.

Přijatá odpověď:

No, toto je můj velmi osobní způsob čtení manuálových stránek:

Manpager

Když otevřete manuálovou stránku pomocí man výstup bude zobrazen/vykreslen pomocí less nebo more příkazy nebo jakýkoli jiný příkaz, který bude nastaven jako váš pager (manpager).

Pokud používáte Linux, pravděpodobně vám bude poskytnuta vaše man infrastruktura již nakonfigurovaná pro použití /usr/bin/less -is (pokud jste nenainstalovali nějaké minimální distro) jako man(1) , vysvětlete v sekci Možnosti:

-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.

Na FreeBSD a OpenBSD je to jen otázka úpravy MANPAGER prostředí, protože většinou budou používat more a některé funkce, jako je vyhledávání a zvýraznění textu, mohou chybět.

Na otázku, jaké rozdíly existují more, existuje dobrá odpověď , less a most have here (nikdy nepoužíval most ). Schopnost posouvat zpět a posouvat dopředu o stránku pomocí mezera nebo oběma způsoby po řádcích pomocí nebo (také pomocí vi vazby j a k ) je nezbytný při procházení manuálových stránek. Stiskněte h při použití less zobrazíte souhrn dostupných příkazů.

A proto vám doporučuji používat less jako váš man pager. less mají některé základní funkce, které budou použity během této odpovědi.

Jak je formátován příkaz?

Konvence utilit:Základní specifikace otevřené skupiny, vydání 7 – IEEE Std 1003.1, vydání 2013. Než se pokusíte porozumět manuálové stránce, měli byste navštívit tento odkaz. Tento online odkaz popisuje syntaxi argumentů standardních nástrojů a zavádí terminologii používanou v POSIX.1-2017 pro popis argumentů zpracovávaných nástroji. To vám také nepřímo poskytne aktuální informace o skutečném významu slov, jako jsou parametry, argumenty, možnost argumentu…

Hlava jakékoli manuálové stránky vám bude připadat méně záhadná, když pochopíte zápis konvencí obslužných programů:

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

Mějte na paměti, co chcete dělat.

Když děláte průzkum o xargs udělal jsi to účelově, že? Měli jste specifickou potřebu, která spočívala v čtení standardního výstupu a provádění příkazů na základě tohoto výstupu.

Ale když nevím, který příkaz chci?

Použijte man -k nebo apropos (jsou ekvivalentní). Pokud nevím, jak najít soubor:man -k file | grep search . Přečtěte si popisy a najděte ten, který bude lépe vyhovovat vašim potřebám. Příklad:

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 standardně pracuje s regulárními výrazy (man apropos , přečtěte si popis a zjistěte, co -r ano) a v tomto příkladu hledám každou manuálovou stránku, kde popis začíná „report“.

Chcete-li vyhledat informace související se čtením standardního zpracování vstupu/výstupu a dosažením xargs jako možná možnost:

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

Vždy si přečtěte DESCRIPTION před zahájením

Udělejte si čas a přečtěte si popis. Stačí si přečíst popis xargs příkaz se naučíme, že:

  • xargs čte ze STDIN a provádí potřebný příkaz. To také znamená, že budete muset mít určité znalosti o tom, jak funguje standardní vstup a jak s ním manipulovat pomocí potrubí k řetězovým příkazům
  • Výchozí chování je chovat se jako /bin/echo . To vám dává malý tip, pokud potřebujete řetězit více než jeden xargs , k tisku nemusíte používat echo.
  • Také jsme zjistili, že unixové názvy souborů mohou obsahovat prázdné řádky a nové řádky, že to může být problém a argument -0 je způsob, jak zabránit výbuchu věcí pomocí oddělovačů prázdných znaků. Popis vás varuje, že příkaz používaný jako vstup musí také podporovat tuto funkci a že GNU find podpořit to. Skvělý. Hodně používáme find s xargs .
  • xargs se zastaví, pokud je dosaženo výstupního stavu 255.
Související:Učte se anglicky – Význam opuštění někoho zpět [ v americké angličtině ]?

Některé popisy jsou velmi krátké a to je obecně proto, že software funguje velmi jednoduchým způsobem. Ani vás nenapadne tuto část manuálové stránky přeskočit 😉

Další věci, kterým je třeba věnovat pozornost…

Víte, že můžete vyhledávat soubory pomocí find . Existuje spousta možností a pokud se podíváte pouze na SYNOPSIS , budete ohromeni těmi. Je to jen špička ledovce. Kromě NAME , SYNOPSIS a DESCRIPTION , budete mít následující sekce:

  • AUTHORS :lidé, kteří vytvořili nebo pomáhali při vytváření příkazu
    .

  • BUGS :uvádí všechny známé závady. Mohou to být pouze omezení implementace.

  • ENVIRONMENT :Aspekty vašeho shellu, které by mohly být ovlivněny příkazem, nebo proměnné, které budou použity.

  • EXAMPLES nebo NOTES :Samovysvětlující.

  • REPORTING BUGS :Koho budete muset kontaktovat, pokud najdete chyby v tomto nástroji nebo v jeho dokumentaci.

  • COPYRIGHT :Osoba, která vytvořila software, a zříká se odpovědnosti za software. Vše souvisí s licencí samotného softwaru.

  • SEE ALSO :Další příkazy, nástroje nebo pracovní aspekty, které souvisejí s tímto příkazem a nevejdou se do žádné z jiných sekcí.

Nejpravděpodobněji najdete zajímavé informace o aspektech nástroje, které chcete, v sekci příklady/poznámky.

Příklad

V následujících krocích provedu find jako příklad, protože jeho koncepty jsou „jednodušší“ než xargs vysvětlit (jeden příkaz najít soubory a druhý se zabývá stdin a zřetězeným prováděním dalšího výstupu příkazu). Předstírejme, že o tomto příkazu nevíme nic (nebo jen velmi málo).

Mám specifický problém, který je:musím hledat každý soubor s .jpg rozšíření a s velikostí 500 kB (KiB =1024 bajtů, běžně nazývané kibibajty) nebo více ve složce ftp serveru.

Nejprve otevřete manuál:man find . SYNOPSIS je štíhlý. Pojďme hledat věci uvnitř manuálu:Napište / plus požadované slovo (size ). Bude indexovat mnoho položek -size které budou počítat konkrétní velikosti. Uvízl. Nevím, jak hledat pomocí „více než“ nebo „méně než“ dané velikosti a muž mi to neukazuje.

Vyzkoušejte to a vyhledejte další nalezený záznam stisknutím n . OK. Našel jsem něco zajímavého:find ( -size +100M -fprintf /root/big.txt %-10s %pn ) . Možná nám tento příklad ukazuje, že s -size +100M najde soubory o velikosti 100 MB nebo více. Jak bych to mohl potvrdit? Přejděte na začátek manuálové stránky a vyhledejte další slova.

Znovu zkusme slovo greater . Stisknutím g nás zavede do hlavy manuálové stránky. / greater a první záznam je:

 Numeric arguments can be specified as

    +n     for **greater** than n,

    -n     for less than n,

     n      for exactly n.

Zní dobře. Zdá se, že tento blok manuálu potvrdil to, co jsme tušili. To se však nebude týkat pouze velikosti souborů. Bude platit pro všechny n které lze nalézt na této manuálové stránce (jak říká fráze:„Číselné argumenty lze zadat jako“).

Dobrý. Pojďme najít způsob, jak filtrovat podle názvu:g / insensitive . Proč? Necitlivý? WTF? Máme hypotetický ftp server, kde by lidé z "toho jiného OS" mohli dát název souboru s příponou .jpg , .JPG , .JpG . To nás přivede k:

-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.

Nicméně po vyhledání lname uvidíte, že to bude hledat pouze symbolické odkazy. Chceme skutečné soubory. Další záznam:

   -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.

Skvělý. O -name ani nemusím číst abyste viděli to -iname je verze tohoto argumentu nerozlišující malá a velká písmena. Pojďme sestavit příkaz:

Příkaz: find /ftp/dir/ -size +500k -iname "*.jpg"

Co je zde implicitní:Vědomí, že zástupný znak ? představuje „jakýkoli znak na jedné pozici“ a * představuje „nula nebo více jakéhokoli znaku“. -name Parametr vám poskytne souhrn těchto znalostí.

Tipy, které platí pro všechny příkazy

Některé možnosti, mnemotechnické pomůcky a „styl syntaxe“ procházejí všemi příkazy, což vám ušetří čas, protože nebudete muset manuálovou stránku vůbec otevírat. Ty se učí praxí a nejběžnější jsou:

  • Obecně -v znamená verbózní. -vvv je variací „velmi velmi podrobná“ na nějaký software.
  • Podle standardu POSIX lze obecně skládat argumenty s jednou pomlčkou. Příklad:tar -xzvf , cp -Rv .
  • Obecně -R a/nebo -r znamená rekurzivní.
  • Téměř všechny příkazy mají krátkou nápovědu s --help možnost.
  • --version zobrazuje verzi softwaru.
  • -p , při kopírování nebo přesunu obslužných programů znamená „zachovat oprávnění“.
  • -y znamená ve většině případů ANO nebo „pokračovat bez potvrzení“.

Všimněte si, že výše uvedené nejsou vždy pravdivé. Například -r přepínač může znamenat velmi odlišné věci pro jiný software. Vždy je dobré zkontrolovat a ujistit se, že příkaz může být nebezpečný, ale toto jsou běžné výchozí hodnoty.

Související:Učte se anglicky – Používá se často „vaš čas je hotový“?

Výchozí hodnoty příkazů.

Na části pageru této odpovědi jsme viděli, že less -is je pager man . Výchozí chování příkazů není vždy zobrazeno v samostatné sekci na manuálových stránkách nebo v sekci, která je umístěna nejvýše.

Budete si muset přečíst možnosti, abyste zjistili výchozí nastavení, nebo pokud budete mít štěstí, napište / pager dovede vás k těmto informacím. To také vyžaduje, abyste znali koncept pageru (softwaru, který posouvá manuálovou stránku), a to je věc, kterou získáte až po přečtení mnoha manuálových stránek.

proč je to důležité? To otevře vaše vnímání, pokud při čtení man(1) najdete rozdíly v chování rolování a barev v systému Linux (less -is pager) nebo FreeBSD man(1) například.

A co SYNOPSIS syntaxe?

Po získání všech informací potřebných k provedení příkazu můžete kombinovat možnosti, argumenty možností a operandy, aby byla vaše práce hotová. Přehled pojmů:

  • Možnosti jsou přepínače, které určují chování příkazu. „Udělejte to
    toto nedělejte “ nebo „jednat tímto způsobem “. Často se jim říká přepínače.
  • Argumenty možností se používají ve většině případů, kdy možnost není
    binární (on/off) jako -t on mount, který určuje typ
    souborového systému (-t iso9660 , -t ext2 ). „Udělejte to se zavřenýma očima “ nebo
    krmte zvířata, ale pouze lvy “. Také se nazývají argumenty.
  • Operandy jsou věci, na které má příkaz reagovat. Pokud používáte cat file.txt , operand je soubor ve vašem aktuálním
    adresáři a jeho obsah se zobrazí na STDOUT . ls je
    příkaz, kde operand je volitelný. Tři tečky za operandem
    vám implicitně říkají, že cat může jednat s více operandy (soubory) v
    ve stejnou dobu. Můžete si všimnout, že některé příkazy nastavily, jaký typ
    operandu bude používat. Příklad:cat [OPTION] [FILE]...

Související souhrn:

  • Pochopte souhrn v manuálové stránce

Kdy tato metoda nebude fungovat?

  • Manuálové stránky bez příkladů
  • Manuálové stránky, kde možnosti mají krátké vysvětlení
  • Když používáte obecná klíčová slova jako and , to , for uvnitř manuálových stránek
  • Manuálové stránky, které nejsou nainstalovány. Zdá se to být zřejmé, ale pokud nemáte lftp (a jeho manuálové stránky) nainstalované nemůžete vědět, že je to vhodná volba jako sofistikovanější ftp klient spuštěním man -k ftp

V některých případech budou příklady velmi jednoduché a budete muset provést některá provedení svého příkazu, abyste jej otestovali, nebo v nejhorším případě jej vygooglujte.

Ostatní:Programovací jazyky a jejich moduly:

Pokud programujete nebo jen vytváříte skripty, mějte na paměti, že některé jazyky mají své vlastní systémy manuálových stránek, jako je perl (perldocs ), python(pydocs ), atd., obsahující konkrétní informace o metodách/funkcích, proměnných, chování a další důležité informace o modulu, který se pokoušíte použít a naučit se. To bylo užitečné pro mě, když jsem vytvářel skript pro stahování nepřečtených IMAP e-mailů pomocí perl Mail::IMAPClient modul.

Tyto specifické manuálové stránky budete muset zjistit pomocí man -k nebo hledat na internetu. Příklady:

[[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,
         );

…zde je spousta dalších věcí, se sekcemi jako běžná manuálová stránka…

S pythonem:

[[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...

Nebo help() funcion uvnitř python shellu, pokud si chcete přečíst více podrobností o nějakém objektu:

[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: wtf příkaz vám může pomoci se zkratkami a funguje jako whatis pokud v databázi není nalezena žádná zkratka, ale to, co hledáte, je součástí databáze mužů. V Debianu je tento příkaz součástí bsdgames balík. Příklady:

[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. Jak používat příkazy Grep na Linuxu nebo FreeBSD

  2. Jak mohu používat aliasované příkazy s xargs?

  3. Jak v Linuxu získám manuálové stránky pro funkce C místo pro příkazy bash?

  1. Jak používat příkazy historie Bash

  2. Jak efektivně používat Man Pages pod Linuxem

  3. Jak číst manuálové stránky Linuxu?

  1. Jak používat příkazy a možnosti SFTP

  2. Jak používat příkaz xargs pro Linux

  3. Jak zobrazit barevné Man Pages v Linuxu