Ochiq
Yopish

Linux serveridagi fayllarni topish uchun Find and Locate-dan foydalaning. Find buyrug'i yordamida Linuxda fayllarni qanday qidirish kerak Ubuntuda faylni nomi bo'yicha qanday topish mumkin

Ba'zida fayl yoki katalog mavjudligini bilasiz, lekin uni qanday topishni bilmaysiz. Bunda sizga yordam beradigan bir nechta buyruqlar mavjud: find , Locate va which .

4.10.1. buyrug'ini toping

Find buyrug'i quyidagi formatga ega:

sample_for_search yo'lini toping

Agar siz yo'lni belgilamasangiz, find joriy katalogda ko'rsatilgan naqshni qidirishni boshlaydi va undagi barcha kichik kataloglar bo'ylab davom etadi.

Find buyrug'ida ko'plab variantlar mavjud, ularni man sahifasini o'qish orqali topish mumkin (buyruqning satriga man find ni kiriting). Eng ko'p ishlatiladigan variant -name bo'lib, u nomdagi harflarning ma'lum bir birikmasini o'z ichiga olgan barcha fayl va kataloglarni qidirishni belgilaydi.

Toping. - ismi tes

Ushbu buyruq joriy katalogda nomida "tes" ni o'z ichiga olgan barcha fayllarni qidiradi.

4.10.2. toping buyrug'i

Bu buyruq yordamida nomlarida siz izlayotgan naqsh mavjud bo'lgan barcha fayl yoki kataloglarni ko'rishingiz mumkin. Masalan, nomida it so'zini o'z ichiga olgan faylni qidirish uchun buyruq qatoriga kiriting:

Itni toping

Locate buyrug'i ma'lumotlar bazasidan nomlarida it so'zini o'z ichiga olgan fayl yoki kataloglarni topish uchun foydalanadi. Qidiruv natijalari it deb nomlangan faylni, bulldog.txt deb nomlangan faylni, /dogs/ deb nomlangan katalogni va hokazolarni o'z ichiga olishi mumkin. Joylashuvni aniqlash buyrug'i haqida ko'proq ma'lumot olish uchun uning man sahifasiga qarang (buyruqning satriga man locate yozing).

Ma'lumotlar bazasi yangilangan bo'lsa, topish buyrug'i qidiruvlarni juda tez amalga oshiradi. Locate buyrug'ining ma'lumotlar bazasi cron xizmati yordamida har kecha yangilanadi.

cron - bu fonda ishlaydigan va turli xil vazifalarni (masalan, joylashishni aniqlash buyrug'i ma'lumotlar bazasini yangilash) muntazam ravishda bajaradigan kichik dastur. Cron qo'llanmasiga kirish uchun buyruq satriga man cron yozing.

cron vaqti-vaqti bilan fayllar yoki kataloglarni topish uchun ishlatiladigan slocate ma'lumotlar bazasini yangilaydi. Operatsion tizimlar o'rtasida almashish va kun oxirida mashinani o'chirish cron ma'lumotlar bazasini avtomatik ravishda yangilashiga to'sqinlik qiladi.

Ma'lumotlar bazasini qo'lda yangilash uchun root sifatida tizimga kiring (buyruqlar satriga su - parolini kiritish va root parolini kiritish orqali) va buyruq satriga updatedb ni kiriting.

Biroz vaqt o'tgach, locate buyrug'i tomonidan ishlatiladigan slocate ma'lumotlar bazasi yangilanadi.

Root bo'lishingizni talab qiladigan ishni tugatganingizdan so'ng, buyruq satriga exit yozing - sessiyangizga qaytasiz.

Linux/FreeBSD-da buyruqni toping. Buyruq sintaksisini toping.

Buyruq sintaksisini toping:

# topish [yo'l] [variantlar] [qidiruv parametrlari] [fayllar bo'yicha harakatlar]

Yo'l- fayllarni qaerdan qidirish kerak, siz bo'shliqlar bilan ajratilgan yo'llar ro'yxatidan foydalanishingiz mumkin.

Variantlar- “-” belgisidan boshlab, keyin variant nomi:
-d Katalogning o'zini qidirishdan oldin pastki kataloglarni qidiring
-L Qidirayotganda ramziy havolalarga amal qiling
- maksimal chuqurlik N Qidirayotganda, N ko'pi bilan o'rnatilgan katalog darajasini tekshiring
- tafakkur N N yoki undan past darajadagi pastki kataloglarni skanerlamang
- o'rnatish Boshqa fayl tizimlarining kataloglarida qidirmang

