Příkazová řádka. predn_02.odt :55:55 1

Podobné dokumenty
Zpracování příkazové řádky shellem

Přednáška 1. Úvod. Historie OS Unix. Architektura OS Unix. Interpret příkazů. SHELL. Zpracování příkazové řádky. Speciální znaky. Zkratky příkazů.

Přednáška 1. Úvod. Historie OS Unix. Architektura OS Unix. Interpret příkazů SHELL. Zpracování příkazové řádky. Speciální znaky. Zkratky příkazů.

Proměnné a parametry. predn_08.odt :00:38 1

Úvod do Operačních Systémů

Přednáška 8. Proměnné. Psaní a ladění skriptů. Parametry skriptu. Vstup a výstup. Konfigurační soubory shellu. Úvod do Operačních Systémů Přednáška 8

PROGRAMOVÁNÍ V SHELLU

Úvod do Operačních Systémů

BASH. Kouzla s příkazovou řádkou. Petr Koloros

more Program se zastaví vždy po vypsání jedné stránky textu. Ukončení Ctrl+C less Umožňuje pohybovat se v souboru dopředu i dozadu.

Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu.

Nastroje na zpracovani textu:

Rozšíření ksh vůči sh při práci s proměnnými

Sekvenční a podmíněné provádění

Cvičení 3. Plán. Procesy. procesy, jobs Find Wildcards Příklad uživatelé. ZOS 2005, L. Pešička. eryx4> ps x

Základy operačního systému LINUX část III

Úloha 3 editor a skripty. připojte se vzdáleně na dray6.feld.cvut.cz heslo získáte na adrese

Úvod do Operačních Systémů

A7B38UOS Úvod do operačních systémů. 6. Cvičení. Příkazy sed a awk

Úvod do Operačních Systémů

Přednáška 2. Systémy souborů OS UNIX. Nástroje pro práci se souborovým systémem. Úvod do Operačních Systémů Přednáška 2

Přednáška 6. Procesy a vlákna (vznik, stavy, atributy). Signály. Nástroje pro práci s procesy a vlákny. Úvod do Operačních Systémů Přednáška 6

C2110 Operační systém UNIX a základy programování

PSK3-9. Základy skriptování. Hlavička

Unix je víceuživatelský a víceúlohový OS

Operační systém UNIX

C2110 Operační systém UNIX a základy programování

Úvod. unx-predn_01-uvod.odt :13:43 1

Úvod do Linuxu. SŠSI Tábor 1

Systém souborů (File System)

Úvod do UNIXu. Jirka Boháč Gymnázium Jaroslava Seiferta 2003/2004

Přednáška 5. Identita uživatelů, procesů a souborů. Přístupová práva a jejich nastavení. Úvod do Operačních Systémů Přednáška 5

Úvod do Operačních Systémů

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

VISUAL BASIC. Práce se soubory

Střední odborná škola a Střední odborné učiliště, Hořovice

Úvod do Unixu. man: příkaz pro zobrazení nápovědy k danému příkazu, programu (pokud je k dispozici), např. man cp. pwd: vypíše cestu k aktuální pozici

LINUX přesměrování a roury

Základní příkazy OS UNIX

Příkaz find, práce s procesy a úlohami, plánování úloh

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

Cvičení 2. Přesměrování vstupu a výstupu. Posloupnost příkazů. Příkazy pro informaci o uživatelích

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

PSK3-3. Základní příkazy. Zápis cesty

Identita uživatele (procesu)

Regulární výrazy. Vzory

Přednáška 4. Regulární výrazy. Filtry grep, sed a awk. Úvod do Operačních Systémů Přednáška 4

Programovací jazyk Pascal

Identita uživatele. predn_04.odt :47:03 1

Úvod do UNIXu. Libor Forst

Téma 2: Práce s commands. Téma 2: Práce s Commands

Regulární výrazy a grep

Algoritmizace a programování

Základní příkazy pro práci se soubory

X36UNX 16. Numerické výpočty v sh příkazy expr, bc, dc. Zdeněk Sojka

Program grep. predn_05.doc

PHP - úvod. Kapitola seznamuje se základy jazyka PHP a jeho začleněním do HTML stránky.

PRACUJEME S SHELLEM Ať žije BASH.

Domácí příprava k předmětu YD38UOS Úloha 10 práce s lokálními soubory pokračování

Seznámení se shellem, textové editory numerické výpočty

Regulární výrazy. Filtry grep, sed a awk.

Numerické výpočty, komprese a archivace, návratový kód.

