30 Contoh Grep untuk Pentadbir Sistem

30 Grep Examples System Admins



Anda dapat menjumpai grep di dalam otak haiwan Unix dan sistem operasi seperti Unix. Ini adalah program asas yang digunakan untuk mencocokkan corak dan ditulis pada tahun 70-an bersama dengan alat UNIX yang lain yang kita kenal dan sukai (atau benci).

Walaupun belajar mengenai bahasa formal dan ungkapan biasa adalah topik yang menarik. Belajar grep mempunyai lebih banyak daripada regex. Untuk memulakannya dan untuk melihat keindahan dan keanggunan grep, anda perlu melihat beberapa contoh dunia nyata terlebih dahulu.







Contoh yang berguna dan menjadikan hidup anda lebih mudah. Berikut adalah 30 kes dan pilihan penggunaan grep biasa.



1. ps aux | grep

Ps aux menyenaraikan semua proses dan pid yang berkaitan. Tetapi selalunya senarai ini terlalu panjang untuk diperiksa oleh manusia. Dengan mengeluarkan output ke perintah grep, anda boleh menyenaraikan proses yang dijalankan dengan mempertimbangkan aplikasi yang sangat spesifik. Contohnya boleh menjadi sshd atau nginx atau httpd.



# ps hingga | grep sshd
akar400 0.0 0.2 69944 5624? Ss17:47 0: 00/usr/sbin/sshd-D
akar1076 0.2 0.3 95204 6816? Ss18:29 0: 00 sshd: akar@mata/0
akar1093 0.0 0.0 12784 932mata/0S +18:29 0: 00cengkamansshd

2. Menyekat alamat IP anda

Di kebanyakan sistem operasi, anda boleh menyenaraikan semua antara muka rangkaian anda dan IP yang diberikan ke antara muka tersebut dengan menggunakan perintah ifconfig atau ip addr. Kedua-dua arahan ini akan mengeluarkan banyak maklumat tambahan. Tetapi jika anda ingin mencetak hanya alamat IP (katakan untuk skrip shell) maka anda boleh menggunakan perintah di bawah ini:





$ip addr | cengkamanmasuk| awk '{cetak $ 2; } '
$ip addr | cengkaman -dalammasuk| awk '{cetak $ 2; } ' #Untuk baris dengan inet bukan inet6 (IPv6)

Perintah ip addr mendapat semua butiran (termasuk alamat IP), kemudian disalurkan ke inp perintah kedua yang mengeluarkan hanya garis dengan inet di dalamnya. Ini kemudian disalurkan ke awk mencetak pernyataan yang mencetak kata kedua di setiap baris (secara sederhana).

P.S: Anda juga boleh melakukan ini tanpa grep jika anda tahu awk tahu.



3. Melihat percubaan SSH yang gagal

Sekiranya anda mempunyai pelayan yang menghadap Internet, dengan IP awam, ia akan selalu dihujani dengan percubaan SSH dan jika anda membenarkan pengguna mempunyai akses SSH berdasarkan kata laluan (dasar yang tidak akan saya cadangkan) anda dapat melihat semua percubaan yang gagal tersebut menggunakan mengikuti arahan grep:

# kucing /var/log/auth.log | grep Gagal
Contoh keluar
Dis5 16:dua puluh: 03 debian sshd[509]: Kata laluan gagaluntukroot dari 192.168.0.100 port52374ssh2
Dis5 16:dua puluh: 07 debian sshd[509]: Kata laluan gagaluntukroot dari 192.168.0.100 port52374ssh2
Dis5 16:dua puluh:sebelasdebian sshd[509]: Kata laluan gagaluntukroot dari 192.168.0.100 port52374ssh2

4. Paip Grep ke Uniq

Kadang kala, grep akan mengeluarkan banyak maklumat. Dalam contoh di atas, satu IP mungkin telah cuba memasuki sistem anda. Dalam kebanyakan kes, hanya ada sebilangan kecil IP yang menyinggung yang perlu anda kenal pasti dan senarai hitam secara unik.

#kucing /di mana/balak/author.log| cengkaman 'Gagal' | uniq -f 3

