Zápisky z cvičení (cv. Dan Lukeš, út 1540)

Uživatelský avatar
Lukas Mach
Matfyz(ák|ačka) level III
Příspěvky: 261
Registrován: 28. 3. 2006 17:08
Typ studia: Informatika Bc.
Bydliště: Praha a Kladno
Kontaktovat uživatele:

Zápisky z cvičení (cv. Dan Lukeš, út 1540)

Příspěvek od Lukas Mach »

Do tohoto vlákna budu postovat své poznámky z cvičení z Unixu. Třeba někomu pomůžou.

Na prvním cvičení jsem poznámky nepsal (moc se toho ani nedělalo), na čtvrtém jsem nebyl. Výpisky z dalších cvičení budu posílat (když mi nikdo neřekne, že to je nanic). Jeden úkol má často víc řešení (jsou zapsány většinou tak, jak je Lukeš říká, čili od nejhorších k nejlepším).

Můžou tam být chyby... jako ve všem.

Skvele stranky o sedu naleznete na teto adrese - rozhodne doporucuju.
Naposledy upravil(a) Lukas Mach dne 4. 4. 2006 16:31, celkem upraveno 1 x.
For every epsilon, there is delta.
Where is my delta?
Uživatelský avatar
Lukas Mach
Matfyz(ák|ačka) level III
Příspěvky: 261
Registrován: 28. 3. 2006 17:08
Typ studia: Informatika Bc.
Bydliště: Praha a Kladno
Kontaktovat uživatele:

Příspěvek od Lukas Mach »

Cvičení 2

Kód: Vybrat vše

Zakladni prikazy

rm
mv

Logovani do jinyho unixu

slogin -l vaseuzivatelskejmeno mail.kolej.mff.cuni.cz

Prikaz cut

cut -f5 -d: /etc/passwd

Mail

poslani mailu: mail adresa@example.cz
poslani mailu na ucet na stejnem pocitaci: mail ucet
cteni mailu: mail
soubor presmerovanim: ~/.forward

Prava

chmod adresar 777

Chmod muze vlastnik provadet, i kdyz nema k tomu adresari prava.

ukol:

Mam nejaky adresar a chci priradit nejaka stejna prava tomu adresari a vsem, co je uvnitr a tak dal:

chmod -R 777 ./moje_zkouska
Naposledy upravil(a) Lukas Mach dne 28. 3. 2006 19:48, celkem upraveno 1 x.
For every epsilon, there is delta.
Where is my delta?
Uživatelský avatar
Lukas Mach
Matfyz(ák|ačka) level III
Příspěvky: 261
Registrován: 28. 3. 2006 17:08
Typ studia: Informatika Bc.
Bydliště: Praha a Kladno
Kontaktovat uživatele:

Příspěvek od Lukas Mach »

Cvičení 3

Kód: Vybrat vše

Reseni ukolu:

chmod -R 777 ./moje_zkouska
lepsi: chmod -R 777 o+rX ./moje_zkouska

Velke X nastavuje Xko, pokud tam uz jedno Xko je.

Ziskat ze souboru 12. - 16. radek: head -n 16 /etcpasswd | tail -n 5

Pokud prikaz cut nenajde oddelovac, vypise cely radek. To se vypne pres -s.

ls je podvodnik a na obrazovku vypisuje jinak nez (napr.) pres rouru,
viz: ls | cat

Prace s linkama: ls -li
Naposledy upravil(a) Lukas Mach dne 28. 3. 2006 19:51, celkem upraveno 1 x.
For every epsilon, there is delta.
Where is my delta?
Uživatelský avatar
Lukas Mach
Matfyz(ák|ačka) level III
Příspěvky: 261
Registrován: 28. 3. 2006 17:08
Typ studia: Informatika Bc.
Bydliště: Praha a Kladno
Kontaktovat uživatele:

Příspěvek od Lukas Mach »

Cvičení 5

Kód: Vybrat vše

Vypsani uzivatelu podle toho, jak davno se naposledy prihlasili:

ls -lt ../../*/*/.bash_history | tail -n1

Vypsat vsechny uzivatele, co se naposled prihlasili od nejake doby a dal

ls -lt ../../*/*/.bash_history | grep "199[678] /home"

nebo

find ../../*/*/.bash_history -mtime +2922d

nebo taky

find / -name .bash_history -mtime +2922d -ls

Prava:

r-s r-x r-x ("s" znamena, ze po spusteni bude spusten s pravy
vlastnika, ne s pravy uzivatele, ktery to spustil)

Vypsat vsechny soubory s pravem s:

ls | grep "^-..s"
find /sbin -user root | grep "^-..s"
find /sbin -user root -perm +400
find /sbin -user root -perm -400
find /sbin -user root -perm +u+s

Vyhledav vsechny spustitelne soubory obsahujici retezec #!

