UNIX - extintor de incendios

Cvičenia z úvodu do UNIXu (NSWI095, LS 2008/2009)

Základné informácie

Cvičiaci:
Miroslav Rudišin (www), miero@atrey.karlin.mff.cuni.cz

Čas a miesto konania:
pondelok 17:20-18:50 v SU2 na MS

Konzultačné hodiny:
Pred a po cvičení, alebo v inom vopred dohodnutom čase.

Úloha návštevníka cvičení

Porozumieť filozofii unixového systému a naučiť sa pomocou neho riešiť zložitejšie úlohy. Odmenou bude udelenie zápočtu.

Taký mix, čo sa môže hodiť

=== V shelli snamiesto jednoducheho sedu, ci cutu ===
$ IP="123.45.67.89"

## urezat kusok zlava
### v tomto pripade nieco a jednu bodku
$ echo ${IP#*.}
45.67.89

## urezat co najviac z lavej strany (je tam 2x '#' ... tzn. viac ako 1x '#')
### v tomto pripade vsetko pred poslednou bodkou
$ echo ${IP##*.}
89

## urezat kusok z pravej strany (znak '%' je na klavesnici vpravo od '#')
### v tomto pripade bodku a nieco
$ echo ${IP%.*}
123.45.67

## urezat co najviac z pravej strany
### v tomto pripade vsetko po prvej bodke
$ echo ${IP%%.*}
123

Program cvičení

11. cvičenie (11.5.2009)

Rozvička:
1) jednoduchý pakovač/rozpakovač textových súborov v shelli (bez použitia tar-u)

 a) jpak archiv subor1 [subor2] ... # uloží súbory do archívu
 b) jrozpak archiv [subor1] [subor2] ... # vyloží súbory z archívu (všetky ak neboli zadané žiadne)

 doporučený formát archívu:
   @meno_suboru1
   obsah suboru1
   dalsi riadok
   ...
   @meno_suboru2
   prvy riadok
   \@riadok obsahujuci zavinac ako prvy znak
   @meno tretieho suboru
   ...

2) vypísať neprístupne adresáre z /etc s použitím hlášok na chybovom výstupe find-u
 ide hlavne o precvičenie presmerovania chybového výstupu a zahodenie standarného výstypu

3) nájsť 10 najväčších súborov v /usr
 a) s použitím príkazu sort
 b) bez triedenia, ale s priebežným počítaním 10tich najväčších súborov v awk

4) roztriediť čísla na vstupe do 10tich súborov podľa prvej číslice, tak aby to rozdeľovalo hneď a nie až po skončení vstupu
 a) bash - otvorte si 10 súborov pomocou presmerovania ( ... ) 3>c0 4>c1 ... 
 b) awk - tu zasa nezabudnite súbory pozatvárať

5) rozšírenie 2. úlohy - vymeniť STDOUT a STDERR
 - bez pomocného súboru

6) zapísať apostrof do parametra zadaného ako reťazec ohraničeného apostrofmi

Program cvičení

10. cvičenie (4.5.2009)

Rozvička:
1) nahradit v texte diakritiku ascii znakmi (ak mate unicode terminal, tak prikaz tr sa na to asi nehodi, pouzite prikaz "y" v sed-e)
2) vypisat vsetky cele cisla zo suboru zadaneho ako paramter
   cele cislo je (-nekonecno,nekonecno); cislami NIE su napr. 00, 01, 1a, 0x1
   na vystupe nech je jedno cislo na riadku; ak su tesnom v okoli cislic znaky [a-zA-Z_] tak to nie je cislo
   ... vedomost o existencii alternativ v regularnom vyraze umozni rychle vyriesenie ulohy ... \(...\|...\|...\)
3) skript na premenovanie suboru so zadanim vyrazu v sede ... priklad pouzitia: ren 's/\.jpg/.orig.jpg/' *
   nema premenovavat subory, ktorych nazov sa nemeni
4) zazalohovat rekurzivne subory zdrojovych kodov z adresara zadaneho ako paramter
   subory ktore sa zalohuju: *.c *.h *.cpp Makefile
   volitelne ma subor zakomprimovat, podla pripony vysledneho suboru
   priklad:
    baksrc zaloha.tar /cesta/k/adrearu
    baksrc zaloha.tar.gz /cesta/k/adrearu # vysledny subor zakomprimuje algorimom gzip
    baksrc zaloha.tar.bz2 /cesta/k/adrearu # vysledny subor zakomprimuje algorimom bzip2  

8. cvičenie (20.4.2009)

1. skript vyťahujúci odkazy z HTML súboru
... <a ... href = "ODKAZ" ... > ... </a> ....

2. alternativny sposob pre skript z minuleho cvicenia porovnavajuci stranky dvoch rozdielnych filmov (1 sluzi ako referencny); rozdiely budu pravdepodobne tie informacie ktore nas zaujimaju ... (pouzit diff + patch)

3. vymenit poradie stlpcov suboru /etc/passwd
a) bez pouzitia cyklov jednym prikazom s (predpokladame pevny pocet stlpcov)
b) s pouzitim cyklu, bez obmedzenia poctu stlpcov

