Administrator rzadko czyta logi linijka po linijce — filtruje je, sortuje i zlicza. Cztery proste polecenia: grep, sort, uniq i wc wystarczą, by odpowiedzieć na pytania „ile było błędów?” i „kto logował się najczęściej?”. Na lekcji uczniowie analizują dziennik logowań z fikcyjnymi użytkownikami.
Scenariusz jest przeznaczony na 45 minut dla klasy znającej podstawowe polecenia Linuksa — na przykład po lekcji o poleceniach.
Przygotowanie stanowisk
Potrzebny jest terminal z powłoką bash (Ubuntu, WSL lub maszyna wirtualna). Ćwiczenia wykonuj na zwykłym koncie, bez sudo. Rozpakuj pakiet z sekcji materiałów do folderu lekcja i przejdź do niego poleceniem cd. Plik dziennik.log leży w tym folderze. Skrypt rozwiazanie.sh odtwarza całą lekcję w katalogu tymczasowym i nie zmienia Twoich plików.
Cele i plan lekcji
Po zajęciach uczeń potrafi:
- filtrować linie poleceniem
grep(także z opcjami-c,-v,-i); - policzyć linie poleceniem
wc -l; - wyciąć kolumnę poleceniem
cut -d" " -f3; - zliczyć powtórzenia kombinacją
sort | uniq -c | sort -rn.
| Czas | Praca na lekcji |
|---|---|
| 0–5 min | Problem: ile błędów jest w logu? |
| 5–15 min | grep, wc, opcje |
| 15–22 min | cut, sort, uniq -c |
| 22–37 min | Trzy zadania samodzielne |
| 37–42 min | Porównanie z kluczem |
| 42–45 min | Pytania kontrolne |
Plik dziennik.log
Plik ma dziesięć linii w formacie data godzina użytkownik zdarzenie [szczegół]:
2026-10-12 08:01 anna LOGIN
2026-10-12 08:05 bartek LOGIN
2026-10-12 08:07 anna ERROR haslo
2026-10-12 08:15 celina LOGIN
2026-10-12 08:20 bartek ERROR haslo
2026-10-12 08:21 bartek LOGIN
2026-10-12 08:30 anna LOGOUT
2026-10-12 08:42 damian ERROR siec
2026-10-12 08:50 celina LOGOUT
2026-10-12 09:02 bartek LOGOUT
Cztery polecenia
grep wzorzec plikwypisuje linie zawierające wzorzec;-cpodaje liczbę takich linii,-vodwraca wybór,-iignoruje wielkość liter.wc -lliczy linie (z pliku albo ze standardowego wejścia).cut -d' ' -f3wycina trzecie pole, gdy separatorem jest spacja.sortporządkuje linie,sort -uusuwa duplikaty, asort -rnsortuje liczbowo malejąco.uniq -czlicza sąsiadujące powtórzenia — dlatego przed nim zawsze stosuje sięsort.
Polecenia łączymy potokiem |, który przekazuje wynik jednego polecenia na wejście następnego.
Zadania
Zadanie 1. Błędy. Policz linie w pliku, wypisz linie zawierające ERROR i podaj ich liczbę (grep -c).
Zadanie 2. Zdarzenia. Policz zdarzenia LOGIN, linie niebędące logowaniem (grep -v) oraz wszystkie zdarzenia użytkownika bartek (grep -i).
Zadanie 3. Użytkownicy. Wytnij kolumnę z nazwą użytkownika, zlicz wystąpienia każdego użytkownika i posortuj od najaktywniejszego. Policz, ilu różnych użytkowników jest w logu.
Dla chętnych: wypisz linie z błędem hasła z godziny 08:00–08:30 (grep "08:[0-2]" | grep haslo).
Rozwiązanie i wyniki
set -e
ZRODLO="$(cd "$(dirname "$0")" && pwd)"
TMP=$(mktemp -d)
cp "$ZRODLO/dziennik.log" "$TMP/"
cd "$TMP"
echo "--- Zadanie 1"
wc -l < dziennik.log
grep ERROR dziennik.log
grep -c ERROR dziennik.log
echo "--- Zadanie 2"
grep -c LOGIN dziennik.log
grep -v LOGIN dziennik.log | wc -l
grep -i "BARTEK" dziennik.log | wc -l
echo "--- Zadanie 3"
cut -d' ' -f3 dziennik.log | sort | uniq -c | sort -rn
cut -d' ' -f3 dziennik.log | sort -u | wc -l
cd /
rm -r "$TMP"
Skrypt rozwiazanie.sh z pakietu wykonuje te polecenia w katalogu tymczasowym i wypisuje:
--- Zadanie 1
10
2026-10-12 08:07 anna ERROR haslo
2026-10-12 08:20 bartek ERROR haslo
2026-10-12 08:42 damian ERROR siec
3
--- Zadanie 2
4
6
4
--- Zadanie 3
4 bartek
3 anna
2 celina
1 damian
4
Typowe błędy
| Objaw | Co sprawdzić |
|---|---|
grep nic nie wypisuje | Wzorzec różni się wielkością liter; użyj -i albo popraw zapis. |
uniq -c nie łączy powtórzeń | Brakuje sort przed uniq — łączy tylko sąsiednie linie. |
sort -n daje złą kolejność liczb | Bez -n liczby sortowane są jak tekst (10 przed 2). |
wc -l plik wypisuje też nazwę pliku | To zamierzone; wc -l < plik pokazuje samą liczbę. |
cut zwraca całą linię | Zły separator: -d' ' oznacza spację, nie tabulator. |
| Różne wyniki na innych komputerach | Dla polskich znaków ustaw kodowanie UTF-8 i porównuj te same pliki. |
Pytania kontrolne i punktacja
- Czym różni się
grep ERROR plikodgrep -c ERROR plik? - Dlaczego przed
uniq -cstosujemysort? - Co robi potok
|?
Odpowiedzi: Pierwsze wypisuje linie z ERROR, drugie tylko ich liczbę. uniq łączy tylko sąsiadujące, identyczne linie. Przekazuje wynik jednego polecenia na wejście następnego.
Proponowana punktacja (razem 10 punktów): zadanie 1 — wc -l 1 pkt, grep 1 pkt, grep -c 1 pkt; zadanie 2 — trzy polecenia po 1 pkt; zadanie 3 — cut 1 pkt, potok sort | uniq -c | sort -rn 2 pkt, liczba użytkowników 1 pkt. Zadanie dla chętnych nie jest wymagane do pełnej oceny.
Materiały do pobrania
Rozpakuj ZIP przed otwarciem plików. Materiały są dostępne bez logowania; publiczne rozwiązanie służy nauce i samodzielnemu sprawdzeniu, a nie poufnemu sprawdzianowi.
Co dalej?
Następny krok to przekierowania, find i skrypty automatyzujące analizę logów. Ten materiał rozwija dział o przetwarzaniu tekstu w kursie Linux w TablicaPro, gdzie znajdziesz prezentacje, ćwiczenia i testy do prowadzenia lekcji.
Źródła techniczne: podręcznik GNU grep oraz podręcznik GNU coreutils. Zobacz też lekcję o poleceniach Linux.
Poprowadź kolejne lekcje Linux
Pełny kurs: prezentacje, ćwiczenia i testy do pracy z klasą.
Kup dostęp do kursu Linux →