Perintah uniq seharusnya hanya mencetak garis unik. Uniq -f 3 melangkau tiga medan pertama (untuk mengabaikan cap waktu yang tidak pernah berulang) dan kemudian mula mencari garis unik.

5. Grepping untuk Mesej Ralat

Menggunakan Grep untuk log masuk dan ralat tidak terhad kepada SSH sahaja. Ralat log pelayan web (seperti Nginx) dan log akses cukup teliti. Sekiranya anda menyediakan skrip pemantauan yang menghantar makluman kepada anda apabila grep 404 mengembalikan nilai baru. Itu sangat berguna.

# grep -w '404' /var/www/nginx/access.log

192.168.0.100 - -[06/Dis/2018: 02:dua puluh:29+0530] 'GET /favicon.ico HTTP / 1.1' 404 200
'http://192.168.0.102/' 'Mozilla / 5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit / 537.36 (KHTML, seperti Gecko) Chrome / 70.0.3538.110 Safari / 537.36 '


192.168.0.101 - -[06/Dis/2018: 02:Empat lima:16+0530] 'GET /favicon.ico HTTP / 1.1' 404 143
'http://192.168.0.102/' 'Mozilla / 5.0 (iPad; CPU OS 12_1 seperti Mac OS X)
AppleWebKit / 605.1.15 (KHTML, seperti Gecko) Versi / 12.0 Mudah Alih / 15E148 Safari / 604.1 '

Regex mungkin bukan 404 tetapi beberapa penyaringan regex lain untuk hanya pelanggan Bergerak atau hanya peranti Apple yang melihat halaman web. Ini membolehkan anda mendapat gambaran yang lebih mendalam mengenai bagaimana prestasi aplikasi anda.

6. Penyenaraian Pakej

Untuk sistem berasaskan Debian, dpkg -l menyenaraikan semua pakej yang dipasang pada sistem anda. Anda boleh memasukkannya ke perintah grep untuk mencari pakej milik aplikasi tertentu. Sebagai contoh:

#dpkg -tempat | cengkaman 'Saya datang'

7. grep -v NamaNama

Untuk menyenaraikan semua baris yang jangan mengandungi corak yang diberikan, gunakan bendera -v. Ini pada dasarnya adalah kebalikan dari perintah grep biasa.

8. grep -l

Ia menyenaraikan semua fail yang mengandungi sekurang-kurangnya satu kejadian corak yang disediakan. Ini berguna semasa anda mencari corak di dalam direktori dengan banyak fail. Ia hanya mencetak nama fail, dan bukan garis tertentu dengan corak.

9. Pilihan kata tunggal -w

$cengkaman -dalam <CORAK>nama fail

Bendera -w memberitahu grep untuk mencari corak yang diberikan sebagai keseluruhan perkataan dan bukan hanya substring garis. Sebagai contoh, sebelum ini kami memanggil alamat IP dan coraknya masuk mencetak garisan dengan kedua-duanya masuk dan inet6 menyenaraikan kedua-dua alamat IPv4 dan IPv6. Tetapi jika kita menggunakan bendera -w hanya garis dengan masuk sebagai perkataan yang didahului dan diikuti oleh ruang putih adalah padanan yang sah.

10. Ungkapan Biasa yang Dipanjangkan

Anda akan sering mendapati bahawa ungkapan biasa yang berasal dari Grep agak terhad. Dalam kebanyakan skrip dan arahan, anda akan menemui penggunaan bendera -E dan ini membolehkan anda memasukkan corak dalam apa yang disebut Mod Diperpanjang.

Inilah perintah grep dan grep -E untuk mencari kata Superman dan Spiderman.

$cengkaman '' (Super | Labah-labah ) lelaki 'teks
$cengkaman -AND '(Super | Spider) lelaki'teks

Seperti yang anda lihat, versi lanjutan jauh lebih senang dibaca.

11. Grep untuk bekas anda

Sekiranya anda mempunyai sekumpulan kontena yang besar yang berjalan di host anda, anda boleh memasukkannya dengan nama gambar, status, port yang mereka paparkan dan banyak atribut lain. Sebagai contoh,

$tukang dokps | cengkaman [gambarNama]

12. Grep untuk buah anda

