Как да използвате Linux командите Find и Locate за търсене и навигация във файловата система

При работата с Linux операционната система, често се налага да извършваме операции за търсене и навигация във файловата система. Две от най-популярните команди, които ни помагат в тази задача, са find и locate. В тази статия ще се фокусираме върху командата find, като ще разгледаме как да я използваме за ефективно търсене на файлове и директории в Linux.

Преди да започнем, бихме искали да отбележим някои разлики и прилики между find и locate. Locate е друга команда, която предоставя възможност за търсене на файлове в Linux системата. Главната разлика между тях е в начина, по който извършват търсенето:

  • Командата locate използва база данни, наречена "mlocate database", която съдържа предварително индексирани имена на файлове в системата. Това я прави по-бърза от find, но базата данни трябва да се актуализира периодично, за да включва нови и променени файлове. Също така, locate не предоставя толкова голяма гъвкавост и възможности за филтриране на резултатите, както find.
  • Командата find предоставя гъвкавостта да използвате различни критерии за търсене, като име на файл, размер, време на промяна, разрешения за достъп и други. Find извършва търсенето в реално време върху файловата система и не изисква предварителна актуализация на база данни.

Основен синтаксис

Основният синтаксис на командата find е следният:

find [path] [expression]
  • path определя директорията, от която да започне търсенето. Ако не е посочено, търсенето ще започне от текущата директория. В противен случай, може да се използват:
    • / (наклонена черта) - търсене в цялата система.
    • . (точка) - търсене от папката, върху която работите в момента (текуща директория).
    • ~ (тилда) - за търсене от вашата домашна папка.
  • expression представлява условията и филтрите, които се прилагат по време на търсенето.

Използване на командата Find в Linux

В следващите части от статията ще се фокусираме върху различни начини за използване на командата find.

Търсене на файлове по име в текущата директория

[delta]# find . -name index.php
./index.php

Ако знаете името на файла, но не сте сигурни за неговата чувствителност към главни и малки букви, използвайте следната команда за намиране:

[delta]# find . -iname index.php
./index.php
./INDEX.PHP

Търсене на файлове по разширение в текущата директория

[delta]# find . -name "*.php"
./index.php
./delta.php

Това ще визуализира всички php файлове от текущата директория и нейните поддиректории.

Търсене на файлове по размер в текущата директория

[delta]# find . -type f -size 5M
./usr/lib64/libgtk-x11-2.0.so.0.2400.31
./usr/share/hwdata/oui.txt
./usr/sbin/php-fpm
./usr/bin/mariadb-slap

Това ще визуализира всички файлове с точен размер 5 мегабайта. Бихте могли да използвате знак +(плюс) или -(минус):

[delta]# find . -type f -size +5M
[delta]# find . -type f -size -5M

като това съответно ще визуализира файлове по-големи или по-малки от 5 MB.

Бихте могли да използвате и различни мерни единици след цифрата:

  • c – байтове
  • k – килобайта
  • M – мегабайти
  • G – гигабайти
[delta]# find . -type f -size +1G

Командата е полезна за търсене и откриване на големи файлове, които заемат значително дисково пространство. Така можете да прецените дали има нужда да ги преместите, изтриете или архивирате, за да оптимизирате използването на дисковото пространство.

Търсене на файлове, които са били модифицирани в последните 24 часа

[delta]# find . -mtime 0
.
./index.php
./delta.php
./INDEX.PHP

Използвайки тази команда, можете да намерите всички файлове, които са били променени в рамките на последния ден. Това може да бъде полезно, ако смятате че приложението Ви е било компрометирано или ако работите върху проект или система, където искате да наблюдавате най-скорошните промени.

Търсене на файлове, които са достъпни за четене, писане и изпълнение от текущия потребител

[delta]# find . -perm 700

Търсене на празни директории в текущата директория

[delta]# find . -type d -empty
./home/test/Maildir/.Trash/tmp
./home/test/Maildir/.Trash/new
./home/test/Maildir/.Trash/cur

Използвайки тази команда, можете да откриете и идентифицирате папки, които са празни. Това могат да бъдат временни директории, останали след изпълнение на определени задачи или директории, които са били създадени, но не се използват повече и искате да ги премахнете.

Търсене на файлове, които съдържат определен текст

