Home / Sistem / Linux / Linux find komandası üzrə qısa təlimat
linux-find

Linux find komandası üzrə qısa təlimat

Linux find komandası olduqca geniş imkanlara malik bir alətdir. Bu alətlə işləmə bacarığı Linux sistemində işləməyi kifayət qədər rahatlaşdıra bilər. O, diskləri idarəetmə, fayllar üzərində rekursiv əməliyyatlar, ehtiyat nüsxənin çıxarılması kimi sistem inzibatçısının gördüyü işləri daha effektiv həyata keçirməyə imkan verir.

Linux find komandası verilən kriteriyalarla faylların və qovluqların axtarışını həyata keçirir və nəticələr üzərində digər əməliyyatlar aparmağa imkan yaradır. Komandanın sintaksisi aşağıdakı kimidir:

$ find directory-to-search criteria action

burada:

  • directory-to-search – alətin axtarış əməliyyatı üçün başlanğıc nöqtədir. Axtarış həmin qovluqdakı digər qovluqlar üzrə də aparılır.
  • criteria – axtarılmalı faylları göstərir
  • action – kriteriyaya uyğun gələn hər fayl üzərində aparılacaq əməliyyatı müəyyən edir.

Kriteriyalar

Faylın adı üzrə axtarış

Sadə nümunələrdən başlayaq. Növbəti komanda hazırki kataloqda a.txt faylını axtarır:

$ find . -name "a.txt"
./a.txt

burada:

  • "." – hazırki kataloq deməkdir
  • -name – axtarış kriteriyasını müəyyən edir

Varsayılan olaraq, -name açar sözü registra qarşı həssasdır. Yəni A.txt ilə a.txt onun üçün fərqli fayllardır. Axtarış zamanı registri nəzərə almaq istəmiriksə -iname açar sözündən istifadə etməliyik:

$ find . -iname "a.txt"
./a.txt
./A.txt

Hazırki kataloqda .jpg formatlı bütün şəkilləri axtarmaq üçün göstərilən şablondan istifadə edin *.jpg:

$ find . -name "*.jpg"
./genxfacebook2.jpg
./genxfacebook1.jpg
./Moodle2.jpg
./moodle.jpg
./moodle/moodle1.jpg
./genxfacebook.jpg

Komandaya axtarış aparcağı qovluğu da göstərmək olar. Məsələn, /home qovluğundakı bütün .jpg formatlı şəkilləri tapmaq üçün aşağıdakı komandanı yazın:

$ find /home -name "*.jpg"
find: `/home/ubuntu/.ssh': Permission denied
/home/vagrant/Moodle2.jpg
/home/vagrant/moodle.jpg
/home/me/hello.jpg
find: `/home/me/testfiles': Permission denied
find: `/home/me/data': Permission denied
/home/me/water.jpg
find: `/home/me/.cache': Permission denied

Axtarış zamanı səlahiyyətlərin çatmaması haqqında həddən artıq məlumat çıxırsa, belə məlumatları təmizləmək mümkündür. Bunun üçün komandanın sonuna 2 > /dev/null əlavə etmək kifayətdir.

Qeyd: Linux ƏS-də /dev/null mövcud olmayan cihazdır. Bəzən buna “qara dəlik” də deyilir. Bura düşən məlumatlar tamamilə silinir və sistemdə yer tutmur.

find /home -name "*.jpg" 2>/dev/null
/home/vagrant/Moodle2.jpg
/home/vagrant/moodle.jpg
/home/me/hello.jpg
/home/me/water.jpg

Faylın tipi üzrə axtarış

Öncə xatırladım ki, Linux ƏS-də bütün elementlər fayl kimi təqdim olunur. Məsələn, özlüyündə qovluq directory tipli fayldır. Linux find komandası faylın tipi üzrə də axtarış aparmağa imkan yaradır. Bunun üçün -type açar sözündən istifadə olunur. Linux-da aşağıdakı fayl tipləri ola bilər:

f plain files
d directories
l symbolic links
b block devices
c character devices
p named pipes
s sockets

Məsələn, axtarış zamanı -type d parametri istifadə olunarsa, hazırki qovluqda olan bütün qovluqlar əks olunacaq.

$ find . -type d
.
./.ssh
./.cache
./moodle

Faylın həcminə görə axtarış

Bəzən sistemdə yer tutan lazımsız iri həcmli faylları axtarıb silmək lazım olur. Bunun üçün -size açar sözündən istifadə edilir. Aşağıdakı nümunədə həcmi 1Gb-dan çox olan faylları tapacağıq:

$ find . -size +1G
./Microsoft_Office_16.29.19090802_Installer.pkg
./android-studio-ide-183.5692245-mac.dmg

Həcmin əvvəlindəki “+” işarəsi göstəriləndən daha çox anlamına gəlir. Əgər ölçüsü 1 Gb-a qədər faylları axtarmaq lazımdırsa “-” işarəsi istifadə edilir. Heç bir işarə olmaması mütləq bərabərlik anlamına gəlir.

Həcmdən sonra ölçü vahidi göstərilir. Ölçü vahidi aşağıdakılar ola bilər:

SimvolÖlçü vahidi
b521 bye blocks
cBytes
kKilobytes
MMegabytes
GGigabytes

Boş qovluqların axtarışı

Sistemdə olan boş qovluqları axtarmaq üçün -empty paratmetrindən istifadə etmək olar:

$ find . -empty
./.cloud-locale-test.skip
./datafiles
./b.txt
...
./.cache/motd.legal-displayed

