Podstawowe komendy użytkowe Poruszanie się w CLI / BASH / SSH Wprowadzenie: W systemach Linux/Unix praca odbywa się głównie w środowisku tekstowym (terminalu). Zrozumienie, jak nawigować po systemie plików, jest fundamentem pracy administracyjnej. Poniżej przedstawiamy podstawowe i zaawansowane komendy do poruszania się po strukturze katalogów. 1. Komenda pwd – gdzie jestem? pwd Polecenie pwd (print working directory) wyświetla pełną, bezwzględną ścieżkę do katalogu, w którym aktualnie się znajdujemy. Jest to podstawowa komenda pozwalająca na orientację w strukturze katalogów systemu. Przykład: $ pwd /home/admin/projekty 2. Komenda ls – co jest w katalogu? ls Komenda ls (list) wyświetla listę plików i katalogów w bieżącym katalogu. To podstawowe narzędzie do przeglądania zawartości systemu plików. Najczęściej używane opcje: ls -l Wyświetla szczegółowe informacje o plikach: uprawnienia, właściciela, grupę, rozmiar, datę modyfikacji i nazwę. ls -a Pokazuje również pliki ukryte (których nazwa zaczyna się od kropki . ). ls -lh Łączy opcję -l z -h (human-readable), wyświetlając rozmiary plików w formacie czytelnym dla człowieka (KB, MB, GB). ls -lah Połączenie wszystkich trzech opcji – szczegółowy widok ze wszystkimi plikami (w tym ukrytymi) i czytelnymi rozmiarami. ls -lt Sortuje pliki według daty modyfikacji (najnowsze na górze). ls -lS Sortuje pliki według rozmiaru (największe na górze). 3. Komenda cd – poruszanie się między katalogami cd /ścieżka/do/katalogu Polecenie cd (change directory) zmienia aktualny katalog roboczy na wskazany. Najważniejsze sposoby użycia: cd ~ Przechodzi do katalogu domowego aktualnego użytkownika (np. /home/admin ). cd .. Przechodzi do katalogu nadrzędnego (rodzica) względem bieżącego katalogu. cd - Wraca do poprzedniego katalogu, w którym byliśmy przed ostatnią zmianą. cd ./katalog Wchodzi do podkatalogu katalog znajdującego się w bieżącej lokalizacji. cd / Przechodzi do katalogu głównego systemu (root directory). 4. Zrozumienie kropek w ścieżkach . – oznacza bieżący katalog .. – oznacza katalog nadrzędny (jeden poziom wyżej) ~ – oznacza katalog domowy użytkownika Przykłady: cd ../dokumenty # przejdź poziom wyżej, potem do katalogu dokumenty cd ~/projekty # przejdź do katalogu projekty w katalogu domowym cd ../../tmp # dwa poziomy wyżej, potem do katalogu tmp 5. Komenda readlink – rozwijanie ścieżek readlink -f nazwa_pliku Polecenie readlink z opcją -f wyświetla pełną, absolutną ścieżkę do pliku lub katalogu, rozwijając wszystkie linki symboliczne. Przydatne, gdy pracujemy z skrótami i chcemy poznać rzeczywistą lokalizację pliku. 6. Komenda tree – drzewo katalogów tree Wyświetla strukturę katalogów w formie drzewa (jeśli narzędzie jest zainstalowane). Pozwala na szybką wizualizację zagnieżdżenia katalogów. tree -L 2 Ogranicza głębokość wyświetlania do 2 poziomów. Podsumowanie praktyczne: # Sprawdź, gdzie jesteś pwd # Wyświetl pliki w bieżącym katalogu ze szczegółami ls -lah # Przejdź do katalogu projekty cd ~/projekty # Wróć do poprzedniego katalogu cd - # Przejdź poziom wyżej cd .. # Wyświetl pełną ścieżkę do pliku readlink -f config.conf Obsługa przegladania plików : CAT, HEAD, TAIL 1.  cat – wyświetlanie zawartości pliku cat plik.txt Wyświetla całą zawartość pliku plik.txt na standardowe wyjście (terminal). Używany też do łączenia plików i przekierowania ich zawartości. Przykład łączenia plików i zapisu do nowego pliku: cat plik1.txt plik2.txt > polaczony_plik.txt 2. head – wyświetlanie początkowych linii pliku head plik.txt Wyświetla domyślnie pierwsze 10 linii pliku plik.txt . Zmiana liczby wyświetlanych linii: head -n 20 plik.txt Wyświetla pierwsze 20 linii pliku. 3. tail – wyświetlanie końcowych linii pliku tail plik.txt Wyświetla ostatnie 10 linii pliku. Śledzenie zmieniającego się pliku (np. pliku logu): tail -f /var/log/syslog Na żywo wyświetla kolejne dodawane linie do pliku (przydatne przy monitorowaniu logów). Wyświetlenie określonej liczby ostatnich linii: tail -n 50 plik.log Ostatnie 50 linii pliku plik.log . Praktyczne zastosowania połączeń narzędzi Wyświetlenie ostatnich 100 linii z monitorowaniem na żywo (analogicznie jak tail -f ): tail -n 100 -f /var/log/system.log Wyświetlenie pierwszych 50 linii wyszukanego pliku, np. połączone z grep : grep "error" /var/log/syslog | head -n 50 Parametry komendy ich wykorzystanie:  -n (–lines=ILE) Opcja pozwala określić liczbę wyświetlanych linii od końca pliku. tail -n 20 plik.txt Wyświetli ostatnie 20 linii pliku plik.txt . Domyślnie jest to 10 linii, jeśli nie podamy opcji. -f (–follow[=OPTION]) Opcja stosowana do śledzenia pliku na bieżąco. Wypisuje najpierw ostatnie linie, potem wyświetla na żywo nowe linie dopisywane do pliku. tail -f /var/log/syslog Przydatne do monitorowania plików logów w czasie rzeczywistym. -c (–bytes=ILE) Wypisuje z pliku zamiast linii określoną liczbę ostatnich bajtów. tail -c 100 plik.txt Wyświetla ostatnie 100 bajtów pliku. Jeden bajt to jeden znak lub nowa linia. -q (–quiet, –silent) Przy wyświetlaniu wielu plików nie wyświetla ich nazw nad zawartością. tail -q -n 10 plik1.txt plik2.txt -v (–verbose) Zawsze wyświetla nazwę pliku nad jego zawartością nawet przy jednym pliku. Inne przydatne opcje --retry – wielokrotna próba otwarcia pliku, przydatne w monitorowaniu. --pid=PID – automatyczne zatrzymanie działania gdy zakończy się proces o podanym PID. -s N – opóźnienie między odczytami gdy używamy -f , domyślnie 1 sekunda. Przykład kompleksowy: tail -n 50 -f -s 2 /var/log/app.log Wyświetla ostatnie 50 linii pliku app.log , a następnie śledzi plik, odświeżając co 2 sekundy. Użycie w potoku i z filtrowaniem: tail -f /var/log/app.log | grep --color "ERROR" Monitoruje na żywo plik logów i podświetla słowo "ERROR". Obsługa komendy "ps" - Proces Status Komenda ps (process status) jest jednym z fundamentalnych narzędzi administracyjnych do monitorowania procesów w systemach Unix/Linux. Pozwala na identyfikację, śledzenie i diagnostykę działających aplikacji. W pracy z serwerami (szczególnie przy Proxmox, FreeBSD czy administracji gra serwerów MT2) niezbędna jest umiejętność interpretacji wyniku ps . Podstawowe użycie ps ps Wyświetla procesy bieżącego użytkownika w aktualnej sesji terminalowej. Bardzo podstawowe, rzadko wystarczające dla administratora. Przeglądanie wszystkich procesów z pełnymi informacjami ps aux To najczęstsze polecenie dla administratorów. Wyświetla wszystkie procesy w systemie ( a – wszystkie, u – szczegółowy format, x – procesy bez terminala). Kolumny oznaczają: USER (właściciel), PID (ID procesu), %CPU (procent CPU), %MEM (procent pamięci), VSZ (rozmiar wirtualny), RSS (resident set size – fizyczna pamięć), TTY (terminal), STAT (status), START (czas startu), TIME (czas CPU), COMMAND (polecenie). Alternatywny format wyświetlania ps -ef Inny sposób na wyświetlenie wszystkich procesów, bardziej zbliżony do formatu Linuksa (zamiast BSD-owego aux ). PPID (ID procesu nadrzędnego) jest tu bardziej widoczne. Filtrowanie procesów konkretnego użytkownika ps -u 'nazwa_usera' Pokazuje tylko procesy należące do użytkownika admin . Przydatne gdy szukamy co robi konkretny użytkownik. ps -u root,www-data Procesy należące do wielu użytkowników naraz. Wyszukiwanie konkretnych procesów ps aux | grep 'nazwa procesu' Wyszukuje procesy związane z danym procesem ps aux | grep -v grep Eliminuje z wyniku samo polecenie grep (często pojawia się w wynikach). pgrep -lf 'nazwa_procesu' Szuka procesu po pełnej nazwie polecenia (bardziej precyzyjne niż grep). Sortowanie procesów ps aux --sort=-%cpu | head -20 Wyświetla 20 procesów zużywających najwięcej CPU, posortowanych malejąco. ps aux --sort=-%mem | head -20 Wyświetla 20 procesów zużywających najwięcej pamięci RAM. ps aux --sort=-vsz Sortuje po wirtualnym rozmiarze pamięci. ps aux | wc -l Liczy całkowitą liczbę procesów w systemie. Monitorowanie procesów hiearchy – relacje między procesami ps auxf Wyświetla procesy w formie drzewa, pokazując które procesy są "dziećmi" innych procesów. pstree -p user Pokazuje drzewo procesów danego użytkownika z PID. Monitorowanie procesów w czasie – status i sygnały ps aux | grep -E 'S|Ss|R|T' Statusy procesów: S (sleeping – uśpiony), Ss (session leader), R (running – działający), T (stopped – zatrzymany), Z (zombie). Zombie procesy – problem w naszych czatach: ps aux | grep Z Wyszukuje procesy zombie (znane z naszych dzienników z serwera MT2SRV, gdzie czasami pojawiały się procesy nieusunięte prawidłowo). Wyświetlanie konkretnych kolumn ps -o pid,user,%cpu,%mem,comm Wyświetla tylko wybrane kolumny: PID, użytkownik, CPU, pamięć i nazwa polecenia. ps aux -o pid,ppid,user,comm PID, PPID (proces nadrzędny), użytkownik i nazwa polecenia – przydatne do zrozumienia zależności między procesami. Monitorowanie procesów w pętli rzeczywistej – ale nie programem top while true; do ps aux | grep game; sleep 2; done Monitoruje konkretny proces co 2 sekundy. Przydatne gdy chcemy obserwować czy proces się restartuje. Specjalistyczne zapytania ps aux | awk '$3 > 10 { print $0 }' Wyświetla procesy zużywające więcej niż 10% CPU. ps aux | awk '$4 > 20 { print $2, $4, $11 }' Wyświetla procesy zużywające więcej niż 20% pamięci (PID, %MEM, komenda). Praktyczne scenariusze # Sprawdzenie stanu serwera gry MT2SRV ps aux | grep -E 'game|db|auth' Szukamy trzech kluczowych procesów serwera. # Znalezienie procesu zużywającego zasoby ps aux --sort=-%mem | head -1 Proces zużywający największą pamięci. # Znalezienie i zabicie zombie procesów ps aux | grep Z | awk '{print $2}' | xargs kill -9 Ostrożnie! Usuwa procesy zombie (choć powinny być usunięte automatycznie). Monitorowanie procesów na żywo: top i htop top to standardowe narzędzie do monitorowania systemu w czasie rzeczywistym. htop to nowoczesna, bardziej przyjazna alternatywa z kolorowym interfejsem i lepszą nawigacją. Komenda top – klasyczne monitorowanie top Uruchamia interaktywny monitor systemowy. Domyślnie sortuje procesy wg CPU. Klawisze i komendy w top q – wyjście z top h – pomoc M – sortuj wg pamięci (zamiast CPU) P – sortuj wg CPU (domyślnie) T – sortuj wg czasu uruchomienia u – pokaż procesy konkretnego użytkownika k – zabij proces (przydatne gdy proces "szaleje") r – zmień priorytet procesu (nice value) Uruchamianie top z opcjami top -u 'nazwa_usera' Pokazuje tylko procesy użytkownika admin . top -p 1234,5678 Monitoruje konkretne procesy po PID. top -n 1 Pokazuje tylko jeden snapshot (raz odświeża) i wyłącza się (przydatne w skryptach). top -o %MEM Sortuj wg zużycia pamięci przy uruchomieniu. Praktyczne zastosowanie z naszych czatów: top -p $(pgrep -f game | tr '\n' ',')) Monitoruj procesy serwera gry (game, db, auth). Komenda htop – ulepszona wersja htop Uruchamia interaktywny monitor z kolorowym interfejsem. Zalety htop nad top Kolorowy, bardziej czytelny interfejs Możliwość zaznaczania wielu procesów naraz Łatwiejsze filtrowanie i wyszukiwanie Łatwiejsze zabijanie procesów bez znajomości ich PID Drzewo procesów (Forest View) Klawisze w htop q – wyjście F3 – wyszukaj proces F4 – filtruj (np. po użytkowniku) F5 – widok drzewa procesów F6 – zmień kolumnę sortowania F9 – wyślij sygnał do procesu (kill, SIGSTOP, etc.) u – pokaż procesy użytkownika Porównanie top vs htop Cecha top htop Dostępność Zawsze zainstalowany Wymaga instalacji Interfejs Tekstowy Kolorowy, przyjazny Wyszukiwanie Trudne Łatwe (F3) Zabijanie procesów Wymaga PID Zaznacz i F9 Drzewo procesów Brak F5 Wykorzystanie htop htop Uruchom htop, press F4 by filtrować procesy, wpisz np "docker". Zabij proces szalejący (zużywający 100% CPU): top Znajdź proces, naciśnij k , wpisz sygnał (9 dla SIGKILL). Monitoruj konkretny proces i jego dzieci (fork): htop -p [PID] Lub w htop: F5 dla Forest View, wyszukaj proces. Zaawansowane wyszukiwanie z użyciem find i grep 1. find – wyszukiwanie plików i katalogów find /ścieżka -iname "wzorzec" Szukamy plików lub katalogów według nazwy ze zignorowaniem wielkości liter (opcja -iname ). Przykład: find /var/log -iname "*.LOG" znajdzie wszystkie pliki z rozszerzeniem .log lub .LOG. find . -type f Szukamy wyłącznie zwykłych plików w bieżącym katalogu i jego podkatalogach. ( -type f = file) find . -type d Szukamy tylko katalogów. ( -type d = directory) find /home -mtime -7 Wyszukujemy pliki zmodyfikowane w ciągu ostatnich 7 dni. ( -mtime to czas modyfikacji, -7 oznacza mniej niż 7 dni temu) find /var/www -size +10M Wyszukujemy pliki większe niż 10 megabajtów. ( +10M oznacza większe niż 10MB) Co oznaczają opcje: -iname – wyszukiwanie nazwy pliku bez zwracania uwagi na wielkość liter. -name – wyszukiwanie nazwy pliku uwzględnia wielkość liter. -type f/d/l – filtr według typu: f  = plik zwykły, d = katalog, l = link symboliczny. -mtime N – pliki modyfikowane dokładnie N dni temu; -mtime -N – zmodyfikowane w ciągu ostatnich N dni. -size +N – pliki większe niż N jednostek (k, M, G). 2. grep – wyszukiwanie tekstu wewnątrz plików lub strumieni danych grep "wzorzec" plik.txt Wyszukuje linie zawierające wzorzec w podanym pliku. grep -i "blad" plik.txt Ignoruje wielkość liter, znajdzie "blad", "Blad", "BLAD" itd. grep -r "error" /var/log Rekurencyjnie wyszukuje słowo "error" we wszystkich plikach w katalogu /var/log. grep -n "start" plik.txt Wyświetla numer linii, w której znaleziono dopasowanie. grep -c "fail" plik.txt Liczy liczbę linii, które zawierają "fail". grep -v "warning" plik.txt Wyświetla linie, które nie zawierają słowa "warning". grep -l "TODO" *.c Wyświetla tylko nazwy plików z rozszerzeniem .c, w których znaleziono słowo "TODO". Opisy opcji: -i – ignoruj wielkość liter; -r – rekurencyjne przeszukiwanie katalogów; -n – pokazywanie numerów linii; -c – liczenie wystąpień; -v – negacja wzorca (linia nie zawiera wzorca); -l – pokazuje tylko nazwy plików z dopasowaniem. 3. Łączenie find z grep – wyszukiwanie wzorców tekstowych w określonych plikach find /var/www -type f -name "*.php" -exec grep -l "mysqli_connect" {} \; Znajduje wszystkie pliki .php w katalogu /var/www, które zawierają tekst "mysqli_connect". find /var/www -type f -iname "*.conf" -exec grep -iH "server" {} \; Znajduje pliki konfiguracyjne (bez zwracania uwagi na wielkość liter w nazwie) zawierające słowo "server" (ignorując wielkość liter, pokazując nazwy plików i linie). find . -iname "test*" -print0 | xargs -0 grep -l "error" Wyszukuje pliki zaczynające się na "test" i sprawdza, czy zawierają słowo "error". Bezpieczne dla nazw z odstępami dzięki -print0 i xargs -0 . Praktyczne wskazówki  Używaj -iname w find, jeśli nie jesteś pewien wielkości liter w nazwach plików. Łącz find z grep przy pomocy -exec lub xargs , aby wyszukiwać w treści plików wybrane wzorce. Opcje grep -r i --include pozwalają filtrować rekurencyjne wyszukiwania wg typu plików. Przetestuj zapytania na mniejszych katalogach dla sprawdzenia wyników przed uruchomieniem na dużych strukturach. Podsumowanie find i grep to podstawowe, lecz bardzo potężne narzędzia do wyszukiwania plików i danych w nich zawartych, ich właściwe stosowanie znacząco ułatwia administrowanie systemami i skryptowanie operacji. Obsługa dysków i systemów plików: df, du, lsblk, lscsi Zarządzanie dyskami i miejscem na nich to kluczowa część administracji systemów. W serwerach (szczególnie Proxmox, FreeBSD czy serwery gier) ważne jest monitorowanie pojemności dysków i szybkie diagnozowanie problemów z miejscem na dysku. Gdy dysk się zapełni, serwis przestaje działać – stąd konieczność bieżącego monitorowania i konserwacji. Komenda df – informacje o systemach plików df Wyświetla użycie dysku dla wszystkich zamontowanych systemów plików (domyślnie w blokach 1K). Jest to podstawowe narzędzie do szybkiego sprawdzenia "ile miejsca zostało". df -h Format czytelny (B, KB, MB, GB) – najczęstszy sposób użycia. Zamiast liczb takich jak 15360000 zobaczymy 15G. df -H Format dziesiętny (1000 zamiast 1024 jako podstawa) – dla jednostek SI. Niektórzy wolą taki zapis. df -T Dodaje kolumnę z typem systemu plików (ext4, xfs, btrfs, zfs, ntfs, etc.). Przydatne gdy zarządzasz różnymi typami systemów plików. df -i Wyświetla inode'y zamiast bloków. Ważne: można mieć wolne miejsce, ale brak inode'ów (gdy mamy miliony małych plików). System wtedy nie pozwoli tworzyć nowych plików mimo wolnego miejsca! Praktyczne kombinacje: df -Th Typ systemu plików i format czytelny – najbardziej praktyczna forma dla administratorów. df -h | grep -v tmpfs Ukryj tymczasowe systemy plików tmpfs, devtmpfs (często nieistotne). df -h | awk '$5 > 80 {print $0}' Pokaż tylko dyski zapełnione powyżej 80% (kolumna 5 to procent użycia). df -hT | sort -k6 -rn Posortuj dyski wg procentu zajęcia miejsca (kolumna 6) malejąco – szybko znajdziesz problematyczne dyski. Komenda du – rozmiar katalogów i plików du (disk usage) pokazuje ile miejsca zajmują poszczególne katalogi i pliki. Jest niezbędne gdy df pokazuje że dysk jest pełny, a potrzebujemy znaleźć które katalogi lub pliki odpowiadają za ten stan. du Domyślnie wyświetla rozmiary wszystkich podkatalogów rekurencyjnie (może wypisać tysiące linii!). du -h Format czytelny (KB, MB, GB). du -sh katalog/ Podsumowanie (-s, summary) rozmiaru katalogu w czytelnym formacie.  Wszystkie pliki i katalogi (-a, all) z rozmiarami – pokaże też pojedyncze pliki, nie tylko katalogi. du -d 1 -h /var Ograniczenie głębokości (-d 1) do jednego poziomu – nie wchodzi głębiej w strukturę. Znalezienie największych katalogów i plików: du -ah /var | sort -rh | head -20 20 największych plików i podkatalogów w /var (sortuj malejąco wg rozmiaru czytelnego dla człowieka). du -sh /* 2>/dev/null | sort -rh Sprawdź rozmiar wszystkich głównych katalogów systemu (/, /home, /var, /usr itd), ignoruj błędy dostępu. find /var -type f -size +100M -exec ls -lh {} \; | awk '{print $5, $9}' | sort -rh Znajdź wszystkie pliki większe niż 100MB. Przydatne gdy szukasz co zabiera miejsce. find /var/log -type f -size +1G Znajdź pliki logów większe niż 1GB – często to one zapełniają dysk. Praktyczne scenariusze z doświadczeń sysadmina: # Dysk pełny na serwerze – diagnoza krok po kroku df -h # Sprawdź który dysk jest pełny du -sh /* | sort -rh # Szukaj dużych katalogów głównych du -sh /var/* | sort -rh # Zagłębienie w /var du -sh /var/log/* | sort -rh # Sprawdź logi Sprawdź rozmiar bazy danych du -sh /var/lib/mysql du -sh /var/lib/postgresql Sprawdź cache, tymczasowe pliki du -sh /tmp /var/tmp /var/cache Komenda lsblk – lista urządzeń blokowych Wprowadzenie: lsblk wyświetla strukturę dysków twardych, partycji, wolumenów logicznych (LVM) oraz punktów montowania. Niezastąpione gdy chcesz szybko zobaczyć "co jest podpięte i gdzie". lsblk Wyświetla wszystkie urządzenia blokowe w formie drzewa. Idealnie pokazuje relacje między dyskami, partycjami i punktami montowania. lsblk -f Dodatkowo pokazuje systemy plików, UUID, etykiety (labels) i procent użycia. lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,FSTYPE Wybrane kolumny – dostosuj wyświetlanie do swoich potrzeb. lsblk -p Pokazuje pełne ścieżki urządzeń (np. /dev/sda zamiast sda). Komenda lscsi – lista urządzeń SCSI/SATA lscsi Wyświetla listę podłączonych urządzeń SCSI/SATA. Przydatne do weryfikacji że wszystkie dyski fizyczne są widoczne w systemie. lscsi -s Dodaje rozmiar dysków. Monitorowanie I/O dysku w czasie rzeczywistym iostat -xz 1 Monitoruj operacje I/O na dyskach co sekundę (wymaga pakietu sysstat ). Szukaj kolumny %util > 80% – oznacza mocne obciążenie dysku. iotop Interaktywne narzędzie pokazujące które procesy generują najwięcej operacji I/O (wymaga instalacji i uprawnień root). watch -n 1 'df -h | grep -v tmpfs' Monitoruj zmiany w zajęciu dysku co sekundę (przydatne gdy coś szybko zabiera miejsce). Diagnostyka problemów z dyskiem – praktyczne scenariusze Problem: Dysk nagle zapełniony # Krok 1: Sprawdź który system plików df -h # Krok 2: Szukaj dużych katalogów (zacznij od głównych) du -sh /* 2>/dev/null | sort -rh | head -10 # Krok 3: Zagłębienie (np. jeśli /var jest duży) du -sh /var/* | sort -rh | head -10 # Krok 4: Sprawdź logi du -sh /var/log/* find /var/log -type f -size +500M -exec ls -lh {} \; # Krok 5: Sprawdź czy nie ma usuniętych plików nadal otwartych lsof +L1 | grep deleted Problem: Brak miejsca mimo że pliki nie zajmują tyle # Sprawdź inode'y (mogą się skończyć przy wielu małych plikach) df -i # Jeśli inode'y na wyczerpaniu, znajdź katalogi z wieloma plikami find / -xdev -printf '%h\n' | sort | uniq -c | sort -rn | head -20 Problem: Serwer gry MT2SRV – logi zapełniają dysk # Sprawdź rozmiar logów gry du -sh /path/to/game/log/* # Usuń stare logi (ostrożnie!) find /path/to/game/log -name "*.log" -mtime +7 -delete # Skompresuj duże logi zamiast usuwać find /path/to/game/log -name "*.log" -size +100M -exec gzip {} \; Czyszczenie dysku – bezpieczne metody: # Wyczyść cache pakietów (Debian/Ubuntu) apt clean apt autoclean # Wyczyść cache pakietów (RedHat/CentOS) yum clean all # Usuń stare kernele (Ubuntu - ostożnie!) apt autoremove --purge # Wyczyść dzienniki systemd starsze niż 7 dni journalctl --vacuum-time=7d # Wyczyść pliki tymczasowe starsze niż 10 dni find /tmp -type f -mtime +10 -delete Monitorowanie trendu zajęcia dysku # Zapisz snapshot dziennie df -h > /var/log/disk_usage_$(date +%Y%m%d).txt # Porównaj z wczoraj diff /var/log/disk_usage_20251122.txt /var/log/disk_usage_20251123.txt # Prosty skrypt alertu gdy dysk > 90% #!/bin/bash USAGE=$(df -h / | awk 'NR==2 {print $5}' | tr -d '%') if [ $USAGE -gt 90 ]; then echo "ALERT: Dysk zapełniony w $USAGE%" | mail -s "Disk Alert" admin@example.com fi Sprawdzanie stanu zdrowia dysku (S.M.A.R.T.)  (wymaga pakietu smartmontools ). smartctl -a /dev/sda Wyświetla szczegółowe informacje o stanie dysku z S.M.A.R.T.  smartctl -H /dev/sda Szybki test zdrowia dysku (PASSED/FAILED). LVM, RAID i ZFS Dla systemów z LVM: lvs # Lista logical volumes pvs # Lista physical volumes vgs # Lista volume groups lvdisplay # Szczegóły LV Dla systemów z RAID: cat /proc/mdstat # Status software RAID mdadm --detail /dev/md0 # Szczegóły RAID array Dla systemów z ZFS (FreeBSD, Linux z ZFS): zpool list # Lista pool'i ZFS zpool status # Status pool'i zfs list # Lista systemów plików ZFS zfs get all # Wszystkie właściwości Podsumowanie praktycznych komend # Quick check – co się dzieje z dyskami df -Th du -sh /* | sort -rh | head -10 lsblk -f # Deep dive – znajdź największe pliki find / -type f -size +1G -exec ls -lh {} \; 2>/dev/null # Monitoring w czasie rzeczywistym watch -n 2 'df -h; echo ""; du -sh /var/log /var/cache /tmp' # Diagnoza performance iostat -xz 2 5 iotop -o # tylko aktywne procesy I/O Linki symboliczne i twarde w systemach Linux/Unix Wprowadzenie: Linki w systemach Linux pozwalają na tworzenie alternatywnych nazw i dróg dostępu do plików bez duplikowania ich zawartości. Są dwa typy linków: symboliczne (symlinki) i twarde (hard links), każdy z nich ma swoje zastosowania i ograniczenia. 1. Link symboliczny (symbolic link, symlink) Co to jest link symboliczny? Link symboliczny to specjalny plik, który zawiera ścieżkę do innego pliku lub katalogu. Można go traktować jak "skrót" w systemach Windows. Link wskazuje na lokalizację docelową, ale sam nie zawiera danych oryginalnego pliku. Tworzenie linku symbolicznego: ln -s /ścieżka/do/originalu /ścieżka/do/linku Przykłady praktyczne: ln -s /usr/local/bin/python3.11 /usr/local/bin/python Tworzy link python wskazujący na python3.11 . Dzięki temu można wywoływać python zamiast pełnej nazwy. ln -s /var/www/html/projekty/strona ~/strona_link Tworzy wygodny skrót do katalogu projektu w katalogu domowym. ln -s /mnt/dysk_zewnetrzny/backup ~/backup Skrót do katalogu backupu na zewnętrznym dysku. Sprawdzanie linków symbolicznych: ls -l link_nazwa Wyświetla informację o linku i pokazuje gdzie wskazuje, np.: lrwxrwxrwx 1 user user 24 Nov 23 15:00 strona_link -> /var/www/html/projekty/strona Usuwanie linku symbolicznego: rm link_nazwa Uwaga: usuwanie linku nie usuwa pliku docelowego! Cechy linków symbolicznych: Mogą wskazywać na pliki i katalogi Mogą wskazywać na nieistniejące cele (tzw. "wiszące linki") Działają między różnymi systemami plików i partycjami Są widoczne jako osobny typ pliku (oznaczenie l w ls -l ) 2. Link twardy (hard link) Co to jest link twardy? Link twardy to dodatkowa nazwa dla tego samego pliku na dysku. W przeciwieństwie do linku symbolicznego, link twardy wskazuje bezpośrednio na te same dane (ten sam inode) co oryginalny plik. W praktyce nie ma różnicy między "oryginałem" a "linkiem" – oba są równorzędnymi nazwami tego samego pliku. Tworzenie linku twardego: ln /ścieżka/do/pliku /ścieżka/do/twardego_linku Przykłady praktyczne: ln /var/log/syslog /home/admin/syslog_backup Tworzy drugi dostęp do tego samego pliku logów. Modyfikacja w jednym miejscu jest widoczna w drugim. ln dokument.txt dokument_kopia.txt Obie nazwy wskazują na ten sam plik. Usunięcie jednej nazwy nie usuwa danych, dopóki istnieje druga. Sprawdzanie linków twardych: ls -li plik Opcja -i pokazuje numer inode. Pliki o tym samym numerze inode to linki twarde do tych samych danych. $ ls -li dokument.txt dokument_kopia.txt 12345678 -rw-r--r-- 2 user user 1024 Nov 23 15:00 dokument.txt 12345678 -rw-r--r-- 2 user user 1024 Nov 23 15:00 dokument_kopia.txt Ten sam numer inode (12345678) i liczba linków "2" oznacza, że to linki twarde. Cechy linków twardych: Działają tylko dla plików (nie dla katalogów) Muszą być w tym samym systemie plików Plik jest usuwany dopiero gdy usuniemy wszystkie linki twarde do niego Nie są widoczne jako osobny typ – wyglądają jak zwykłe pliki 3. Różnice między linkami symbolicznymi a twardymi Cecha Link symboliczny Link twardy Typ Wskaźnik do ścieżki Dodatkowa nazwa pliku Katalogi Tak Nie Różne systemy plików Tak Nie Po usunięciu oryginału Link "wiszący" Dane nadal dostępne 4. Praktyczne zastosowania # Link symboliczny do aktualnej wersji aplikacji ln -s /opt/app-1.2.3 /opt/app # Link symboliczny do konfiguracji ln -s /etc/nginx/sites-available/strona.conf /etc/nginx/sites-enabled/strona.conf # Link twardy jako backup przed edycją ln ważny_plik.conf ważny_plik.conf.backup # Sprawdzenie gdzie prowadzi link readlink -f link_nazwa # Znalezienie wszystkich linków twardych do pliku find / -inum $(ls -i plik | awk '{print $1}') 2>/dev/null Monitorowanie zasobów: free, vmstat, iostat, sara Monitorowanie dostępnej pamięci jest kluczowe dla stabilności systemu. Przy administracji serwerami, maszyn wirtualnych czy  serwerów ważne jest zrozumienie jak Linux alokuje i zarządza pamięcią. Komenda free – stan pamięci teraz free Wyświetla podsumowanie zużycia RAM i swap. Domyślnie w kilobajtach (KB). free -h Format czytelny (B, KB, MB, GB). Najczęściej stosowana opcja. free -m Wynik w megabajtach. free -g Wynik w gigabajtach (przydatne na dużych serwerach). free -w Rozszerzony format z osobną kolumną na bufory i cache. Interpretacja wyniku free -h : total used free shared buff/cache available Mem: 15.6G 8.2G 2.1G 0.5G 5.3G 7.4G Swap: 4.0G 0.5G 3.5G total – całkowita pamięć RAM used – faktycznie używana pamięć free – zupełnie wolna (często mała, bo Linux używa cache) buff/cache – bufory i cache (mogą być zwolnione, jeśli trzeba) available – pamięć dostępna do użytku dla aplikacji (ważna liczba!) Monitorowanie pamięci w czasie rzeczywistym free -h -s 2 Wyświetla stan pamięci co 2 sekundy. free -h -s 2 -c 10 Monitoruje co 2 sekundy, 10 razy. watch -n 1 'free -h' Monitorowanie pamięci co sekundę w atrakcyjnym formacie (wymaga pakietu watch ). Komenda vmstat – Virtual Memory Statistics Wprowadzenie do vmstat : Bardziej zaawansowana niż free , pokazuje statystyki pamięci wirtualnej, I/O i swap activity. vmstat Jednorazowy raport. vmstat 2 5 Raport co 2 sekundy, 5 razy. Interpretacja wyniku: procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 2048000 51200 5242880 0 0 2 1 50 30 25 5 70 0 0 r – procesy czekające na CPU b – procesy w I/O wait swpd – swap w użyciu (MB) free – wolna pamięć si/so – swap in/out (jeśli > 0, system ma problemy z pamięcią) id – % czasu CPU bezczynny (wysoki = dobry, niski = CPU obciążony) wa – % czasu czekania na I/O (wysokie wartości = problemy z dyskiem) Komenda iostat – I/O Statistics iostat monitoruje aktywność dysków i procesorów. Wymaga pakietu sysstat . iostat Ogólne statystyki od ostatniego restartu systemu. iostat -x 2 5 Rozszerzone statystyki dysku, co 2 sekundy, 5 razy. Interpretacja wyniku: Device r/s w/s rMB/s wMB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz %util sda 10.5 5.2 0.50 0.25 0.5 1.2 5% 10% 2.5ms 5.0ms 0.08 8.5% r/s – read operations per second w/s – write operations per second rMB/s / wMB/s – megabajty czytane/zapisywane na sekundę %util – procent wykorzystania dysku (>80% = problem) r_await / w_await – średni czas oczekiwania operacji (wysoki = wolny dysk) Komenda sar – System Activity Reporter sar z pakietu sysstat to kompleksowe narzędzie do monitorowania systemu. Może zbierać dane historyczne. sar -u 2 5 Statystyki CPU co 2 sekundy, 5 razy. sar -r 2 5 Statystyki pamięci. sar -d 2 5 Statystyki dysków (podobnie jak iostat ). sar -b 2 5 I/O i przełączenia stron (page faults). Monitorowanie swap activity – problem w systemach vmstat 1 | grep -v procs | awk '$7 > 0 || $8 > 0 { print "SWAP AKTYWNY!", $0 }' Ostrzeżenie gdy system zaczyna pisać do swap watch -n 1 'vmstat 1 2 | tail -1' Ciągłe monitorowanie najnowszych danych vmstat. Praktyczne problemy z pamięcią i jak je diagnozować Problem: System powolny, dużo swap activity # 1. Sprawdź dostępną pamięć free -h 2. Sprawdź swap vmstat 1 5 | grep -E 'si|so' 3. Szukaj procesów zużywających pamięć ps aux --sort=-%mem | head -20 4. Sprawdź I/O wait iostat -x 1 5 Problem: Serwer Metin2 (MT2SRV) zajmuje za dużo pamięci # Monitoruj samo server gry watch -n 1 'ps aux | grep -E "game|db|auth" | awk "{print \$2, \$4, \$11}"' Jeśli pamięć rośnie bezustannie (memory leak) ps aux | grep game | awk '{print $2}' # Uzyskaj PID cat /proc/[PID]/status | grep VmRSS # Aktualna pamięć tego procesu Wyzwalanie alertów przy braku pamięci #!/bin/bash AVAILABLE=$(free -h | awk '/^Mem:/ {print $7}' | tr -d 'G') if (( $(echo "$AVAILABLE < 1" | bc -l) )); then echo "ALARM: Pamięć poniżej 1GB!" fi Uprawnienia plików i katalogów - chmod i chowa 1. Podstawy modelu uprawnień Każdy plik i katalog ma przypisane uprawnienia dla trzech grup użytkowników: u (user) – właściciel pliku g (group) – grupa, do której należy plik o (others) – wszyscy pozostali użytkownicy Dla każdej z tych grup można przypisać trzy typy uprawnień: r (read) – prawo do odczytu w (write) – prawo do zapisu/modyfikacji x (execute) – prawo do wykonania (dla plików) lub wejścia (dla katalogów) 2. Wyświetlanie uprawnień ls -l plik.txt Wyświetla szczegółowe informacje, w tym uprawnienia w formacie: -rwxr-xr-- Gdzie: Pierwszy znak: typ pliku ( - zwykły plik, d katalog, l link symboliczny) Kolejne 3 znaki: uprawnienia właściciela ( rwx ) Kolejne 3 znaki: uprawnienia grupy ( r-x ) Ostatnie 3 znaki: uprawnienia innych ( r-- ) 3. Komenda chmod – zmiana uprawnień Format symboliczny (literowy): chmod u+x skrypt.sh Dodaje właścicielowi prawo wykonywania pliku skrypt.sh . chmod g-w dokument.txt Odbiera grupie prawo do zapisu w pliku dokument.txt . chmod o+r raport.pdf Dodaje innym użytkownikom prawo do odczytu pliku raport.pdf . chmod a+r plik.txt Dodaje prawo do odczytu dla wszystkich (właściciel, grupa, inni). chmod go-rwx prywatny.txt Odbiera grupie i innym wszystkie uprawnienia do pliku. Format numeryczny (oktalny): Każde uprawnienie ma wartość liczbową: r (read) = 4 w (write) = 2 x (execute) = 1 Sumując wartości, otrzymujemy kod uprawnień dla każdej grupy: 7 = rwx (4+2+1) 6 = rw- (4+2) 5 = r-x (4+1) 4 = r-- (4) 0 = --- (brak uprawnień) chmod 755 skrypt.sh Właściciel: rwx (7), grupa: r-x (5), inni: r-x (5). chmod 644 dokument.txt Właściciel: rw- (6), grupa: r-- (4), inni: r-- (4). chmod 700 prywatny_skrypt.sh Tylko właściciel ma pełny dostęp, inni nie mają żadnych uprawnień. 4. Rekurencyjna zmiana uprawnień chmod -R 755 /var/www/strona Opcja -R (recursive) zmienia uprawnienia dla katalogu i wszystkich plików oraz podkatalogów w nim zawartych. chmod -R u+rwX /home/user/dokumenty Duże X dodaje prawo wykonywania tylko do katalogów i plików, które już mają to prawo dla kogokolwiek. 5. Komenda chown – zmiana właściciela i grupy chown user plik.txt Zmienia właściciela pliku na użytkownika user . chown user:grupa plik.txt Zmienia właściciela na user i grupę na grupa . chown :grupa plik.txt Zmienia tylko grupę (właściciel pozostaje bez zmian). chown -R www-data:www-data /var/www Rekurencyjnie zmienia właściciela i grupę dla całego katalogu i jego zawartości. 6. Praktyczne przykłady zastosowań # Nadanie uprawnień wykonywania dla skryptu chmod +x deploy.sh # Zabezpieczenie pliku konfiguracyjnego (tylko właściciel może czytać i pisać) chmod 600 config.ini # Typowe uprawnienia dla katalogu www chmod -R 755 /var/www/html chown -R www-data:www-data /var/www/html # Odebranie wszystkich uprawnień innym użytkownikom chmod go-rwx /home/user/tajne_dane # Sprawdzenie uprawnień przed i po zmianie ls -l plik.txt chmod 644 plik.txt ls -l plik.txt Atrybuty plików i katalogów Wprowadzenie: Poza standardowymi uprawnieniami (rwx), system Linux oferuje dodatkowe mechanizmy kontroli dostępu do plików i katalogów. Należą do nich pliki ukryte oraz rozszerzone atrybuty zarządzane poleceniem chattr . 1. Pliki ukryte w systemie Linux/Unix Co to są pliki ukryte? W systemach Unix/Linux plikami ukrytymi nazywamy pliki i katalogi, których nazwa zaczyna się od kropki ( . ). Są one domyślnie niewidoczne przy standardowym wywoływaniu ls . Pliki ukryte często zawierają konfiguracje użytkownika lub aplikacji. Wyświetlanie plików ukrytych: ls -a Pokazuje wszystkie pliki, w tym ukryte. ls -la Szczegółowy widok ze wszystkimi plikami, w tym ukrytymi. Przykłady typowych plików ukrytych: .bashrc – konfiguracja powłoki bash .bash_profile – konfiguracja przy logowaniu .ssh/ – katalog z kluczami SSH .gitignore – plik konfiguracyjny git .vimrc – konfiguracja edytora vim Tworzenie ukrytego pliku: touch .ukryty_plik.txt Wystarczy, że nazwa zaczyna się od kropki. 2. Rozszerzone atrybuty plików – chattr Co to są rozszerzone atrybuty? Rozszerzone atrybuty to dodatkowe flagi kontrolujące zachowanie plików na poziomie systemu plików. Pozwalają one na bardziej precyzyjną kontrolę niż standardowe uprawnienia rwx. Są obsługiwane głównie w systemach plików ext2, ext3, ext4. Komenda chattr – zmiana atrybutów: chattr +i plik.txt Ustawia atrybut niezmienności (immutable). Plik nie może być modyfikowany, usuwany, zmieniany ani przenoszony – nawet przez użytkownika root! chattr -i plik.txt Usuwa atrybut niezmienności. 3. Najważniejsze atrybuty chattr Atrybut i (immutable – niezmienny): chattr +i /etc/ważny_config.conf Plik nie może być w żaden sposób modyfikowany. Przydatne do ochrony krytycznych plików konfiguracyjnych przed przypadkową zmianą. Atrybut a (append only – tylko dopisywanie): chattr +a /var/log/aplikacja.log Plik może być tylko rozszerzany (dopisywanie na końcu), ale nie można modyfikować ani usuwać istniejącej zawartości. Idealne dla plików logów. Atrybut c (compressed – kompresowany): chattr +c duży_plik.txt Jądro automatycznie kompresuje plik na dysku (jeśli system plików to obsługuje). Atrybut d (no dump – pomijany w backup): chattr +d cache.tmp Plik jest pomijany przez narzędzie dump podczas tworzenia kopii zapasowej. Atrybut s (secure deletion – bezpieczne usuwanie): chattr +s tajny_dokument.txt Przy usuwaniu pliku, jego bloki na dysku są nadpisywane zerami, co utrudnia odzyskanie danych. Atrybut u (undeletable – możliwy do odzyskania): chattr +u ważny_plik.txt System zachowuje informacje pozwalające na odzyskanie pliku po usunięciu (jeśli system plików to wspiera). 4. Komenda lsattr – wyświetlanie atrybutów lsattr plik.txt Pokazuje aktualne atrybuty pliku. lsattr -d katalog/ Pokazuje atrybuty samego katalogu (a nie jego zawartości). lsattr -a Pokazuje atrybuty wszystkich plików, w tym ukrytych. Przykładowy wynik: $ lsattr plik.txt ----i---------e----- plik.txt Litera i oznacza atrybut immutable. 5. Rekurencyjna zmiana atrybutów chattr -R +i /etc/config/ Opcja -R (recursive) stosuje atrybut do wszystkich plików i podkatalogów. 6. Praktyczne przykłady zastosowań # Ochrona pliku konfiguracyjnego przed modyfikacją sudo chattr +i /etc/ssh/sshd_config # Teraz nawet root nie może go zmienić bez usunięcia atrybutu # Sprawdzenie atrybutów lsattr /etc/ssh/sshd_config # Aby móc edytować, trzeba najpierw usunąć atrybut sudo chattr -i /etc/ssh/sshd_config # Zabezpieczenie pliku logów – tylko dopisywanie sudo chattr +a /var/log/aplikacja.log # Ochrona całego katalogu przed usunięciem sudo chattr -R +i /opt/produkcja/ # Weryfikacja atrybutów wszystkich plików w katalogu lsattr -a /home/user/ 7. Ważne uwagi Rozszerzone atrybuty działają na poziomie systemu plików – nie wszystkie systemy plików je obsługują Tylko użytkownik root może zmieniać większość atrybutów Atrybuty są niezależne od standardowych uprawnień Unix (rwx) Podczas przenoszenia plików między systemami atrybuty mogą zostać utracone Warto dokumentować użycie atrybutów, aby inni administratorzy wiedzieli o ich zastosowaniu Obsługa komendy sed Co to jest  sed ? sed (stream editor) to narzędzie do przetwarzania tekstu na poziomie linii, działające linia po linii. Pozwala na automatyczną edycję plików lub strumieni tekstu bez konieczności otwierania ich w interaktywnym edytorze. Podstawowa składnia polecenia sed [opcje] 'polecenia' plik W poleceniu sed wykonujemy polecenia edycyjne na każdej linii pliku lub strumienia. Najważniejsze polecenia sed używane w przykładach s/wzorzec/tekst/ – zamiana pierwszego wystąpienia wzorca w linii na podany tekst. s/wzorzec/tekst/g – zamiana wszystkich wystąpień wzorca w linii (opcja g – globalnie). d – usunięcie linii (np. /^#/d usuwa linie zaczynające się od #). p – wyświetlenie linii (często stosowane z opcją -n , by wyświetlić tylko wybrane linie). a – dodanie tekstu po bieżącej linii. i – wstawienie tekstu przed bieżącą linią. Wyjaśnienie składni zamiany (substytucji) s/// oraz znaków s – instrukcja “substitute” (zamień). Separator w s/// zwykle to znak / , ale może być dowolny (np. # ) aby uniknąć uciekania / w zamienianych wzorcach. \' – apostrofy służą do ujęcia polecenia tak, by uniknąć interpretacji przez powłokę. g – oznacza "globalnie", czyli zamień wszystkie wystąpienia. d – oznacza "delete", usuń linie pasujące do wzorca. Obsługa znaków specjalnych - escape w sed \\ – backslash musi być podwójnie ucieczony \\\\ w poleceniach. \. – kropka oznacza dowolny znak, żeby faktycznie wyszukać kropkę musimy ją uciec. \* , \^ , \$ , \[ \] – także mają specjalne znaczenie, wymagają escape. Alternatywnie możemy zmienić separator s/old/new/ na np. s#old#new# , co ułatwia pracę ze ścieżkami. Przykłady: Zamiana  adresu IP na inny: sed 's/192\.168\.1\.1/10.0.0.1/g' plik.conf Zamienia wszystkie wystąpienia adresu IP 192.168.1.1 na 10.0.0.1, kropki są escape'owane. Zamiana ścieżek za pomocą innego separatora: sed 's#/var/www/html#/srv/www#g' plik.conf Użycie znaku # zamiast / jako separatora pozwala uniknąć escape'ów w ścieżkach. Komentowanie zakresu linii: sed '10,20s/^/#/' plik.conf Dodaje znak # na początku linii od 10 do 20. Odkomentowanie zakresu linii: sed '10,20s/^#//' plik.conf Usuwa znak # z początku linii od 10 do 20. Usuwanie pustych linii: sed '/^$/d' plik.conf Usuwa linie całkowicie puste. Podwajanie backslash: sed 's/\\/\\\\/g' plik.conf Zamienia pojedynczy znak \ na podwójny \\ (używane np. przy generowaniu ścieżek w skryptach). Zamiana z grupami przechwytywania: sed 's/\(foo\) \(bar\)/\2 \1/' plik.conf Zamienia wystąpienie "foo bar" na "bar foo", gdzie \( ... \) wskazuje grupy tekstu, a \1 , \2 odwołują się do nich w zamianie. Zaawansowana zamiana adresu IP z regexp: sed 's/\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}/10.0.0.1/g' plik.conf Zamienia dowolny adres IPv4 (4 liczby 0-999 rozdzielone kropkami) na 10.0.0.1. Edycja pliku in-place na FreeBSD: sed -i '' 's/stary/nowy/g' plik.conf Podmienia wszystkie wystąpienia "stary" na "nowy" bez tworzenia kopii zapasowej, ważne jest wymienienie '' po -i . Obsługa awk AWK to potężne narzędzie do przetwarzania i analizy tekstu, szczególnie przydatne do pracy z danymi podzielonymi na kolumny. Pozwala na wyszukiwanie, filtrowanie, formatowanie i agregację danych z plików tekstowych lub wyników innych poleceń. Podstawowa składnia AWK awk 'warunek { działania }' plik Wyjaśnienie: warunek – wyrażenie logiczne lub wzorzec tekstowy, który musi być spełniony, aby wykonać działania (np. filtrowanie linii). { działania } – polecenia wykonywane na liniach spełniających warunek (np. wypisanie wybranych kolumn). Odwołania do pól i zmienne w AWK $0 # cała linia tekstu wejściowego $1, $2, … # kolejne kolumny/ pola w linii (domyślnie pola rozdzielone spacjami) NR # numer bieżącego wiersza (count) NF # liczba pól w bieżącej linii Wyjaśnienia: AWK dzieli każdą linię na pola (domyślnie na spacje/tabulacje). Użycie $1 zwraca pierwszą kolumnę, $2 drugą itd. Zmienna NR oznacza numer bieżącej linii, a NF ilość kolumn w bieżącym wierszu. Przykłady użycia AWK – pojedyncze komendy 1. Wyświetl pierwszą i trzecią kolumnę każdego wiersza: awk '{ print $1, $3 }' plik.txt 2. Wyświetl linie, których pierwsza kolumna równa jest "error": awk '$1 == "error" { print $0 }' plik.txt 3. Sumowanie wartości w kolumnie numer 2: awk '{ suma += $2 } END { print suma }' plik.txt Wyjaśnienie: dla każdej linii dodaj wartość pola 2 do zmiennej suma , a na końcu END wypisz wynik. 4. Wypisz numer linii oraz zawartość linii: awk '{ print NR, $0 }' plik.txt Wyrażenia regularne (regexp) w AWK AWK wspiera wyrażenia regularne do dopasowywania tekstu. Można je stosować w warunkach: awk '/pattern/ { print $0 }' plik.txt Znajduje i wypisuje linie zawierające pattern . Można łączyć takie dopasowanie z innymi warunkami i operatorami: awk '$3 ~ /error/' plik.txt Wypisuje linie, w których trzecia kolumna zawiera słowo "error". awk '$2 !~ /^[0-9]+$/' plik.txt Wypisuje linie, gdzie druga kolumna nie składa się wyłącznie z cyfr. Przetwarzanie i filtrowanie danych z AWK – bardziej rozbudowane przykłady Wyświetlanie wierszy, gdzie kolumna 5 jest większa niż 100: awk '$5 > 100 { print $0 }' plik.txt Formatowane wypisywanie danych (np. kolumny 1 i 3 oddzielone tabulatorem): awk '{ printf "%s\t%s\n", $1, $3 }' plik.txt Podliczanie wystąpień unikalnych wartości w kolumnie 3: awk '{ counts[$3]++ } END { for (val in counts) print val, counts[val] }' plik.txt Wywołania specjalne i kontrola przepływu AWK pozwala na tworzenie bloków BEGIN i END do wykonania instrukcji przed lub po przeczytaniu wszystkich linii: awk 'BEGIN { print "Start przetwarzania" } { print $1 } END { print "Koniec przetwarzania" }' plik.txt Pętla i warunki są typowe dla języków programowania, np.: awk '{ if ($2 > 100) print $0 else next }' plik.txt