Základy Bashe

Dokončeno

Pokud chcete prostředí Bash pochopit, musíte nejprve porozumět jeho syntaxi. Jakmile znáte syntaxi, můžete ji použít pro každý příkaz Bash, který spustíte.

Úplná syntaxe příkazu Bash je:

command [options] [arguments]

Bash považuje první řetězec, který zjistí, za příkaz. Následující příkaz používá příkaz ls (jako „list“ (seznam)) Bash k zobrazení obsahu aktuálního pracovního adresáře:

ls

K příkazům Bash jsou často připojeny argumenty. Do příkazu ls můžete například zahrnout název cesty a zobrazit tak obsah jiného adresáře:

ls /etc

Většina příkazů Bash má možnosti, pomocí kterých můžete upravit jejich funkci. Možnosti, označované také jako příznaky, poskytují příkazu konkrétnější pokyny. Například soubory a adresáře, jejichž názvy začínají tečkou, jsou uživateli skryté a příkaz ls je nezobrazuje. Do příkazu ls ale můžete zahrnout příznak -a (jako „all“ (vše)) a zobrazit veškerý obsah cílového adresáře:

ls -a /etc

Pro zrychlení můžete příznaky dokonce kombinovat. Místo zadávání příkazu ls -a -l /etc k zobrazení všech souborů a adresářů v linuxovém adresáři /etc ve dlouhém formátu, stačí zadat toto:

ls -al /etc

Bash je stručný. Občas je až neuvěřitelné (a nadšenci používající Bash, jsou na to náležitě hrdí), kolik toho můžete zvládnout jediným příkazem.

Získat nápovědu

Možnosti a argumenty, které je možné nebo nutné použít, se liší příkaz od příkazu. Dokumentace Bashe je naštěstí součástí operačního systému. K získání nápovědy vám stačí jen jeden příkaz. Pokud chcete získat informace o možnostech příkazu, použijte příkaz man (jako „manual“ (manuál)). Pokud například chcete zobrazit všechny možnosti příkazu mkdir („make directory“ (vytvořit adresář)), udělejte toto:

man mkdir

Příkaz man se vám bude hodit při seznamování s Bashem. man je způsob, jakým najdete informace, které potřebujete k pochopení fungování jakéhokoli příkazu.

Většina příkazů Bashe a Linuxu podporují možnost --help. Tato možnost zobrazuje popis syntaxe a možností příkazu. Pokud chcete vidět ukázku, zadejte mkdir --help. Výstup bude vypadat zhruba takto:

Usage: mkdir [OPTION]... DIRECTORY...
Create the DIRECTORY(ies), if they do not already exist.
    
Mandatory arguments to long options are mandatory for short options too.
  -m, --mode=MODE   set file mode (as in chmod), not a=rwx - umask
  -p, --parents     no error if existing, make parent directories as needed
  -v, --verbose     print a message for each created directory
  -Z                   set SELinux security context of each created directory
                         to the default type
      --context[=CTX]  like -Z, or if CTX is specified then set the SELinux
                         or SMACK security context to CTX
      --help     display this help and exit
      --version  output version information and exit
    
GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
Report mkdir translation bugs to <http://translationproject.org/team/>
Full documentation at: <http://www.gnu.org/software/coreutils/mkdir>
or available locally via: info '(coreutils) mkdir invocation'

Nápověda získaná tímto způsobem je obvykle stručnější než prostřednictvím příkazu man.

Použití zástupných znaků

Zástupné znaky jsou symboly, které v příkazech Bash představují jeden nebo více znaků. Nejčastěji používaným zástupným znakem je hvězdička. Představuje znaky nuly nebo posloupnost znaků. Předpokládejme, že váš aktuální adresář obsahuje stovky souborů obrázků, ale chcete zobrazit pouze soubory PNG; názvy souborů končí příponou .png. Toto je příkaz, který zobrazí seznam jenom těchto souborů:

ls *.png

Poznámka:

Linux nemá žádný formální koncept přípon názvů souborů jako ostatní operační systémy. To neznamená, že soubory PNG nemají příponu .png. Jednoduše znamená, že Linux nepřikládá žádný zvláštní význam skutečnosti, že názvy souborů končí na .png.

Řekněme, že aktuální adresář obsahuje také soubory JPEG. Některé končí na .jpg, zatímco jiné končí v .jpeg. Tady je jeden ze způsobů, jak zobrazit seznam všech souborů JPEG:

ls *.jpg *.jpeg

A toto je další:

ls *.jp*g

Zástupný znak * odpovídá nule nebo více znakům. Zástupný znak ? ale představuje jeden znak. Pokud aktuální adresář obsahuje soubory s názvem 0001.jpg, 0002.jpg atd. až po 0009.jpg, zobrazí je všechny následující příkaz:

ls 000?.jpg

Dalším způsobem použití zástupných znaků k vyfiltrování výstupu je použití hranatých závorek, které označují skupiny znaků. Následující příkaz vypíše všechny soubory v aktuálním adresáři, jejichž názvy obsahují tečku, po které hned následuje malé písmeno J nebo P. Zobrazí seznam všech souborů .jpg, .jpeg a .png, ale nikoli souborů .gif:

ls *.[jp]*

Názvy souborů a příkazy, které s nimi pracují, rozlišují v Linuxu malá a velká písmena. Pokud tedy chcete zobrazit seznam všech souborů v aktuálním adresáři, jejichž názvy obsahují tečky, za kterými následuje velké nebo malé písmeno J nebo P, můžete zadat toto:

ls *.[jpJP]*

Výrazy v hranatých závorkách můžou představovat rozsahy znaků. Například následující příkaz vypíše všechny soubory v aktuálním adresáři, jejichž názvy začínají malým písmenem:

ls [a-z]*

Tento příkaz naopak vypíše všechny soubory v aktuálním adresáři, jejichž názvy začínají velkým písmenem:

ls [A-Z]*

A tento příkaz vypíše všechny soubory v aktuálním adresáři, jejichž názvy začínají malým nebo velkým písmenem:

ls [a-zA-Z]*

Můžete na základě předchozích informací odhadnout, co dělají následující příkazy?

ls [0-9]*
ls *[0-9]*
ls *[0-9]

Pokud potřebujete použít jeden ze zástupných znaků jako standardní znak, můžete před ním použít zpětné lomítko a udělat z něj literál nebo řídicí znak. Takže pokud jste z nějakého důvodu měli hvězdičku jako součást názvu souboru – něco, co byste nikdy neměli dělat záměrně – mohli byste ho vyhledat pomocí příkazu, například:

$ ls *\**