Operační systémy. Tomáš Vojnar IOS 2010/2011. Vysoké učení technické v Brně Fakulta informačních technologií Božetěchova 2, Brno

Podobné dokumenty
Operační systémy. Tomáš Vojnar IOS 2015/2016. Vysoké učení technické v Brně Fakulta informačních technologií Božetěchova 2, Brno

Operační systémy. Tomáš Vojnar. IOS 2018/2019

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

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.

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

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

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

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

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

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

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

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

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

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

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

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.

Operační systém UNIX

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

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

Nastroje na zpracovani textu:

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

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

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

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

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

Operační systémy. Tomáš Vojnar IOS 2010/2011. Vysoké učení technické v Brně Fakulta informačních technologií Božetěchova 2, Brno. Úvod p.

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

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

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

Operační systémy. Cvičení 1: Seznámení s prostředím

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

ŘÍDÍCÍ STRUKTURY - PODMÍNKY

ČÁST 1. Základy 32bitového programování ve Windows

SPJA, cvičení 1. ipython, python, skripty. základy syntaxe: základní datové typy, řetězce. podmínky: if-elif-else, vyhodnocení logických výrazů

Maturitní otázky z předmětu PROGRAMOVÁNÍ

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

Skripty - úvod. Linux - skripty 2

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

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

Linux-příkazový řádek

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

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

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

Úvod, jednoduché příkazy

Základní příkazy OS UNIX

Administrace Unixu a sítí. Tomáš Kouba <

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

Vstupní požadavky, doporučení a metodické pokyny

1 Webový server, instalace PHP a MySQL 13

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

Architektura rodiny operačních systémů Windows NT Mgr. Josef Horálek

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

Stručný návod k programu Octave

Regulární výrazy a grep

LINUX přesměrování a roury

Tipy a triky nejenom v shellu nejenom pro programátory

Západočeská univerzita v Plzni. Správce virtuálních strojů

Základy programování (IZP)

Cvičení předmětu BI PUN (Pokročilé Unixové Nástroje)

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

Instalace a konfigurace web serveru. WA1 Martin Klíma

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

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

MS WINDOWS II. Jádro. Správa objektů. Správa procesů. Zabezpečení. Správa paměti

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

WSH Windows Script Hosting. OSY 2 Přednáška číslo 2 opravená verze z

awk programovatelný filtr

Operační systémy. Cvičení 4: Programování v C pod Unixem

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

Programovací jazyk Pascal

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

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

Matematika v programovacích

PRACUJEME S SHELLEM Ať žije BASH.

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

konec šedesátých let vyvinut ze systému Multics původní účel systém pro zpracování textů autoři: Ken Thompson a Denis Ritchie systém pojmnoval Brian

Práce se soubory. Základy programování 2 Tomáš Kühr

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

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

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

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

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

Konečný automat. Jan Kybic.

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

DUM 15 téma: Další příkazy příkazové řádky

Práce se soubory. Úvod do programování 2 Tomáš Kühr

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

VISUAL BASIC. Práce se soubory

NPRG030 Programování I, 2010/11

Tahák na UOS 2008/2009

UŽIVATEL, SKUPINA, PROCES

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

grep a regulární výrazy

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

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

Transkript:

Operační systémy IOS 2010/2011 Tomáš Vojnar ÚÓ Ò Ö ØºÚÙØ ÖºÞ Vysoké učení technické v Brně Fakulta informačních technologií Božetěchova 2, 612 66 Brno Shell a utlity UNIXu p.1/66

Programování v UNIXu: přehled Shell a utlity UNIXu p.2/66

Nástroje programátora Prostředí pro programování zahrnuje: API OS a různých aplikačních knihoven, CLI a GUI, editory, překladače a sestavovače/interprety, ladící nástroje, nástroje pro automatizaci překladu,... dokumentace. CLI a GUI v UNIXu: CLI: shell (sh, ksh, csh, bash, dash,...) GUI: X-Window Shell a utlity UNIXu p.3/66

X-Window Systém Základní charakteristiky: grafické rozhraní typu client-server, nezávislé na OS, umožňující vzdálený přístup, otevřená implementace: XFree86/X.Org, mechanismy, ne politika výhoda či nevýhoda? X-server: zobrazuje grafiku, ovládá grafický HW, myš, klávesnici...; s aplikacemi a správcem oken komunikuje přes X-protokol. Window Manager: správce oken (dekorace, změna pozice/rozměru,...); s aplikacemi komunikuje přes ICCM protokol (Inter-Client Communication Protocol). Knihovna ÜÐ : standardní rozhraní pro aplikace, implementuje X-protokol, ICCM,... X application xlib libc kernel HW X protocol Network X server libc kernel HW Display Keyboard Shell a utlity UNIXu p.4/66