find /sbin -perm +111 -exec grep '#!' {} \;
find /sbin -perm +111 -exec grep #\! {} \;

Do uvozovek to #! dat nejde. Mezera pred zpetnym lomitkem byt musi.
Naposledy upravil(a) Lukas Mach dne 28. 3. 2006 19:51, celkem upraveno 1 x.
For every epsilon, there is delta.
Where is my delta?
Uživatelský avatar
Lukas Mach
Matfyz(ák|ačka) level III
Příspěvky: 261
Registrován: 28. 3. 2006 17:08
Typ studia: Informatika Bc.
Bydliště: Praha a Kladno
Kontaktovat uživatele:

Příspěvek od Lukas Mach »

Cvičení 6

Kód: Vybrat vše

Vypsat radek s uzivatelem luke9am:

grep "^luke9am:" /etc/passwd

Vypsat vsechny uzivatele se jmenem ve tvaru xxxx0000

grep "^[[:alpha:]]\{4\}[0-9]\{4\}:" /etc/passwd
egrep "^[[:alpha:]]{4}[0-9]{4}:" /etc/passwd

Je tu rozdil mezi normalni a rozsirenou syntaxi (egrep).

Vypsat uzivatele, kteri nemaji home adresar ve tvaru
/home/prihlasovacijmenouzivatele

grep -v '^\([^:]*\):\([^:]*:\)\{4\}/home/\1:' /etc/passwd

Pokud je nekde (...){5}, neni nikde definovano, co tam bude.

Vypsat vsechny uzivatele se jmenem ve tvaru xxxx0000, pro ktere
neplati, ze v 3. sloupecku je 1<jejich cislo> nebo nemaji home adresar
ve tvaru /home/<jejich cele jmeno>

moje:

egrep '^([[:alpha:]]{4}([[:digit:]]{4})):' /etc/passwd | tee ahoj
cat ahoj | egrep -v
'(^[[:alpha:]]{4}([[:digit:]]{4})):[^:]*:1\2:[^:]*:[^:]*:/home/\1:'

jeho (nacrt):

grep '^\(.\{4\}\(.\{4\}\)\):[^:]*:1\2:\([1:]*:\)\{2\}/home/\1:'

(je to pres mezisoubor, jde to samo i bez neho, ale debuguje se to lip)
For every epsilon, there is delta.
Where is my delta?
Uživatelský avatar
Lukas Mach
Matfyz(ák|ačka) level III
Příspěvky: 261
Registrován: 28. 3. 2006 17:08
Typ studia: Informatika Bc.
Bydliště: Praha a Kladno
Kontaktovat uživatele:

Příspěvek od Lukas Mach »

Cviceni 7

Kód: Vybrat vše

*** sed *** 

p,k
3
/^$/,7

Vypsat pomoci sedu prijmeni uzivatelu: 

pokud si jsem jisty, ze jmena jsou ve tvaru "Jmeno Prijmeni" a nic dalsiho neobdahuje mezeru: 

sed -e's/.*\([^: ]*\) \([^: ]*\).*/\2/' /etc/passwd

kdyz za prijmeni nepovazujeme nejaky odpad na konci jmena:

sed -e's/^\([^:]*:\)\{4\}[^: ]*[ ]*\([A-Za-z]*\)[^:]*:.*/\2/' /etc/passwd

By Dan: 

sed 's;^\([^:]*:\)\{4\}[^ ]* \([^:]*\):.*;\2;' /etc/passwd

Na miste druheho znaku (strednik) muze byt skoro cokoliv a tento znak je pak pouzit jako oddelovac pro prikaz substitute. Nicmene kdyz se to dela tim prvnim zpusobem, ta oddelovace musi byt dopredna lomitka. 

Optionem -n muzeme sedu rict, ze nema nic vypisovat. Zaroven na konec prikazu s se da napsat za delimiter napsat p a to znamena "matchlo-li vypis". 

sed -n 's;^\([^:]*:\)\{4\}[^ ]* \([^:]*\):.*;\2;p' /etc/passwd

Vypsat sloupec s heslama a smazat pripadne pocatecni *LOCKED*:

Tohle mi nezafungovalo:

sed -e's/^[^:]*:\(\*LOCKED\*\){0,1}*\(.*\)/ahoj/' /etc/passwd2

Dan:

