POS/Lab 1 2017

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 1

Zadatak 1

Postavka

(3p) Napisati komande koje će ispisati sve fajlove u tekućem direktorijumu za koje korisnik ima pravo izvršavanja.

Rešenje

find . -maxdepth 1 -perm /u+x

Zadatak 2

Postavka

(4p) Zapakovati sve fajlove pomoću bzip2 algoritma koji se nalaze u home direktorijumu korisnika i koji su sa ekstenzijom txt. Kao odgovor priložiti spisak komandi koje su izvršene.

Rešenje

tar -cjf 'arhiva' *.txt

Moguće je uraditi prvo tar pa bzip2 kao što je prikazano na vežbama, ali nema nikakvog razloga za to.

Zadatak 3

Postavka

(7p) Napraviti spisak svih direktorijuma koji su direktni potomci direktorijuma / i koji na proizvoljnoj dubini sadrže bar jedan fajl sa ekstenzijom conf. Imena na spisku treba da budu jedinstvena. Rezultat smestiti u fajl pod imenom conf.txt. Kao odgovor priložiti spisak komandi koje su izvršene.

Rešenje

Uopšte me ne zanima, ali ovo je maltene nemoguć zadatak. Makar sa znanjem koji su dali. Priložiću rešenje jedne studentkinje koja je dobila maksimum bodova, ali koje uopšte nije po onome šta je traženo. Verovatno je u međuvremenu shvaćeno da je zadatak nemoguć. Avaj, moguće je da "direktan potomak" znači "samo sin", u kom slučaju je i prvo rešenje tačno. Ali to nema smisla.

Rešenje koje će vam dati maksimum bodova za ovaj zadatak:

sudo find / -name "*.conf" | tr / " " | cut -d" " -f2 | uniq > conf.txt

Problem sa ovim rešenjem je što uvek ispisuje drugu kolonu iako su mnogi direktni potomci root direktorijuma dublji od dubine dva. Takođe rešenje može biti optimizovano izbacivanjem tr poziva pa menjanjem cut delimitera iz " " u "/", ali onda takođe i menjanjem broja kolone iz 2 u 3.

Rešenje koje je generalno tačno šta god "direktan potomak" značio:

sudo find / -name "*.conf" | awk -F'/' '{print $(NF - 1)}' | sort | uniq > conf.txt

Grupa 2

Zadatak 1

Postavka

(3p) Napisati komande koje će ispisati prvih 100 prirodnih brojeva.

Rešenje

for i in range {1..100}; do
    echo $i
done
# takođe
i=1
while [ $i -lt 101 ]; do
    echo $i
    let i++
done
# takođe let i++ može biti zamenjeno sa i=$(($i + 1)) ili i=$[ $i + 1 ] ili 'i = $(expr $i + 1)' itd

Cheat rešenje:

seq 100

Daleko kreativnije rešenje, zasluge anonimnoj starijoj studentkinji:

cat examples.desktop -n | head -n 100 | tr -s " " | cut -d" " -f2
# ne mora biti iz tog fajla, bitno je da ima više od 100 linija

Zadatak 2

Postavka

(4p) Zapakovati sve fajlove pomoću gzip algoritma koji se nalaze u home direktorijumu korisnika i koji u svom nazivu imaju reči pos. Kao odgovor priložiti spisak komandi koje su izvršene.

Rešenje

cd $HOME
tar -czf 'arhiva' *pos*

Moguće je uraditi prvo tar pa gzip kao što je prikazano na vežbama, ali nema nikakvog razloga za to.

Zadatak 3

Postavka

(7p) Napraviti spisak svih korisnika koji imaju pokrenut program na računaru. Spisak treba da sadrži jednog korisnika samo jedanput. Spisak upisati u fajl pokretaci.txt. Kao odgovor priložiti spisak komandi koje su izvršene. (Pomoć: za rešenje potrebno koristiti i komandu sa današnjeg časa).

Rešenje

ps aux | cut -d' ' -f1 | sort | uniq

Grupa ?

Zadatak 1

Postavka

(3p) U editoru Emacs pronaći komandu koja menja buffer u tekućem prozoru (window).

Rešenje

C-x b

Zadatak 2

Postavka

(4p) Napraviti zapakovanu arhivu svih fajlova i direktorijuma koji su dirketni potomci direktorijuma /etc i koji se završavaju na conf. Arhivu smestiti u korisnički direktorijum pod nazivom conf.tar.gz. Kao odgovor priložiti spisak komandi koje su izvršene.

Rešenje

find /etc/ -name "*.conf" -exec tar -czf "conf.tar.gz" {} +

Zadatak 3

Postavka

(7p) Napraviti listu svih fajlova koji počinju malim slovima iz skupa a-f i nalaze se u direktorijumu /bin. Lista treba da sadrži veličinu fajlova u ljudski čitljivom obliku i treba da bude sortirana. Rezutat[sic] smestiti u fajl pod imenom bins.txt. Kao odgovor priložiti spisak komandi koje su izvršene. (Pomoć: za rešenje potrebno je pronaći neku opciju o kojoj nije pričano za neki program u uputstvu).

Rešenje

ls -shd /bin/[a-f]* > ./bins.txt

Drugo, nepreporučeno rešenje:

ls -p /bin/[a-f]* | grep -v '/$' | xargs -I{} sudo du -h {} > bins.txt

Uspostavljena pretpostavka da fajl bins.txt treba da se sačuva u trenutni direktorijum.