Linux · test

Test Linux — polecenia, potoki i operacje na plikach z kluczem

Test z Linuksa: grep, potoki, find, cp, mv i cmp na przygotowanych danych. Klucz z wynikami z basha, punktacja 10 pkt i skrypt do pobrania.

45 minutPoziom podstawowyPliki i rozwiązania

Materiał redakcyjny TablicaPro · liceum i technikum

$ grep -c ERROR dziennik.txt
3
Wyniki zgodne z kluczem z prawdziwego basha.
Katalog tymczasowy posprzątany.

Test z Linuksa najlepiej sprawdza to, czy uczeń potrafi zamienić zadanie na polecenie: policzyć błędy w dzienniku, znaleźć najaktywniejszego użytkownika, odnaleźć pliki, skopiować i przenieść. Poniższy test składa się z trzech zadań, a jego klucz został wygenerowany skryptem uruchomionym w prawdziwym bashu na przygotowanych danych (wymyślony dziennik ośmiu zdarzeń i katalog raporty).

Test jest przeznaczony na 45 minut dla klasy po lekcjach o grep, sort, uniq i wc, find i przekierowaniach. Uczniowie wykonują polecenia w terminalu na kopii przygotowanych plików; skrypt tworzy dane w katalogu tymczasowym i na końcu sam sprząta.

Przygotowanie stanowisk

Potrzebny jest terminal z powłoką bash (Ubuntu, WSL lub maszyna wirtualna). Ćwiczenia wykonuj na zwykłym koncie, bez sudo. Skrypt rozwiazanie.sh z pakietu odtwarza całą lekcję w katalogu tymczasowym (mktemp -d) i usuwa tylko ten katalog — nie zmienia Twoich plików; uruchamiasz go poleceniem bash rozwiazanie.sh. Ćwiczenia z karty pracy wykonaj ręcznie w terminalu, w osobnym katalogu ćwiczeniowym.

Cele i plan lekcji

Po zajęciach uczeń potrafi:

  • policzyć wiersze pasujące do wzorca (grep -c, grep | wc -l);
  • zbudować potok z awk, sort, uniq i head;
  • wyszukać pliki i katalogi poleceniem find;
  • skopiować, przenieść i porównać pliki (cp, mv, cmp).
CzasPraca na lekcji
0–5 minInstrukcja i dane
5–35 minRozwiązywanie trzech zadań
35–45 minSamosprawdzenie z kluczem

Dane

Plik dziennik.txt zawiera osiem zdarzeń w formacie godzina użytkownik zdarzenie [szczegół], a katalog raporty — pliki a.txt, b.txt, notatki.md oraz podkatalog stare z plikiem c.txt.

Zadania (dla uczniów)

Zadanie 1 (3 pkt). Policz wiersze ze słowem ERROR na dwa sposoby (grep -c oraz grep | wc -l) i policz wiersze ze słowem timeout.

Zadanie 2 (4 pkt). Podaj użytkownika z największą liczbą zdarzeń i tę liczbę (potok z awk, sort, uniq -c, head); wypisz w jednym wierszu unikalnych użytkowników z błędami; wypisz drugi wiersz pliku.

Zadanie 3 (3 pkt). Policz pliki .txt w raporty (także w podkatalogach), wypisz katalogi, skopiuj dziennik do raporty, sprawdź zgodność kopii poleceniem cmp, przenieś notatki.md do stare i wypisz zawartość stare.

Punktacja

Każde polecenie z poprawnym wynikiem — wartość podana w nawiasie rozłożona równo na polecenia danego zadania; uznajemy równoważne polecenia (np. wc -l < plik). Brak cudzysłowu we wzorcu przy find — minus 0,5 pkt.

Uwagi dotyczące wyników

W zadaniu 2 najwięcej zdarzeń ma jan (cztery wobec trzech zdarzeń oli), więc nie ma remisu; przy zmianie danych warto sprawdzić, czy nie powstaje remis, bo wynik zależy wtedy od kolejności sortowania.

Zadania

Zadanie 1. Policz wiersze z ERROR na dwa sposoby oraz wiersze z timeout.