Vzdálený přístup přes X-Window Spuštění aplikace s GUI ze vzdáleného počítače: lokální systém: Ü Ó Ø ººº vzdálený systém: ÜÔÓÖØ ÁËÈÄ ººº a spuštění aplikace tunelování přes ssh: ¹ Vnořené GUI ze vzdáleného počítače: Ò Ø. Konkurence X-Window pro vzdálený přístup mj. VNC (Virtual Network Computing): vzdálený grafický přístup, client-server systém, možnost odpojení a zpětného připojení klienta k serveru, přenos bitmap, nezávislé na OS, implementováno i pod X-Window. Shell a utlity UNIXu p.5/66

Editory, Ú Ñ Textové editory běžné v UNIXu: v terminálu: Ú, Ú Ñ, Ñ,... grafické: Ú Ñ, Ü Ñ, Ò Ø,... Tři režimy vi, vim: p,p,yy,... Command mode Shift+ZZ a,i,o,r, A,I,O,R,... Esc Esc, Enter : Insert mode Command line q,q!,wq,... editing Shell a utlity UNIXu p.6/66

Užitečné příkazy ve Ú Ñ Mazání smaže a vloží do registru: znak: Ü/ řádek: konec/začátek řádku: Ò / ÀÓÑ konec/začátek slova: Û / konec/začátek odstavce: } / { do znaku: Ø znak Změna: Ö, Ê a, Û,, + Ò /ÀÓÑ, Ð, Ø+ukončující znak,... Vložení textu do registru: ÝÝ, ÝÛ, ÝÐ, ÝØ+ukončující znak,... Vložení registru do textu: Ô/È Bloky: (Ë Ø¹Î+šipky)/( ØÖйÎ+šipky)+Ý /,... Shell a utlity UNIXu p.7/66

Vícenásobná aplikace: číslo+příkaz (např. ) undo/redo: Ù / ØÖÐ¹Ê Opakování posledního příkazu: º (tečka) Vyhledání:» regulární výraz Aplikace akce po vzorek:» regulární výraz Shell a utlity UNIXu p.8/66

Regulární výrazy Regulární výrazy jsou nástrojem pro konečný popis případně nekonečné množiny řetězců. Jejich uplatnění je velmi široké nejde jen o vyhledávání ve Ú Ñ! Základní regulární výrazy (existují také rozšířené RV viz dále): znak význam obyčejný znak daný znak. libovolný znak * 0 n výskytů předchozího znaku [množina] znak z množiny, např: [0-9A-Fa-f] [^množina] znak z doplňku množiny \ ruší řídicí význam následujícího znaku ^ začátek řádku $ konec řádku [[:k:]] znak z dané kategorie k podle locale Příklad: "^ *\* [0-9][0-9]* *$" Shell a utlity UNIXu p.9/66

Příkazová řádka ve Ú Ñ Uložení do souboru: Û, případně Û Vyhledání a změna: řádky» regulární výraz» regulární výraz (» ) Adresace řádků: číslo řádku, interval (Ü Ý), aktuální řádek (º), poslední řádek ( ), všechny řádky (±), nejbližší další řádek obsahující řetězec (»řetězec»), nejbližší předchozí řádek obsahující řetězec ( řetězec ) Příklad vydělení čísel 10: :%s/\([0-9]*\)\([0-9]\)/\1.\2/ Shell a utlity UNIXu p.10/66

Základní dokumentace v UNIXu Ñ Ò, Ò Ó,»Ù Ö» Ö» Ó,»Ù Ö»ÐÓ Ð» Ö» Ó, HOWTO, FAQ,..., README, INSTALL,... Ñ Ò (Ñ Ò Ò» Ø»Ô Û je rozdělen do sekcí Ò Ñ ): 1. Executable programs or shell commands 2. System calls (functions provided by the kernel) 3. Library calls (functions within program libraries) 4. Special files (usually found in» Ú) 5. File formats and conventions, e.g., 6. Games 7. Miscellaneous (including macro packages and conventions) 8. System administration commands (usually only for root) 9. Kernel routines (Non standard) ÔÖÓÔÓ Ò Ñ kde všude se v Ñ Ò mluví o Ò Ñ. Shell a utlity UNIXu p.11/66

Bourne shell Shell a utlity UNIXu p.12/66

Skriptování: Interpret: program, který provádí činnost popsanou v souboru programu. Skript: textový soubor s programem pro interpret. Nevýhody: pomalejší, je třeba interpret. Výhody: nemusí se překládat (okamžitě spustitelné), čitelný obsah programu. Spuštění skriptu v UNIXu: sh skript.sh # explicitní volání interpretu chmod +x skript.sh # nastaví příznak spustitelnosti./skript.sh # spuštění../skript.sh # spuštění v aktuálním shellu Shell a utlity UNIXu p.13/66

Magic number = číslo uvedené na začátku souboru a charakterizující jeho obsah: U spustitelných souborů jádro zjistí na základě magic number, jak soubor spustit: tj. u binárních programů jejich formát určující způsob zevedení do paměti, u intepretovaných programů pak, který interpret použít (první řádek:» Ø» ÒØ ÖÔÖ Ø). Výhoda: možnost psát programy v libovolném skriptovacím jazyku. Příklady: #!/bin/sh #!/bin/ksh #!/bin/csh #!/usr/bin/perl #!/usr/bin/python \177ELF - skript pro Bourne shell - skript pro Korn shell - skript pro C shell - skript v Perlu - skript v Pythonu - binární program - formát ELF Shell a utlity UNIXu p.14/66

Speciální znaky (metaznaky) Jsou interpretovány shellem, znamenají provedení nějaké speciální operace. Jejich speciální význam lze zrušit například znakem \ těsně před speciálním znakem. Poznámky: znak význam a příklad použití # poznámka do konce řádku echo "text" # poznámka Shell a utlity UNIXu p.15/66

Přesměrování vstupu a výstupu: znak význam a příklad použití > přesměrování výstupu, přepíše soubor echo "text" >soubor # přesměrování stdout příkaz 2>soubor # přesměrování stderr příkaz [n]>soubor # n je číslo, implicitně 1 Čísla zde slouží jako popisovače otevřených souborů (file handle). Standardně používané a otevírané popisovače: stdin=0 standardní vstup (klávesnice) stdout=1 std. výstup (obrazovka) stderr=2 std. chybový výstup (obrazovka) Shell a utlity UNIXu p.16/66

znak >& význam a příklad použití duplikace popisovače pro výstup echo "text" >&2 # stdout do stderr příkaz >soubor 2>&1 # přesm. stderr i stdout příkaz 2>&1 >soubor # stdout do souboru, # stderr na obrazovku m>&n # m a n jsou čísla >> přesměrování výstupu, přidává do souboru echo "text" >> soubor příkaz 2>>log-soubor Shell a utlity UNIXu p.17/66

znak význam a příklad použití < přesměrování vstupu příkaz < soubor <<token přesměrování vstupu, čte ze skriptu až po token, který musí být samostatně na řádku tzv. here document cat >soubor << END jakýkoli text, i $PROMENNA kromě ukončovacího řádku END Varianty: <<\token quoting jako, dále žádná expanze <<-token možno odsadit tabelátory Shell a utlity UNIXu p.18/66

Zástupné znaky ve jménech souborů: znak význam a příklad použití * zastupuje libovolnou sekvenci libovolných znaků, shell vyhledá všechna odpovídající jména souborů: ls *.c ls *archiv*gz ls.*/*.conf # skryté soubory.* Poznámka: Není nutné v každém programu zpracovávat tyto expanzní znaky. Poznámka: Pozor na limit délky příkazového řádku!? zastupuje libovolný (jeden) znak jména souboru ls x???.txt ls soubor-?.txt [množina] zastupuje jeden znak ze zadané množiny ls [A-Z]* ls soubor-[1-9].txt Shell a utlity UNIXu p.19/66

Skládání příkazů: znak význam a příklad použití příkaz je zaměněno za standardní výstup příkazu (command substitution) ls -l which sh DATUM= date +%Y-%m-%d # ISO formát echo Přihlášeno who wc -l uživatelů přesměrování Ø ÓÙØ procesu na Ø Ò dalšího procesu, slouží pro vytváření kolon procesů-filtrů: ls more cat /etc/passwd awk -F: {print $1} sort příkaz tee soubor příkaz Shell a utlity UNIXu p.20/66

znak význam a příklad použití ; sekvence příkazů na jednom řádku ls ; echo ; ls / provede následující příkaz, pokud předchozí neuspěl (exitcode<>0) cc program.c echo Chyba překladu && provede následující příkaz, pokud předchozí uspěl (exitcode=0) cc program.c &&./a.out Shell a utlity UNIXu p.21/66

Spouštění příkazů: znak význam a příklad použití (příkazy) spustí subshell, který provede příkazy ( echo "Text: " cat soubor echo "konec" ) > soubor2 & spustí příkaz na pozadí (pozor na výstupy programu) program & Práce s proměnnými: $ zpřístupnění hodnoty proměnné echo $TERM Shell a utlity UNIXu p.22/66

Rušení významu speciálních znaků (quoting): Znak \ ruší význam jednoho následujícího speciálního znaku (i znaku "nový řádek"). echo \* text \* \\ echo "fhgksagdsahfgsjdagfjkdsaagjdsagjhfdsa\ jhdsajfhdsafljkshdafkjhadsk" echo 5 \> 2 text \$TERM Uvozovky ruší význam speciálních znaků kromě: ÔÖÓÑ ÒÒ, Ô Þ a \. echo 3 * 4 = 12 # chyba, pokud # jsou v adresáři soubory echo "3 * 4 = 12" echo "Dnešní datum: date " echo "PATH=$PATH" echo "\ <\"test\"> *** date *** $PATH *** " Apostrofy ruší speciální význam všech znaků v řetězci. echo $<>* jakýkoli text kromě apostrofu echo toto -> \ <- je apostrof echo *\** \" $PATH ls <> \ Shell a utlity UNIXu p.23/66

Postup při hledání příkazů Po zadání příkazu postupuje shell následovně: 1. Test, zda se jedná o funkci nebo zabudovaný příkaz shellu (např. ), a případné provedení této funkce/příkazu. 2. Pokud se jedná o příkaz zadaný i s cestou (např.» Ò» ), pokus provést program s příslušným jménem v příslušném adresáři. 3. Postupné prohlížení adresářů v È ÌÀ. 4. Pokud program nenalezne nebo není spustitelný, hlásí chybu. Poznámka: Vlastní příkazy do ÀÇÅ» Ò a přidat do È ÌÀ. Shell a utlity UNIXu p.24/66

Vestavěné příkazy Které příkazy jsou vestavěné závisí na použitém interpretu. Příklad:, Û Ø,... Výhoda: rychlost provedení. Ostatní příkazy jsou běžné spustitelné soubory. Shell a utlity UNIXu p.25/66

Příkaz Ú Ð Ú Ð Ô Þ: Jednotlivé argumenty jsou načteny (a je proveden jejich rozvoj), výsledek je konkatenován, znovu načten (a rozvinut) a proveden jako nový příkaz. Možnost za běhu sestavovat příkazy (tj. program) na základě aktuálně čteného obsahu souboru, vstupu od uživatele apod. Příklady: echo "text > soubor" eval echo "text > soubor" eval echo x=1 ; echo "x=$x" Shell a utlity UNIXu p.26/66

Ukončení skriptu Ukončení skriptu: Ü Ø ÐÓ vrací exit-code ÐÓ nebo exit-code předchozího příkazu, vrácenou hodnotu lze zpřístupnit pomocí, možné hodnoty: 0 O.K. <>0 chyba Spuštění nového kódu: Ü Ô Þ: nahradí kód shellu provádějícího Ü kódem daného příkazu, spuštění zadaného programu je rychlé nevytváří se nový proces, bez parametru umožňuje přesměrování vstupu/výstupu uvnitř skriptu. Shell a utlity UNIXu p.27/66

Správa procesů ps výpis stavu procesů nohup proces nekončí při odhlášení kill posílání signálů procesům wait čeká na dokončení potomka/potomků Příklady: ps ax # všechny procesy nohup program # pozor na vstup/výstup kill -9 1234 # nelze odmítnout Shell a utlity UNIXu p.28/66

Subshell Subshell se spouští v případě použití:./skript.sh (příkazy) spuštění skriptu (i na pozadí) skupina příkazů Subshell dědí proměnné prostředí, nedědí lokální proměnné (tj. ty, u kterých nebyl proveden ÜÔÓÖØ). Změny proměnných a dalších nastavení v subshellu se neprojeví v původním shellu! Provedení skriptu aktuálním interpretem: příkaz º např. º Ö ÔØ Posloupnost příkazů ß Ô ÞÝ Ð stejné jako µ, ale nespouští nový subshell. Shell a utlity UNIXu p.29/66

Příklad možné použití ß Ð (a současně demonstrace jedné z programovacích technik používaných v shellu): # Changing to a log directory. cd $LOG_DIR if [ " pwd "!= "$LOG_DIR" ] # or if [ "$PWD"!= "$LOG_DIR" ] # Not in /var/log? then echo "Cannot change to $LOG_DIR." exit $ERROR_CD fi # Doublecheck if in right directory, before messing with log file. # However, a far more efficient solution is: cd /var/log { echo "Cannot change to $LOG_DIR." >&2 exit $ERROR_CD; } Shell a utlity UNIXu p.30/66

Proměnné Rozlišujeme proměnné: lokální (nedědí se do subshellu) PROM=hodnota PROM2="hodnota s mezerami" proměnné prostředí (dědí se do subshellu) PROM3=hodnota export PROM3 # musíme exportovat do prostředí Příkaz ÜÔÓÖØ: ÜÔÓÖØ ÞÒ Ñ ÔÖÓÑ ÒÒ exportuje proměnné do prostředí, které dědí subshell, bez parametru vypisuje obsah prostředí. Shell a utlity UNIXu p.31/66

Přehled standardních proměnných: $HOME $PATH $MAIL $USER jméno domovského adresáře uživatele seznam adresářů pro hledání příkazů úplné jméno poštovní schránky pro e-mail login jméno uživatele $SHELL úplné jméno interpretu příkazů $TERM $IFS typ terminálu (viz termcap/terminfo) obsahuje oddělovače položek na příkazové řádce implicitně mezera, tabelátor a nový řádek $PS1 výzva interpretu na příkazové řádce implicitně znak $ $PS2 výzva na pokračovacích řádcích implicitně znak > Shell a utlity UNIXu p.32/66

Další standardní proměnné: $$ číslo = PID interpretu $0 jméno skriptu (pokud lze zjistit) $1..$9 argumenty příkazového řádku (dále pak ${n} pro n 10) $*/$@ všechny argumenty příkazového řádku "$*" všechny argumenty příkazového řádku jako 1 argument v "" "$@" všechny argumenty příkazového řádku, individuálně v "" $# počet argumentů $? exit-code posledního příkazu $! PID posledního příkazu na pozadí $- aktuální nastavení shellu Shell a utlity UNIXu p.33/66

Příklady: echo "skript: $0" echo první argument: $1 echo všechny argumenty: $* echo PID=$$ Použití proměnných: $PROM text mezi jménem a dalším textem musí být oddělovací znak ${PROM}text není nutný další oddělovač ${PROM-word} word pokud nenastaveno ${PROM+word} word pokud nastaveno, jinak nic ${PROM=word} pokud nenastaveno, přiřadí a použije word ${PROM?word} pokud nenastaveno, tisk chybového hlášení word a konec (exit) Shell a utlity UNIXu p.34/66

Příkaz ÒÚ: ÒÚ Ò Ø Ú Ò ÔÖÓÑ ÒÒ ÔÖÓ Ö Ñ Ö ÙÑ ÒØÝ spustí program s nastaveným prostředím, bez parametrů vypíše prostředí. Proměnné pouze pro čtení: Ö ÓÒÐÝ ÞÒ Ñ ÔÖÓÑ ÒÒ označí proměnné pouze pro čtení, subshell toto nastavení nedědí. Posun argumentů skriptu: příkaz Ø, posune ½ ¹ ¾ ¹... Shell a utlity UNIXu p.35/66

Čtení ze standardního vstupu Příkaz Ö ÞÒ Ñ ÔÖÓÑ ÒÒ čte řádek ze Ø Ò a přiřazuje slova do proměnných, do poslední dá celý zbytek vstupního řádku. Příklady: echo "x y z" (read A B; echo "A= $A B= $B ") IFS=","; echo "x,y z" (read A B; echo "A= $A B= $B ") IFS=":"; head -1 /etc/passwd (read A B; echo "$A") Shell a utlity UNIXu p.36/66

Příkazy větvení Příkaz : if seznam příkazů then seznam příkazů elif seznam příkazů then seznam příkazů else seznam příkazů fi Příklad použití: if [ -r soubor ]; then cat soubor else echo soubor nelze číst fi Shell a utlity UNIXu p.37/66

Testování podmínek Testování podmínek: konstrukce Ø Ø ÚÖ Þ nebo ÚÖ Þ, výsledek je v. výraz význam -d file je adresář -f file není adresář -l string délka řetězce -n string neprázdný řetězec string neprázdný řetězec -z string prázdný řetězec -r file je čitelný soubor -w file je zapisovatelný soubor -x file je proveditelný soubor -t fd deskriptor fd je spojen s terminálem výraz str1 = str2 str1!= str2 int1 -eq int2 int1 -ne int2 int1 -gt int2 > int1 -ge int2 >= int1 -lt int2 < int1 -le int2 <= význam rovnost řetězců nerovnost řetězců rovnost čísel nerovnost čísel! expr negace výrazu expr1 -a expr2 and expr1 -o expr2 or \( \) závorky Shell a utlity UNIXu p.38/66

Příkaz : case výraz in vzor { vzor }* ) seznam příkazů ;; esac Příklad použití: echo -n "zadejte číslo: " read reply case $reply in "1") echo "1" ;; "2" "4") echo "2 nebo 4" ;; *) echo "něco jiného" ;; esac Shell a utlity UNIXu p.39/66

