Linux'ta Bul ve Grep komutlarının doğru kullanımı

Unix sistemlerinin çoğu acemi kullanıcısı, özellikle Linux, bu işletim sisteminde kullanılan temel komut satırı operatörlerine aşina değil. Bul ve grep operatörlerinin işlevlerine ve kullanımlarına yakından bakalım.

Linux'ta Bul ve Grep komutlarını kullanma.

BUL

Linux find komutu, dosya hiyerarşisini geçmek için kullanılan bir komut satırı yardımcı programıdır. Dosya ve dizin aramak ve onlarla sonraki işlemleri yapmak için kullanılabilir. Dosya, klasör, isim, oluşturulma tarihi, değişiklik tarihi, mal sahibi ve izinlere göre aramayı destekler. -Exec kullanarak, bulunan dosya veya klasörler için diğer UNIX komutları yürütülebilir. sözdizimi:

$ find [aramanın nerede başlatılacağı] [ifade ne bulunacağını belirler] [-options] [ne bulursun]

seçenekleri:

  • -exec - yukarıdaki kriterleri karşılayan ve başarılı komut çalıştırma için 0 çıkış durumu olarak döndüren gerekli dosya;
  • -ok - kullanıcıdan ilk istenmesi dışında -exec ile aynı şekilde çalışır;
  • -inum N - "N" numaralı arama;
  • -links N - "N" ile bağlantılı;
  • -sim demosu - “demo” da belirtilen dosyaları arayın;
  • -newer file - “file” den sonra değiştirilmiş / yaratılmış dosyaları arayın;
  • -perm octal - özünürlük sekizli ise arama;
  • -print - diğer kriterleri kullanarak bulunan belgelere giden yolu göster;
  • -empty - boş belge ve dizinleri arayın;
  • -size + N / -N - "N" arama bloklarını; Karakter cinsinden büyüklüğü ölçmek için "N" ve "c" kullanılabilir; “+ N” daha büyük bir “N” blok büyüklüğü anlamına gelir ve “-N” daha küçük bir “N” blok büyüklüğü anlamına gelir;
  • -user name - kullanıcı adına veya "name" tanımlayıcısına ait belgeleri arayın;
  • \ (expr \) - "Expr" doğru ise doğru; OR veya AND ile birlikte ölçütleri gruplamak için kullanılır.

GREP

Grep komutu dosyaları aramak için kullanılır. İşlev, “normal ifadelerin genel baskısı” anlamına gelir ve Linux'taki en güçlü ve sık kullanılan komutlardan biridir. Komut, belirtilen kalıpla eşleşen bir veya daha fazla giriş dosyasını arar ve karşılık gelen her satırı standart çıkışa yazar. Dosya belirtilmemişse, komut genellikle başka bir komutun çıktısı olan standart girdiden okunur. Bu makalede, pratik örnekler ve en yaygın GNU grep seçeneklerinin ayrıntılı açıklamaları ile bir komutu nasıl gireceğinizi göstereceğiz.

Komut sözdizimi

Komutu kullanmaya başlamadan önce, temel sözdizimini gözden geçirerek başlayalım. Yardımcı program ifadeleri aşağıdaki forma sahiptir:

[SEÇENEKLER] DESEN [DOSYA ...]

Köşeli parantez içindeki öğeler isteğe bağlıdır.

  • SEÇENEKLER - sıfır veya daha fazla seçenek. Ekip, davranışını kontrol eden çeşitli seçenekler sunar.
  • DESEN - Arama düzeni.
  • DOSYA - sıfır veya daha fazla giriş dosyası adı.

Dosyaları aramak için nasıl bir komut girilir

Komutun temel amacı, dosyadaki metni aramaktır. Örneğin, bash satırını içeren / etc / passwd dosyasından görüntülemek için aşağıdaki komutu kullanabilirsiniz:

$ grep bash / etc / passwd

Çıktı şöyle görünmelidir:

root 0: 0: root: / root: / bin / bash

etki alanı1000: 1000: etki alanı: / home / etki alanı: / bin / bash

Dize boşluk içeriyorsa, onu tek veya çift tırnak içine almanız gerekir:

$ "Gnome Görüntü Yöneticisi" / etc / passwd