Semasa kita berada di topik kontena. Kubernetes sering cenderung melancarkan banyak pod di bawah penyebaran tertentu. Walaupun setiap pod mempunyai nama yang unik, di ruang nama tertentu, mereka biasanya bermula dengan nama penyebaran. Kami dapat memanfaatkannya dan menyenaraikan semua pod yang berkaitan dengan penggunaan tertentu.

$kubectl dapatkan polong| cengkaman <penyebaranNama>

13. Cengkaman untuk data Besar

Sering kali analisis Big Data yang disebut melibatkan pencarian, penyortiran dan pengiraan corak yang sederhana dalam set data tertentu. Utiliti UNIX tahap rendah seperti grep, uniq, wc sangat bagus dalam hal ini. Catatan blog ini menunjukkan contoh tugas yang baik dalam beberapa saat menggunakan grep dan utiliti Unix yang lain sementara Hadoop mengambil masa hampir setengah jam.

Contohnya, set data ini berukuran lebih dari 1.7GB. Ini mengandungi maklumat mengenai banyak pertandingan catur, termasuk pergerakan yang dibuat, siapa yang menang, dan lain-lain. Kami berminat hanya dengan keputusan sehingga kami menjalankan perintah berikut:

$cengkaman 'Hasil'juta asas-2.22.pgn| mengurut | uniq -c
221 [Keputusan'*']
653728 [Keputusan'0-1']
852305 [Keputusan'1-0']
690934 [Keputusan'1 / 2-1 / 2']

Proses ini memerlukan masa sekitar 15 saat untuk pemproses 2-core / 4-thread 4 tahun. Oleh itu, pada masa berikutnya anda menyelesaikan masalah data besar. Fikirkan jika anda boleh menggunakan grep sebagai gantinya.

14. grep –warna = automatik

Pilihan ini membolehkan grep menonjolkan corak di dalam garis di mana ia dijumpai.

15. grep -i

Pemadanan corak grep sememangnya peka huruf besar kecil. Tetapi jika anda tidak mempedulikannya, maka menggunakan bendera -i akan menjadikan kes grep tidak sensitif.

16. grep -n

Bendera -n akan menunjukkan nombor garis sehingga anda tidak perlu risau mencari garis yang sama di kemudian hari.

17. git grep

Git, sistem kawalan versi, sendiri mempunyai perintah grep terbina dalam yang berfungsi sama seperti grep biasa anda. Tetapi ia dapat digunakan untuk mencari corak pada setiap pohon yang berkomitmen menggunakan CLI git asli, bukan paip yang membosankan. Sebagai contoh, jika anda berada di cawangan induk repo anda, anda boleh melintasi repo menggunakan:

(tuan)$git grep <corak>

18. grep -o

Bendera -o sangat membantu ketika anda cuba menyahpepijat regex. Ia hanya akan mencetak bahagian garis yang sepadan, bukan keseluruhan garis. Oleh itu, sekiranya anda mendapat terlalu banyak garis yang tidak diingini untuk corak yang disediakan, dan anda tidak dapat memahami mengapa perkara itu berlaku. Anda boleh menggunakan bendera -o untuk mencetak substring yang menyinggung dan alasan mengenai regex anda ke belakang dari sana.

19. grep -x

Bendera -x akan mencetak garis, jika dan hanya jika, keseluruhan garis sepadan dengan regex yang anda berikan. Ini agak serupa dengan bendera -w yang mencetak garis jika dan hanya keseluruhan perkataan yang sesuai dengan regex yang disediakan.

20. grep -T

Semasa berurusan dengan log dan output dari skrip shell, anda cenderung menghadapi tab keras untuk membezakan antara lajur output yang berbeza. Bendera -T akan menyelaraskan tab ini dengan kemas sehingga lajur disusun dengan rapi, menjadikan output manusia dapat dibaca.

21. grep -q

Ini menekan output dan menjalankan perintah grep secara senyap-senyap. Sangat berguna semasa mengganti teks, atau menjalankan grep dalam skrip daemon.

22. grep -P

Orang yang biasa menggunakan sintaks ungkapan biasa boleh menggunakan bendera -P untuk menggunakan tepat. Anda tidak perlu belajar ungkapan biasa biasa, yang menggunakan grep secara lalai.