Cykly Cyklus ÓÖ: for identifikátor [ in seznam slov ] # bez []: $1... do seznam příkazů done Příklad použití: for i in *.txt ; do echo Soubor: $i done Shell a utlity UNIXu p.40/66

Cyklus Û Ð : while seznam příkazů # poslední exit-code se použije do seznam příkazů done Příklad použití: while true ; do date; sleep 1 done Cyklus ÙÒØ Ð: until seznam příkazů # poslední exit-code se použije do seznam příkazů done Shell a utlity UNIXu p.41/66

Ukončení/pokračování cyklu: break, continue Příklady: stop=-1 while [ $stop -ne 0 ]; do echo -n "zadejte číslo: " read stop echo $stop if [ $stop -ge 10 ] ; then echo "příliš velké" break fi done Shell a utlity UNIXu p.42/66

Zpracování signálů Příkaz ØÖ Ô: ØÖ Ô Ô Þ ß Ò ÐÐ při výskytu signálu provede příkaz, pro ladění lze užít ØÖ Ô Ô Þ Í. Příklad zpracování signálu: #!/bin/sh trap echo Ctrl-C; exit 1 2 # ctrl-c = signál č.2 while true; do echo "cyklíme..." sleep 1 done Shell a utlity UNIXu p.43/66