Maçı Ters Çevir (ex)

Desene uymayan çizgileri görüntülemek için –v (veya –invert-match) parametresini girin. Örneğin, / etc / passwd dosyasından nologin içermeyen bir dosyayı görüntülemek için aşağıdaki komutu girebilirsiniz:

$ -v nologin / etc / passwd

Çıktı:

root 0: 0: root: / root: / bin / bash

colord 124: 124 :: / var / lib / colord: / bin / yanlış

git 994: 994: git daemon kullanıcısı: /: / usr / bin / git-shell

linuxize 1000: 1000: linuxize: / ana sayfa / linuxize: / bin / bash

Çıktıda arama yapmak için komut nasıl kullanılır

Bunun yerine, giriş dosyaları belirtirseniz, başka bir komutun çıktısını yönlendirebilir ve ardından yalnızca belirtilen kalıba uyan satırları görüntüleyebilirsiniz. Örneğin, sisteminizde bir www-data kullanıcısı olarak hangi işlemlerin çalıştığını bulmak için aşağıdaki komutu kullanabilirsiniz:

$ ps -ef | www veri

Çıktı:

www-veri 18247 12675 4 16:00? 00:00:00 php-fpm: havuz www

kök 18272 17714 0 16:00 puan / 0 00:00:00 —color = auto - exclude-dir = .bzr —exclude-dir = CVS —exclude-dir = .git —exclude-dir = .hg —exclude-dir = .svn www-veri

www-data 31147 12770 0 Eki22? 00:05:51 nginx: işçi süreci

www-data 31148 12770 0 Eki22? 00:00:00 nginx: önbellek yöneticisi işlemi

Birden fazla kanalı bir ekip halinde de birleştirebilirsiniz. Yukarıdaki çıktıda görebileceğiniz gibi, işlemi içeren bir satır da var. Bu çizginin görüntülenmesini istemiyorsanız, çıkışı aşağıda gösterildiği gibi başka bir örneğe gönderin.

$ ps -ef | www-veri | grep -v grep

Çıktı:

www-veri 18247 12675 4 16:00? 00:00:00 php-fpm: havuz www

kök 18272 17714 0 16:00 puan / 0 00:00:00 —color = auto - exclude-dir = .bzr —exclude-dir = CVS —exclude-dir = .git —exclude-dir = .hg —exclude-dir = .svn www-veri

www-data 31147 12770 0 Eki22? 00:05:51 nginx: işçi süreci

www-data 31148 12770 0 Eki22? 00:00:00 nginx: önbellek yöneticisi işlemi

Özyinelemeli arama

Bir deseni tekrar tekrar aramak için –r (veya -recivive) seçeneğini girin. Bu, tekrarlanan yollarla oluşan sembolik bağları atlayarak, belirtilen dizindeki tüm dosyaları aramanıza izin verir. Tüm sembolik bağlantılara göz atmak için –r (veya –dereference-recursive) seçeneğini kullanın. Aşağıdaki örnekte, / etc dizini içindeki tüm dosyalarda domain.com'u arıyoruz:

$ -r domain.com / etc

Komut, ilgili alanları tam dosya yolu öneki ile basacaktır.

/etc/hosts:127.0.0.1 node2.domain.com /etc/nginx/sites-available/domain.com: server_name domain.com www.domain.com;

–R yerine –R seçeneğini kullanırsanız, komut tüm sembolik bağları izleyecektir:

$ -R domain.com / etc

Son çıktı alanına dikkat edin. Bu, yukarıdaki örnekte yazdırılmaz, çünkü siteler etkin Nginx dizinindeki dosyalar, siteler kullanılabilir dizininin içindeki yapılandırma dosyalarına sembolik bağlardır.

Çıktı:

/etc/hosts:127.0.0.1 node2.domain.com

/etc/nginx/sites-available/domain.com: server_name domain.com www.domain.com;

/etc/nginx/sites-enabled/domain.com: server_name domain.com www.domain.com;

Sadece dosya adını göster

