Nie ma rzeczy niemożliwych, są tylko trudne do znalezienia.

– Moje motto, gdy po raz 10. szukam pliku config.ini

find – Detektyw na żywo!

find to Twój osobisty Sherlock Holmes, który przeszukuje system plików w czasie rzeczywistym. Jest dokładniejszy i oferuje pełną kontrolę nad kryteriami wyszukiwania oraz akcjami na znalezionych plikach, ale… jest wolniejszy, bo za każdym razem od nowa indeksuje.

Podstawowa składnia: find [katalog] [warunek] [akcja]

find [katalog] [warunek] [akcja]
  • [katalog]: Gdzie ma zacząć szukać? (np. /home, /var/log, /)
  • [warunek]: Czego szukać? (np. -name, -type, -size)
  • [akcja]: Co zrobić ze znalezionym plikiem? (np. -print, -delete, -exec)

Szukanie po nazwie: Masz imię? Znajdę Cię!

# Znajdź plik o nazwie "mojplik.txt" w katalogu /home

find /home -name "mojplik.txt"

# Ignoruj wielkość liter (MoJplik.txt, mojplik.txt – wszystko jedno!)

find /home -iname "MoJplik.txt"

# Użyj gwiazdki (`*`) jako wzorca (np. wszystkie pliki .log w /var/log)

find /var/log -name "*.log"

# Szukaj tylko plików (`-type f`) lub tylko katalogów (`-type d`)

find /home -type f -name "*.conf"
find /home -type d -name "backup"

Szukanie po właściwościach: Rozmiar, data, właściciel – wszystko się liczy!

# Pliki większe niż 100MB (`+` oznacza "większe niż", `M` to megabajty)

find / -size +100M

# Pliki zmodyfikowane w ostatnich 7 dniach (`-7` oznacza "mniej niż 7 dni temu")

find /var -mtime -7

# Pliki, do których ostatnio dostęp uzyskano w ciągu ostatnich 24 godzin (`-1` oznacza "mniej niż 1 dzień temu")

find /var -atime -1

# Pliki należące do konkretnego użytkownika (np. "ubikone")

find /home -user ubikone

# Pliki z konkretnymi uprawnieniami (np. `644`)

find /etc -perm 644

Łączenie warunków: Bądź precyzyjny!

Możesz łączyć wiele warunków za pomocą operatorów.

# AND (domyślnie, nie trzeba nic pisać): pliki .log ORAZ większe niż 10MB

find /var -name "*.log" -size +10M

# OR (`-o`): pliki .conf LUB .cfg

find / -name "*.conf" -o -name "*.cfg"

# NOT (`-not` lub `!`): wszystkie pliki OPRÓCZ tych z rozszerzeniem .tmp

find /home -not -name "*.tmp"
find /home ! -name "*.bak"

locate – Radar błyskawiczny (ale z bazą danych)!

locate to superszybki radar. Nie przeszukuje systemu plików w czasie rzeczywistym, tylko korzysta ze wstępnie zbudowanej bazy danych (zazwyczaj aktualizowanej raz dziennie przez updatedb). Jest błyskawiczny, ale może nie widzieć najnowszych plików.

Podstawowe użycie: “Gdzieś to widziałem…”

# Zainstaluj (jeśli nie masz, zazwyczaj w pakiecie `mlocate`)

sudo apt install mlocate   # Debian/Ubuntu

sudo dnf install mlocate    # RHEL/Fedora


# Zbuduj bazę danych (musisz być rootem, uruchamiane raz dziennie przez crona)

sudo updatedb

# Szukaj pliku "mojplik" – wynik dostajesz w mgnieniu oka

locate mojplik

UWAGA: locate nie widzi plików stworzonych po ostatnim uruchomieniu updatedb! Jeśli czegoś nie znajdujesz, najpierw zaktualizuj bazę danych (sudo updatedb). To jest jak szukanie czegoś w katalogu bibliotecznym, który jest aktualizowany tylko raz dziennie.

Zaawansowane opcje locate: Dokładniej proszę!

# Ignoruj wielkość liter

locate -i mojplik

# Pokaż tylko istniejące pliki (domyślnie `locate` może pokazać pliki, które zostały usunięte od czasu ostatniego `updatedb`)

