2. cvičení


Systém procesů, úvod do shellu (Bash)

Výpis a ukončení procesů

Výpis procesů

    
    // UNIX přepínače, -e
    // BSD přepínače, aux

    // Vypíše procesy které ovládá terminál
    roman@virtual ~ $ ps

    // Vypíše procesy vlastněné uživatelem
    roman@virtual ~ $ ps x

    // Procesy vlastněné uživatelem vyjidacek
    roman@virtual ~ $ ps -u vyjidacek

    // Procesy vlastněné uživatelem vyjidacek se zobrazenými sloupci pid, s, cmd
    roman@virtual ~ $ ps -u vyjidacek -o pid,s,cmd

    // Vypíše všechny procesy
    roman@virtual ~ $ ps ax/ps -e

    // Všechny procesy v užitelsky přívětivém formátu
    roman@virtual ~ $ ps aux/ps -ef/ps -eF ()


    // Vypíše všechny procesy ve stromové struktuře
    roman@virtual ~ $ ps auxf/ps -efH

    // Vypíše jen určité sloupce
    roman@virtual ~ $ ps axo pid
    roman@virtual ~ $ ps -eo pid

    // Vypíše proces na základě jména
    roman@virtual ~ $ ps -C bash

    // Vypíše strom procesu
    roman@virtual ~ $ pstree

    // Vypíše strom společně s argumenty
    roman@virtual ~ $ pstree -a

    // Vypíše strom společně s PID
    roman@virtual ~ $ pstree -p
    

Ukončení procesu

    
    // Spustíme libovolný program
    roman@virtual ~ $ gedit

    // Získáme PID
    roman@virtual ~ $ ps x

    // Ukončí aplikaci
    roman@virtual ~ $ kill pid (TERM)

    // Znovu spustíme aplikaci gedit
    roman@virtual ~ $ gedit

    // Zastaví aplikaci
    roman@virtual ~ $ kill -STOP pid

    // Probudí aplikaci
    roman@virtual ~ $ kill -CONT pid

    // Ukončí proces okamžitě
    roman@virtual ~ $ kill -KILL pid

    // Seznam všech signálů
    roman@virtual ~ $ kill -l

    // Znovu spustíme aplikaci gedit
    roman@virtual ~ $ gedit

    // Ukončí všechny instance programu gedit
    roman@virtual ~ $ killall gedit

    // Ukončí terminál i se všemi potomky
    roman@virtual ~ $ kill -KILL pid_terminalu
    

Řízení úloh

    
    // Spuštění úlohy na pozadí
    roman@virtual ~ $ gnome-calculator &
    [1] 4468

    // Vypíše bežící procesy
    roman@virtual ~ $ jobs
    [1]+  Running                 gnome-calculator &

    // Vypíše běžící procesy společně s PID
    roman@virtual ~ $ jobs -l
    [1]+  4468 Running                 gnome-calculator &

    // Spustíme program gucharmap
    roman@virtual ~ $ gucharmap

    // Pomocí Ctrl + z jej zastavíme
    ^Z
    [2]+  Stopped                 gucharmap

    // Přenesení na pozadí
    roman@virtual ~ $ bg
    [2]+ gucharmap &

    // Přenesení posledního programu na popředí
    roman@virtual ~ $ fg
    gucharmap

    // Přeneseme gucharmap na pozadí
    // Přeneseme gnome-calculator na popředí
    roman@virtual ~ $ fg 1
    gnome-calculator

    // Pomocí Ctrl + c ukončíme gnome-calculator
    // Pomocí Ctrl + d ukončíme terminál a gucharmap stále běží
    

Expanze jmen souborů a adresářů

    
    roman@virtual ~ $ echo ~
    /home/roman

    roman@virtual ~ $ echo *
    Desktop Documents Downloads fontconfig Music passwords
    Pictures pokusy Public public_html Templates Videos

    roman@virtual ~ $ echo p*
    passwords pokusy public_html

    roman@virtual ~ $ ls p*
    passwords

    pokusy:
    soubor.txt  text.txt

    public_html:
    index.html

    roman@virtual ~ $ echo pokus?
    pokusy

    roman@virtual ~ $ echo p[a-o]*
    passwords pokusy

    roman@virtual ~ $ echo \*
    *

    roman@virtual ~ $ echo '*'
    *

    roman@virtual ~ $ echo "*"
    *

    roman@virtual ~ $ echo \'
    '

    roman@virtual ~ $ echo \\
    \

    roman@virtual ~ $ echo &
    [1] 8389

    roman@virtual ~ $ echo \&
    &

    roman@virtual ~ $ echo    a
    a

    roman@virtual ~ $ echo '   a'
       a
    

