Metody wyszukiwania plików oraz fraz tekstowych w systemie Linux

Najprostszym sposobem wyszukiwania plików jest skorzystanie z polecenia locate lub jego nowszej wersji mlocate.

locate nazwa-pliku
locate php.ini

W celu zaktualizowania bazy plików, z której korzystają polecenia locate i mlo-
cate, należy skorzystać z polecenia updatedb, które należy uruchomić z prawami
administratora.

Do wyszukiwania plików binarnych, źródłowych oraz plików z manuala można
użyć również polecenia whereis.

Metaznaczniki, które mozna użyć korzystając z tych funkcji to:

  • ? – Dopasowuje dowolny znak, który może wystąpić dokładnie jeden raz.
  • ∗ – Dopasowuje dowolne znaki, które mogą wystąpić dowolną ilość razy (również zero).
  • [abcd] – Dopasowuje jeden znak z podanego zbioru. Znak na początku ˆ neguje zbiór, czyli dopasowuje wszystkie znaki, za wyjątkiem podanych.
  • / – Usuwa specjalną funkcję metaznaku, przed którym stoi.

FIND
Jeśli chcemy wyszukać pliki uwzględniając inne kryteria, z pomocą przychodzi polecenie find.

find [scieżka] [wyrażenie wyszukiwania]

Pierwszy argument – ścieżka – określa folder, który chcemy przeszukać. Wyszukiwanie odbywa się w wybranym folderze oraz w jego podfolderach rekursywnie.Ścieżka jest argumentem opcjonalnym i jeśli nie zostanie podana, to program przeszukuje folder, w którym jest uruchomiony (wynik polecenia pwd).

Przykłady polecania find:

find / -size +2GB -and -size -4GB -exec ls -la {} \;
Szukaj pliki w systemie, których rozmiar mieści się w przedziale 2-4GB i wyświetl ich listę wraz z danymi prezentowanymi za pomocą polecenia ls.

find . -name tecmint.txt
find /home -iname tecmint.txt
Znajdź pliki o podanej nazwie (opcja -iname pomija wielkość liter)

find . -type f -name "*.php"
Znajduje zwykłe pliki o podanym rozszerzeniu. Pliki, które są typu typ. Typem może być:

  • d – folder,
  • f – zwykły plik,
  • l – link symboliczny,
  • s – gniazdo.

find / -type d -user user -exec chown pawel {} \;
Znajdź katalogi użytkownika user i przypisz je do użytkownika pawel

find / -type f ! -perm 777
znajdź pliki, które nie maja uprawnienia 777

find /home -group developer
find /home -user john -iname "*.txt"
znajdź pliki należące do danej grupy oraz pliki tekstowe należące do użytkownika john.

Polecenie grep
Przeszukiwanie tekstów za pomocą polecenia grep, egrep oraz wyrażeń regularnych BRE oraz ERE (ang. Extended Regular Expression).

grep -ril "driver" /etc/dovecot/ – rekursywne wyszukiwanie tekstu w plikach w katalogu. Opcja -i powoduje, że wielkość znaków nie jest brana pod uwagę. Opcja -l natomiast sprawia, że na wyjściu pojawiają się jedynie nazwy plików.

grep -i -v anna dane.txt -wyświetli te linie z pliku dane.txt, które nie zawierają imienia Anna bez względu na wielkość liter.

grep -C 2 'hello' * – wypisze dwie linie sąsiadujące z pasującymi

grep 'john' /etc/motd | grep 'frank' – znajdzie wszystkie linie zawierające zarówno frazę john jak i frank

Polecenie egrep to nowsza wersja polecenia grep, które korzysta ze składni ERE.

Edytor SED (Stream Editor)
Edytor SED jest najczęściej wykorzystywany do prostych modyfikacji tekstu w plikach, np. zamiany lub usunięcia fragmentów tekstu, ale może również być wykorzystywany do bardziej skomplikowanych operacji.

Najczęściej używanym poleceniem edycji jest zastąpienie: s/wyrazenie/zastapienie/przyrostek, gdzie wyrażenie jest wyrażeniem regularnym. Ostatnim elementem w poleceniu edycji jest przyrostek. W przypadku zastąpienia można dodać przyrostek g, dzięki czemu polecenie będzie wykonane dla wszystkich wystąpień szukanego wyrażenia w wierszu, a nie tylko dla pierwszego z nich.

Przykłady wykorzystania polecenia sed:

Zastąpienie protokołu tcp na udp dla pierwszego wystąpienia nazwy w wierszu.
sed -e 's/tcp/udp/' plik

Zastępowanie globalne (g). Zastępowanie wszystkich wystąpień w wierszu :
sed -e 's/wyraz1/wyraz2/g' plik_wejsciowy

W przypadku, gdy chcemy zapisać zmiany do pliku o nazwie plik2:
sed 's/wyraz1/wyraz2/g' plik1 > plik2

Zastępowanie plików tekstowych o rozszerzeniu .txt rozszerzeniem .doc :
ls | sed -n 's/txt/doc/p'

Wypisanie linii od 2 do 6 z pliku „plik_wejsciowy”:
sed -n '2,6p' plik_wejsciowy

Przed trzecią linia zostanie dopisany tekst „ala ma kota”.
sed '3i ala ma kota' dane

Po szóstej linii zostanie dopisany tekst „ala ma kota”.
sed '6a ala ma kota' dane

Zostaną wyświetlone linie od 4 do 6.
sed -n '4,6p' dane

Akcja insert – i dodaje podane wyrażenie przed wskazanym wierszem
sed '1,3iHello' plik.txt – doda linijkę z Hello przed linijkami od 1 do 3

sed 'y/a/b’ plik.txt – zastępuje każde wystąpienie znaku 'a’ na znak 'b’