23. grep -D [TINDAKAN]

Di Unix, hampir semuanya boleh dianggap sebagai fail. Akibatnya, setiap perangkat, soket, atau aliran data FIFO dapat dimasukkan ke grep. Anda boleh menggunakan bendera -D diikuti dengan TINDAKAN (tindakan lalai adalah BACA). Beberapa pilihan lain adalah SKIP untuk melangkau peranti tertentu secara diam-diam dan RECURSE untuk melalui direktori dan pautan sym secara berulang.

24. Pengulangan

Sekiranya mencari corak tertentu yang merupakan pengulangan corak sederhana yang diketahui, maka gunakan pendakap keriting untuk menunjukkan jumlah pengulangan

$cengkaman -AND [0-9]{10}

Ini mencetak garisan yang mengandungi rentetan 10 digit atau lebih.

25. Singkatan pengulangan

Beberapa watak khas disediakan untuk pengulangan corak tertentu. Anda boleh menggunakan ini sebagai pengganti keriting, jika sesuai dengan keperluan anda.

? : Pola tanda tanya sebelum ini mesti sepadan dengan sifar atau satu masa.

*: Pola bintang sebelumnya harus sepadan dengan sifar atau lebih banyak kali.

+: Corak sebelum ditambah harus sepadan dengan satu atau beberapa kali.

25. Pengimbangan Offset

Sekiranya anda ingin tahu melihat bait mengimbangi garis di mana ungkapan padanan ditemui, anda boleh menggunakan bendera -b untuk mencetak offset juga. Untuk mencetak ofset pada bahagian garis yang sepadan, anda boleh menggunakan bendera -b dengan bendera -o.

$cengkaman -b -atau <CORAK> [nama fail]

Offset bermaksud, setelah berapa bait dari awal fail bermula rentetan yang sesuai.

26. egrep, fgrep dan rgerp

Anda sering akan melihat pemakaian egrep, untuk menggunakan sintaks ungkapan biasa yang diperluaskan yang telah kita bincangkan sebelumnya. Walau bagaimanapun, ini adalah sintaks yang tidak digunakan lagi dan disarankan agar anda tidak menggunakannya. Gunakan grep -E sebagai gantinya. Begitu juga, gunakan grep -F, bukan fgrep dan grep -r bukan rgrep.

27. grep -z

Kadang kala input ke grep bukan garis yang diakhiri dengan watak barisan baru. Contohnya, jika anda memproses senarai nama fail, mereka mungkin datang dari sumber yang berbeza. Bendera -z memberitahu grep untuk memperlakukan watak NULL sebagai garis akhir. Ini membolehkan anda memperlakukan aliran masuk seperti fail teks biasa.

28. grep -a [nama fail]

Bendera -a memberitahu grep untuk memperlakukan fail yang disediakan seolah-olah itu adalah teks biasa. Failnya boleh menjadi binari, tetapi grep akan merawat isi di dalamnya, seolah-olah teks.

29. grep -U [nama fail]

Bendera -U memberitahu grep untuk memperlakukan fail yang dibekalkan seolah-olah fail binari dan bukan teks. Secara lalai grep meneka jenis fail dengan melihat beberapa bait pertama. Menggunakan peraturan bendera ini yang meneka berfungsi.

Grep -m NUM

Dengan fail yang besar, pengambilan ekspresi dapat berlangsung selama-lamanya. Walau bagaimanapun, jika anda ingin memeriksa hanya NUM nombor pertandingan yang pertama, anda boleh menggunakan bendera -m untuk mencapainya. Ia lebih cepat dan outputnya juga dapat dikendalikan.

Kesimpulannya

Sebilangan besar pekerjaan sysadmin sehari-hari melibatkan penyaringan melalui banyak teks. Ini mungkin log keselamatan, log dari pelayan web atau mel anda, aktiviti pengguna atau bahkan teks halaman man besar. Grep memberi anda sedikit kelonggaran ketika menangani kes penggunaan ini.

Mudah-mudahan, beberapa contoh dan kes penggunaan di atas dapat membantu anda memahami dengan lebih baik fosil perisian ini.