Varsayılan çıktıyı bastırmak ve yalnızca eşleşen deseni içeren dosyaların adlarını yazdırmak için –l (veya — eşleşenlerle eşleşir) seçeneğini girebilirsiniz. Örneğin, geçerli çalışma dizininde .conf ile biten tüm dosyaları aramak ve yalnızca domain.com türünü içeren dosya adlarını yazdırmak için, şunu yazın:

$ –L domain.com * .conf

Çıktı şöyle görünecek:

tmux.conf

haproxy.conf

-L seçeneği genellikle özyinelemeli -R seçeneğiyle birlikte kullanılır:

$ -Rl domain.com / tmp

Büyük küçük harf duyarsızlığı

Varsayılan olarak, komut büyük / küçük harf duyarlıdır; bu, büyük ve küçük harf karakterlerinin farklı olduğu anlamına gelir. Ararken büyük / küçük harfleri yoksaymak için –i (veya –ignore-case) seçeneğini girin. Örneğin, herhangi bir seçeneği olmayan bir Zebra ararsanız, aşağıdaki komut herhangi bir çıktı göstermez, yani. eşleştirme var.

$ Zebra / usr / paylaşım / sözler

Ancak büyük / küçük harf duyarlı bir arama yaparsanız, –i seçeneğini kullanın, hem küçük hem de büyük harflerle eşleşir:

$ grep -i Zebra / usr / paylaşım / sözler

“Zebra” göstergesi “Zebra”, “ZEbrA” ya da diğer büyük ve küçük harf kombinasyonlarına karşılık gelecektir.

Çıktı:

zebra

zebra'nın

zebralar

Tam eşleşme

Arama yaparken, gnu, cygnus veya magnum gibi daha büyük kelimelerin eklendiği gnu'yu da basar.

$ gnu / usr / paylaşım / sözler

Çıktı:

cygnus

gnu

hükümdarsız dönem

lgnu9d

lignum

büyük şişe

Magnuson

bataklık yosunu

wingnut

Yalnızca belirtilen alanın tam bir kelime olduğu (sözcükler içine alınmamış) ifadeleri döndürmek için –w seçeneğini (veya —word-regexp) kullanabilirsiniz.

ÖNEMLİ. Kelimenin karakterleri alfanümerik karakterleri (az, AZ ve 0-9) ve alt çizgi (_) içerir. Diğer tüm karakterler sözel olmayan karakterler olarak kabul edilir.

–W seçeneği de dahil olmak üzere yukarıdaki komutu çalıştırırsanız, komut yalnızca gnu içerenleri ayrı bir sözcük olarak döndürür.

$ grep -w gnu / usr / paylaşım / sözler

Çıktı: gnu

Numaraları göster

Desen içeren satır sayısını göstermek için –n (veya –line-number) parametresini kullanın. Bu seçeneğin kullanılması, bulunduğu sayı ile birlikte standart çıktıyla eşleşir. Örneğin, bash önekini içeren / etc / services dosyasından ilgili numara ile görüntülemek için, aşağıdaki komutu kullanabilirsiniz:

$ grep -n 10000 / etc / services

Aşağıdaki çıktıda eşleşmeler 10423 ve 10424'te gösterilmektedir.

Çıktı:

10423: ndmp 10.000 / tcp

10424: ndmp 10000 / udp

sayma

Eşleşen satır sayısını standart çıktıya yazdırmak için –c (veya –count) parametresini kullanın. Aşağıdaki örnekte, / usr / bin / zsh kabuğuna sahip hesapların sayısını sayıyoruz.

$ grep -c '/ usr / bin / zsh' / etc / passwd

Çıktı: 4

Birkaç satır (desen)

OR operatörü iki veya daha fazla arama modelini birleştirebilir |. Komut, varsayılan olarak, kalıbı, meta karakterlerin kendi anlamlarını yitirdiği ana ifade olarak yorumlar ve ters eğik çizgi içeren sürümleri kullanılmalıdır. Aşağıdaki örnekte, Nginx hata günlüğü dosyasında ölümcül, hata ve kritik kelimelerin tüm örneklerini ararız:

$ grep 'ölümcül \ | hata \ | kritik' /var/log/nginx/error.log

Genişletilmiş düzenli ifade seçeneğini –E (ya da-extended-regexp) kullanırsanız, aşağıda gösterildiği gibi ifadeden kaçmamalısınız:

