Narzędzia użytkownika

Narzędzia witryny


Pasek boczny

so:potoki_cwiczenia:solutions

Te zadania można rozwiązać na wiele sposobów. Do części zadań jest podany więcej niż jeden sposób rozwiązania.

Zadanie 1 Wyświetl na ekranie prędkości taktowania procesorów używając pliku /proc/cpuinfo.

grep MHz /proc/cpuinfo | cut -f2 -d ':' | tr -d ' '
grep MHz /proc/cpuinfo | cut -b 12-
grep MHz /proc/cpuinfo | tr -s ': ' '\n' | grep '\.'
awk '/MHz/ {print $NF}' /proc/cpuinfo

Zadanie 2 Kombinacje praw dostępu w katalogu /etc/.

ls -l | tail -n +2 | cut -b 2-10 | sort | uniq  -c 
vdir  | tail -n +2 | cut -b 2-10 | sort | uniq  -c
stat /etc/* | grep '(' | cut -d '(' -f 2 | cut -d '/' -f 1 | sort | uniq -c
stat /etc/* | grep '(' | cut -d '(' -f 2 | cut -b 7-15     | sort | uniq -c

Zadanie 3 Ośmioznakowe słowa kończące się na less.

cut -f1 -d\/ /usr/share/myspell/en_GB.dic | grep '^....less$'
cut -f1 -d\/ /usr/share/myspell/en_GB.dic | grep -P '^\w{4}less$'
grep less /usr/share/myspell/en_GB.dic | tr '/' '\t' | cut -f1 |  grep '^....less$'
sed -n 's|^\(....less\)\(/.*\)*$|\1|p;' /usr/share/myspell/en_GB.dic
perl -pe 'print "$1\n" if /^(....less)\W/; undef $_' /usr/share/myspell/en_GB.dic

Zadanie 4 Słowa kończące się na more i zaczynające się z małej litery.

cut -f1 -d\/ /usr/share/myspell/en_GB.dic | grep 'more$' | grep '^[a-z]'

Zadanie 5 Losowa 32-cyfrowa liczba szesnastkowa z /dev/urandom.

cat /dev/urandom | tr -dc '0-9a-f' | head -c 32
cat /dev/urandom | head -c 16 | od -x | cut -s -f 2- -d ' '| tr -d ' '

Zadanie 6 Lista 10 haseł o długości 8 znaków (małe litery i podkreślnik) z /dev/urandom.

cat /dev/urandom | tr -dc 'a-z_' | fold -w 8 | head
cat /dev/urandom | tr -dc 'a-z_' | head -c 80 | fold -w 8

Zadanie 7 Ile jest uruchomionych procesów bash.

pidof bash | wc -w
pgrep '^bash$' | wc -l
ps -e | grep '\bbash\b' | wc -l
pgrep bash | wc -l                  # te polecenia policzą też procesy które
ps -e | grep bash | wc -l           # mają w nazwie bash, ale nie są bashem

Zadanie 8 5 najczęściej się powtarzających poleceń z historii powłoki (z argumentami).

sort ~/.bash_history | uniq -c | sort -n | tail -n5
history  | cut -b 8- | uniq -c | sort -n | tail -n5

Zadanie 9 5 najczęściej się powtarzających nazw programów z historii poleceń powłoki, uwzględniając że w potoku uruchomionych jest kilka programów oddzielonych przez |.

cat ~/.bash_history | tr '|' '\n' | sed 's/^\s*//' |  cut -f1 -d ' ' | uniq -c | sort -n | tail -n5
cat ~/.bash_history | tr '|' '\n' | awk '{print $0}'                 | uniq -c | sort -n | tail -n5

Uwaga: te rozwiązania nie traktują właściwie znaku | będącego częścią zamkniętego w cudzysłowy tekstu, również nie biorą pod uwagę command / process substitution. Pełne rozwiązanie wymagałoby napisania własnego leksera i parsera.

Zadanie 10 5 najpopularniejszych rozszerzeń (wszystko po pierwszej kropce) w /var/log/.

