Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Úvod do UNIXu (5 th round) David Hoksza

Podobné prezentace


Prezentace na téma: "Úvod do UNIXu (5 th round) David Hoksza"— Transkript prezentace:

1 Úvod do UNIXu (5 th round) David Hoksza

2 Program vs. proces program  kus kódu uložený na záznamovém zařízení proces  spuštěný (ne nutně běžící) program  kontext procesu paměť (adresový prostor) soubory proměnné stav registrů credentials (UID, GID, …)…  identifikace přes PID (Proces ID)

3 Stavy procesů Process table Ready Asleep fork() Disk Ready Asleep Kernel running User running Preempted wakeup Zombie Memory swap out swap in wakeup swap out schedule sleep exit return system call, interrupt process state PID PPID UID prioriy signals sent pointer to memory data …

4 Uživatelská relace initinit getty login login: passwd: login login: passwd: sh $ sh $ fork() wait() ftp ftp> ftp ftp> exit() exec() PID 1 PID 271PID 312 Vytvoří synovský proces Přepíše adresový prostor vytvářecího procesu Čeká na ukončení

5 Seznam procesů ps [options]  výpis procesů  -A všechny procesy (TTY ? jsou neinteraktivní procesy)  -l long – podrobný výpis  r běžící procesy  -C cmd_list seznam procesů s názvem z cmd_listu (seznam oddělený čárkamy)  -U uid_list, -u user_list seznam procesů s vlastníky (U – efektivní UID/jméno, u – skutečné UID/jméno) ze seznamu  u podrobnosti  -p processID vypíše proces s daným ID  -t tty seznam procesů běžících na terminálu tty  -H stromová struktura top  interaktivní seznam procesů se statistikama

6 Práce s procesy kill [-signal] PID  pošle signal procesu PID  defaultně ukončí proces cmd &  pustí program v pozadí wait PID  čeká na dokončení procesu sort big-data > sorted_data & [1]3423 wait 3423 bg job_name  přesune job job_name (jméno v ps) do pozadí fg job_name  přesune proces job job_name do popředí trap cmd signals  když shell přijme signál ze signals (odděleno mezerami) provede cmd

7 Signály kill –l, trap -l … seznam signálů HUP1restart programu INT2přerušení (CTRL+c) QUIT3přerušení (CTRL+\) ABRT6volání funkce abort FPE8aritmetická chyba KILL9ukončení procesu (nemaskovatelné) TERM15ukončení procesu (maskovatelné) STOP17zastavení procesu CONT19spuštění procesu CHLD20ukončení potomka

8 Shell obslužný program pro komunikaci se sytémem  interaktivní zpracování zadávání příkazů v terminálu  neinteraktivní zpracování dávkový soubor programovací jazyk (proměnné, tok programu, …) a zároveň interpret typ shellu určuje možnosti práce se systémem (historie, speciální klávesy, …) shelly  sh – Bourne shell  bash – Bourne Again shell  (t)csh – C shell  ksh – Korn shell

9 Shell - verze shell (sh) Steve Bourne (1979) test, funkce, … (1980) C shell (csh) Bill Joy (1979) BSD historie aliasy Tenex C shell (tcsh) Ken Greer (1979) dokončování jmen souborů editace příkazové řádky Korn shell (ksh) David Korn (1980-) Bourne-again shell (bash) Brian Fox (1987) GNU Project

10 Skripty skript je posloupnost příkazů kód skriptu je pušťen v nové instanci shellu provádění skriptu je ekvivalentní zadávání příkazů z klávesnice “online” spouštění  sh script_name ./script_name uživatel musí mít r a x práva první řádka skriptu určuje shell, který bude provádět příkazy  #!/bin/bash  script_name skript musí být umístěn v adresáři z proměnné prostředí PATH

11 Proměnné case sensitive proměnné prostředí obvykle velkými písmeny, ostatní malými nastavení  name=value použití  $name, ${name} netypované  řetězcové i=3+5; echo $i declare i  číselné (pouze celočíselná aritmetika) declare –i i; i=3+5; echo $i i=$((3+5)); echo $i součást prostředí (environment) do procesů potomků se předávají pouze exportované proměnné  export variable  set výpis exportovaných proměnných