Přesměrování vstupu a výstupu

notace význam
< soubor standardní vstup je přeměrován ze souboru
> soubor standardní výstup je přeměrován do souboru
2> soubor standardní chybový výstup je přeměrován do souboru
&> soubor oba standardní výstupy jsou přeměrovány do souboru
>> soubor standardní výstup je připojen na konec souboru
2>> soubor standardní chybový výstup je připojen na konec souboru

Tabulka byla převzata z [1]

    
    roman@virtual ~ $ cd pokusy/

    // Získání obsahu souboru způsobem který už známe
    roman@virtual ~/pokusy $  cat text.txt
    Hello world!!

    // Obsah souboru za pomoci přesměrování vstupu
    roman@virtual ~/pokusy $ cat < text.txt
    Hello world!!

    // Přesměrování výstupu
    roman@virtual ~/pokusy $ echo Ahoj > text.txt
    roman@virtual ~/pokusy $ cat text.txt
    Ahoj

    // Přesměrování výstupu na konec souboru
    roman@virtual ~/pokusy $ echo Nazdar >> text.txt
    roman@virtual ~/pokusy $ cat text.txt
    Ahoj
    Nazdar

    // Presměrování vstupu i výstupu
    roman@virtual ~/pokusy $ cat < text.txt > kopie.txt
    roman@virtual ~/pokusy $ cat kopie.txt
    Ahoj
    Nazdar

    // Přesměrování vstupu i výstupu do stejného souboru
    roman@virtual ~/pokusy $ cat < text.txt > text.txt // text.txt bude prázdný

    // Uložení výstupu programu ps do souboru
    roman@virtual ~/pokusy $ ps aux > procesy.txt
    roman@virtual ~/pokusy $ cat procesy.txt
    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root         1  0.0  0.2 119824  5984 ?        Ss   14:16   0:00 /sbin/init splash
    root         2  0.0  0.0      0     0 ?        S    14:16   0:00 [kthreadd]
    root         4  0.0  0.0      0     0 ?        S<   14:16   0:00 [kworker/0:0H]
    root         6  0.0  0.0      0     0 ?        S    14:16   0:00 [ksoftirqd/0]
    root         7  0.0  0.0      0     0 ?        S    14:16   0:00 [rcu_sched]

    // Roura
    roman@virtual ~/pokusy $ ps aux | less

    

Reference

[1] Vychodil Vilém, Linux: Příručka českého uživatele, ISBN 80–7226–333–1, 260 stran, Compuer Press, Brno, 2003

Úkoly

  1. Vytvořte soubor datum.txt obsahujicí řádek “datum”.

  2. Vytvořte soubor datum2.txt obsahuji dva řádky. Na prvním je text “Datum:” a na druhém bude aktuální datum.

  3. Vytvořte soubor s názvem me.txt který bude vypadat nasledovně:

        Domovsky adresar:
        /home/parallels
    
        Obsah domovskeho adresare:
        total 60
        drwxr-xr-x 2 parallels parallels 4096 Jan 24 13:39 Desktop
        drwxr-xr-x 2 parallels parallels 4096 Jan 11  2017 Documents
        drwxr-xr-x 2 parallels parallels 4096 Jan 11  2017 Downloads
        -rw-r--r-- 1 parallels parallels 8980 Jan 11  2017 examples.desktop
        -rw-rw-r-- 1 parallels parallels    0 Feb 26 10:42 gucharmap
        drwxr-xr-x 2 parallels parallels 4096 Jan 11  2017 Music
        drwxr-xr-x 2 parallels parallels 4096 Jan 11  2017 Pictures
        drwxrwxr-x 2 parallels parallels 4096 Feb 26 11:05 pokus
        drwxrwxr-x 2 parallels parallels 4096 Feb 26 10:47 pokus2
        drwxr-xr-x 2 parallels parallels 4096 Jan 11  2017 Public
        -rw-r--r-- 1 parallels parallels 5357 Feb 26 10:14 q
        drwxr-xr-x 2 parallels parallels 4096 Jan 11  2017 Templates
        drwxr-xr-x 2 parallels parallels 4096 Jan 11  2017 Videos
    
        Aktualne bezici procesy
        USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
        paralle+  2733  0.0  0.4  22368  4876 pts/17   Ss   11:17   0:00 bash
        
  4. Spusťte si v terminálu libovolný proces (například kate) přesunte jej na pozadí. Pak spusťte další program gucharmap a také jej přeneste do pozadí. Následně do souboru jobs.txt vypiště bežící úlohy a ukončete program gedit. Dále přeneste gucharmap do popředí a ukončete terminál ve kterém tento program běží.