**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.#~~
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.#~~
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.#~~
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.#~~
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.#~~
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.#~~
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.#~~
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.#~~
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.#~~
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.#~~
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.#~~
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.#~~
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.#~~
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.#~~
Ile znaków ''#'' jest w pliku ''/usr/include/openssl/sha.h''.
cat /usr/include/openssl/sha.h | tr -dc '#' | wc -c
~~Zadanie.#~~
Wyświetl ''/usr/include/openssl/sha.h'' pomijając linie zaczynające się od ''#''.
grep -v '^#' /usr/include/openssl/sha.h
~~Zadanie.#~~
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.#~~
Liczba ukrytych plików i katalogów w katalogu domowym.
ls -d ~/.* | wc -l
ls -A ~ | grep '^\.' | wc -l
~~Zadanie.#~~
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.#~~
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.#~~
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.#~~
Liczba użytkowników w ''/etc/passwd'' z powłoką ustawioną na ''bash''.
grep '/bin/bash$' /etc/passwd | wc -l
~~Zadanie.#~~
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.#~~
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"