[delta]# find . -type f -exec grep -l "database_name" {} \;
./wp-config.php

Командата е полезна, ако искате да откриете конфигурационния файл на уеб сайт или друга информация, която ви е необходима. Бихте могли да търсите по името на базата данни или потребителя обвързан с нея.

Търсене на файлове, които са по-нови от определен файл

[delta]# find . -newer old-backup.zip
.
./new
./new/dir.zip
./.bash_history

Когато изпълните тази команда, тя ще сканира текущата директория и нейните поддиректории, за да намери всички файлове или директории, които имат време на модификация, по-скорошно от указания файл. След това ще покаже списък с тези по-нови файлове в терминала.

Търсене на файлове, които са по-стари от определен файл

[delta]# find . -not -newer new-backup.zip
./.bash_profile
./.bashrc
./old-backup.zip

Тук аналогията е идентична, като ще се визуализират всички файлове, които имат време на модификация по-старо от указания файл.


Търсене на файлове и директории, които са с определени права за достъп

[delta]# find -type f -perm 0644
./index.php
./delta.php
./INDEX.PHP
[delta]# find -type d -perm 0755
./delta-dir

Ако добавите -not можете да търсите файлове или директории, които са с некоректни права за Вашата система:

[delta]# find -type f -not -perm 0644
./wrong-permission-file.php
./.bash_history
[delta]# find -type d -not -perm 0755
./wrong-permission-dir

Това може да бъде полезно, например, когато искате да идентифицирате файлове или директории, които може да имат неправилни или несигурни права и трябва да бъдат коригирани, за да се осигури правилен контрол на достъпа.

Промяна на права за достъп до файлове или директории

А ето и практически примери как да се променят правата за достъп до файлове или директории с командата Find в Linux:

Промяна на права за достъп до файлове

[delta]# find -type f | xargs chmod -v 644
mode of ‘./deltabg/public_html/wp-admin/edit-tag-form.php’ retained as 0644 (rw-r--r--)
mode of ‘./deltabg/public_html/wp-admin/widgets-form.php’ retained as 0644 (rw-r--r--)
mode of ‘./deltabg/public_html/wp-admin/admin-post.php’ retained as 0644 (rw-r--r--)

Промяна на права за достъп до директории

[delta]# find -type d | xargs chmod -v 755
mode of ‘./deltabg/public_html/wp-admin/css/colors’ retained as 0755 (rwxr-xr-x)
mode of ‘./deltabg/public_html/wp-admin/css/colors/midnight’ retained as 0755 (rwxr-xr-x)
mode of ‘./deltabg/public_html/wp-admin/css/colors/light’ retained as 0755 (rwxr-xr-x)

В случай, че бъдат прихванати файлове или директории с некоректни или несигурни права за достъп, с тези две команди можете да ги коригирате.

Търсене на файлове, които са притежание на определен потребител или група

[delta]# find . -type f -user username
[delta]# find . -type f -group groupname

Командите могат да са Ви полезни в ситуации, в които желаете да намерите файлове, които принадлежат на конкретен потребител / група, или да извършвате действия с файлове, притежавани от конкретен потребител / група, като например проверка за проблеми със собствеността на файлове или управление на файлове въз основа на специфични за потребителя критерии.

Търсене на символни връзки в текущата директория(symlinks)

[delta]# find . -type l
./access-logs

Можете да използвате тази команда, за да намерите символни връзки и да съберете информация за тяхното съществуване, целеви пътища или всякакви проблеми, свързани със символните връзки.

Търсене на файлове и пренасочване на изхода към друг файл

[delta]# find . -type f -name “delta.php” >> /home/delta/delta.txt
Delta Marketplace - как да създадете VPS с предварително инсталиран софтуер с няколко клика?

Използване на командата locate за ефективно търсене на файлове в Linux

Командата locate в Linux се използва за бързо търсене на файлове и директории въз основа на техните имена. Тя разчита на предварително изградена база данни, наречена „locate database“ или „mlocate database“, която индексира имената на файловете в системата. Ето как да използвате командата за намиране:

  1. Отворете терминал на вашата Linux система.
  2. 2. За да търсите конкретен файл или директория, използвайте следния синтаксис:
$ locate [options] pattern

Заменете “pattern“ с името или част от името, което искате да търсите.

