ПОС/Лаб 1 2016 — разлика између измена

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
м (+pos-compliant rešenje)
 
(Није приказано 5 међуизмена 3 корисника)
Ред 1: Ред 1:
{{tocright}}
{{tocright}}
Лаб 1 се појављује у '''другом''' термину вежби.
Лаб 1 се појављује у '''другом''' термину вежби.
<div class="unhide-spoilers"></div>
{{решења}}


== Група 3 ==
== Група 3 ==
Ред 9: Ред 9:


==== Решење ====
==== Решење ====
<syntaxhighlight lang="bash" class="spoiler">
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain">
mkdir -p /home/pos/test &&
mkdir -p /home/pos/test &&
     cp -P /bin/* /home/pos/test/
     cp -P /bin/* /home/pos/test/
Ред 20: Ред 20:


==== Решење ====
==== Решење ====
<syntaxhighlight lang="bash" class="spoiler">
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain">
grep -v 'pos\|sshd' /etc/passwd |  
grep -v 'pos\|sshd' /etc/passwd |  
     wc -l
     wc -l
Ред 27: Ред 27:
Друго решење:
Друго решење:


<syntaxhighlight lang="bash" class="spoiler">
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain">
grep -cv 'pos\|sshd' /etc/passwd
grep -cv 'pos\|sshd' /etc/passwd
</syntaxhighlight>
</syntaxhighlight>
Ред 36: Ред 36:


==== Решење ====
==== Решење ====
<syntaxhighlight lang="bash" class="spoiler">
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain">
sudo du -ah /etc |  
sudo du -ah /etc |  
     cut -d$'\t' -f1 > sizes.txt
     cut -d$'\t' -f1 > sizes.txt
</syntaxhighlight>
</syntaxhighlight>


Друго решење:
У поставци задатка се помиње ls, иако није најелегантније могуће је овако урадити:


<syntaxhighlight lang="bash" class="spoiler">
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain">
sudo du -ah /etc |  
ls -Rsh /etc |
     awk '{print $1}' > sizes.txt
     sed 's/^total \|^\s*//' |
    grep -v '^\s*$' |
    grep '^[0-9]' |
    cut -d' ' -f1 > sizes.txt
</syntaxhighlight>
</syntaxhighlight>


== Група 4 ==
== Група 4 ==
Ред 55: Ред 57:


==== Решење ====
==== Решење ====
<syntaxhighlight lang="bash" class="spoiler">
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain">
echo $(( $(date +%m) + $(date +%d) ))
echo $(( $(date +%m) + $(date +%d) ))
</syntaxhighlight>
</syntaxhighlight>
Ред 61: Ред 63:
Друго решење:
Друго решење:


<syntaxhighlight lang="bash" class="spoiler">
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain">
expr $(date +%m) + $(date +%d)
expr $(date +%m) + $(date +%d)
</syntaxhighlight>
</syntaxhighlight>
Ред 70: Ред 72:


==== Решење ====
==== Решење ====
<syntaxhighlight lang="bash" class="spoiler">
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain">
dubina=3
dubina=3
[ -d /home/pos ] &&  
[ -d /home/pos ] &&  
Ред 84: Ред 86:


==== Решење ====
==== Решење ====
<syntaxhighlight lang="bash" class="spoiler">
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain">
mkdir -p /home/pos &&  
mkdir -p /home/pos &&  
     cat /etc/passwd |  
     cat /etc/passwd |  
Ред 96: Ред 98:


==== Решење ====
==== Решење ====
<syntaxhighlight lang="bash" class="spoiler">
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain">
if [ /bin/ls -nt /bin/cat ]; then
if [ /bin/ls -nt /bin/cat ]; then
     echo "/bin/ls je noviji"
     echo "/bin/ls je noviji"
Ред 106: Ред 108:
Друго решење:
Друго решење:


<syntaxhighlight lang="bash" class="spoiler">
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain">
[ /bin/ls -nt /bin/cat ] &&  
[ /bin/ls -nt /bin/cat ] &&  
     echo "/bin/ls je noviji" ||  
     echo "/bin/ls je noviji" ||  
Ред 117: Ред 119:


==== Решење ====
==== Решење ====
<syntaxhighlight lang="bash" class="spoiler">
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain">
sort -k3r studenti.txt |  
sort -k3r studenti.txt |  
     sed 's/ [0-9]\+//' |  
     sed 's/ [0-9]\+//' |  
Ред 125: Ред 127:
Друго решење:
Друго решење:


<syntaxhighlight lang="bash" class="spoiler">
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain">
sort -k3r studenti.txt |  
sort -k3r studenti.txt |  
     sed -n 's/ [0-9]\+//; 1,20p'  
     sed -n 's/ [0-9]\+//; 1,20p'  
</syntaxhighlight>
</syntaxhighlight>
Треће решење:
<syntaxhighlight lang="bash" class="spoiler">
sort -k3r studenti.txt |
    awk '{print $1" "$2} NR==20{exit}'
</syntaxhighlight>


=== Задатак 3 ===
=== Задатак 3 ===
Ред 144: Ред 137:


==== Решење ====
==== Решење ====
<syntaxhighlight lang="bash" class="spoiler">
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain">
ls -shd /boot/* |
ls -shd /boot/* |
     sort -hr |
     sort -hr |
Ред 162: Ред 155:


==== Решење ====
==== Решење ====
<syntaxhighlight lang="bash" class="spoiler">
<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'  
Ред 173: Ред 166:
Друго решење:
Друго решење:


<syntaxhighlight lang="bash" class="spoiler">
<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'
Ред 179: Ред 172:
# raspakivanje jedne arhive u ~/user
# raspakivanje jedne arhive u ~/user
mkdir -p ~/user && sudo tar -C ~/user -xvzf `find /usr -name '*.tar.gz' -print -quit`
mkdir -p ~/user && sudo tar -C ~/user -xvzf `find /usr -name '*.tar.gz' -print -quit`
</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>
</syntaxhighlight>


Ред 186: Ред 186:


==== Решење ====
==== Решење ====
<syntaxhighlight lang="bash" class="spoiler">
Прво решење:
<syntaxhighlight lang="bash" class="spoiler" data-solution="plain">
diff -by studenti1.txt studenti2.txt |
diff -by studenti1.txt studenti2.txt |
     grep -v '<\|>' |
     grep -v '<\|>' |
Ред 192: Ред 193:
# Напомена: cut команда може бити генерално замењена са awk-ом. У овом конкретном случају би се то урадило са awk '{print $1" "$2" "$3}'.     
# Напомена: cut команда може бити генерално замењена са awk-ом. У овом конкретном случају би се то урадило са awk '{print $1" "$2" "$3}'.     
</syntaxhighlight>
</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>
[[Категорија:ПОС]]
[[Категорија:ПОС]]
[[Категорија:Лабораторијске вежбе]]
[[Категорија:Лабораторијске вежбе]]

Тренутна верзија на датум 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