Vyhodnocování výrazů Příkaz ÜÔÖ ÚÖ Þ: Vyhodnotí výraz, komponenty musí být odděleny mezerami (pozor na quoting!). Operace podle priority: \* / % + - = \> \>= \< \<=!= \& \ Lze použít závorky: \( \) Příklady: V= expr 2 + 3 \* 4 ; echo $V expr 1 = 1 \& 0!= 1 ; echo $? expr "$P1" = "$P2" # test obsahu proměnných V= expr $V + 1 # V++ Shell a utlity UNIXu p.44/66

Řetězcové operace v ÜÔÖ: String : Regexp match String Regexp vrací délku podřetězce, který vyhovuje Ê ÜÔ, nebo 0 substr String Start Length získá podřetězec od zadané pozice index String Charlist vrací pozici prvního znaku ze seznamu, který se najde length String vrací délku řetězce Shell a utlity UNIXu p.45/66

Korn shell Rozšíření Bourne shellu, POSIX shell (starší verze základem pro definici POSIX), jeho důležité vlastnosti jsou zabudovány rovněž v bash-i. Příkaz Ð : alias rm= rm -i Historie příkazů: možnost vracet se k již napsaným příkazům a editovat je (bash: viz šipka nahoru a dolů a Ê.) Vylepšená aritmetika: příkaz Ð Ø, např. Ð Ø Ü ¾ ¾, operace: ¹» ± zkrácený zápis a vyhodnocení bez spouštění dalšího procesu: (( x=2 )) (( x=2*x )) (( x++ )) echo $x Shell a utlity UNIXu p.46/66