DUM 06 téma: Tvorba makra pomocí VBA

Speciální soubory. Editace příkazové řádky. $ fg mp3blaster $./skript.sh. [2]+ Stopped./skript.sh $ bg [2]+./skript.sh & $ fg 2./skript.

Identita uživatelů, přístupová práva. Linux

ŘÍDÍCÍ STRUKTURY - PODMÍNKY

Úvod do programování. Lekce 1

PHP tutoriál (základy PHP snadno a rychle)

FILTRY V GNU/LINUXU ZLÍNSKÝ KRAJ. Obchodní akademie, Vyšší odborná škola a Jazyková škola s právem státní jazykové zkoušky Uherské Hradiště

Systém souborů (file system, FS)

Jazyk C práce se soubory. Jan Hnilica Počítačové modelování 16

Úvod do UNIXu. Okruh č. 4 - vi, regulární výrazy, grep a sed. Jakub Galgonek. verze r2. inspirováno materiály Davida Hokszy

Základní příkazy UNIXu (Linuxu)

Lekce 25 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ

Select sort: krok 1: krok 2: krok 3: atd. celkem porovnání. výběr nejmenšího klíče z n prvků vyžaduje 1 porovnání

PSK3-5. Přesměrování vstupu a výstupu. Vstup a výstup

Skripty - úvod. Linux - skripty 2

Martin Kopta. Unixové shelly. Středisko Unixových Technologií, 2009

NPRG030 Programování I, 2010/11

Standardní vstupy a výstupy procesu filtry

ZOS CV1 Základy operačních systémů

24. XML. Aby se dokument XML vůbec zobrazil musí být well-formed (správně strukturovaný). To znamená, že splňuje formální požadavky specifikace XML.

Střední odborná škola a Střední odborné učiliště, Hořovice

NPRG030 Programování I, 2016/17 1 / :58:13

Úvod, jednoduché příkazy

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Algoritmy I. Cvičení č. 2, 3 ALGI 2018/19

Předmluva 23 1 Vítejte ve světě Linuxu 33. ČÁST 1 Operační systém Linux 49

Algoritmizace prostorových úloh

Programování v jazyce C pro chemiky (C2160) 4. Textové řetězce, zápis dat do souboru

Tvorba výrazu: speciální znaky shellu se uvádějí do apostrofů jednotlivé části výrazu se oddělují mezerou

Úvod do Operačních Systémů

PSK3-7. Plánované spouštění programů a správce sezení. Skupiny procesů

Čtvrtek 3. listopadu. Makra v Excelu. Obecná definice makra: Spouštění makra: Druhy maker, způsoby tvorby a jejich ukládání

Úvod do Operačních Systémů

Administrace OS Unix. Úvodní informace Principy administrace Uživatelé

Konečný automat. Jan Kybic.

Formátová specifikace má tvar (některé sekce nemají smysl pro načítání) %

PHP PHP je skriptovací programovací jazyk dynamických internetových stránek PHP je nezávislý na platformě

Transkript:

Příkazová řádka predn_02.odt 28.03.2007 14:55:55 1

Zpracování příkazové řádky shellem Shell je interpret příkazů programovacíhojazyka. Zpracovává příkazy nebo přiřazení hodnot poměnným. Vstupem shellu může být soubor nebo standardní vstup. Je-li shell vyvolán se jménem začínajícím - (minus), jedná se o tzv. login shell login shell načítá při startu inicializační soubory: sh, ksh - /etc/profile $HOME/.profile bash - /etc/profile ~/.bash_profile, ~/.bash_login, ~/.profile shell (s výjimkou bourne) načítají při spuštění další inicializační soubor: ksh - $ENV bash - ~/.bashrc (jen interaktivni co není login) predn_02.odt 28.03.2007 14:55:55 2

Základní pojmy Metaznaky (oddělovače příkazů) ;, &, (, ),, <, >, LF, mezera, tabulátor Identifikátor posloupnost tvořená písmeny, podtržítky a číslicemi nezačínající číslicí malá a velká písmena se rozlišují Oddělovač parametrů mezera nebo tabulátor Pojmenovaný parametr (proměnná) identifikátor Parametr proměnná dekadické číslo některý ze znaků:!, #, $, *, -,?, @, _ predn_02.odt 28.03.2007 14:55:55 3