Qidiruv variantlari

-atime N Faylga oxirgi marta N kun oldin kirishgan
-mtime N Fayl oxirgi marta N kun oldin o'zgartirilgan
-ism Pattern Fayl nomi (naqsh nomi) yo'lni ko'rsatmasdan. Naqshni har doim qo'shtirnoq ichiga olish tavsiya etiladi
-hajmi [±]N Fayl hajmi N blokdan iborat, agar +N ko'rsatilgan bo'lsa, fayl hajmi N dan katta, -N kichikroq. N dan keyingi belgi blok hajmini bildiradi. b - 512 bayt, c - bayt, w - 2 bayt, k - kilobayt, M - megabayt, G - gigabayt.
-tip N Fayl turi N. N uchun eng ko'p ishlatiladigan qiymatlar: d - katalog, f - fayl.
-foydalanuvchi Foydalanuvchi nomi Fayl foydalanuvchi nomi ismli foydalanuvchiga tegishli.

Parametrlar yordamida find buyrug'idan foydalanishga misollar:

#topish. -f turi -nom "~*" -chop etish

Joriy katalogdagi nomlari "~" belgisi bilan boshlangan oddiy fayllarni (kataloglarni emas) toping.

#topish. -yangiroq fayl.bak -turi f -chop etish

Joriy katalogdan file.bakdan ko'ra yaqinda o'zgartirilgan fayllarni toping.

Operatorlar
Mezonlarni operatorlar yordamida birlashtirish mumkin. Quyida operatorlar ustuvorligining kamayishi tartibida keltirilgan.