Speciální znak vlnovka : ~ $HOME domovský adresář ~user domovský adresář daného uživatele ~+ $PWD pracovní adresář ~- $OLDPWD předchozí prac. adresář Primitivní menu: select identifikátor [in seznam slov] do seznam příkazů done funguje jako cyklus; nutno ukončit! Shell a utlity UNIXu p.47/66

Vylepšené testování: [[ ]] (výraz) výraz && výraz výraz výraz Zbytek stejně jako test. Substituce příkazů: command $(command) Pole: declare -a p p[1]=a echo ${p[1]} # pole (deklarace je nepovinná) Shell a utlity UNIXu p.48/66

Příkaz ÔÖ ÒØ : formátovaný výpis na standardní výstup. Zásobník pro práci s adresáři: ÔÙ uložení adresáře do zásobníku, ÔÓÔ přechod do adresáře z vrcholu zásobníku, Ö výpis obsahu zásobníku. Shell a utlity UNIXu p.49/66

Příkaz Ø bez parametrů vypíše proměnné, jinak nastavuje vlastnosti shellu: parametr akce ¹Ò neprovádí příkazy ¹Ù chyba pokud proměnná není definována ¹Ú opisuje čtené příkazy ¹Ü opisuje prováděné příkazy ¹¹ další znaky jsou argumenty skriptu vhodné pro ladění skriptů. Příklady: set -x -- a b c * for i ; do echo $i; done Shell a utlity UNIXu p.50/66

