Vod do unixu 5 th round
Sponsored Links
This presentation is the property of its rightful owner.
1 / 19

Úvod do UNIXu (5 th round) PowerPoint PPT Presentation


  • 52 Views
  • Uploaded on
  • Presentation posted in: General

Úvod do UNIXu (5 th round). David Hoksza a Jakub Galgonek galgonek @ksi . mff.cuni.cz. 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ů

Download Presentation

Úvod do UNIXu (5 th round)

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Úvod do UNIXu (5th round)

David Hoksza

a Jakub Galgonek

galgonek@ksi.mff.cuni.cz


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)


Stavy procesů

Process table

fork()

Zombie

  • process state

  • PID

  • PPID

  • UID

  • prioriy

  • signals sent

  • pointer to memory

  • data

Ready

Ready

swap out

swap in

exit

schedule

User

running

Kernel

running

return

system call,

interrupt

wakeup

wakeup

sleep

Asleep

Asleep

Preempted

swap out

Memory

Disk


Uživatelská relace

Vytvoří synovský proces

Přepíše adresový prostor vytvářecího procesu

fork()

init

getty

exec()

login

login:

passwd:

Čeká na ukončení

exec()

fork()

ftp

ftp>

sh

$

wait()

exit()

PID 1

PID 271

PID 312


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


Práce s procesy

  • kill[-signal] PID

    • pošle signal procesu PID

    • defaultně ukončí proces

  • cmd &

    • pustí program v pozadí

  • waitPID

    • č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


Signály

  • kill –l, trap -l … seznam signálů


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


Shell - verze

  • shell (sh)

  • Steve Bourne (1979)

  • test, funkce, … (1980)

  • C shell (csh)

  • Bill Joy (1979)

  • BSD

  • historie

  • aliasy

  • Korn shell (ksh)

  • David Korn (1980-)

  • Tenex C shell (tcsh)

  • Ken Greer (1979)

  • dokončování jmen souborů

  • editace příkazové řádky

  • Bourne-again shell (bash)

  • Brian Fox (1987)

  • GNU Project


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


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 všech proměnných


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


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


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}~


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


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é


Metaznaky shellu

  • 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’


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”

  • http://www.csd.uwo.ca/~magi/personal/humour/Computer_Audience/Funny%20UNIX%20Shell%20Commands.html


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í cmd2pouze 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)


  • Login