Qisqa shakl Uzun shakl Tavsif
!kriteriya -inkor emas (mezon noto'g'ri bo'lsa, true qiymatini qaytaradi)
1-kriteriya-2-kriteriya -va VA operatori (agar mezon 1 va mezon2 rost boʻlsa, toʻgʻri)
criterion1-o criterion2 -yoki OR operatori (agar 1-mezon yoki 2-mezon to'g'ri bo'lsa, to'g'ri)

Umuman olganda, operatorlardan foydalanishda mezonlar ustuvorlik tartibida tekshiriladi. Qavslar yordamida tartibni o'zgartirishingiz mumkin. Qavslar teskari chiziq yordamida ajratilishi kerak.

Operatorlar yordamida find buyrug'idan foydalanishga misollar

#topish. \(-name "%*" -yoki -name "temp*" \) -f turi -chop etish

Joriy katalogdagi "%" yoki "temp" belgisi bilan boshlanadigan va fayllar ( -f turi), kataloglardan ko'ra.

#topish. -maxdepth 1 \(\(-o'lcham +600M -va -size -1G \) -yoki -nom "*.mpeg" \) -va -f turi

Joriy katalogda toping (quyi kataloglarni qayta ishlamasdan - -maxdeph 1) oddiy fayllar ( -fayl f) 600 MB dan katta va 1 GB dan kichik (-size) yoki nomi “.mpeg” (-name) bilan tugaydigan fayllar.

Fayllar ustida amallar
Find buyrug'i bajarilganda topilgan fayllar ustida turli amallarni bajarishingiz mumkin. Keling, asosiylarini ko'rib chiqaylik.

Exec buyrug'i\; - Buyruqni bajaring. E'tibor bering, buyruqdan keyin teskari chiziq va nuqtali vergul qo'yiladi.
-execdir buyrug'i\; - Exec bilan bir xil, lekin buyruq joriy faylni o'z ichiga olgan pastki katalogdan chaqiriladi.
-ok buyrug'i \; - exec bilan bir xil, lekin keyingi faylni qayta ishlashdan oldin buyruqni bajarish so'rovi ko'rsatiladi.
-okdir buyrug'i \; -Execdir uchun ok bilan bir xil.
-print - fayl nomini ekranga chop etish.
-ls - joriy faylda ls -dils buyrug'ini bajaring.

Bajariladigan buyruqlarda siz foydalanishingiz mumkin parametr () argument sifatida, u joriy faylga yo'l bilan almashtiriladi.

Amallar yordamida find buyrug'idan foydalanishga misollar

#topish. -hajmi +1000c -turi f -ls

Joriy katalogdan 1000 baytdan katta oddiy fayllarni toping va ularda ls -dils buyrug'ini bajaring (ls action).

#topish. -ism "~*" -turi f -ok rm () \;

Joriy katalogdagi "~" tilda belgisi bilan boshlangan oddiy fayllarni toping va har bir fayl uchun uni o'chirish uchun so'rov bering (rm buyrug'ini bajarish uchun).

MISOLLAR:

Fayllarni hajmi bo'yicha qidiring

# toping /var/log -name "*.log" -va \(-size +1k -va -size -1000k \) -va -turi f -chop etish

*.log kengaytmali, hajmi 1kb dan 1000kb gacha bo'lgan fayllar topiladi va ko'rsatiladi.

Fayllarni ularning egasi va guruhi bo'yicha qidiring

Ushbu buyruq egasi bo'lmagan barcha fayllarni topadi

Variantlar -foydalanuvchi yoki -uid foydalanuvchi identifikatori (UID) va foydalanuvchi nomi va parametr bo'yicha fayllarni qidirishga imkon beradi -guruh guruh nomi bilan.

#topish. -name "*.log" -foydalanuvchi ildiz -guruh ildizi

Joriy katalogdagi barcha fayllarni ildiz foydalanuvchisi va ildiz guruhining kengaytmalar jurnali bilan topadi

# find -user root -o -user www

Root yoki www foydalanuvchisining barcha fayllarini topadi

Oddiy ifodalardan foydalanish

Qulaylik toping muntazam ifodalarni qo'llab-quvvatlaydi. Keling, darhol misol keltiraylik. Aytaylik, men kengaytmalari .php yoki .js bo'lgan barcha fayllarni topmoqchiman. Men buni shunday qila olaman:

# find -regextype posix-egrep -regex ".*(php|js)$"

Bu biroz murakkab ko'rinadi, shunday emasmi? Rad etish sifatida biz bu erda ishlatiladigan sintaksis ekanligini ta'kidlaymiz egrep (-regextype posix-egrep), va keyin qidiruv uchun ishlatiladigan muntazam ifodani belgilaydi. Qobiqning o'zi muntazam ifodani qayta ishlashga urinishini oldini olish uchun ifoda bitta tirnoq bilan boshlanadi va tugaydi. Keyin har qanday belgi yoki belgilar to'plamiga mos keladigan joker belgidan foydalanadigan ifoda.* keladi. (php|js) qismi php yoki js ni qidirishni aytadi. Ushbu ifodadagi quvur (|) mantiqiy "yoki" ifodasiga mos keladi. Nihoyat, ifodani tugatuvchi dollar belgisi ($) fayl nomi oxirida ushbu kengaytmalarni qidirayotganimizni bildiradi. Shunday qilib, js.txt nomli faylingiz bo'lsa, u qidiruv mezonlariga mos kelmaydi.

Vaqt bilan ishlash
Find yordam dasturida fayl ustida ishlagan vaqtga qadar qidirishingiz kerak bo'lgan hamma narsa mavjud. Kirish vaqti bo'yicha qidirishingiz mumkin ( -atime), yoki faylni oxirgi o'zgartirish vaqtiga (-mtime) yoki oxirgi o'zgartirish vaqtiga ( -ctime).

Masalan, so'nggi ikki kun ichida o'zgartirilmagan barcha fayllarni topamiz:

# topish -mtime +2

Agar ma'lum bir diapazonda fayllarni qidirmoqchi bo'lsangiz, variantlarni birlashtira olasiz. Shunday qilib find -mtime +2 -mtime -5 buyrug'i "ikki yoki undan ko'p kun oldin, lekin besh kundan ortiq emas" degan ma'noni anglatadi.

Biz daqiqalar bilan ishlaymiz
Ba'zan siz o'tgan kun ichida o'zgartirilgan fayllarni qidirishingiz kerak bo'ladi va oldingi qidiruv variantlari buning uchun unchalik aniq emas. Findning yaxshi tomoni shundaki, u ham parametrlarga ega. -amin, -smin Va -mmin, ular ilgari muhokama qilingan variantlarga o'xshash, ammo ular kun emas, balki daqiqalardan foydalanadilar. Shunday qilib, agar siz oxirgi kunda qaysi fayllar o'zgartirilgan yoki ularga kirishni ko'rishni istasangiz, ushbu variantlardan foydalanishingiz mumkin.

Qidiruv cheklovlari
Ba'zan find yordam dasturi sizga kerak bo'lgandan ko'ra ko'proq natijalar beradi. Parametrni belgilash orqali find tomonidan qaytarilgan qidiruv natijalarini cheklashingiz mumkin maksimal chuqurlik. Misol uchun, agar siz WordPress katalogidagi barcha JavaScript fayllarini topmoqchi bo'lsangiz, quyidagi buyruqdan foydalanishingiz mumkin:

# wordpressni toping - nomi "*js"

Agar siz faqat yuqori darajadagi katalogdagi JavaScript fayllarini ko'rishni istasangiz nima bo'ladi? Parametr yordamida qidiruvingizni cheklashingiz mumkin - maksimal chuqurlik:

# wordpressni toping -maxdepth 1 -name "*js"

Qidiruv faqat WordPress katalogida amalga oshiriladi, quyi kataloglarda emas. Agar siz qiymatni o'zgartirsangiz - maksimal chuqurlik 2 gacha, keyin qidiruv WordPress katalogining pastki kataloglarida amalga oshiriladi, lekin chuqurroq pastki kataloglarda emas.

Find yordam dasturini boshqa buyruqlar bilan birlashtirish
Endi siz izlayotgan fayllarni topdingiz, ular bilan nima qilmoqchisiz? Parametrlardan find yordam dasturida foydalanishingiz mumkin xargs yoki -exec, bu sizga fayllarni topib olganingizdan so'ng ularni amalga oshirish uchun harakatni belgilash imkonini beradi.

Aytaylik, siz bir vaqtning o'zida ko'p sonli fayllar uchun fayl egasini ildizdan www-data ga o'zgartirmoqchisiz. Ushbu fayllarning barchasini topish faqat birinchi qadamdir, shuningdek, fayl egasini o'zgartirishingiz kerak. Buni yordamchi dastur tomonidan qaytarilgan ro'yxat yordamida qo'lda bajaring toping, juda charchagan. Shuning uchun, fayl egalarini o'zgartirish uchun siz opsiyadan foydalanishingiz mumkin -exec:

# find -user root -exec chown www-data()\;

Fayllarni qidirish zarurati fayl tizimi bilan ishlashga imkon beruvchi deyarli har bir operatsion tizimda paydo bo'lishi mumkin. Biz uchun klassik misol Linux operatsion tizimi bo'ladi, biz konsol rejimida foydalanamiz. Keling, konsol yordamida tizimdagi fayllarni qidirish imkoniyatlarini ko'rib chiqaylik. Linux tizimida fayllarni qidirish uchun qo'shimcha qidiruv mezonlarini belgilash imkonini beruvchi juda moslashuvchan qidiruvni amalga oshirish imkonini beruvchi find buyrug'i mavjud. Keling, ushbu buyruqning imkoniyatlarini batafsil ko'rib chiqaylik.

Buyruq sintaksisini toping:

Yo'lni toping - variantlar

Yo'l - bu qidiruv uchun katalog. Masalan, bu kabi qiymatlar bo'lishi mumkin:
. - joriy katalog
/ - ildiz katalogi
~ - uy katalogi

Yo'lni ko'rsatgandan so'ng, qidiruv variantlari ko'rsatiladi. Hamma narsa chalkash ko'rinadi, lekin aslida bu erda hech qanday qiyinchiliklar yo'q.

Asosiy variantlar:
-ism- nom bo'yicha qidirish, qidiruv sxemasini o'rnatish;
-foydalanuvchi- muayyan foydalanuvchiga tegishli fayllarni qidirish;
-guruh- muayyan guruhga tegishli fayllarni qidirish;
-perm- fayllarni kirish rejimi bo'yicha qidirish;
-turi- fayllarni turlari bo'yicha qidirish, turlar ro'yxati:

  • b- maxsus blokli fayl;
  • d- katalog;
  • c- maxsus belgilar fayli;
  • f- oddiy fayl;
  • l- ramziy aloqa;
  • p- nomli quvur;
  • s- rozetka.

-hajmi n- hajmi n birlikli fayllarni qidirish;
-mtime -n +n- fayllarni o'zgartirish sanasi bo'yicha, kamroq (-) yoki undan ko'p (+) kun oldin qidirish.

Keling, turli vaziyatlarni simulyatsiya qilib, fayllarni qidirishga harakat qilaylik.
USB ga ulangan va tizimga oldindan o'rnatilgan olinadigan qurilmadagi fayllarni topamiz.

Fayllarni kengaytma bo'yicha qidirish:

$ find /mnt/usb -name "*.mp3" -chop etish

Ushbu buyruqni bajarish natijasida katalogda qidiruv amalga oshiriladi /mnt/usb- bu qurilma o'rnatilgan katalog. Qidiruv kengaytmali barcha fayllarda (*) amalga oshiriladi .mp3.
Qidiruv niqobini juda moslashuvchan tarzda o'zgartirish mumkin, masalan, siz fayl nomi boshlanadigan kalit so'zni o'rnatishingiz va uni qidirishingiz mumkin.

Fayllarni kalit so'z bilan qidirish:

$ find ~ -name "config*" –chop etish

Natijada kalit so'z bilan boshlangan topilgan fayllar ro'yxati ko'rsatiladi konfiguratsiya.
Buyruqning kuchli tomonlaridan biri muntazam iboraga ko'ra qidirish qobiliyatidir. Namoyish uchun biz lotin harflari bilan boshlanadigan "a" dan "j" gacha bo'lgan fayllarni qidiramiz.

Oddiy ifoda namunasi yordamida fayllarni qidiring:

$ find / -name "*" –chop etish

Belgilangan naqshga ko'ra, tizimdagi "a" dan "j" gacha bo'lgan harflar bilan boshlangan barcha fayllar uchun qidiruv amalga oshiriladi.

Linux tizimlari bilan ko'proq yoki kamroq tanish bo'lgan har bir kishi fayllarga kirish rejimlari juda muhim masala ekanligini biladi. Ba'zan ushbu maqsadlar uchun aniq belgilangan huquqlarga ega bo'lgan fayllarni topishingiz kerak, siz qidiruvdan opsiyadan foydalanishingiz mumkin; - perm.

Kirish rejimi 755 bilan fayllarni qidiring:

$toping. -perm 775 - chop etish

Xuddi shu tarzda, siz yanada moslashuvchan qidiruvni amalga oshirishingiz mumkin. To'liq kirish huquqiga ega bo'lgan foydalanuvchilar guruhi bo'yicha fayllarni topamiz.

Guruh uchun ruxsatlarga ega fayllarni qidiring:

$toping. -perm -070 -chop etish

Defis belgisi ortiqcha belgisi bilan almashtirilishi mumkin, bu sizga belgilangan ruxsat bitlaridan kamida bittasi o'rnatilgan fayllarni qidirishga imkon beradi, qolgan bitlar e'tiborga olinmaydi.

Quyidagi misolda ma'lum bir foydalanuvchi yoki guruhga tegishli fayllarni qidirishni ko'rib chiqing.

Muayyan foydalanuvchining fayllarini qidirish:

$ find / -foydalanuvchi administratori –chop etish

Qidiruv natijasida foydalanuvchiga tegishli fayllar topiladi admin.

Muayyan foydalanuvchilar guruhiga tegishli fayllarni qidiring:

$ toping / -botlarni guruhlash – chop etish

Foydalanuvchilar guruhiga tegishli fayllar topiladi botlar. Bundan tashqari, siz egalari mavjud bo'lmagan foydalanuvchilar yoki guruhlar bo'lgan fayllarni qidirishingiz mumkin:

$ find / -nouser –print $ find / -nogroup –chop etish

Muayyan fayl turlarini qidirish qobiliyati ham muhim funksionallikdir. Misol uchun, agar ma'lum bir katalogdagi barcha ramziy havolalarni topish kerak bo'lsa.

Ramziy havolalarni qidiring:

$ find /etc -turi l –chop etish

Qidiruv /etc katalogida amalga oshiriladi, unda barcha ramziy havolalar tanlanadi.

Muayyan katalogdagi kichik kataloglar ro'yxatini ko'rish kerak bo'lishi mumkin, bu kabi vazifalar uchun quyidagi buyruq mavjud;

Katalogdagi pastki kataloglarni ko'rish:

$ topish /mnt/usb -turi d –chop etish

Ekranda katalogda mavjud bo'lgan kataloglar ro'yxati ko'rsatiladi /mnt/usb. Endi keyingi variantga o'tamiz, bu belgilangan o'lchamdagi fayllarni qidirish qobiliyati.

Fayllarni hajmi bo'yicha qidirish:

$toping. -hajmi 2000k - chop etish

2000 kilobayt hajmdagi fayllar uchun qidiruv amalga oshiriladi, buning uchun "k" harfi o'rniga "M" harfini ko'rsatish kerak;

Keyingi misol sifatida biz fayllarni o'zgartirish vaqti bo'yicha qidirish imkoniyatidan foydalanamiz. Ushbu maqsadlar uchun biz variantdan foydalanamiz -mvaqt.

Oxirgi 2 kun ichida o'zgartirilgan fayllarni qidiring:

$ find /var/www/html -mtime +2 –chop etish

Qidiruv katalogda amalga oshiriladi /var/www/html, va oxirgi 2 kun ichida o'zgargan fayllarni qidiradi. Ehtimol, eng muhim va qulay qidiruv variantlaridan biri. Qarama-qarshi shart bilan o'zgartirish sanasi bo'yicha ham qidirishingiz mumkin. Keling, katalogdan 5 kun davomida o'zgarmagan fayllarni topishga harakat qilaylik.

5 kun davomida o'zgarmagan fayllarni qidiring:

$ topish /var/www/html -5 –chop etish

Hozircha hammasi shu, umid qilamanki, bu misollar bu buyruqni tushunishingizga yordam berdi. Uning qulayligi aniq ko'rsatilgan va uning imkoniyatlari haqida bilish ortiqcha bo'lmaydi, ayniqsa, agar siz kelajakda Linux tizimi bilan ishlamoqchi bo'lsangiz. Vakolatli fayllarni qidirish qobiliyatlari sizning shaxsiy vaqtingizni sezilarli darajada tejaydi va siz bilganingizdek, vaqt bebahodir. Ishlaringizga omad!

Agar siz ko'pincha grafik qobig'i bo'lmagan kompyuter yoki serverda buyruq satrida ishlasangiz, ertami-kechmi siz fayllarni qidirish vazifasiga duch kelasiz. Yaxshiyamki, Linux allaqachon tizimda faylni topish imkonini beruvchi o'rnatilgan buyruqqa ega.

Bugun biz find buyrug'idan foydalanish haqida gaplashamiz - menga ishoning, bu kuchli va qulay vosita bilan qanday ishlashni o'rganishga arziydi.

Find buyrug'idan qanday foydalanish kerak

Oddiy qilib aytganda, find buyrug'ining asosiy sintaksisi quyidagicha:

/path parametrlari fayl nomini toping

Keling, jamoaning imkoniyatlarini tushunaylik

Faylni nomi bo'yicha qidiring

Birinchi parametr - bu yo'l. Agar fayl qayerda yashiringanligini bilmasangiz, yo'lni / bilan almashtiring - bu etarli. Biroq, butun diskni qidirish juda ko'p vaqt talab qilishi mumkin va agar siz fayl qaerda joylashganligini bilsangiz, qidirishni boshlash uchun papkani belgilang (masalan, foydalanuvchining asosiy papkasida qidirish uchun ~).

Endi qidiruv parametrlariga o'tamiz. Faylni nomi bo'yicha qidirishning ikkita varianti mavjud:

  • nom - katta-kichik harflarga sezgir fayl nomini qidiring
  • iname - katta-kichik harflarga sezgir bo'lmagan fayl nomini qidiring

Shuni esda tutish kerakki, Linuxda fayl nomi katta ahamiyatga ega va agar siz, masalan, Ubuntu.txt faylini topishingiz kerak bo'lsa, unda quyidagi buyruq hech qanday natija bermaydi:

toping / -name ubuntu.txt

Lekin siz iname buyrug'idan foydalanishingiz va katta-kichik harflarni hisobga olmaydigan qidiruvni amalga oshirishingiz mumkin:

/ -iname ubuntu.txt ni toping

Turi bo'yicha qidirish

Find buyrug'i faqat fayllardan ko'proq narsani qidirishga imkon beradi. Bu erda qidiruv qo'llab-quvvatlaydigan tutqichlarning turlari mavjud:

  • f - oddiy fayl
  • d - katalog
  • l - ramziy havola
  • c - belgilar qurilmasi
  • b - blokirovka qiluvchi qurilma

Masalan, joriy foydalanuvchining uy katalogidagi "config" bilan boshlanadigan barcha kataloglarni topish uchun quyidagi buyruqni bajaring:

~ -turi d -nom konfiguratsiyasini toping*

Qidiruv natijalarini faylga chiqarish

Buyruqning natijasini faylga chiqarishning qulay funksiyasi, agar qidiruv natijalari ko'p bo'lsa yoki ular bilan keyinroq ishlash zarurati tug'ilsa, juda foydali bo'ladi. Masalan, barcha topilgan konfiguratsiya fayllari ro'yxatini faylga saqlash uchun conf_search, quyidagi buyruqni bajaring:

/etc -turi f -name “*.conf” > conf_search toping

Fayllarni hajmi bo'yicha qidiring

Bu diskda bo'sh joy tugashi va qayerga ketganini aniqlashingiz kerak bo'lgan juda foydali variant. Masalan, 1000 MB dan katta fayllarni topish uchun quyidagi buyruqni bajaring:

Toping / -siz +1000M

Quyidagi o'lchamdagi qisqartmalardan foydalanish mumkin:

  • c - baytlar
  • k - kilobayt
  • M - megabayt
  • G - gigabayt
  • b - 512 baytdan iborat bloklar

Bu kuchli buyruqni ishlatishning bir necha yo'li. Buyruqni ishga tushirish orqali qo'shimcha usullarni qo'llanmada topish mumkin

Salom butun Habr hamjamiyatiga.
Bu mening birinchi postim va umid qilamanki oxirgisi emas. Shuning uchun, har xil kamchiliklar, xatolar va matnning biroz suvliligi muqarrar, shuning uchun qat'iy hukm qilmang :)
Meni ushbu postni yozishga "Yangi boshlanuvchilar uchun konsol" mavzusi sabab bo'ldi. , bu erda ISVir, mening fikrimcha, dolzarb mavzuni ko'tardi - yangi kelganlarga o'zining hayoliy o'ta murakkabligi bilan ularni qo'rqitmasdan, qulay tilda konsol haqida qanday qilib aytish kerak.

Men ISVir-dan paritetni olib tashlamoqchi emasman, men sizga bir nechta eng oddiy "har kuni" yordamchi dasturlardan amaliy foydalanish haqida gapirib beraman, ularsiz konsolda ishlash men uchun imkonsizdir.

Shunday qilib, bizda nima bor:

toping- fayllarni qidirish. fayllar, kataloglar, symlinks va boshqa fayl obyektlarini qidirish imkonini beradi. find Ko'p qidirish variantlarini belgilash imkonini beradi, masalan:

  • niqob bo'yicha qidirish (nomiga)
  • qidiruv chuqurligini nazorat qilish
  • muayyan fayl turlarini qidirish (katalog, symlinks, rozetkalar)
  • faylni yaratish/o'zgartirish vaqti bo'yicha qidirish
  • faylning o'lchamini (diapazondan va oralig'ida) o'rnatishingiz mumkin
  • topilgan har bir fayl ustida amallarni bajarish
Find mana-da siz boshqa variantlar va parametrlar haqida o'qishingiz mumkin.

Shunday qilib, darhol - /etc/ katalogidagi oxirgi 24 soat ichida o'zgartirilgan barcha fayllarni qidiring:

$find /etc/ -turi f -mtime -1

Keling, nima yozganimizni ko'rib chiqaylik:

Birinchi parametr har doim qidirish uchun boshlang'ich katalog hisoblanadi.
variant -turi parametr bilan f gapiradi toping, siz faqat oddiy fayllarni qidirishingiz kerak.
variant -mvaqt parametr bilan -1 bildiradi toping oxirgi 24 soat ichida o'zgargan fayllarni topishingiz kerak.
"-" oldin 1 diapazonning yuqori chegarasini belgilaydi, ya'ni. "So'nggi 24 soat ichida o'zgargan hamma narsa"

Agar biz ko'rsatgan bo'lsak "+" oldin 1 , Bu toping 01.01.1970 dan kechagi kungacha (bir kundan ko'proq vaqt oldin) o'zgargan barcha fayllarni topadi
Shuningdek, siz o'zgartiruvchisiz raqam qo'yish orqali aniq sanani belgilashingiz mumkin.

Topilgan fayllar ustida amallarni bajaring.
variant -exec har bir topilgan fayl uchun bajariladigan buyruq bilan qatorni qabul qiladi
buyrug'iga o'tkazilgan parametr bilan ko'rsatiladi {}
qator " \;" belgilari bilan tugashi kerak.

Keling, bir misolni ko'rib chiqaylik:
* /tmp katalogida oxirgi oy ichida o'zgargan barcha fayllarni toping va ularni katalogga nusxalash
/tmp/backup/

$find /tmp -turi f -mtime -30 -exec cp () /tmp/backup \;

* katalogdagi oxirgi kunda o'zgargan nom jurnallari bilan barcha kataloglarni (rekursiv ravishda) o'chirib tashlang
/var/www
$find /var/www -turi d -mtime 0 -nom jurnallari -exec sudo rm -fr () \;

parametr d variantda -turi faqat qidiruv kataloglarini bildiradi
variant -ism nomi bilan qidiradi.
Shuni ta'kidlash kerakki, fayllarni shu tarzda o'chirish maqbul emas (sekin).
Yo'q qilish uchun find o'rnatilgan -delete opsiyasiga ega bo'lib, bu tezroq kattalik tartibidir.

Keling, yordam dasturini ko'rib chiqaylik awk.
awk fayllarni qayta ishlash uchun mo'ljallangan dasturlash tilidir. Uning maqsadi
ishlab chiqish - matnli ma'lumotlarni qayta ishlash bilan bog'liq ko'plab muammolarni shakllantirish va hal qilishni osonlashtirish. Aslida, awk konsoldan foydalanish mumkin bo'lgan yordamchi dasturdir.
Aniq sabablarga ko'ra, men bu erda awk kodini yozish texnikasini ko'rib chiqmayman - men sizga faqat biz uchun muhim bo'lgan bitta texnika haqida gapirib beraman.

Birinchidan, awk STDIN dan ma'lumotlarni olishi mumkin: $echo "test"|awk ...
ikkinchidan, awk konsolda bir-laynerlarni yozishda samarali, chunki parametr sifatida unga berilgan kodni bajaradi:


awk kirish oqimini maydonlarga ajratadi va bu maydonlarni $1,$2,...$N kabi o'zgaruvchilarga joylashtiradi.
Odatiy bo'lib, maydon ajratuvchisi bo'sh joy, ammo parametrdan foydalaniladi -F"_delimiter_" buni bekor qilish mumkin:
$head -4 /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh

$cat /etc/passwd|awk -F":" "($1 chop etish)"
ildiz
demon
bin

Masalan, bizda /var/www katalogida bir nechta saytlar mavjud. Har bir sayt uchun Apache jurnallari yoziladigan jurnallar katalogi mavjud (bu sayt uchun) Va endi biz ushbu jurnallarning umumiy hajmini, shuningdek, 100 Mb dan kattaroq barcha jurnallarni topmoqchimiz.

1.katta jurnallarni qidiring:

$find /var/www -turi f -name “access.log*” -hajmi +100M
/var/www/site1/logs/access.log
/var/www/site2/logs/access.log.1.gz

2.jurnallarning umumiy hajmini hisoblang:

Toping /var/www/ -type f -name "access.log*" -exec du -k () \;|awk "(s+=$1)END(chop etish s)"
5071604


Shuning uchun, qo'rqmang - men hozir hamma narsani tushuntiraman :)

Maska (access.log*) bo'yicha barcha fayllarni qidiradi va har biri uchun buyruqni ishga tushiradi du.
jamoa du fayl hajmini chop etadi. variant -k chiqishlar kilobaytlarda.
keyin protsessor ishga tushadi awk, shunchaki satrlarning birinchi maydonini (raqamlarni) o'zgaruvchiga jamlaydi s va o'zgaruvchining qiymatini ekranda ko'rsatadi.

Yana bir misol: tizimdagi foydalanuvchiga tegishli barcha fayllar va kataloglarni topamiz test 1 va umumiy hajmni hisoblang.

#find / -user test1 -exec du -sm () \;|awk "(s+=$1)END(chop etish s)"

bular. bu erda variantdan foydalaning -foydalanuvchi test1 foydalanuvchisiga tegishli fayllarni qidirishni toping va har bir fayl/katalog uchun biz uning hajmini hisoblaymiz (du buyrug'i)
Keyin awk ushbu ma'lumotni konveyer orqali oladi va yuqorida qilganimizdek, ularning yig'indisini Kbda hisoblab chiqadi.

KELISHDIKMI. Menimcha, bugungi kun uchun bu yetarli.
Post juda katta bo'lib chiqdi, shekilli, odatiy emas :)

Darhol aytmoqchimanki, mening maqsadim shunchaki find va awk dan foydalanish haqida gapirish emas, balki real vaziyatlarda amaliy qo'llash misollarini keltirish edi.
Agar siz maqolani yoqtirsangiz, men ushbu yo'nalishda yozishni davom ettiraman.

Vaqtingiz uchun rahmat.