POS/Lab 1 2016

Izvor: SI Wiki
Pređi na navigaciju Pređi na pretragu

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

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'

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`

Treće rešenje:

mkdir ~/usr; cd ~/usr; tar -xf $(find /usr -iname '*.tar.gz' | head -1)
# napravi folder, uđe u njega i unzip-uje prvi output u tekući folder

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

Prvo rešenje:

diff -by studenti1.txt studenti2.txt |
    grep -v '<\|>' |
    cut -d' ' -f1,2,3 > indeksi.txt
# Напомена: cut команда може бити генерално замењена са awk-ом. У овом конкретном случају би се то урадило са awk '{print $1" "$2" "$3}'.

Drugo rešenje:

cat s1.txt | tr -s ' ' ' ' | cut -d' ' -f3 | sort | uniq > indeksi.txt ; cat s2.txt | tr -s ' ' ' ' | cut -d' ' -f3 | sort | uniq >> indeksi.txt
cat indeksi.txt | uniq -d