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.