Příkaz Posloupnost slov a metaznaků podle synaxe shellu. Shell příkazy čte a provádí samostatně nebo vyvoláním samostatných programů. Příkaz dědí od shellu (rodičovského procesu) kromě jiného: prostředí (enviroment) otevřené soubory (vždy vstup, výstup a chybový výstup) Příkaz vrací návratový kód (0 = úspěšné provedení, <>0 = chyba) Příkaz může volat další příkazy. Shell je také příkaz Příkaz může být jednoduchý nebo složený. Příkazy mohou být seskupovány do kolon a seznamů příkazů predn_02.odt 28.03.2007 14:55:55 4

Vstup a výstup příkazu Se soubory se pracuje prostřednictvím deskriptorů. Deskriptor vznikne otevřením souboru nebo zděděním od rodičovského procesu. Každý proces má deskriptory: 0 - standardní vstup 1 - standardní výstup 2 - standardní výstup chyb Přiřazení souborů a deskriptorů lze měnit přesměrováním (viz dále). predn_02.odt 28.03.2007 14:55:55 5

Jednoduchý příkaz Posloupnost slov oddělených mezerami nebo tabulátory zakončená metaznakem. První slovo je jméno příkazu, zbývající slova jsou argumenty příkazu. Jednoduchý příkaz může být: zabudovaný příkaz - prováděn shellem bez vytvoření nového procesu dávka příkazů (skript) - prováděn novým shellem externí program - prováděn jako nový proces Složené příkazy (Compound Commands) case, for, function, if, time, until, while, ( ), { } - budou probrány později Příklady: $ cd $ pwd /home/honza predn_02.odt 28.03.2007 14:55:55 6

Kolona příkazů (Pipeline) Posloupnost jednoho nebo více příkazů oddělených znakem. Standardní výstup předchozího je standardním vstupem následujícího příkazu. Návratový kód kolony je návratový kód posledního příkazu. Příkazy v koloně se startují odzadu a běží paralelně. V kolonách se často volají tzv. filtry (standardní programy zpracovávajícítext). Některé často používané filtry: cat, split, head, tail, more, cut, paste, sort, uniq wc, tr, tee grep, sed, awk Příklad: $ ps -ef grep grep honza 553 489 0 16:23:19 pts/2 0:00 grep grep predn_02.odt 28.03.2007 14:55:55 7