$ grep -E 'ölümcül | hata | kritik' /var/log/nginx/error.log

Düzenli ifade

GNU Grep iki temel ifade fonksiyonuna sahiptir - Temel ve Genişletilmiş. Varsayılan olarak, işlev deseni temel bir normal ifade olarak yorumlar, genişletilmiş normal ifadelere geçmek için –E seçeneğini kullanmanız gerekir. Ana modda normal ifadeler kullanılırken, meta karakterleri hariç diğer tüm karakterler aslında birbirine karşılık gelen normal ifadelerdir. Aşağıda en sık kullanılan meta karakterlerin listesi verilmiştir:

  • Bir satırın başındaki ifadeyle eşleşmesi için ^ karakterini (şapka karakteri) kullanın. Aşağıdaki örnekte, ^ kanguru yalnızca en başında meydana gelirse eşleşecektir: $ grep "^ kangaroo" file.txt
  • Sonundaki ifadeyle eşleşmesi için $ (dolar) sembolünü kullanın. Aşağıdaki örnekte, kanguru $ yalnızca en sonunda karşılaşıldığında eşleşecektir: grep "kanguru $" file.txt
  • Sembolünü kullanın. (nokta) herhangi bir tek karakterle eşleşir. Örneğin, iki karakterli kanla başlayan ve roo ile biten her şeyi eşleştirmek için aşağıdaki deseni kullanabilirsiniz: $ grep "kan..roo" file.txt
  • Parantez içine alınmış herhangi bir tek karakterle eşleşmek için [] (köşeli ayraçlar) kullanın. Örneğin, kabul et ya da "aksanı içerenleri bulun, aşağıdaki deseni kullanabilirsiniz: $ grep" acce [np] t "file.txt

Bir sonraki karakterin özel anlamını önlemek için, \ (ters eğik çizgi) karakterini kullanın.

Genişletilmiş normal ifadeler

Deseni genişletilmiş normal ifade olarak yorumlamak için –E (veya –extended-regexp) parametresini kullanın. Genişletilmiş düzenli ifadeler, tüm temel meta karakterleri, ayrıca daha karmaşık ve güçlü arama kalıpları oluşturmak için ek meta karakterleri içerir. Aşağıda bazı örnekler verilmiştir:

  • Bu dosyadaki tüm e-posta adreslerini eşleştirin ve çıkarın: $ grep -E -o "\ b [A-Za-z0-9 ._% + -] [A-Za-z0-9 .-] + \. [A-Za-z] {2.6} \ b "dosya.txt
  • Geçerli tüm IP adreslerini bu dosyadan eşleyin ve çıkarın: $ grep -E -o '(25 [0-5] | 2 [0-4] [0-9] | [01]? [0-9] [0 -9]?) \. (25 [0-5] | 2 [0-4] [0-9] | [01] - [0-9] [0-9]?) \. (25 [0- 5] | 2 [0-4] [0-9] | [01]? [0-9] [0-9]?) \. (25 [0-5] | 2 [0-4] [0- 9] | [01]? [0-9] [0-9]?) 'Dosya.txt

-O seçeneği yalnızca eşleşmeleri yazdırmak için kullanılır.

Saymadan önce yazdır

Eşleştirmeden önce belirli sayıda satırı yazdırmak için –B (veya —için bağlamdan önce) parametresini kullanın. Örneğin, eşleştirmeden önce 5 satır başlangıç ​​bağlamını görüntülemek için aşağıdaki komutu kullanabilirsiniz: $ grep -A 5 root / etc / passwd

Aramadan sonra yazdır

Bir eşleşmeden sonra belirli sayıda satır yazdırmak için –A (veya – bağlamdan sonra) parametresini kullanın. Örneğin, dizeleri eşleştirdikten sonra son bağlamın 5 satırını görüntülemek için aşağıdaki komutu kullanabilirsiniz: $ grep -B 5 root / etc / passwd

Bütün bunlar komut bilgilerinin tam kullanımı için gereklidir. Zaten Linux kullanıyorsanız ve yeni başlayanlara tavsiyelerde bulunabilirseniz, bu makalenin altındaki yorumları paylaşın.