vod do UNIXu 5 th round David Hoksza

  • Slides: 20
Download presentation
Úvod do UNIXu (5 th round) David Hoksza david. hoksza@mff. cuni. cz

Úvod do UNIXu (5 th round) David Hoksza david. hoksza@mff. cuni. cz

Program vs. proces n program ¡ n kus kódu uložený na záznamovém zařízení proces

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

Stavy procesů Process table fork() Zombie Ready exit schedule User running return system call,

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

Vytvoří synovský proces Uživatelská relace Přepíše adresový prostor vytvářecího procesu fork() init getty exec()

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

Seznam procesů n ps [options] ¡ ¡ výpis procesů -A n ¡ -l n

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

Práce s procesy n kill [-signal] PID ¡ ¡ n cmd & ¡ n

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

Signály n HUP 1 restart programu INT 2 přerušení (CTRL+c) QUIT 3 přerušení (CTRL+)

Signály n HUP 1 restart programu INT 2 přerušení (CTRL+c) QUIT 3 přerušení (CTRL+) ABRT 6 volání funkce abort FPE 8 aritmetická chyba KILL 9 ukončení procesu (nemaskovatelné) TERM 15 ukončení procesu (maskovatelné) STOP 17 zastavení procesu CONT 19 spuštění procesu CHLD 20 ukončení potomka kill –l, trap -l … seznam signálů

Shell n obslužný program pro komunikaci se sytémem ¡ interaktivní zpracování n ¡ neinteraktivní

Shell n obslužný program pro komunikaci se sytémem ¡ interaktivní zpracování n ¡ neinteraktivní zpracování n n zadávání příkazů v terminálu 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

Shell - verze shell (sh) • Steve Bourne (1979) • test, funkce, … (1980)

Shell - verze shell (sh) • Steve Bourne (1979) • test, funkce, … (1980) Korn shell (ksh) • David Korn (1980 -) Bourne-again shell (bash) • Brian Fox (1987) • GNU Project 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

Skripty n n skript je posloupnost příkazů kód skriptu je pušťen v nové instanci

Skripty n n 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 n n 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 n skript musí být umístěn v adresáři z proměnné prostředí PATH

Proměnné n n n case sensitive proměnné prostředí obvykle velkými písmeny, ostatní malými nastavení

Proměnné n n n case sensitive proměnné prostředí obvykle velkými písmeny, ostatní malými nastavení ¡ n použití ¡ n name=value $name, ${name} netypované ¡ řetězcové n n ¡ číselné (pouze celočíselná aritmetika) n n i=3+5; echo $i 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 n výpis exportovaných proměnných

Defaultní proměnné prostředí n HOSTNAME ¡ n IFS ¡ n aktuální adresář SECONDS ¡

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

Podmíněná substituce proměnných n ${var: -value} ¡ n ${var: =value} ¡ n použij var

Podmíněná substituce proměnných n ${var: -value} ¡ n ${var: =value} ¡ n použij var a není-li definována přiřaď do ní hodnotu value ${var: ? value} ¡ n použij var a není-li definována použij 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

Práce s proměnnými n ${#var} ¡ n ${var#pat}, {var##pat} ¡ n vzor se musí

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

Speciální proměnné (1) n $# ¡ n $? ¡ n návratová hodnota posledního příkazu

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

Speciální proměnné (2) n $0 ¡ n $n, ${n} ¡ n “$1 $2 ….

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

Metaznaky n n n znaky se speciálním významem * ? > < | &

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

Práce s uvozovkami n ““ ¡ každý znak mezi uvozovkami se chápe jako literál

Práce s uvozovkami n ““ ¡ každý znak mezi uvozovkami se chápe jako literál až na: n n ‘‘ ¡ n znak za je chápán jako literál (použití, aby shell nechápal např. argumenty příkazů jako znaky pro expanzi) př. : ¡ ¡ n každý znak mezi uvozovkami se chápe jako literál až na ’ ¡ n $ … provádí se expanze proměnné ` … provádí se příkaz mezi ` ` “ … ukončuje 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” http: //www. csd. uwo. ca/~magi/personal/humour/Computer_Audience/Funny%20 UNIX%20 Shell%20 Commands. html

Formy příkazů n cmd & ¡ n cmd 1; cmd 2 ¡ n AND

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

Úkol 1. 2. 3. Vytvořte skript, který najde všechny céčkovské zdrojáky v aktuálním adresáři

Úkol 1. 2. 3. 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. Spusťte najednou výpis dvou souborů (pomocí 2 příkazů cat) a výstup obou zapište do jednoho výstupního souboru. Napište skript, který pro zadaného uživatele vypíše počet jeho procesů.