3. Изпълнете командата. Командата ще търси в базата данни locate и ще покаже списък с пътища на файлове или директории, които отговарят на дадения модел.

Как да инсталирате locate пакет

Повечето Linux дистрибуции по подразбиране нямат инсталиран locate пакет и ако ви се наложи, бихте могли да го инсталирате с помощта на следните команди за Debian дистрибуции:

$ apt update
$ apt install mlocate

Командата понякога може да визуализира файлове, които са били изтрити, ако базата данни не е актуализирана. Най-доброто решение е ръчно да актуализирате базата данни, като изпълните следното:

$ updatedb

Полезни примери за работа с командата locate

След като знаем как да инсталираме locate, нека продължим напред, като разгледаме конкретни команди и опции, които могат да ни помогнат да извлечем максимална полза от този мощен инструмент. В следващите няколко раздели ще се запознаем със синтаксиса и функционалността на различните команди за търсене, които можем да използваме с locate.

Използване на командата

Задействането на командата locate за търсене на файл е доста лесно и ясно. Всичко, което трябва да направите, е:

1. Въведете:

[delta]# locate index.php
/home/delta/public_html/index.php
/home/delta/public_html/wp-admin/index.php
/home/delta/public_html/wp-admin/network/index.php

2.Ограничете заявките за търсене до конкретен брой

Можете да ограничите резултатите от търсенето до необходимия брой, за да избегнете излишък с резултатите от търсенето, като използвате командата -n.

Например, ако искате да се визуализират само 3 резултата от вашата заявка, можете да въведете следната команда:

[delta]# locate "*.php" -n 3
/home/dekotest/public_html/i.php
/home/dekotest/public_html/index.php
/home/dekotest/public_html/wp-activate.php

Резултатите ще покажат първите 20 файла, които завършват с .php.

Показване на броя на съвпадащите записи

Ако искате да покажете броя на всички съответстващи записи на директория “var“, използвайте командата locate -c.

[delta]# locate -c var

74536

Игнорирайте главни и малки букви

По подразбиране locate е конфигуриран да обработва заявки по начин, чувствителен към главни и малки букви, което означава, че FILE.PHP ще ви насочи към различен резултат от file.php.

За да накарате командата locate да игнорира чувствителността към малки и главни букви и да показва резултати за заявки с главни и малки букви, въведете командата с опцията -i.

[delta]# locate -i file.php
/home/delta/INDEX.PHP
/home/delta/index.php
/home/deltabg/INDEX.php

Показване само на налични файлове в системата

Дори да имате актуализирана база данни mlocate, командата locate все още дава резултати за файлове, чиито физически копия са изтрити от вашата система.

За да избегнете резултатите от файлове, които не присъстват във вашата машина по време на въвеждане на командата, ще трябва да използвате командата locate -e

[delta]# rm INDEX.php
[delta]# locate -i -e index.php
/home/delta/index.php
/home/deltabg/INDEX.PHP

В света на операционната система Linux намирането на файлове е съществена част от ежедневната работа на потребителя. Командите find и locate предоставят инструменти, които значително улесняват този процес.

Find предлага гъвкавост и дълбочина, като позволява на потребителите да посочат различни критерии за търсене и да извършват сложни операции с намерените файлове. Този инструмент е незаменим, когато се изисква детайлно и точно търсене във файловата структура.

От друга страна, locate предоставя бърз и оптимизиран начин за търсене, като използва предварително създадена база данни. Това ускорява процеса по намиране и намалява натоварването върху системата. Въпреки че locate не е толкова гъвкав както find, той е идеален за бързи и често извършвани търсения.

С обединяването на тези две команди в своя инструментариум, потребителите на Linux получават мощни възможности за търсене на файлове, които могат да бъдат адаптирани според специфичните им нужди. Независимо дали търсите подробно търсене или бързи резултати, find и locate са надеждни партньори в намирането на необходимите файлове в Linux.

Детелин Илиев

Детелин Илиев

Детелин има над 5 годишен опит с Linux и е добре запознат с интерфейса му и работата под команден ред. Разполага със Cpanel сертификат, познава отлично Cpanel средата и с лекота управлява уеб хостинг акаунти. Има богат опит с WordPress и в свободното си време използва платформата за създаване на съдържание.