s/^\([^:]*:\*LOCKED\*\)[1:]:/\1:/
s/^\([^:]*:\)[^*][^:*][^:*:/\1:/

nebo jednou substituci: 

s/^\([1:]*:\(\*LOCKED\*\)\{0,1\})[^:]*:/\1:/
For every epsilon, there is delta.
Where is my delta?
Uživatelský avatar
Lukas Mach
Matfyz(ák|ačka) level III
Příspěvky: 261
Registrován: 28. 3. 2006 17:08
Typ studia: Informatika Bc.
Bydliště: Praha a Kladno
Kontaktovat uživatele:

Unix 8

Příspěvek od Lukas Mach »

Cviceni 8

Delal se jeden vetsi ukol - smazat vsechny uzivatele krome ikub6313, kteri jsou uvedeni mezi # Neverifikovane ... a # Platne ... a nebo maji v hesle *LOCKED*. Musi to mit osetreny duplicity a tak:

Kód: Vybrat vše

sed -n '/# Never/,/# Platne/p' /etc/passwd3 | egrep -v ':\*LOCKED\*:' | cut -s -f1 -d: | tee ./moje
egrep '\*LOCKED\*' /etc/passwd3 | cut -s -f1 -d: | tee -a ./moje
grep -v 'ikub6313' ./moje | tee ./moje2
sed -e 's/.*/pw user del & -r/' ./moje2 | tee ./moje
For every epsilon, there is delta.
Where is my delta?
Uživatelský avatar
Lukas Mach
Matfyz(ák|ačka) level III
Příspěvky: 261
Registrován: 28. 3. 2006 17:08
Typ studia: Informatika Bc.
Bydliště: Praha a Kladno
Kontaktovat uživatele:

Příspěvek od Lukas Mach »

Cviceni 9

Delal se delsi ukol, jehoz zadani je v podstate dvojka na http://www.obluda.cz/unix/priklady.html (jeste se musi odstranit prikazy type a vsechna presmerovani do souboru). Skript:

Kód: Vybrat vše

cat > soubor.$$;
from = $(sed '/^$/,$d;s/^From://p')
sed '1,/^$/d;/^$/,/^nslookup/d;/^exit/,$d;/^type/d;s/).*//' nslookup.mail | nslookup | mail $from
rm soubor.$$
Nejake dilci vysledky:

Kód: Vybrat vše

Ziskani adresy odesilatele:

sed -n '1,/^$/p' ./in | egrep '^From: .*$'

Ziskani prikazu:

sed -n '/^$/,$p' ./in | sed -n '/^nslookup$/,/^exit$/p' | egrep -v '(^| )type( |$)' | tail +2 | sed '$d' | sed 's/\([^>]*\)>.*/\1/'
For every epsilon, there is delta.
Where is my delta?
Uživatelský avatar
Lukas Mach
Matfyz(ák|ačka) level III
Příspěvky: 261
Registrován: 28. 3. 2006 17:08
Typ studia: Informatika Bc.
Bydliště: Praha a Kladno
Kontaktovat uživatele:

Příspěvek od Lukas Mach »

(Cviceni 10 nebylo, na 11 se delalo to same jako v 9, ale skriptem bez sedu)

Na cviceni 12 se delal prvni priklad z http://www.obluda.cz/unix/priklady.html:

Kód: Vybrat vše

IFS=":"
grep -v "^#" /etc/passwd | while read name X X GID X HOMEDIR X; do

LIMIT=`grep "^$name " user.quota | cut -d" " -f2`
if [ x$LIMIT = x ]; then
   # to s tim x je trik, diky kterymu tam nemusej byt uvozovky
   GNAME=`grep ":$GID:" /etc/group|cut -d: -f1`
   LIMIT=`grep "^$GNAME " group.quota | cut -d" " -f2`
   if [ x$LIMIT = x ]; then
      # jeste by bylo fajn smazat flag
      continue # neni limit
   fi
fi

USAGE=`du -sk $HOMEDIR | cut -f1`

if [ $USAGE -gt $LIMIT]; then
   test -f flag.$name || touch flag.$name
   if find flag.$name -ctime -7 > /dev/null 2>/dev/null; then
      mail $name < nadavky_uzivateli.txt
   else
      mail $spravci < bonz_spravci.txt
   fi
else
   rm flag.$name
done
For every epsilon, there is delta.
Where is my delta?
Uživatelský avatar
Lukas Mach
Matfyz(ák|ačka) level III
Příspěvky: 261
Registrován: 28. 3. 2006 17:08
Typ studia: Informatika Bc.
Bydliště: Praha a Kladno
Kontaktovat uživatele:

Příspěvek od Lukas Mach »

Cviceni 13

Stopky (macka se Ctrl-C, ukonci se zmacknutim Ctrl-C dvakrat ve stejne sekunde):

Kód: Vybrat vše

#!/bin/sh

count=1
stime=`date +%s`
ctime=0
ltime=0

trap '
        echo -n $count". zavodnik (sec): ";
        ctime=`date +%s`
        expr $ctime "-" $stime;
        count=`expr $count + 1`;
        if expr $ctime "=" $ltime > /dev/null; then
                echo Konec;
                exit;
        fi
        ltime=$ctime;
' 2;

while true ; do
        sleep 1000;
done
For every epsilon, there is delta.
Where is my delta?
Odpovědět

Zpět na „2005“