Omezení zdrojů Restricted shell: zabránění shellu (a jeho uživateli) provádět jisté příkazy (použití, přesměrování, změna È ÌÀ, spouštění programů zadaných s cestou, použití Ü...). ÙÐ Ñ Ø: omezení prostředků dostupných shellu a procesům z něho spuštěným (počet procesů, pamět procesu, počet otevřených souborů,...). ÕÙÓØ : omezení diskového prostoru pro uživatele. Shell a utlity UNIXu p.51/66

Funkce Definice funkce: function ident () { seznam příkazů } Parametry jako u skriptu: ½... Ukončení funkce s Ü Ø¹Ó : Ö ØÙÖÒ Ü Ø¹Ó. Definice lokální proměnné: ØÝÔ Ø ÔÖÓÑ. Možnost rekurze. Shell a utlity UNIXu p.52/66

Správa prací job control Job (úloha) v shellu odpovídá prováděné koloně procesů (pipeline). Při spuštění kolony se vypíše Ô, kde je identifikace úlohy a Ô identifikace posledního procesu v koloně. Příkaz Ó vypíše aktuálně prováděné úlohy. Úloha může být spuštěna na popředí, nebo pomocí ² na pozadí. Úloha běžící na popředí může být pozastavena pomocí a přesunuta na pozadí pomocí (a zpět pomocí ). Explicitní identifikace úlohy v rámci,, ÐÐ,...: %jid Shell a utlity UNIXu p.53/66