ls -d /var/log/*.* |      cut -d . -f 2- | sort | uniq -c | sort -rn | head -n5
ls /var/log |          cut -s -d . -f 2- | sort | uniq -c | sort -rn | head -n5
ls /var/log | grep '\.' | cut -d . -f 2- | sort | uniq -c | sort -rn | head -n5

Zadanie 11 5 najpopularniejszych rozszerzeń (wszystko po ostatniej kropce) w /var/log/.

ls -d /var/log/*.* |      rev |    cut -d . -f 1 | rev | sort | uniq -c | sort -rn | head -n5
ls /var/log |             rev | cut -s -d . -f 1 | rev | sort | uniq -c | sort -rn | head -n5
ls /var/log | grep '\.' | rev |    cut -d . -f 1 | rev | sort | uniq -c | sort -rn | head -n5

Zadanie 12 Trzech użytkowników (poza rootem) z największą liczbą procesów.

ps --no-headers -e -o user             | grep -v root | sort | uniq -c | sort -rn | head -n3
ps -e -o user              | tail -n+2 | grep -v root | sort | uniq -c | sort -rn | head -n3
ps -ef | cut -f1 -d ' '    | tail -n+2 | grep -v root | sort | uniq -c | sort -rn | head -n3

Zadanie 13 Plik nagłówkowy w /usr/include/ w którym jest deklaracja funkcji SHA512_Init.

grep -lr SHA512_Init /usr/include/
grep -r SHA512_Init /usr/include/ | cut -f 1 -d ':'

Zadanie 14 Ile znaków # jest w pliku /usr/include/openssl/sha.h.

cat /usr/include/openssl/sha.h | tr -dc '#' | wc -c

Zadanie 15 Wyświetl /usr/include/openssl/sha.h pomijając linie zaczynające się od #.

grep -v '^#' /usr/include/openssl/sha.h

Zadanie 16 Protokoły które mają nazwane porty w /etc/services.

cat /etc/services | tr -s '\t ' '\t' | cut -f 2 | grep '^[0-9][0-9]*/'  | cut -f 2 -d '/' | sort | uniq
awk '$2 ~ /[0-9]+\// {print $2}'                          /etc/services | cut -f 2 -d '/' | sort | uniq
awk '$2 ~ /[0-9]+\// {sub(/[0-9]+\//, "", $2); print $2}' /etc/services                   | sort | uniq
cat /etc/services | grep -v '^#' | tr -s '\t ' '\t' | cut -sf2 | cut -sf2 -d /            | sort | uniq

Zadanie 17 Liczba ukrytych plików i katalogów w katalogu domowym.

ls -d ~/.* | wc -l
ls -A ~ | grep '^\.' | wc -l

Zadanie 18 Ilość wysłanych i odebranych bajtów z wyników polecenia ip --statistics link show br0.

ip --statistics link show br0 | tail -n3       | grep -v bytes | tr -s ' ' '\t' | cut -f 2
ip --statistics link show br0 | tail -n3       | grep -v bytes | awk '{print $1}'
ip --statistics link show br0 | grep bytes -A1 | grep -v bytes | awk '{print $1}'

Zadanie 19 Pięć identyfikatorów procesów w systemie które mają największą ilość procesów potomnych.

ps -el | tail -n +2 | tr -s ' ' '\t' | cut -f 5 | sort | uniq -c | sort -nr | head -n5 | cut -b9-
ps --no-headers -eo ppid |                        sort | uniq -c | sort -nr | head -n5 | cut -b9-

Zadanie 20 Znając identyfikator PID wyświetl nazwę programu z argumentami.

ps -ef | tr -s ' ' | cut -f 2,8- -d ' ' |  grep '^//PID//' | cut  -f2- -d' '
ps --no-headers -o cmd -p //PID//

Zadanie 21 Liczba użytkowników w /etc/passwd z powłoką ustawioną na bash.

grep '/bin/bash$' /etc/passwd | wc -l

Zadanie 22 Lista plików nagłówkowych wymaganych przez wszystko w /usr/include/infiniband/.

grep -r '^[[:space:]]*#include ' /usr/include/infiniband/     | tr '<>"' '"' | cut -f 2 -d '"' | sort | uniq
cat /usr/include/infiniband/* | grep '^[[:space:]]*#include ' | tr '<>"' '"' | cut -f 2 -d '"' | sort | uniq

Zadanie 23 Same czasy odpowiedzi z wyników ping -i 0.5 -c 10 put.poznan.pl.

ping -i 0.5 -c 10 put.poznan.pl | grep from | cut -d '=' -f 4 | cut -d' ' -f 1
# uruchomienie komendy ze zmieniony buforowaniem biblioteki standardowej C wypisuje wyniki na bieżąco
stdbuf -oL bash -c "ping -i 0.5 -c 10 put.poznan.pl | grep from | cut -d '=' -f 4 | cut -d' ' -f 1"
so/potoki_cwiczenia/solutions.txt · ostatnio zmienione: 2023/04/21 20:59 przez jkonczak