7. cvičenie (6.4.2009)

Napisat skript, ktory premenuje adresar s nazvom filmu tak, aby obsahoval viac informacii.

Priklad:
$ mkdir Matrix\ Revolutions
$ mkcsfd Matrix\ Revolutions
$ ls
Matrix Revolutions, 2003 (akcni, thriller, sci-fi) [67%]
$ cat Matrix\ Revolutions/info.txt
Matrix Revolutions
Akcni/ Thriller / Sci-Fi 
USA / Australie, 2003, 124 min

Rezie: Larry Wachowski, Andy Wachowski
Hraji: Keanu Reeves, Laurence Fishburne, Carrie-Anne Moss, Hugo Weaving,
Ian Bliss, Collin Chou, Lachy Hulme, Nathaniel Lees, Harry J. Lennix,
Robyn Nevin, David Roberts, Lambert Wilson, Bruce Spence, Jada Pinkett Smith,
Monica Bellucci, Anthony Wong, Nona Gaye, Anthony Zerbe, Harold  Perrineau,
Kate Beahan, Gina Torres 

CSFD: http://www.csfd.cz/film/9498-matrix-revolutions-matrix-revolutions-the/
IMDB: http://www.imdb.com/title/tt0242653
$

nedokonceny skript z prednasky:
http://atrey.karlin.mff.cuni.cz/~miero/vyuka/mkcsfd.txt

prikaz pre vyhladavanie filmov na csfd:
curl -Gs http://www.csfd.cz/hledani-filmu-hercu-reziseru-ve-filmove-databazi/ --data-urlencode search="matrix revolutions"

3. cvičenie (9.3.2009)


DU:

0 1 2 3 4 5 6 7 8 9 A B C D E F

->

1 2 3 0
6 7 4 5
A B C 9
C D E F


2. cvičenie (2.3.2009)

Používanie príkazov cat, head, tail, shell konstrukcii >, < a pomocných súborov.

=== Sčítanie binárných čísel ===
Majme dva súbory "a" a "b" oba obsahujúce nejaké číslo v binárnej sústave.
Každá číslica je na samostatnom riadku a v prvom riadku je najnižší bit.
Predpokladajme, že v súboroch sú uložené 8 bitové čísla.

Úloha: Napíšte skript, ktorý vypíše súčet týchto dvoch čísel v binárnom zápise.
Vzhľadom k tomu, že vstupom je dohromady 16 znakov z množiny 0 a 1, vymyslite
pekné riešenie bez cyklov, aritmetiky a podobne.

Pomôckou k úspešnemu riešeniu by vám mal byť nasledujúci skript "runit", ktorý spustí
iný skript z aktuálneho adresára zadaný ako parameter.

--- runit ---
#!/bin/sh
. ./$1
-------------

Súbor runit vytvorte príkazom: 
 cat > runit
Opíšte obsah a vstup ukončte stlačením Ctrl+D.
Potom mu priraďte práva príkazom:
 chmod +x runit

Tento postup možete využiť i pri písaní riešenia úlohy. Ale pre pohodlnejšie úpravy
použite nejaký editor. Napr nano, mcedit, vim.

DOMÁCA ÚLOHA

Skript, ktorý má rovnaký vstup, ale vypíše súčin. K zdarnému riešeniu Vám určite
napomôže skript na súčet.

1. cvičenie (23.2.2009)

$ date

(o niekoľko sekúnd neskôr)
$ date

$ date > date.txt

$ ls

$ cat date.txt

$ cat date.txt date.txt

$ cat date.txt date.txt date.txt

$ date; date; date

(úloha: súbor obsahujúci 2x rovnaký dátum)

$ mv date.txt date2.txt

(úloha: súbor obsahujúci 8192 riadkov s rovnakým dátumom)

$ wc date.txt

$ mkdir abc

$ cp date.txt abc

$ rmdir abc
(nejde, lebo nie je prázdny)

$ cp *.txt abc

$ rm date.txt

$ cd abc

$ ls

$ cd ..

$ rmdir abc

(úloha: zmazať adresár abc)

(pár slov o "interactive" -i parametry pre rm)

...

shellove skratky:
 - Ctrl+C (cancel)
 - Ctrl+D (input done)
 - Ctrl+L (clear screen)
 - Ctrl+R (history search)

Užitočné odkazy

Wiki stránka k predmetu - miesto pre zdieľanie vedomostí s ostatnými študentami; prispievať môže každý a je na Vás ako to využijete
Advanced Bash-Scripting Guide
Introduction to UNIX Course Outline
Vyborne knizky k UNIXu od vydavatelstva O'Reilly
Linux Command Line Tips

Manuálové stránky

coreutils (info) (expr, test, ... ) findutils ( find, xargs ), awk, grep, sed, ed, vi, sh

Stránky mojich minuloročných cvičení

2008, 2007, 2006, 2005, 2004

Posledná úprava: Miero, 22.05.2007
Valid HTML 4.01!