ПОС/Лаб 1 2017 — разлика између измена
м (KockaAdmiralac преместио је страницу „ПОС/Л1 2017” на „ПОС/Лаб 1 2017” без остављања преусмерења: Slično sa OO1) |
м (+data-solutions) |
||
| (Није приказано 11 међуизмена 2 корисника) | |||
| Ред 1: | Ред 1: | ||
{{tocright}} | {{tocright}} | ||
Лаб 1 се појављује у '''другом''' термину вежби. | |||
{{решења}} | |||
== Група 1 == | |||
=== Задатак 1 === | |||
==== Поставка ==== | |||
'''(3п)''' Написати команде које ће исписати све фајлове у текућем директоријуму за које корисник има право извршавања. | |||
==== Решење ==== | |||
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain"> | |||
find . -maxdepth 1 -perm /u+x | |||
</syntaxhighlight> | |||
=== Задатак 2 === | |||
==== Поставка ==== | |||
'''(4п)''' Запаковати све фајлове помоћу ''bzip2'' алгоритма који се налазе у ''home'' директоријуму корисника и који су са екстензијом '''txt'''. Као одговор приложити списак команди које су извршене. | |||
==== Решење ==== | |||
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain"> | |||
tar -cjf 'arhiva' *.txt | |||
</syntaxhighlight> | |||
Могуће је урадити прво ''tar'' па ''bzip2'' као што је приказано на вежбама, али нема никаквог разлога за то. | |||
=== Задатак 3 === | |||
==== Поставка ==== | |||
'''(7п)''' Направити списак свих директоријума који су директни потомци директоријума '''/''' и који на произвољној дубини садрже бар један фајл са екстензијом '''conf'''. Имена на списку треба да буду јединствена. Резултат сместити у фајл под именом '''conf.txt'''. Као одговор приложити списак команди које су извршене. | |||
==== Решење ==== | |||
Уопште ме не занима, али ово је малтене немогућ задатак. Макар са знањем који су дали. Приложићу решење једне студенткиње која је добила максимум бодова, али које уопште није по ономе шта је тражено. Вероватно је у међувремену схваћено да је задатак немогућ. Авај, могуће је да "директан потомак" значи "само син", у ком случају је и прво решење тачно. Али то нема смисла. | |||
Решење које ће вам дати максимум бодова за овај задатак: | |||
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain"> | |||
sudo find / -name "*.conf" | tr / " " | cut -d" " -f2 | uniq > conf.txt | |||
</syntaxhighlight> | |||
Проблем са овим решењем је што увек исписује ''другу'' колону иако су многи директни потомци ''root'' директоријума дубљи од дубине два. Такође решење може бити оптимизовано избацивањем ''tr'' позива па мењањем ''cut'' делимитера из '''" "''' у '''"/"''', али онда такође и мењањем броја колоне из 2 у 3. | |||
Решење које је генерално тачно шта год "директан потомак" значио: | |||
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain"> | |||
sudo find / -name "*.conf" | awk -F'/' '{print $(NF - 1)}' | sort | uniq > conf.txt | |||
</syntaxhighlight> | |||
== Група 2 == | |||
=== Задатак 1 === | |||
==== Поставка ==== | |||
'''(3п)''' Написати команде које ће исписати првих 100 природних бројева. | |||
==== Решење ==== | |||
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain"> | |||
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 | |||
</syntaxhighlight> | |||
Цхеат решење: | |||
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain"> | |||
seq 100 | |||
</syntaxhighlight> | |||
Далеко креативније решење, заслуге анонимној старијој студенткињи: | |||
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain"> | |||
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 | |||
</syntaxhighlight> | |||
== Задатак | === Задатак 2 === | ||
=== Поставка === | ==== Поставка ==== | ||
'''(4п)''' Запаковати све фајлове помоћу ''gzip'' алгоритма који се налазе у ''home'' директоријуму корисника и који у свом називу имају речи '''pos'''. Као одговор приложити списак команди које су извршене. | |||
=== Решење === | ==== Решење ==== | ||
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain"> | |||
cd $HOME | |||
tar -czf 'arhiva' *pos* | |||
</syntaxhighlight> | |||
Могуће је урадити прво ''tar'' па ''gzip'' као што је приказано на вежбама, али нема никаквог разлога за то. | |||
== Задатак | === Задатак 3 === | ||
=== Поставка === | ==== Поставка ==== | ||
'''(7п)''' Направити списак свих корисника који имају покренут програм на рачунару. Списак треба да садржи једног корисника само једанпут. Списак уписати у фајл '''pokretaci.txt'''. Као одговор приложити списак команди које су извршене. (Помоћ: за решење потребно користити и команду са данашњег часа). | |||
=== Решење === | ==== Решење ==== | ||
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain"> | |||
ps aux | cut -d' ' -f1 | sort | uniq | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== Група ? == | |||
=== Задатак 1 === | |||
==== Поставка ==== | |||
'''(3п)''' У едитору Emacs пронаћи команду која мења buffer у текућем прозору (window). | |||
==== Решење ==== | |||
<code class="spoiler" data-solution="plain">C-x b</code> | |||
=== Задатак 2 === | |||
==== Поставка ==== | |||
'''(4п)''' Направити запаковану архиву свих фајлова и директоријума који су диркетни потомци директоријума '''/etc''' и који се завршавају на '''conf'''. Архиву сместити у кориснички директоријум под називом '''conf.tar.gz'''. Као одговор приложити списак команди које су извршене. | |||
==== Решење ==== | |||
find /etc/ -name "*.conf" | <syntaxhighlight lang="bash" class="spoiler" data-solution="plain"> | ||
find /etc/ -name "*.conf" -exec tar -czf "conf.tar.gz" {} + | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== Задатак 3 == | === Задатак 3 === | ||
=== Поставка === | ==== Поставка ==== | ||
'''(7п)''' Направити листу свих фајлова који почињу малим словима из скупа a-f и налазе се у директоријуму '''/bin'''. Листа треба да садржи величину фајлова у људски читљивом облику и треба да буде сортирана. Резутат<sup>[sic]</sup> сместити у фајл под именом '''bins.txt'''. Као одговор приложити списак команди које су извршене. (Помоћ: за решење потребно је пронаћи неку опцију о којој није причано за неки програм у упутству). | |||
=== Решење === | ==== Решење ==== | ||
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain"> | |||
ls - | ls -shd /bin/[a-f]* > ./bins.txt | ||
</syntaxhighlight> | </syntaxhighlight> | ||
: Успостављена претпоставка да фајл '''bins.txt''' треба да се сачува у тренутни директоријум. | Друго, непрепоручено решење: | ||
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain"> | |||
ls -p /bin/[a-f]* | grep -v '/$' | xargs -I{} sudo du -h {} > bins.txt | |||
</syntaxhighlight> | |||
Успостављена претпоставка да фајл '''bins.txt''' треба да се сачува у тренутни директоријум. | |||
[[Категорија:ПОС]] | [[Категорија:ПОС]] | ||
[[Категорија:Лабораторијске вежбе]] | [[Категорија:Лабораторијске вежбе]] | ||
Тренутна верзија на датум 30. јун 2021. у 15:36
Лаб 1 се појављује у другом термину вежби.
- За питања са више одговора, тачни одговори су подебљани и уоквирени
- За питања за које се одговори уносе, тачни одговори су подвучени и сакривени, тако да се прикажу када изаберете тај текст (пример: овако)
- Притисните лево дугме испод за сакривање и откривање свих одговора, или десно дугме за укључивање и искључивање интерактивног режима:
Група 1
Задатак 1
Поставка
(3п) Написати команде које ће исписати све фајлове у текућем директоријуму за које корисник има право извршавања.
Решење
find . -maxdepth 1 -perm /u+x
Задатак 2
Поставка
(4п) Запаковати све фајлове помоћу bzip2 алгоритма који се налазе у home директоријуму корисника и који су са екстензијом txt. Као одговор приложити списак команди које су извршене.
Решење
tar -cjf 'arhiva' *.txt
Могуће је урадити прво tar па bzip2 као што је приказано на вежбама, али нема никаквог разлога за то.
Задатак 3
Поставка
(7п) Направити списак свих директоријума који су директни потомци директоријума / и који на произвољној дубини садрже бар један фајл са екстензијом conf. Имена на списку треба да буду јединствена. Резултат сместити у фајл под именом conf.txt. Као одговор приложити списак команди које су извршене.
Решење
Уопште ме не занима, али ово је малтене немогућ задатак. Макар са знањем који су дали. Приложићу решење једне студенткиње која је добила максимум бодова, али које уопште није по ономе шта је тражено. Вероватно је у међувремену схваћено да је задатак немогућ. Авај, могуће је да "директан потомак" значи "само син", у ком случају је и прво решење тачно. Али то нема смисла.
Решење које ће вам дати максимум бодова за овај задатак:
sudo find / -name "*.conf" | tr / " " | cut -d" " -f2 | uniq > conf.txt
Проблем са овим решењем је што увек исписује другу колону иако су многи директни потомци root директоријума дубљи од дубине два. Такође решење може бити оптимизовано избацивањем tr позива па мењањем cut делимитера из " " у "/", али онда такође и мењањем броја колоне из 2 у 3.
Решење које је генерално тачно шта год "директан потомак" значио:
sudo find / -name "*.conf" | awk -F'/' '{print $(NF - 1)}' | sort | uniq > conf.txt
Група 2
Задатак 1
Поставка
(3п) Написати команде које ће исписати првих 100 природних бројева.
Решење
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
Цхеат решење:
seq 100
Далеко креативније решење, заслуге анонимној старијој студенткињи:
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
Задатак 2
Поставка
(4п) Запаковати све фајлове помоћу gzip алгоритма који се налазе у home директоријуму корисника и који у свом називу имају речи pos. Као одговор приложити списак команди које су извршене.
Решење
cd $HOME
tar -czf 'arhiva' *pos*
Могуће је урадити прво tar па gzip као што је приказано на вежбама, али нема никаквог разлога за то.
Задатак 3
Поставка
(7п) Направити списак свих корисника који имају покренут програм на рачунару. Списак треба да садржи једног корисника само једанпут. Списак уписати у фајл pokretaci.txt. Као одговор приложити списак команди које су извршене. (Помоћ: за решење потребно користити и команду са данашњег часа).
Решење
ps aux | cut -d' ' -f1 | sort | uniq
Група ?
Задатак 1
Поставка
(3п) У едитору Emacs пронаћи команду која мења buffer у текућем прозору (window).
Решење
C-x b
Задатак 2
Поставка
(4п) Направити запаковану архиву свих фајлова и директоријума који су диркетни потомци директоријума /etc и који се завршавају на conf. Архиву сместити у кориснички директоријум под називом conf.tar.gz. Као одговор приложити списак команди које су извршене.
Решење
find /etc/ -name "*.conf" -exec tar -czf "conf.tar.gz" {} +
Задатак 3
Поставка
(7п) Направити листу свих фајлова који почињу малим словима из скупа a-f и налазе се у директоријуму /bin. Листа треба да садржи величину фајлова у људски читљивом облику и треба да буде сортирана. Резутат[sic] сместити у фајл под именом bins.txt. Као одговор приложити списак команди које су извршене. (Помоћ: за решење потребно је пронаћи неку опцију о којој није причано за неки програм у упутству).
Решење
ls -shd /bin/[a-f]* > ./bins.txt
Друго, непрепоручено решење:
ls -p /bin/[a-f]* | grep -v '/$' | xargs -I{} sudo du -h {} > bins.txt
Успостављена претпоставка да фајл bins.txt треба да се сачува у тренутни директоријум.