Seznam příkazů (List) Posloupnost jedné nebo více kolon oddělených znaky: ; (středník) nebo LF (nová řádka) - sekvenční provádění příkazů (nejprve se provedou příkazy před a pak příkazy za středníkem (novou řádkou) & - asynchronní provedení předchozí kolony (shell nečeká na její dokončení - provádění "na pozadí") && - sekvenční provádění. Kolona "za" se provede pouze tehdy, vrátí-li kolona "před" nulový návratový kód (skončí bez chyby). - sekvenční provádění. Kolona "za" se provede pouzetehdy, vrátí-li kolona "před" nenulový návratový kód (skončí s chybou). predn_02.odt 28.03.2007 14:55:55 8

Příklady: $ pwd; cd..; pwd; cd; pwd /home/honza /home /home/honza $ $ ps -f UID PID PPID C STIME TTY TIME CMD honza 345 341 0 20:45:17 pts/2 0:00 -ksh $ sleep 100& [1] 365 $ ps -f UID PID PPID C STIME TTY TIME CMD honza 345 341 0 20:45:17 pts/2 0:00 -ksh honza 365 345 0 21:17:05 pts/2 0:00 sleep 100 $ $ ls; [ -f t1 ] && touch t2; [ -f t1 ] touch t3; ls konec t1 testik text vypis konec t1 t2 testik text vypis $ predn_02.odt 28.03.2007 14:55:55 9

Rušení významu speciálních znaků (Quoting) Speciální význam znaků v shellu lze zrušit následovně: \ (obrácené lomítko) ruší speciální význam následujícího znaku '...' (dvojice apostrofů) všechny znaky uzavřené mezi apostrofy ztrácejí speciální význam (kromě apostrofu) "..." (dvojice uvozovek) mezi uvozovkami ztrácí speciální význam všechny znaky kromě: \ (obráceného lomítka) - rušení spec. významu následujícího znaku `...` (obrácené apostrofy) - náhrada příkazů $ (dollaru) - náhrada parametrů Při interpretaci řádky shell tyto znaky odstraní. predn_02.odt 28.03.2007 14:55:55 10

Příklady: $ echo * konec testik text vypis $ echo \* * $ echo '*' * $ echo "\$HOME je $HOME" $HOME je /home/honza $ echo "Obracene lominto na konci radky \ > dela pokracovaci radku" Obracene lominto na konci radky dela pokracovaci radku $ predn_02.odt 28.03.2007 14:55:55 11

Náhrady na příkazové řádce shell načítá příkazy a provádí je před provedením provede následující náhrady (úpravy): Vynechání komentářů část řádky za znakem # (včetně tohoto znaku) se chápe jako komentář a je ignorována Příklad: $ # toto je komentar predn_02.odt 28.03.2007 14:55:55 12

Náhrada alias (Aliassing) - ne bourne první slovo příkazu je porovnáno se seznamem "aliasů" a pokud je nalezeno, je nahrazeno odpovídající pravou stranou "aliasu" končí-li pravá strana "aliasu" mezerou nebo tabulátorem,testuje se i druhé slovo náhrada se provádí při načítání příkazu, ne při jeho provádění shell má předdefinováno cca 10 "aliasů" $ # toto je komentar $ alias #bez parametru vypise nadefinovane aliasy autoload='typeset -fu' command='command ' functions='typeset -f' history='fc -l' integer='typeset -i' nohup='nohup ' stop='kill -STOP' suspend='kill -STOP $$' $ # 2. slovo prikazu zacinajiciho nohup bude testovano na alias $ alias m=more # takto se nadefinuje novy alias $ ls m # takto se pouzije predn_02.odt 28.03.2007 14:55:55 13

Náhrada ~ (Tilde Substitution) - ne bourne samotný znak ~ (případně následovaný znakem /) - je nahrazen domovským adresářem uživatele ~jméno_uživatele - je nahrazeno domovským adresářem tohoto uživatele v ostatních případech (např. jméno neodpovídá žádnému uživateli) zůstává text nezměněn Příklad: $ pwd; ls; cd ~root; pwd; ls ~ /home/honza konec t1 t2 testik text vypis /root konec t1 t2 testik text vypis $ predn_02.odt 28.03.2007 14:55:55 14

Náhrada příkazů (Command Substitution) Příkaz uvedený mezi opačnými apostrofy (`příkaz`) nebo v konstrukci $(příkaz) (ne v bourne) je proveden a nahrazen (včetně těchto apostrofů resp. dollaru a závorek) svým standardním výstupem Příklad: $ pwd; cd `echo /etc`; pwd; cd /root /etc $ DATE=`date` $ echo `date` $DATE Sat Oct 6 21:37:54 MEST 2001 Sat Oct 6 21:37:20 MEST 2001 $ echo `date`: $DATE Sat Oct 6 21:38:18 MEST 2001: Sat Oct 6 21:37:20 MEST 2001 $ predn_02.odt 28.03.2007 14:55:55 15

Náhrada parametrů a proměnných (Parameter Substitution) Konstrukce $parametr je nahrazena hodnotou tohoto parametru Parametrem může být: poziční parametr ($1) pojmenovaná proměnná ($HOME) speciální proměnná ($#) Tyto náhrady budou probrány podrobnějipozději Interpretace oddělovačů parametrů (Blank Interpretation) Řádka je pomocí oddělovačů parametrů rozdělena do jednotlivých parametrů. Oddělovač parametrů je standardně mezera nebo tabulátor, může být změněn nastavením proměnné IFS. Dva parametry mohou být oddělenylibovolným počtem oddělovačů. Parametry jsou předány volanému příkazu. V shellu jsou pak přístupné jako $1, $2... predn_02.odt 28.03.2007 14:55:55 16

Náhrada jmen souborů (File Name Generation) Náhrada slov příkazové řádky obsahujících znaky *,?, [, ]odpovídajícími jmény souborů. *: odpovídá libovolnému řetězci kromě tečky na začátku jména a / kdekoliv?: odpovídá jednomu libovolnému znaku kromě tečky na začátku jména a / kdekoliv [abc] resp. [a-z]: odpovídá jednomu znaku z uvedených resp. z uvedeného intervalu [!abc] odpovídá jednomu znaku různému od uvedených Řádka po náhradě může být mnohem delší. Znaky. (tečka) na začátku jména a / se musí explicitně uvádět. Nahrazování lze potlačit příkazem set -f (nedoporučuje se) a opět povolit příkazem set +f. predn_02.odt 28.03.2007 14:55:55 17

Příklady: $ echo * # vsechny soubory nezacinajici teckou a aa ab abc alfa beta $ echo.* # vsechny soubory zacinajici teckou....kshrc.profile.sh_history $ echo a* # soubory zacinajici znakem a a aa ab abc alfa $ echo a? # dvouznakove soubory zacinajici a aa ab $ echo *[AB]* # soubory obsahujici velke A nebo B aa ab abc $ echo [!a]* # soubory nezacinajici a beta $ echo *d*# soubory obsahujici d - nejsou *d* predn_02.odt 28.03.2007 14:55:55 18

Přesměrování (Redirection) Nový proces standardně dědí deskriptory od svého rodiče (tedy příkaz od shellu) Před provedením příkazu toto shell mění v koloně nebo na základě následujících konstrukcí: <jméno_souboru soubor jméno_souboru bude otevřen a nastaven jako standardní vstup programu. > jméno_souboru soubor jméno_souboru bude otevřen jako standardní výstup programu pokud soubor neexistuje, bude vytvořen pokud existuje, bude přepsán (lze potlačit nastavením noclobber - ne v bourne) predn_02.odt 28.03.2007 14:55:55 19

>> jméno_souboru soubor jméno_souboru bude otevřen pro výstup a nastaven jako standardní výstup pokud soubor neexistuje, bude vytvořen pokud existuje, bude výstup připojen za konec souboru $ date>vypis; ls >>vypis $ cat vypis wc -l 3 $ cat xxx cat: cannot open xxx $ cat < xxx ksh: xxx: cannot open $ cat vypis Sun Mar 4 09:38:08 MET 2001 testik vypis $ cat < vypis Sun Mar 4 09:38:08 MET 2001 testik vypis $ predn_02.odt 28.03.2007 14:55:55 20

<<slovo shell čte vstup až do řádky začínající slovem slovo nebo do konce souboru načtený text se stane standardním vstupem příkazu (tzv. here-document) v textu se provádí náhrada parametrů a příkazů (pokud není uvedeno \slovo) znakem \ lze v případě potřeby zrušit význam znaků $, `, \ a NL $ cat << konec > text > tento text je cten shellem a ukladan do souboru text > promenne jsou nahrazeny: $HOME > soubory ne: * > text musi byt zakoncen radkou zacinajici uvodnim slovem > konec $ cat text tento text je cten shellem a ukladan do souboru text promenne jsou nahrazeny: /home/honza soubory ne: * text musi byt zakoncen radkou zacinajici uvodnim slovem $ predn_02.odt 28.03.2007 14:55:55 21

m<soubor přesměrování vstupu s deskriptorem m ze souboru soubor m>soubor přesměrování výstupu s deskriptorem m do souboru soubor m>>soubor připojení výstupu s deskriptorem m do souboru soubor predn_02.odt 28.03.2007 14:55:55 22

Následující konstrukce kopírují (duplikují) deskriptor souboru, duplikát lze použít místo původního souboru: <&n do deskriptoru 0 (standardní vstup) je přiřazen deskriptor n m<&n do vstupního deskriptoru m je přiřazen deskriptor n >&n do deskriptoru 1 (standardní výstup) je přiřazen deskriptor n m>&n do výstupního deskriptoru m je přiřazen deskriptor n predn_02.odt 28.03.2007 14:55:55 23

Při vícenásobném přesměrování se přesměrování vyhodnocují zleva doprava: 1>s1 2>&1 - přesměruje standardní výstup do souboru s1 a standardní výstup chyb do standardního výstupu (tedy s1) 2>&1 1>s1 - přesměruje standardní výstupchyb na standardní výstup (nejspíše terminál) a pak standardní výstup do souboru s1 příkazem exec a přesměrováním lze změnit přiřazení deskriptorů běžícího shellu predn_02.odt 28.03.2007 14:55:55 24

Prostředí procesu (Environment) každý proces dostává od svého rodiče kopii tzv. prostředí jedná se o seznam proměnných s hodnotami prostředí lze vypsat příkazem env proměnnou lze zařadit do prostředí příkazem export potomek nemůže změnit prostředí rodiče $ env PATH=/bin LOGNAME=honza PS1=$ SHELL=/bin/ksh HOME=/home/honza TERM=vt100 PWD=/home/honza TZ=MET ENV=/home/honza/.kshrc predn_02.odt 28.03.2007 14:55:55 25

Provedení příkazu 1 čtení příkazu konec vstupu? + - substituce na příkazové řádce konec zabudovaný příkaz? + provedení příkazu - 1 predn_02.odt 28.03.2007 14:55:55 26

rodič fork () potomek + příkaz na popředí? binární program? + - - wait (potomek) exec(shell prikaz) exec (příkaz) 1 1 1 predn_02.odt 28.03.2007 14:55:55 27