POS/Lab 1 2016
Lab 1 se pojavljuje u drugom terminu vežbi.
- Za pitanja sa više odgovora, tačni odgovori su podebljani i uokvireni
- Za pitanja za koje se odgovori unose, tačni odgovori su podvučeni i sakriveni, tako da se prikažu kada izaberete taj tekst (primer: ovako)
- Pritisnite levo dugme ispod za sakrivanje i otkrivanje svih odgovora, ili desno dugme za uključivanje i isključivanje interaktivnog režima:
Grupa 3
Zadatak 1
Postavka
(3p) Kopirati sadržaj direktorijuma /bin u direktorijum /home/pos/test. Sve fajlove (koji nisu linkovi, oznaka l) u novom direktorijum[sic] podesiti da imaju pravo pristupa --x------. Kao odgovor priložiti spisak komandi koje su izvršene.
Rešenje
mkdir -p /home/pos/test &&
cp -P /bin/* /home/pos/test/
chmod 100 /home/pos/test/*
Zadatak 2
Postavka
(4p) Prebrojati koliko ima linija u fajlu /etc/passwd koji ne sadrže reči pos i sshd. Kao odgovo priložiti spisak komandi koje su izvršene.
Rešenje
grep -v 'pos\|sshd' /etc/passwd |
wc -l
Drugo rešenje:
grep -cv 'pos\|sshd' /etc/passwd
Zadatak 3
Postavka
(7p) Napraviti listu veličina svih fajlova/direktorijuma koji su direktni potomci direktorijuma /etc. U listi veličine treba da budu u ljudski čitljivom obliku i lista treba da sadrži samo veličine. Listu sačuvati u fajlu sizes.txt. Izlazni fajl treba da bude u korisničkom direktorijumu. Kao odgovor priložiti spisak komandi koje su izvršene. (Napomena: ls komanda može da ispisuje nekoliko razmaka jedno pored drugog).
Rešenje
sudo du -ah /etc |
cut -d$'\t' -f1 > sizes.txt
Drugo rešenje:
sudo du -ah /etc |
awk '{print $1}' > sizes.txt
U postavci zadatka se pominje ls, iako nije najelegantnije moguće je ovako uraditi:
ls -Rsh /etc |
sed 's/^total \|^\s*//' |
grep -v '^\s*$' |
grep '^[0-9]' |
cut -d' ' -f1 > sizes.txt
Grupa 4
Zadatak 1
Postavka
(5p) Napisati komande koje sabiraju dan i mesec za tekući datum na računaru.
Rešenje
echo $(( $(date +%m) + $(date +%d) ))
Drugo rešenje:
expr $(date +%m) + $(date +%d)
Zadatak 2
Postavka
(4p) Pronaći koliko ima skrivenih fajlova/direktorijuma u /home/pos direktorijumu. Direktorijum se posmatra do proizvoljne dubine. Kao odgovor priložiti spisak komandi koje su izvršene.
Rešenje
dubina=3
[ -d /home/pos ] &&
find /home/pos -maxdepth $dubina |
grep '/\.[^/]*$' |
wc -l
Dubina je određena promenljivom "dubina".
Zadatak 3
Postavka
(5p) Napraviti listu svih ID-jeva korisnika koji postoje na raunaru. U fajlu /etc/passwd se nalaze ID-ijevi korisnika. U svakom redu se nalazi po jedan ID, tačno između drugog i trećeg znaka :. Rezultujuću listu upisati u fajl /home/pos/id.txt. Kao odgovor priložiti spisak komandi koje su izvršene.
Rešenje
mkdir -p /home/pos &&
cat /etc/passwd |
cut -d':' -f3 > /home/pos/id.txt
Grupa 5
Zadatak 1
Postavka
(3p) Napisati test komandu koja proverava da li je fajl /bin/ls noviji od fajla /bin/cat.
Rešenje
if [ /bin/ls -nt /bin/cat ]; then
echo "/bin/ls je noviji"
else
echo "/bin/cat je noviji"
fi
Drugo rešenje:
[ /bin/ls -nt /bin/cat ] &&
echo "/bin/ls je noviji" ||
echo "/bin/cat je noviji"
Zadatak 2
Postavka
(4p) Fajl studenti.txt (napravite sami) sadrži informacije o studentima u sledećem formatu: <ime> <prezime> <broj poena>. Podaci za jednog studenta se nalaze u zasebnom redu. Podaci u redu odvojeni su jednim blanko znakom. Izdvojiti 20 studenata koji imaju najveći broj poena. Kao odgovor priložiti spisak komandi koje su izvršene.
Rešenje
sort -k3r studenti.txt |
sed 's/ [0-9]\+//' |
head -20
Drugo rešenje:
sort -k3r studenti.txt |
sed -n 's/ [0-9]\+//; 1,20p'
Treće rešenje:
sort -k3r studenti.txt |
awk '{print $1" "$2} NR==20{exit}'
Zadatak 3
Postavka
(7p) Prikazati samo informacije fajla koji je najveći u direktorijumu /boot. Pokazati informacije u ljudski čitljivom obliku. Kao odgovor priložiti spisak komandi koje su izvršene.
Rešenje
ls -shd /boot/* |
sort -hr |
head -1
Grupa 6
Zadatak 1
Postavka
(3p) U editoru Emacs pronaći komandu koja vrši pretragu teksta u tekućem fajlu.
Rešenje
C-s
Zadatak 2
Postavka
(4p) Pronaći sve fajlove u direktorijumu /usr sa ekstenzijom tar.gz. Jednu arhivu raspakovati u direktorijum ~/user. Kao odgovor priložiti spisak komandi koje su izvršene.
Rešenje
# izlistaj sve tar.gz fajlovi iz /usr
sudo find /usr -name '*.tar.gz'
# raspakivanje jedne arhive u ~/user
mkdir -p ~/user && sudo find /usr -name '*.tar.gz' -print -quit |
xargs tar -C ~/user -xvzf
Drugo rešenje:
# izlistaj sve tar.gz fajlovi iz /usr
sudo find /usr -name '*.tar.gz'
# raspakivanje jedne arhive u ~/user
mkdir -p ~/user && sudo tar -C ~/user -xvzf `find /usr -name '*.tar.gz' -print -quit`
Zadatak 3
Postavka
(7p) Fajlovi studenti1.txt i studenti2.txt (napravite sami) sadrže informacije o studentima u isotm formatu <ime> <prezime> <gggg/bbbb>. Studenti mogu da se ponavljaju u obe datoteke. Podaci za jednog studenta se nalaze u zasebnom redu. Broj razmaka između reči je proizvoljan. Napraviti listu svih indeksa koji se javljaju u oba fajla. Indeksi treba da budu jedinstveni u listi. Listu upisati u fajl indeksi.txt. Kao odgovor priložiti spisak komandi koje su izvršene.
Rešenje
diff -by studenti1.txt studenti2.txt |
grep -v '<\|>' |
cut -d' ' -f1,2,3 > indeksi.txt
# Напомена: cut команда може бити генерално замењена са awk-ом. У овом конкретном случају би се то урадило са awk '{print $1" "$2" "$3}'.