Interaktivní a log-in shell Shell může být spuštěn v různých režimech pro bash máme dva významné módy, které se mohou kombinovat: interaktivní bash (vstup/výstup z terminálu) a log-in shell (parametr ÐÓ Ò). Start, běh a ukončení interpretu příkazů závisí na režimu v němž shell běží. Např. pro interaktivní log-in bash platí: 1. úvodní sekvence: /etc/profile (existuje-li) a dále ~/.bash_profile, ~/.bash_login, nebo ~/.profile 2. tisk $PROMPT, zadávání příkazů 3. exit,^d,logout ukončení interpretu s provedením ~/.bash_logout. Výběr implicitního interpretu příkazů:» Ø»Ô Û change shell Shell a utlity UNIXu p.54/66

Utility UNIXu Shell a utlity UNIXu p.55/66

Utiliy UNIXu: užitečné programy (asi 150), součást normy SUSv3, různé nástroje na zpracování textu atd. Přehled základních programů: awk jazyk pro zpracování textu, výpočty atd. cmp porovnání obsahu souborů po bajtech cut výběr sloupců textu dd kopie (a konverze) části souboru bc kalkulátor s neomezenou přesností Pokračování na dalším slajdu... Shell a utlity UNIXu p.56/66

Přehled základních programů pokračování... df volné místo na disku diff rozdíl textových souborů (viz i tkdiff) du zabrané místo na disku file informace o typu souboru find hledání souborů getopt(s) předzpracování argumentů skriptů grep výběr řádků textového souboru iconv překódování znakových sad nl očíslování řádků od výpis obsahu binárního souboru patch oprava textu podle výstupu diff sed neinteraktivní editor textu sort řazení řádků split rozdělení souboru na menší tr záměna znaků v souboru uniq vynechání opakujících se řádků xargs zpracování argumentů (např. po find) Shell a utlity UNIXu p.57/66

Program Ö Ô Umožňuje výběr řádků podle regulárního výrazu. Existují tři varianty: Ö Ô rychlejší, ale neumí regulární výrazy Ö Ô základní regulární výrazy Příklady použití: fgrep -f seznam soubor grep ^ *[A-Z] soubor egrep (Jan Honza) +Novák soubor Ö Ô rozšířené regulární výrazy Rozšířené (extended) regulární výrazy: znak význam + 1 n výskytů předchozího podvýrazu? 0 1 výskyt předchozího podvýrazu {m} m výskytů předchozího podvýrazu {m,n} m n výskytů předchozího podvýrazu (r) specifikuje podvýraz, např: (ab*c)* odděluje dvě varianty, např: (ano ne)? Shell a utlity UNIXu p.58/66