locate -e mojplik

# Ogranicz liczbę wyników do 10

locate -l 10 mojplik

# Wyświetl tylko nazwy plików bez ścieżki

locate -b mojplik

Praktyczne przykłady z bezpieczeństwa: Znajdź intruza!

Znajdź pliki z hasłami w konfiguracji: Kto tu trzyma klucze?!

# Znajdź pliki zawierające słowo "password" (niebezpieczne, ale szybkie!)

find / -type f -exec grep -l "password" {} \; 2>/dev/null | head -20

# Lepsza wersja (szybsza i bardziej efektywna z `xargs`) – szukaj tylko w plikach .conf w /etc

find /etc -type f -name "*.conf" | xargs grep -l "password" 2>/dev/null

Wykryj pliki z SUID/SGID: Potencjalne luki!

Pliki z ustawioną flagą SUID/SGID mogą być użyte do eskalacji uprawnień. To must-check w każdym audycie!

# Znajdź pliki z ustawioną flagą SUID (`-4000`) – każdy może je uruchomić z uprawnieniami właściciela

find / -perm -4000 2>/dev/null

# Znajdź pliki z ustawioną flagą SGID (`-2000`) – uruchamiane z uprawnieniami grupy

find / -perm -2000 2>/dev/null

# Znajdź pliki, do których każdy ma prawo zapisu (`-002`) – potencjalne miejsce na wrzucenie backdoora

find / -perm -002 2>/dev/null | head -20

Znajdź ostatnio zmodyfikowane pliki: Kto grzebał w systemie?

# Pliki zmienione w ostatniej godzinie (`-mmin -60`) w katalogu /var/www

find /var/www -mmin -60

# Pliki nowe (zmodyfikowane w ciągu ostatniego dnia) w /tmp

find /tmp -mtime -1

# Katalogi z uprawnieniami 777 (każdy może wszystko) – duża czerwona flaga!

find / -type d -perm 777 2>/dev/null

Czyszczenie starych plików (bezpiecznie!): Sprzątamy śmieci!

# NAJPIERW sprawdź, CO usuniesz! Użyj `-ls` do wyświetlenia szczegółów.

find /tmp -type f -atime +30 -ls

# DOPIERO POTEM usuń (z `-delete`) – ostrożnie!

find /tmp -type f -atime +30 -delete

Porównanie find vs locate: Kiedy którego używać?

Cecha find locate
Szybkość Wolniejszy (przeszukuje na żywo) Błyskawiczny (korzysta z bazy danych)
Baza danych Nie Tak (aktualizowana przez updatedb)
Czas realny Tak (zawsze aktualne wyniki) Nie (wyniki sprzed ostatniej aktualizacji bazy)
Filtry/Akcje Pełne (po nazwie, rozmiarze, dacie, akcje) Ograniczone (głównie po nazwie/wzorcu)
Zastosowanie Precyzyjne szukanie, akcje na plikach Szybkie odnalezienie pliku po nazwie

Podsumowanie praktyczne: Niech moc będzie z Tobą!

Znasz już obu mistrzów wyszukiwania. Używaj ich mądrze!

  • locate – gdy potrzebujesz błyskawicznie znaleźć plik, którego nazwę znasz (lub jej część), i nie potrzebujesz super aktualnych wyników (np. szukasz httpd.conf).
  • **find** – gdy potrzebujesz dokładności, świeżych wyników, skomplikowanych filtrów (np. pliki większe niż X, zmodyfikowane w ciągu Y dni), lub chcesz wykonać jakąś akcję na znalezionych plikach.
# Twój nowy zestaw do szukania logów zmodyfikowanych w ostatnim tygodniu:

find /var/log -name "*.log" -mtime -7 | head -10

PRO TIP: ZAWSZE używaj -ls z find do podglądu wyników, zanim wykonasz akcję zmieniającą system (np. -delete, -exec rm {} \;). Lepiej zobaczyć, co się usunie, niż potem płakać.

Kolejny odcinek: ps + htop – zaglądniemy pod maskę systemu i zobaczymy, co tak naprawdę dzieje się z procesami. Zostań z nami!