Warning
This page is located in archive. Go to the latest version of this course pages.

Základy příkazové řádky

Příkazová řádka (anglicky shell) je univerzálním uživatelským rozhraním operačního systému. 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 progamů, 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 abrazovku 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áklady syntaxe BASH volání příkazu, které se skládá ze jména příkazu následovaného argumenty oddělenými mezerami zakončené novým řádkem.

příkaz argument1 argument2 argument3 ...

Příkaz může být název vestavěného příkazu BASHe nebo název externího programu, pro naše uč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ěži 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.

Adresářová struktura

Hierarchie adresářů (složek) a souborů je uvnitř počítače reprezentována pomocí stromu. Při práci s adresáři rozlišujeme mezi absolutními a relativními adresami. Relativní adresa popisuje cestu z aktuálního adresáře.

Nechť se nacházíme uvnitř adresáře bin ve složce Lab03 a chceme znát adresu k souboru notes ve složce Lab01. Relativní adresa (vůči aktuálnímu pracovnímu adresáře) je ../../Lab01/notes.txt a absolutní adresa je /home/kubikj/PRP/Lab01/notes.txt.

Příkazy

pwd (print working directory)

Příkaz pwd vypíše absolutní adresu aktuálního pracovního adresáře.

ls (list)

Tento příkaz vypíše jména všech souborů a složek uvnitř aktuálního pracovního adresáře.

cd (change directory)

Tento příkaz změní aktuální pracovní adresář. Za klíčové slovo cd lze napsat absolutní adresu i relativní adresu. Dvě tečky za klíčovým slovem cd přesunou aktuální prcovní adresář do nadřazeného adresáře.

Povšimněme si, že dvě tečky (..) lze použít i vícenásobně. Poslední příkaz cd se vrátí o dva adresáře výše (tj do složky PRP) a odtud se přesune do složky lab02.

ostatní příkazy

Příkaz mkdir (make directory) vytvoří adresář daného jména uvnitř aktuálního pracovního adresáře. Příkaz rmdir (remove directory) smaže adresář daného jména, ovšem pouze v případě, že je tento adresář prázdný. Příkaz clear vymaže obrazovku příkazové řádky. Pomocí tabulátoru lze uvnitř příkazové řádky doplňovat slova. Příkaz touch se “dotkne” souboru nebo adresáře, což znamená, že změní datum poslední změny na aktuální systémové datum a v případě neexistence souboru nebo adresáře ho vytvoří.

Pomocí šipky nahoru a šipky dolu lze procházet historii zadaných příkazů. Klávesa tabulátor doplňuje názvy souborů a složek. Příkaz man a jméno příkazu otevře jeho manuál.

courses/bab36prga/tutorials/basiccommands.txt · Last modified: 2021/02/09 09:12 by deckejin