Dəyişiklik vaxtı üzrə axtarış

-cmin açar sözünün köməyi ilə faylı yarandığı və ya dəyişildiyi zaman üzrə axtarmaq olar. Məsələn, son 60 dəqiqə ərzində (60 dəqiqədən az) dəyişilən faylı axtarmaq üçün -60 istifadə etmək olar:

$ find . -cmin -60
.
./a.txt
./datafiles

Son bir saata qədər istənilən vaxta dəyişilən faylları tapmaq üçün sadəcə 60 istifadə edin.

Son oxunma vaxtına görə axtarış

Sistemdə elə fayllar olur ki, uzun müddət açılmır. Belə faylları tapıb ehtiyat nüsxələrin saxlandığı yerə köçürmək olar. Bunun üçün Linux find komandasını -atime açar sözü ilə işə salmaq lazımdır. Məsələn, son 180 gün ərzində açılmayan faylları axtarmaq üçün aşağıda göstərilən komandadan istifadə etmək olar:

$ find . -atime +180

İstifadəçi adı üzrə axtarış

Müəyyən istifadəçiyə aid faylları axtarmaq üçün -user username parametrindən istifadə edin. Məsələn, növbəti komanda /home kataloqunda ubuntu adlı istifadəçiyə aid fayl və qovluqları axtarmağa kömək edəcək:

$ find /home -user ubuntu 2>/dev/null
/home/ubuntu
/home/ubuntu/.bash_logout
/home/ubuntu/.bashrc
/home/ubuntu/.ssh
/home/ubuntu/.profile

İcazə rejiminə görə axtarış

Linux-da hər faylın müxtəlif icazə rejimi var. Məsələn, 777 oxumaq, yazmaq və işə salmaq icazəsini verir. Belə icazələr üzrə axtarış aparmaq lazım olarsa -perm açar sözündən istifadə etmək olar.

$ find /home -perm 777

Operatorlar

Bir neçə açar sözünü bir komandada istifadə etmək üçün növbəti üç məntiqi operatordan istifadə etmək olar:

  • -and
  • -or
  • -not

Məsələn, aşağıdakı komanda həcmi 100 Mb-dan çox olan və göstərilən istifadəçiyə aid faylları axtarır:

$ find /home  -user me  -and  -size +100M  2>/dev/null
/home/me/kali-linux-2020.3-installer-netinst-i386.iso

Bu komanda isə me və ya vagrant adlı istifadəçilərə aid, həcmi 100 Mb-dan çx olan faylları axtarmağa kömək edir:

$ find /home \( -user vagrant -or -user me \)  -and  -size +100M  2>/dev/null
/home/vagrant/LibreOffice_7.0.1_Linux_x86-64_deb.tar.gz
/home/me/kali-linux-2020.3-installer-netinst-i386.iso

Mötərizələrin sistem tərəfdən interpretasiyasının qarşısını almaq məqsədi ilə onlardan öncə “\” (sleş) işarəsi qoymaq lazımdır.

Əməliyyatlar

Linux find aləti axtarış nəticələrini və onların üzərinə aparılacaq əməliyyatları təyin etməyə imkan verir. Aşağıda bir neçə əvvəlcədən müəyyən edilmiş əməliyyatlar sıralanıb:

ƏməliyyatNə iş görür
-deleteAxtarış kriteriyalarına uyğun gələn faylları silir
-lsFaylın ölüçüləri və yerləşdiyi yerlər daxil olmaqla ls komandasının ətraflı nəticəsini qaytarır
-printAxtarılan faylın tam yerləşdiyi yeri əks etdirir. Digər əməliyyat təyin olunmadığı halda, find komandası varsayılan olaraq bu əməliyyatı yerinə yetirir.
-execHər axtarış nəticəsi üzrə göstərilən komandanı icra edir.

Məsələn, bütün boş qovluqları tapıb silmək üçün belə bir komanda yaza bilərsiniz:

$ find . -empty -delete

Diqqət! Silmə əməliyyatı aparmazdan əvvəl -print əməliyyatı ilə nəticələri bir daha təsdiqləmək tövsiyə olunur.

-exec əməliyyatı bir az fərqlidir. O, axtarış nəticələri üzərində seçilmiş komandanı icra etməyə imkan verir. Komandanın ümumi sintaksisi belədir:

-exec command {} \;

burada:

  • command – icra ediləcək komanda, məs: rm, mv, cp və s.
  • {} – axtarış nəticələrini əks edir
  • komanda “\” və nöqtəli vergül “;” işarələri ilə bitir

Beləliklə, boş qovluqların tapılıb silinməsi -exec açar sözü ilə aşağıdakı şəkildə olacaq:

$ find . -empty -exec rm {} \;

-exec açar sözü ilə daha bir nümunə. Burada komanda .png formatlı faylları tapıb /backup/images qovluğuna atır:

$ find . -name "*.png" -exec cp {} /backups/images \;

Yekun

find komandası faylları adına, son dəyişiklik tarixinə, son oxunma tarixinə, istifadəçi adına, qrup adına, ölçüsünə və digər kateqoriyalara görə axtarmaq imkanı yaradır. Tapılan fayllar üzərində silmək, kopyalamaq, digər yerə köçürmək kimi əməliyyatlar aparmaq olar.

Bu komandanı mənimsəməklə sistem inzibatçılığı tapşırıqlarını daha rahat və az vaxt ərzində həll etmək olar. Bunun da bir yolu var – təcrübə!

Mənbə: GeekFlare

Yazını paylaş