ПОС/Лаб 1 2016 — разлика између измена
(+l1 2016) |
(→Решење) |
||
| (Није приказано 14 међуизмена 3 корисника) | |||
| Ред 1: | Ред 1: | ||
{{tocright}} | {{tocright}} | ||
Лаб 1 се појављује у '''другом''' термину вежби. | |||
{{решења}} | |||
== Група 3 == | |||
=== Задатак 1 === | |||
==== Поставка ==== | |||
'''(3п)''' Копирати садржај директоријума '''/bin''' у директоријум '''/home/pos/test'''. Све фајлове (који нису линкови, ознака '''l''') у новом директоријум<sup>[sic]</sup> подесити да имају право приступа '''--x------'''. Као одговор приложити списак команди које су извршене. | |||
==== Решење ==== | |||
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain"> | |||
mkdir -p /home/pos/test && | |||
cp -P /bin/* /home/pos/test/ | |||
chmod 100 /home/pos/test/* | |||
</syntaxhighlight> | |||
=== Задатак 2 === | |||
==== Поставка ==== | |||
'''(4п)''' Пребројати колико има линија у фајлу '''/etc/passwd''' који не садрже речи '''pos''' и '''sshd'''. Као одгово приложити списак команди које су извршене. | |||
==== Решење ==== | |||
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain"> | |||
grep -v 'pos\|sshd' /etc/passwd | | |||
wc -l | |||
</syntaxhighlight> | |||
Друго решење: | |||
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain"> | |||
grep -cv 'pos\|sshd' /etc/passwd | |||
</syntaxhighlight> | |||
=== Задатак 3 === | |||
==== Поставка ==== | |||
'''(7п)''' Направити листу величина свих фајлова/директоријума који су директни потомци директоријума '''/etc'''. У листи величине треба да буду у људски читљивом облику и листа треба да садржи само величине. Листу сачувати у фајлу '''sizes.txt'''. Излазни фајл треба да буде у корисничком директоријуму. Као одговор приложити списак команди које су извршене. (Напомена: '''ls''' команда може да исписује неколико размака једно поред другог). | |||
==== Решење ==== | |||
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain"> | |||
sudo du -ah /etc | | |||
cut -d$'\t' -f1 > sizes.txt | |||
</syntaxhighlight> | |||
У поставци задатка се помиње ls, иако није најелегантније могуће је овако урадити: | |||
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain"> | |||
ls -Rsh /etc | | |||
sed 's/^total \|^\s*//' | | |||
grep -v '^\s*$' | | |||
grep '^[0-9]' | | |||
cut -d' ' -f1 > sizes.txt | |||
</syntaxhighlight> | |||
== Група 4 == | |||
=== Задатак 1 === | |||
==== Поставка ==== | |||
'''(5п)''' Написати команде које сабирају дан и месец за текући датум на рачунару. | |||
==== Решење ==== | |||
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain"> | |||
echo $(( $(date +%m) + $(date +%d) )) | |||
</syntaxhighlight> | |||
Друго решење: | |||
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain"> | |||
expr $(date +%m) + $(date +%d) | |||
</syntaxhighlight> | |||
=== Задатак 2 === | |||
==== Поставка ==== | |||
'''(4п)''' Пронаћи колико има скривених фајлова/директоријума у '''/home/pos''' директоријуму. Директоријум се посматра до произвољне дубине. Као одговор приложити списак команди које су извршене. | |||
==== Решење ==== | |||
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain"> | |||
dubina=3 | |||
[ -d /home/pos ] && | |||
find /home/pos -maxdepth $dubina | | |||
grep '/\.[^/]*$' | | |||
wc -l | |||
</syntaxhighlight> | |||
Дубина је одређена променљивом "dubina". | |||
=== Задатак 3 === | |||
==== Поставка ==== | |||
'''(5п)''' Направити листу свих ID-јева корисника који постоје на раунару. У фајлу '''/etc/passwd''' се налазе ID-ијеви корисника. У сваком реду се налази по један ID, тачно између другог и трећег знака :. Резултујућу листу уписати у фајл '''/home/pos/id.txt'''. Као одговор приложити списак команди које су извршене. | |||
==== Решење ==== | |||
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain"> | |||
mkdir -p /home/pos && | |||
cat /etc/passwd | | |||
cut -d':' -f3 > /home/pos/id.txt | |||
</syntaxhighlight> | |||
== Група 5 == | |||
=== Задатак 1 === | |||
==== Поставка ==== | |||
'''(3п)''' Написати тест команду која проверава да ли је фајл '''/bin/ls''' новији од фајла '''/bin/cat'''. | |||
==== Решење ==== | |||
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain"> | |||
if [ /bin/ls -nt /bin/cat ]; then | |||
echo "/bin/ls je noviji" | |||
else | |||
echo "/bin/cat je noviji" | |||
fi | |||
</syntaxhighlight> | |||
Друго решење: | |||
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain"> | |||
[ /bin/ls -nt /bin/cat ] && | |||
echo "/bin/ls je noviji" || | |||
echo "/bin/cat je noviji" | |||
</syntaxhighlight> | |||
=== Задатак 2 === | |||
==== Поставка ==== | |||
'''(4п)''' Фајл '''studenti.txt''' (направите сами) садржи информације о студентима у следећем формату: '''<ime>''' '''<prezime>''' '''<broj poena>'''. Подаци за једног студента се налазе у засебном реду. Подаци у реду одвојени су једним бланко знаком. Издвојити 20 студената који имају највећи број поена. Као одговор приложити списак команди које су извршене. | |||
==== Решење ==== | |||
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain"> | |||
sort -k3r studenti.txt | | |||
sed 's/ [0-9]\+//' | | |||
head -20 | |||
</syntaxhighlight> | |||
Друго решење: | |||
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain"> | |||
sort -k3r studenti.txt | | |||
sed -n 's/ [0-9]\+//; 1,20p' | |||
</syntaxhighlight> | |||
=== Задатак 3 === | |||
==== Поставка ==== | |||
'''(7п)''' Приказати само информације фајла који је највећи у директоријуму '''/boot'''. Показати информације у људски читљивом облику. Као одговор приложити списак команди које су извршене. | |||
==== Решење ==== | |||
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain"> | |||
ls -shd /boot/* | | |||
sort -hr | | |||
head -1 | |||
</syntaxhighlight> | |||
== Задатак 1 == | == Група 6 == | ||
=== Поставка === | === Задатак 1 === | ||
==== Поставка ==== | |||
'''(3п)''' У едитору Emacs пронаћи команду која врши претрагу текста у текућем фајлу. | '''(3п)''' У едитору Emacs пронаћи команду која врши претрагу текста у текућем фајлу. | ||
==== Решење ==== | |||
<code>C-s</code> | <code>C-s</code> | ||
== Задатак 2 == | === Задатак 2 === | ||
=== Поставка === | ==== Поставка ==== | ||
'''(4п)''' Пронаћи све фајлове у директоријуму '''/usr''' са екстензијом '''tar.gz'''. Једну архиву распаковати у директоријум '''~/user'''. Као одговор приложити списак команди које су извршене. | '''(4п)''' Пронаћи све фајлове у директоријуму '''/usr''' са екстензијом '''tar.gz'''. Једну архиву распаковати у директоријум '''~/user'''. Као одговор приложити списак команди које су извршене. | ||
=== Решење === | ==== Решење ==== | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash" class="spoiler" data-solution="plain"> | ||
# izlistaj sve tar.gz fajlovi iz /usr | # izlistaj sve tar.gz fajlovi iz /usr | ||
sudo find /usr -name '*.tar.gz' | sudo find /usr -name '*.tar.gz' | ||
# raspakivanje jedne arhive u ~/user | # raspakivanje jedne arhive u ~/user | ||
mkdir -p ~/user && sudo find /usr -name '*.tar.gz' -print -quit | xargs tar -C ~/user -xvzf | mkdir -p ~/user && sudo find /usr -name '*.tar.gz' -print -quit | | ||
xargs tar -C ~/user -xvzf | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Друго решење: | Друго решење: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash" class="spoiler" data-solution="plain"> | ||
# izlistaj sve tar.gz fajlovi iz /usr | # izlistaj sve tar.gz fajlovi iz /usr | ||
sudo find /usr -name '*.tar.gz' | sudo find /usr -name '*.tar.gz' | ||
| Ред 32: | Ред 174: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Треће решење: | |||
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain"> | |||
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 | |||
</syntaxhighlight> | |||
== Задатак 3 == | === Задатак 3 === | ||
=== Поставка === | ==== Поставка ==== | ||
'''(7п)''' Фајлови '''studenti1.txt''' и '''studenti2.txt''' (направите сами) садрже информације о студентима у исотм формату '''<име> <презиме> <гггг/бббб>'''. Студенти могу да се понављају у обе датотеке. Подаци за једног студента се налазе у засебном реду. Број размака између речи је произвољан. Направити листу свих индекса који се јављају у оба фајла. Индекси треба да буду јединствени у листи. Листу уписати у фајл '''indeksi.txt'''. Као одговор приложити списак команди које су извршене. | '''(7п)''' Фајлови '''studenti1.txt''' и '''studenti2.txt''' (направите сами) садрже информације о студентима у исотм формату '''<име> <презиме> <гггг/бббб>'''. Студенти могу да се понављају у обе датотеке. Подаци за једног студента се налазе у засебном реду. Број размака између речи је произвољан. Направити листу свих индекса који се јављају у оба фајла. Индекси треба да буду јединствени у листи. Листу уписати у фајл '''indeksi.txt'''. Као одговор приложити списак команди које су извршене. | ||
=== Решење === | ==== Решење ==== | ||
<syntaxhighlight lang="bash"> | Прво решење: | ||
diff -by studenti1.txt studenti2.txt | grep -v '<\|>' | awk '{print $1" "$2" "$3}' > indeksi.txt | <syntaxhighlight lang="bash" class="spoiler" data-solution="plain"> | ||
diff -by studenti1.txt studenti2.txt | | |||
grep -v '<\|>' | | |||
cut -d' ' -f1,2,3 > indeksi.txt | |||
# Напомена: cut команда може бити генерално замењена са awk-ом. У овом конкретном случају би се то урадило са awk '{print $1" "$2" "$3}'. | |||
</syntaxhighlight> | |||
Друго решење: | |||
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain"> | |||
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 | |||
</syntaxhighlight> | </syntaxhighlight> | ||
[[Категорија:ПОС]] | [[Категорија:ПОС]] | ||
[[Категорија:Лабораторијске вежбе]] | [[Категорија:Лабораторијске вежбе]] | ||
Тренутна верзија на датум 5. април 2022. у 22:58
Лаб 1 се појављује у другом термину вежби.
- За питања са више одговора, тачни одговори су подебљани и уоквирени
- За питања за које се одговори уносе, тачни одговори су подвучени и сакривени, тако да се прикажу када изаберете тај текст (пример: овако)
- Притисните лево дугме испод за сакривање и откривање свих одговора, или десно дугме за укључивање и искључивање интерактивног режима:
Група 3
Задатак 1
Поставка
(3п) Копирати садржај директоријума /bin у директоријум /home/pos/test. Све фајлове (који нису линкови, ознака l) у новом директоријум[sic] подесити да имају право приступа --x------. Као одговор приложити списак команди које су извршене.
Решење
mkdir -p /home/pos/test &&
cp -P /bin/* /home/pos/test/
chmod 100 /home/pos/test/*
Задатак 2
Поставка
(4п) Пребројати колико има линија у фајлу /etc/passwd који не садрже речи pos и sshd. Као одгово приложити списак команди које су извршене.
Решење
grep -v 'pos\|sshd' /etc/passwd |
wc -l
Друго решење:
grep -cv 'pos\|sshd' /etc/passwd
Задатак 3
Поставка
(7п) Направити листу величина свих фајлова/директоријума који су директни потомци директоријума /etc. У листи величине треба да буду у људски читљивом облику и листа треба да садржи само величине. Листу сачувати у фајлу sizes.txt. Излазни фајл треба да буде у корисничком директоријуму. Као одговор приложити списак команди које су извршене. (Напомена: ls команда може да исписује неколико размака једно поред другог).
Решење
sudo du -ah /etc |
cut -d$'\t' -f1 > sizes.txt
У поставци задатка се помиње ls, иако није најелегантније могуће је овако урадити:
ls -Rsh /etc |
sed 's/^total \|^\s*//' |
grep -v '^\s*$' |
grep '^[0-9]' |
cut -d' ' -f1 > sizes.txt
Група 4
Задатак 1
Поставка
(5п) Написати команде које сабирају дан и месец за текући датум на рачунару.
Решење
echo $(( $(date +%m) + $(date +%d) ))
Друго решење:
expr $(date +%m) + $(date +%d)
Задатак 2
Поставка
(4п) Пронаћи колико има скривених фајлова/директоријума у /home/pos директоријуму. Директоријум се посматра до произвољне дубине. Као одговор приложити списак команди које су извршене.
Решење
dubina=3
[ -d /home/pos ] &&
find /home/pos -maxdepth $dubina |
grep '/\.[^/]*$' |
wc -l
Дубина је одређена променљивом "dubina".
Задатак 3
Поставка
(5п) Направити листу свих ID-јева корисника који постоје на раунару. У фајлу /etc/passwd се налазе ID-ијеви корисника. У сваком реду се налази по један ID, тачно између другог и трећег знака :. Резултујућу листу уписати у фајл /home/pos/id.txt. Као одговор приложити списак команди које су извршене.
Решење
mkdir -p /home/pos &&
cat /etc/passwd |
cut -d':' -f3 > /home/pos/id.txt
Група 5
Задатак 1
Поставка
(3п) Написати тест команду која проверава да ли је фајл /bin/ls новији од фајла /bin/cat.
Решење
if [ /bin/ls -nt /bin/cat ]; then
echo "/bin/ls je noviji"
else
echo "/bin/cat je noviji"
fi
Друго решење:
[ /bin/ls -nt /bin/cat ] &&
echo "/bin/ls je noviji" ||
echo "/bin/cat je noviji"
Задатак 2
Поставка
(4п) Фајл studenti.txt (направите сами) садржи информације о студентима у следећем формату: <ime> <prezime> <broj poena>. Подаци за једног студента се налазе у засебном реду. Подаци у реду одвојени су једним бланко знаком. Издвојити 20 студената који имају највећи број поена. Као одговор приложити списак команди које су извршене.
Решење
sort -k3r studenti.txt |
sed 's/ [0-9]\+//' |
head -20
Друго решење:
sort -k3r studenti.txt |
sed -n 's/ [0-9]\+//; 1,20p'
Задатак 3
Поставка
(7п) Приказати само информације фајла који је највећи у директоријуму /boot. Показати информације у људски читљивом облику. Као одговор приложити списак команди које су извршене.
Решење
ls -shd /boot/* |
sort -hr |
head -1
Група 6
Задатак 1
Поставка
(3п) У едитору Emacs пронаћи команду која врши претрагу текста у текућем фајлу.
Решење
C-s
Задатак 2
Поставка
(4п) Пронаћи све фајлове у директоријуму /usr са екстензијом tar.gz. Једну архиву распаковати у директоријум ~/user. Као одговор приложити списак команди које су извршене.
Решење
# 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
Друго решење:
# 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`
Треће решење:
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
Задатак 3
Поставка
(7п) Фајлови studenti1.txt и studenti2.txt (направите сами) садрже информације о студентима у исотм формату <име> <презиме> <гггг/бббб>. Студенти могу да се понављају у обе датотеке. Подаци за једног студента се налазе у засебном реду. Број размака између речи је произвољан. Направити листу свих индекса који се јављају у оба фајла. Индекси треба да буду јединствени у листи. Листу уписати у фајл indeksi.txt. Као одговор приложити списак команди које су извршене.
Решење
Прво решење:
diff -by studenti1.txt studenti2.txt |
grep -v '<\|>' |
cut -d' ' -f1,2,3 > indeksi.txt
# Напомена: cut команда може бити генерално замењена са awk-ом. У овом конкретном случају би се то урадило са awk '{print $1" "$2" "$3}'.
Друго решење:
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