Zadanie 2. Znajdź użytkownika z największą liczbą zdarzeń, wypisz unikalnych użytkowników z błędami i drugi wiersz pliku.

Zadanie 3. Policz pliki .txt, wypisz katalogi, skopiuj dziennik, porównaj kopię, przenieś notatki.md i wypisz zawartość stare.

Dla chętnych: wypisz godziny wszystkich zdarzeń ERROR jednym poleceniem (potok grep i awk).

Rozwiązanie i wyniki

set -e
TMP=$(mktemp -d)
cd "$TMP"
cat > dziennik.txt <<'DANE'
08:01 ola LOGIN
08:05 jan LOGIN
08:07 ola ERROR timeout
08:12 kasia LOGIN
08:15 jan ERROR disk
08:20 ola LOGOUT
08:31 jan ERROR timeout
08:40 jan LOGOUT
DANE
mkdir -p raporty/stare
touch raporty/a.txt raporty/b.txt raporty/stare/c.txt raporty/notatki.md

echo "--- Zadanie 1: grep i wc"
grep -c ERROR dziennik.txt
grep ERROR dziennik.txt | wc -l
grep -c timeout dziennik.txt

echo "--- Zadanie 2: potoki"
awk '{print $2}' dziennik.txt | sort | uniq -c | sort -rn | head -n 1 | awk '{print $2, $1}'
grep ERROR dziennik.txt | awk '{print $2}' | sort -u | tr '\n' ' '
echo
head -n 2 dziennik.txt | tail -n 1

echo "--- Zadanie 3: pliki"
find raporty -name "*.txt" | wc -l
find raporty -type d | sort
cp dziennik.txt raporty/dziennik_kopia.txt
cmp dziennik.txt raporty/dziennik_kopia.txt && echo "kopia identyczna"
mv raporty/notatki.md raporty/stare/
ls raporty/stare

cd /
rm -r "$TMP"

Skrypt rozwiazanie.sh z pakietu wykonuje te polecenia w katalogu tymczasowym i wypisuje:

--- Zadanie 1: grep i wc
3
3
2
--- Zadanie 2: potoki
jan 4
jan ola 
08:05 jan LOGIN
--- Zadanie 3: pliki
3
raporty
raporty/stare
kopia identyczna
c.txt
notatki.md

Typowe błędy

ObjawCo sprawdzić
Zły wynik grep -cWzorzec pasuje do większej liczby wierszy niż zakładano (np. wielkość liter); sprawdź grep -i.
uniq -c bez sortuniq łączy tylko sąsiednie, więc najpierw posortuj.
Różne wyniki przy remisiePrzy równych liczbach kolejność zależy od sort; sprawdź ustawienia lokalne.
Wzorzec *.txt bez cudzysłowu w findPowłoka rozwinie go przed uruchomieniem find.
cmp nic nie wypisujeTo znaczy, że pliki są identyczne.
mv do nieistniejącego kataloguNajpierw utwórz katalog docelowy.

Pytania kontrolne i punktacja

  1. Czym różnią się grep -c ERROR plik i grep ERROR plik | wc -l?
  2. Dlaczego przed uniq -c wywołujemy sort?
  3. Co oznacza brak wyjścia z cmp?

Odpowiedzi: Zwracają ten sam wynik: pierwsze liczy wiersze wewnątrz grep, drugie przekazuje je do wc. Bo uniq łączy tylko sąsiadujące identyczne wiersze. Że pliki są identyczne.

Proponowana punktacja (razem 10 punktów): zadanie 1 — 3 pkt; zadanie 2 — 4 pkt; zadanie 3 — 3 pkt (rozłożone równo na polecenia). 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 test z uprawnień i procesów oraz skrypty bash. Ten materiał rozwija dział o pracy w terminalu w kursie Linux w TablicaPro, gdzie znajdziesz prezentacje, ćwiczenia i testy do prowadzenia lekcji.

Źródła techniczne: podręcznik GNU grep oraz GNU coreutils. Zobacz też lekcję o przekierowaniach i potokach.

Poprowadź kolejne lekcje Linux

Pełny kurs: prezentacje, ćwiczenia i testy do pracy z klasą.

Kup dostęp do kursu Linux →

Zobacz program kursu