12 Defaultní proměnné prostředí HOSTNAME  jméno aktuálního stroje IFS  separátory polí (Input Field Separator) PATH  seznam adresářu v kterých hledat příkaz ke spuštění PS1  řetězec promptu (zobrazuje se na začátku řádku při vyčkávání na příkaz) SHELL  defaultní shell PPID  process ID rodiče PWD  aktuální adresář SECONDS  počet sekund běhu aktuálního shellu UID  User ID aktuálního uživatele

13 Podmíněná substituce proměnných ${var:-value}  použij var a není-li definována použij value ${var:=value}  použij var a není-li definována přiřaď do ní hodnotu value ${var:?value}  použij var a není-li definována vytiskni value a proveď exit ${var:+value}  použij value je-li var definovaná, jinak nedělej nic

14 Práce s proměnnými ${#var}  délka proměnné var ${var#pat}, {var##pat}  odebrání vzoru pat zleva (## je hladové) ${var%pat}, {var%pat}  zprava ${var/pat/repl}  nahrazení prvního vzoru pat řetězcem repl ${var//pat/repl}  nahrazení všech vzorů ${var/#pat/repl}  vzor se musí vyskytovat na začátku ${var/%pat/repl}  vzor se musí vyskytovat na konci mv $filename ${filename}~

15 Speciální proměnné (1) $#  počet argumentů $?  návratová hodnota posledního příkazu $$  PID aktuálního procesu  vhodné pro dočasné soubory $!  PID posledního spuštěného procesu prog1 & pid1=$! … wait $pid1

16 Speciální proměnné (2) $0  jméno programu $n, ${n}  hodnota n-tého argumentu (pozice větší než 9 se adresují pomocí {}) $*,  všechny argumenty ($1 $2 ….) “$*”  “$1 $2 ….”  “$1” “$2” …. shift [N]  posun vstupních parametrů o N (defaultně 1) echo $*; shift; echo $* set – arg1 arg2 arg3 …  znovunastaví vstupní proměnné

17 Metaznaky znaky se speciálním významem * ? > < | & [ ] $ ( ) ;, atd. rušení speciálního významu  \ zrušení významu následujícího znaku  “xxx” neruší význam $ ` ”  ‘xxx’

18 Práce s uvozovkami “ “  každý znak mezi uvozovkami se chápe jako literál až na: $ … provádí se expanze proměnné ` … provádí se příkaz mezi ` ` “ … ukončuje ‘ ‘  každý znak mezi uvozovkami se chápe jako literál až na ’ \  znak za \ je chápán jako literál (použití, aby shell nechápal např. argumenty příkazů jako znaky pro expanzi) př.:  echo ‘Single quotes “double quotes”’  echo “Another way how to handle \“double quotes\””  echo “There are `ls | wc –l` files in `pwd`”  echo “Value of variable \$var is $var”

19 Formy příkazů cmd &  spustí cmd v pozadí cmd1; cmd2  posloupnost příkazů { cmd1; cmd2; }  spustí posloupnost jako skupinu v aktuálním shellu ( cmd1; cmd2; )  spustí posloupnost jako skupinu v subshellu cmd1 `cmd2`, cmd1 $(cmd2)  spustí cmd1 s výstupem cmd2 jako argumentem cmd1 && cmd2  AND … spustí cmd2 pouze za podmínky, že se cmd1 podaří (vrátí 0) cmd1 || cmd2  OR … zpustí cmd2, když cmd1 neprojde ! cmd  vrátí 0 když cmd vrátí nenulu a naopak (obrací význam návratové hodnoty)

20 Úkol 1. Vytvořte skript, který najde všechny céčkovské zdrojáky v aktuálním adresáři a jejich název uloží do proměnné definované jako argument skriptu. 2. Spusťte najednou výpis dvou souborů (pomocí 2 příkazů cat) a výstup obou zapište do jednoho výstupního souboru. 3. Napište skript, který pro zadaného uživatele vypíše počet jeho procesů.


Stáhnout ppt "Úvod do UNIXu (5 th round) David Hoksza"

Podobné prezentace


Reklamy Google