Manipulace textu Program ÙØ umožňuje výběr sloupců textu. cut -d: -f1,5 /etc/passwd cut -c1,5-10 soubor # znaky na pozici 1 a 5-10 Program : Neinteraktivní editor textu (streaming editor). Kromě základních editačních operací umožňuje i podmíněné a nepodmíněné skoky (a tedy i cykly). sed s/novák/novák/g soubor sed s/^[^:]*/-/ /etc/passwd sed -e "/$xname/p" -e "/ /d" soubor_seznam sed /tel:/y/0123456789/xxxxxxxxxx/ soubor sed -n 3,7p soubor sed 1a\ tento text bude přidán na 2. řádek soubor sed -n /start/,/stop/p soubor Shell a utlity UNIXu p.59/66

Program Û : AWK je programovací jazyk vhodný pro zpracování textu, výpočty atd. awk {s+=$1}end{print s} soubor_cisel awk {if(nf>0){s+=$1;n++}} END{print n " " s/n} soubor_cisel awk -f awk-program soubor Program Ô Ø : Spojení odpovídajících řádků vstupních souborů. paste -d\ sloupec1.txt sloupec2.txt Shell a utlity UNIXu p.60/66

Porovnání souborů a patchování Program ÑÔ: Porovná dva soubory nebo jejich části byte po bytu. cmp soubor1 soubor2 Program : Výpis rozdílů textových souborů (porovnává řádek po řádku). diff old.txt new.txt diff -C 2 old.c new.c diff -urn dir1 dir2 Program Ô Ø : Změna textu na základě výstupu z programu. Používá se pro správu verzí programů (cvs, svn,...). Shell a utlity UNIXu p.61/66

Hledání soboru Program Ò : Vyhledání souboru podle zadané podmínky. find. -name *.c find / -type d find / -size +1000000c -exec ls -l {} \; find / -size +1000000c -execdir command {} \; find / -type f -size -2 -print0 xargs -0 ls -l find / -type f -size -2 -exec ls -l {} + find. -mtime -1 find. -mtime +365 -exec ls -l {} \; Shell a utlity UNIXu p.62/66

Řazení Program ÓÖØ: seřazení řádků. sort soubor sort -u -n soubor_čísel sort -t: -k3,3n /etc/passwd Program ÙÒ Õ: odstranění duplicitních řádku ze seřazeného souboru. Program ÓÑÑ: výpis unikátních/duplicitních řádků seřazených souborů. comm soubor1 soubor2 # 3 sloupce comm -1-2 s1 s2 # jen duplicity comm -2-3 s1 s2 # pouze v s1 Shell a utlity UNIXu p.63/66

Další nástroje programátora skriptovací jazyky a interprety (perl, python, tcl,...) překladače (cc/gcc, c++/g++,...) assemblery (nasm,...) linker ld (statické knihovny.a, dynamické knihovny.so) dynamické knihovny používané programem: ldd, knihovny standardně v /lib a /usr/lib, cesta k případným dalším knihovnám: LD_LIBRARY_PATH, run-time sledování funkcí volaných z dynamických knihoven: ltrace. Shell a utlity UNIXu p.64/66

Program Ñ : automatizace (nejen) překladu a linkování, příklad souboru Ñ Ð (pozor na odsazení tabelátory): test: test.o tisk.o gcc $(CFLAGS) -o test test.o tisk.o test.o: test.c gcc $(CFLAGS) -c test.c tisk.o: tisk.c gcc $(CFLAGS) -c tisk.c clean: rm -f *.o test použití: Ñ, Ñ Ä Ë ¹, Ñ Ð Ò. Shell a utlity UNIXu p.65/66

automatizovaná konfigurace GNU ÙØÓÓÒ : Generuje na základě šablony založené na volání předpripravených maker skripty pro konfiguraci překladu (určení platformy, ověření dostupnosti knihoven a nástrojů, nastavení cest,...), překlad a instalaci programů šířených ve zdrojové podobě. Používá se mj. spolu s ÙØÓÑ (usnadnění tvorby makefile) a ÙØÓ Ò (usnadnění tvorby šablon pro ÙØÓÓÒ ). Použití vygenerovaných skriptů: º»ÓÒ ÙÖ, Ñ, Ñ Ò Ø ÐÐ ladění: debugger např. ddd postavený na gdb (překlad s ladícími informacemi gcc -g...) sledování volání jádra: strace profiling: profiler např. gprof (překlad pomocí gcc -pg...) Shell a utlity UNIXu p.66/66