Warning
This page is located in archive.

Základy příkazové řádky

Příkazová řádka (anglicky shell) je univerzálním uživatelským rozhraním operačního systému. Umožňuje základní ovládání operačního systému (procházení adresářové struktury, práce se soubory, vyhledávání …), poskytuje rozhraní uživatelským programům a hlavně umožňuje řetězit vstupy a výstupy jednotlivých programů. Na všech POSIXových operačních systémech (Linux, BSD, MacOS, Unix,..) je rozhraní tak podobné že se s ním naučíte pouze jednou. Je primárním rozhraním pro mnoho programů, například kompilátoru (a to i na Windows).

V tomto článku se budeme bavit konkrétně o příkazové řádce BASH, která je výchozí na Ubuntu a většině ostatních linuxových distribucích a i na MacOS.

Do příkazové řádky se dostanete (na Ubuntu a MacOS) pomocí programu Terminal, který spustíte běžným způsobem přes dash nebo spotlight. Na Ubuntu je výchozí zkratka Ctrl+Alt+T.

Ve Windows existuje příkazová řádka cmd.exe, pomocí které lze též ovládat kompiler. Cmd.exe lze spustit pomocí dialogového okna Run: Win+R, cmd, Enter. Cmd.exe se ale velmi liší od BASHe a bude pro vás mnohem jednodušší pracovat s WSL. Ten si můžete nainstalovat podle návodu zde.

Základní syntax

BASH je jednoduchý programovací jazyk, ve kterém jdou psát i poměrně složité programy. Ale pro naší potřebu nám stačí pochopit jenom dva, tři základní principy.

Rozhraní k BASHi je příkazová řádka, command line, nebo taky REPL (Read Evaluate Print Loop). Vše se děje tak, že píšete do okna a po stisknutí enteru se provede jeden řádek vašeho “programu” a vypíše se na obrazovku jeho výstup. Typicky BASH vypíše na obrazovku prompt když čeká na váš vstup, ten většinou vypadá jako tvojejmeno@hostname:~$, v tomto textu budu zkracovat jenom jako $.

Základní struktura příkazu:

prikaz [argumenty]

Příkaz může být název vestavěného příkazu BASHe nebo název externího programu, pro naše účely v tom není rozdíl a můžeme klidně tvrdit, že každý příkaz je jeden program.

Zkuste použít příkaz echo (ozvěna) s různými argumenty. Měl by se chovat stejným způsobem jako je znázorněno tu:

$ echo
 
$ echo Hello PRP!
Hello PRP!
$ 

Většina programů umí víc věcí než echo. Pro specifikování možností, se kterými program poběží, se používá konvence takzvaných vlajek (flags) nebo možností (options). Konvence říká že argumenty ve tvaru -x (kde x je nějaké písmeno) nebo –long-option upravují chování programu. Zdůrazňuji, že je to pouze konvence a některé programy se mohou (budou) chovat jinak, ale většina programů se jí drží. Nejpraktičtější vlajku kterou bude znát většina programů (v závislosti na systému možná i echo) je -h nebo —-help.

Vyzkoušejte si pracovat s příkazy ls, pwd, whoami, cd. Každý z nich umí možnost —-help.

$ cd --help
cd: cd [-L|[-P [-e]] [-@]] [dir]
    Change the shell working directory.
 
    Change the current directory to DIR.  The default DIR is the value of the
    HOME shell variable.
 
    The variable CDPATH defines the search path for the directory containing
    DIR.  Alternative directory names in CDPATH are separated by a colon (:).
    A null directory name is the same as the current directory.  If DIR begins
    with a slash (/), then CDPATH is not used.
 
    If the directory is not found, and the shell option 'cdable_vars' is set,
    the word is assumed to be  a variable name.  If that variable has a value,
    its value is used for DIR.
 
    Options:
      -L	force symbolic links to be followed: resolve symbolic
    		links in DIR after processing instances of '..'
      -P	use the physical directory structure without following
    		symbolic links: resolve symbolic links in DIR before
    		processing instances of '..'
      -e	if the -P option is supplied, and the current working
    		directory cannot be determined successfully, exit with
    		a non-zero status
      -@	on systems that support it, present a file with extended
    		attributes as a directory containing the file attributes
 
    The default is to follow symbolic links, as if '-L' were specified.
    '..' is processed by removing the immediately previous pathname component
    back to a slash or the beginning of DIR.
 
    Exit Status:
    Returns 0 if the directory is changed, and if $PWD is set successfully when
    -P is used; non-zero otherwise.
$ 

Manuálové stránky

Jediný příkaz který opravdu potřebujete znát je man. Ten otevírá manuálové stránky. Například když chcete vědět s jakou vlajkou se zapne výpis varování pro gcc (GNU Compiler Collection), stačí zavolat

$ man gcc
Man najde v systémových manuálových stránkách záznam, který se týká gcc. Protože manuálové stránky bývají hodně obsáhlé, zobrazí je man v pageru, což je program který umožnuje snadné scrollování a hledání v dlouhém textu. Základní ovládání je pomocí šipek nahoru a dolu, page-up, page-down, h pro nápovědu a q pro opuštění pageru.

Manuálové stránky jsou šikovné i jako reference pro programování v C. V sekci 3 jsou popsané téměř všechny funkce standardní knihovny C. Do sekce 3 se dostanete tak, že jí specifikujete jako první argument programu man. Například

$ man 3 printf
otevře manuálovou stránku funkce printf() a příbuzných.

Příkazy navigace v adresářové struktuře

Příkaz Používané přepínače Windows Význam
ls -l -t dir vypíše obsah aktuálního pracovního adresáře
cd cd změní aktuální pracovní adresář
pwd cd vypíše absolutní adresu aktuálního pracovního adresáře
tree tree vypíše strukturu aktuálního pracovního adresáře včetně podadresářů formou stromu

Příkazy práce se soubory a adresáři

Příkaz Používané přepínače Windows Význam
mkdir mkdir vytvoří adresář zadaného jména
cp -r copy zkopíruje soubor (adresář) zadaného jména
mv move přesune soubor zadaného jména
rm del odstraní soubor zadaného jména
rm -r -f rmdir /S odstraní adresář
touch vytvoří soubor zadaného jména

Ostatní důležité příkazy

Příkaz Používané přepínače Windows Význam
man vypíše manuálovou stránku zadaného příkazu
find vyhledá soubor zadaného jména v aktuálním adresáři
locate jako find, ale hledá v kompletní adresářové struktuře
cat type vypíše obsah souboru jako text
hexdump -C fc vypíše obsah souboru v hexadecimálním tvaru doplněný o adresy paměti
courses/b3b36prg/tutorials/cmds.txt · Last modified: 2021/02/10 10:17 by nagyoing