Vstup a výstup procesů, přesměrování

Z MiS
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
(Doplnění termínu kolona/pipeline. Upřesnění textu.)
(Doplněno řešení cvičení, přidáno další cvičení.)
Řádka 181: Řádka 181:
  
  
== Vyzkoušejte si ==
+
== Cvičení — vyzkoušejte si! ==
 
* Vypište obsah aktuálního adresáře do souboru <tt>vypis.txt</tt>.
 
* Vypište obsah aktuálního adresáře do souboru <tt>vypis.txt</tt>.
 
* Spočtěte, kolik souborů a složek je v podadresáři <tt>etc</tt> kořenového adresáře.
 
* Spočtěte, kolik souborů a složek je v podadresáři <tt>etc</tt> kořenového adresáře.
Řádka 190: Řádka 190:
 
* Vypište ty řádky souboru <tt>cpuinfo</tt> podadresáře <tt>proc</tt> kořenového adresáře, které obsahují slovo ''model''.
 
* Vypište ty řádky souboru <tt>cpuinfo</tt> podadresáře <tt>proc</tt> kořenového adresáře, které obsahují slovo ''model''.
 
* Vypište uživatelská jména uživatelů registrovaných v systému s GNU/Linuxem. Každé jméno na jeden řádek. Jména seřaďte podle abecedy sestupně.
 
* Vypište uživatelská jména uživatelů registrovaných v systému s GNU/Linuxem. Každé jméno na jeden řádek. Jména seřaďte podle abecedy sestupně.
 +
* Vypište třetí, čtvrtý, pátý a šestý řádek souboru <tt>.bash</tt> v&nbsp;domovském adresáři uživatele. Ostatní řádky ignorujte.
 +
<div class="Poznamka">Řešení cvičení najdete úplně na konci textu.</div>
  
  
Řádka 221: Řádka 223:
  
  
== Řešení úkolů ==
+
== Řešení cvičení ==
 
  ls > vypis.txt
 
  ls > vypis.txt
 
  ls /etc | wc -l
 
  ls /etc | wc -l
 
  ls /etc | grep w | wc -l
 
  ls /etc | grep w | wc -l
   
+
  ls /etc | grep w | wc -l >> vypis.txt
* Výsledek předchozího úkolu připojte na nový řádek do souboru <tt>vypis.txt</tt>.
+
ls /bin | less
* Zobrazte seznam souborů v adresáři <tt>/bin</tt>. Pokud se výpis nevleze na obrazovku, zařiďte, aby se vypsala jen první obrazovka a výpisem šlo listovat (nahoru, dolů, o celé stránky, vyhledávat).
+
ls /proc | sort | tail -5
* Vypište posledních 5&nbsp;souborů podle abecedy z&nbsp;podadresáře <tt>proc</tt> kořenového adresáře.
+
cat /proc/cpuinfo | grep model
* Vypište ty řádky souboru <tt>cpuinfo</tt> podadresáře <tt>proc</tt> kořenového adresáře, které obsahují slovo ''model''.
+
cat /etc/passwd | cut -d : -f 1 | sort -r
* Vypište uživatelská jména uživatelů registrovaných v systému s GNU/Linuxem. Každé jméno na jeden řádek. Jména seřaďte podle abecedy sestupně.
+
head -6 ~/.bash_history | tail -3
 
+
  
 
== Související stránky ==
 
== Související stránky ==

Verze z 22. 11. 2023, 08:16


„Write programs that do one thing and do it well.
  Write programs to work together.
  Write programs that handle text streams, because that is an universal interface.“

       Douglas McIlroy


Obsah

K čemu je přesměrování vstupů?


Procesy v Unixu a Linuxu

Přesměrování vstupů je vlastně způsob komunikace mezi procesy. Proces si můžeme představit jako černou skříňku s:

Vstup a výstup programů pak můžeme navzájem propojit.


Varianty přesměrování

Přesměrování standardního výstupu do souboru
ls -l > ~/obsah_adresare.txt
echo "Druhy adresar:" >> ~/obsah_adresare.txt
ls druhy -l >> ~/obsah_adresare.txt


Přesměrování chybového výstupu do souboru
cp a b 2> /dev/null
mv archiv.tar.gz zalohy 2> ~/zaloha_chyby.log


Přesměrování standardního vstupu


Propojení programů
ls | sort | head
cat /etc/passwd | cut -d : -f 1 | sort
Poznámka: Funkci použitých příkazů najdete v kapitole #Filtry.
Další příklady
cat /proc/meminfo
cat /proc/meminfo | head
cat /proc/meminfo | head -n 1 > memory.txt
cat /proc/meminfo | grep Free
cat /etc/passwd | grep student

Speciální soubory

Virtuální soubory reprezentující standardní vstup a výstup
Pomocné
cp ~/ahoj.txt /home/student/ahoj.txt 2> /dev/null

Viz také: Významné složky GNU/Linuxu.


Filtry

Jako filtr označujeme program, který čte data ze standardního vstupu a zapisuje výsledky na standardní výstup. Typické unixové programy se chovají jako filtry.

tar --help | less
head -n 1 /proc/meminfo
tail /var/log/apache2/error_log
ls | wc -l
tar -c * | gzip > archiv.tar.gz
tar -czf archiv.tar.gz *
tar -xzf archiv.tar.gz
cat /etc/passwd | cut -d : -f 1,5 | sort
$ date | tee file1 file2   
Thu Jun 10 11:10:34 CEST 2004
$ cat file1   
Thu Jun 10 11:10:34 CEST 2004
Úkoly

Hrátky — filtr cat;)

cat
cat > /dev/stdout
cat > pokus.txt
cat /dev/stdin
cat < /etc/passwd


Filtr grep

Příklady použití
ls | grep a.[0-9]\.jpg
Úkoly
Pokus potřebujete vzory nahradit jinými, můžete využít sed.

Filtr cut

Parametry
-d :
-f 1,3
Příklad
cut /etc/passwd -d : -f 1,6

Zopakujte si


Cvičení — vyzkoušejte si!

Řešení cvičení najdete úplně na konci textu.


Úkoly

Úkol 1. — Formátovaný výstup
---------------
Adresář:
/home/student
obsahuje soubory:
Desktop
Downloads
a.txt
----------------
Úkol 2. — Špatné filtrování?
echo Eduard; Karásek; karaed@seznam.cz; 48 > data.txt
echo Karel; Seznamicz; karel@seznamicz.cr; 25 >> data.txt
echo Jana; Dolanská; dolanska@centrum.cz; 37 >> data.txt

cat data.txt | grep @seznam.cz


Řešení cvičení

ls > vypis.txt
ls /etc | wc -l
ls /etc | grep w | wc -l
ls /etc | grep w | wc -l >> vypis.txt
ls /bin | less
ls /proc | sort | tail -5
cat /proc/cpuinfo | grep model
cat /etc/passwd | cut -d : -f 1 | sort -r
head -6 ~/.bash_history | tail -3

Související stránky


Zdroje

Osobní nástroje
Jmenné prostory
Varianty
Akce
Výuka
Navigace
Nástroje