Zápisky z cvičení (cv. Dan Lukeš, út 1540)
- 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)
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.
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?
Where is my delta?
- 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:
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?
Where is my delta?
- 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:
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?
Where is my delta?
- 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:
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?
Where is my delta?
- 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:
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?
Where is my delta?
- 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:
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?
Where is my delta?
- 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
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:
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?
Where is my delta?
- 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:
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:
Nejake dilci vysledky:
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.$$
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?
Where is my delta?
- 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:
(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:
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?
Where is my delta?
- 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:
Cviceni 13
Stopky (macka se Ctrl-C, ukonci se zmacknutim Ctrl-C dvakrat ve stejne sekunde):
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?
Where is my delta?