30 Ví dụ Grep cho Quản trị viên Hệ thống

30 Grep Examples System Admins



Bạn có thể tìm thấy grep hiện diện sâu bên trong não động vật của hệ điều hành Unix và Unix giống như vậy. Nó là một chương trình cơ bản được sử dụng để đối sánh mẫu và nó được viết vào những năm 70 cùng với phần còn lại của công cụ UNIX mà chúng ta biết và yêu thích (hoặc ghét).

Trong khi học về các ngôn ngữ chính quy và biểu thức chính quy là một chủ đề thú vị. Học grep có nhiều thứ hơn so với regexes. Để bắt đầu với nó và để thấy vẻ đẹp và sự sang trọng của grep, trước tiên, bạn cần xem một số ví dụ trong thế giới thực.







Ví dụ hữu ích và giúp cuộc sống của bạn dễ dàng hơn một chút. Dưới đây là 30 trường hợp và tùy chọn sử dụng grep phổ biến như vậy.



1. ps aux | grep

Ps aux liệt kê tất cả các quá trình và các pid liên quan của chúng. Nhưng thường thì danh sách này quá dài để con người có thể kiểm tra. Đưa đầu ra cho một lệnh grep, bạn có thể liệt kê các quy trình đang chạy với một ứng dụng rất cụ thể. Ví dụ, có thể là sshd hoặc nginx hoặc httpd.



# ps để | grep sshd
nguồn gốc400 0,0 0,2 69944 5624? NS17:47 0: 00/usr/sbin/sshd-NS
nguồn gốc1076 0,2 0,3 95204 6816? NS18:29 0: 00 sshd: root@pts/0
nguồn gốc1093 0,0 0,0 12784 932pts/0S +18:29 0: 00nắm chặtsshd

2. Thêm địa chỉ IP của bạn

Trong hầu hết các hệ điều hành, bạn có thể liệt kê tất cả các giao diện mạng của mình và IP được gán cho giao diện đó bằng cách sử dụng lệnh ifconfig hoặc ip addr. Cả hai lệnh này sẽ xuất ra nhiều thông tin bổ sung. Nhưng nếu bạn chỉ muốn in địa chỉ IP (ví dụ như đối với các tập lệnh shell) thì bạn có thể sử dụng lệnh dưới đây:





$ip addr | nắm chặtinet| awk '{in $ 2; } '
$ip addr | nắm chặt -tronginet| awk '{in $ 2; } ' # Đối với các dòng chỉ có inet không phải inet6 (IPv6)

Lệnh ip addr lấy tất cả các thông tin chi tiết (bao gồm cả địa chỉ IP), sau đó nó được chuyển đến lệnh thứ hai grep inet, lệnh này chỉ xuất ra các dòng có inet trong đó. Điều này sau đó được đưa vào awk print câu lệnh in từ thứ hai trong mỗi dòng (nói một cách đơn giản).

P.S: Bạn cũng có thể làm điều này mà không cần grep nếu bạn biết rõ về awk.



3. Xem xét các lần thử SSH không thành công

Nếu bạn có một máy chủ truy cập Internet, với một IP công cộng, nó sẽ liên tục bị tấn công bằng các nỗ lực SSH và nếu bạn cho phép người dùng có quyền truy cập SSH dựa trên mật khẩu (một chính sách mà tôi không khuyến khích), bạn có thể thấy tất cả các lần thử không thành công đó bằng cách sử dụng lệnh grep sau:

# cat /var/log/auth.log | grep Fail
Lấy mẫu ra đặt
Tháng mười hai5 16:hai mươi: 03 debian sshd[509]: Mật khẩu không thành côngroot từ cổng 192.168.0.10052374ssh2
Tháng mười hai5 16:hai mươi: 07 debian sshd[509]: Mật khẩu không thành côngroot từ cổng 192.168.0.10052374ssh2
Tháng mười hai5 16:hai mươi:mười mộtdebian sshd[509]: Mật khẩu không thành côngroot từ cổng 192.168.0.10052374ssh2

4. Piping Grep sang Uniq

Đôi khi, grep sẽ xuất ra rất nhiều thông tin. Trong ví dụ trên, một IP duy nhất có thể đã cố gắng xâm nhập vào hệ thống của bạn. Trong hầu hết các trường hợp, chỉ có một số IP vi phạm như vậy mà bạn cần xác định duy nhất và đưa vào danh sách đen.

#con mèo /ở đâu/khúc gỗ/auth.log| nắm chặt 'Thất bại' | uniq -NS 3

Lệnh uniq chỉ in các dòng duy nhất. Uniq -f 3 bỏ qua ba trường đầu tiên (để bỏ qua các dấu thời gian không bao giờ lặp lại) và sau đó bắt đầu tìm kiếm các dòng duy nhất.

5. Grepping cho các thông báo lỗi

Sử dụng Grep để truy cập và nhật ký lỗi không chỉ giới hạn ở SSH. Các máy chủ web (như Nginx) báo lỗi nhật ký và truy cập nhật ký khá tỉ mỉ. Nếu bạn thiết lập các tập lệnh giám sát gửi cho bạn cảnh báo khi grep 404 trả về một giá trị mới. Điều đó có thể khá hữu ích.

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

192.168.0.100 - -[06/Tháng mười hai/2018: 02:hai mươi:29+0530] 'TẢI /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, như Gecko) Chrome / 70.0.3538.110 Safari / 537.36 '


192.168.0.101 - -[06/Tháng mười hai/2018: 02:Bốn năm:16+0530] 'TẢI /favicon.ico HTTP / 1.1' 404 143
'http://192.168.0.102/' 'Mozilla / 5.0 (iPad; CPU OS 12_1 như Mac OS X)
AppleWebKit / 605.1.15 (KHTML, như Gecko) Phiên bản / 12.0 Mobile / 15E148 Safari / 604.1 '

Regex có thể không phải là 404 mà là một số bộ lọc regex khác chỉ dành cho khách hàng Di động hoặc chỉ thiết bị Apple xem trang web. Điều này cho phép bạn có cái nhìn sâu sắc hơn về cách ứng dụng của bạn đang hoạt động.

6. Danh sách gói

Đối với hệ thống dựa trên Debian, dpkg -l liệt kê tất cả các gói được cài đặt trên hệ thống của bạn. Bạn có thể chuyển nó thành một lệnh grep để tìm kiếm các gói thuộc về một ứng dụng cụ thể. Ví dụ:

#dpkg -NS | nắm chặt 'Tôi đã đến'

7. grep -v fileNames

Để liệt kê tất cả các dòng đừng chứa một mẫu nhất định, sử dụng cờ -v. Về cơ bản nó ngược lại với lệnh grep thông thường.

8. grep -l

Nó liệt kê tất cả các tệp chứa ít nhất một lần xuất hiện của mẫu được cung cấp. Điều này rất hữu ích khi bạn đang tìm kiếm một mẫu bên trong một thư mục có nhiều tệp. Nó chỉ in tên tệp chứ không in dòng cụ thể với mẫu.

9. Tùy chọn từ đơn -w

$nắm chặt -trong <MẪU>fileNames

Cờ -w ra lệnh cho grep tìm kiếm mẫu đã cho dưới dạng toàn bộ từ chứ không chỉ là một chuỗi con của một dòng. Ví dụ: trước đó, chúng tôi đã nhập địa chỉ IP và mẫu inet in các dòng với cả hai inetinet6 liệt kê cả địa chỉ IPv4 và IPv6. Nhưng nếu chúng ta sử dụng -w thì chỉ gắn cờ các dòng có inet vì một từ đứng trước và theo sau bởi khoảng trắng là một kết quả phù hợp.

10. Cụm từ Thông dụng Mở rộng

Bạn thường sẽ thấy rằng các biểu thức chính quy có nguồn gốc từ Grep có một chút hạn chế. Trong hầu hết các tập lệnh và hướng dẫn, bạn sẽ thấy việc sử dụng cờ -E và điều này sẽ cho phép bạn nhập mẫu trong cái được gọi là Chế độ mở rộng.

Đây là lệnh grep và grep -E để tìm các từ Superman và Spiderman.

$nắm chặt ' (Super | Spider ) man'chữ
$nắm chặt -VÀ '(Super | Spider) man'chữ

Như bạn có thể thấy, phiên bản mở rộng dễ đọc hơn nhiều.

11. Grep cho các thùng chứa của bạn

Nếu bạn có một cụm lớn các vùng chứa đang chạy trên máy chủ của mình, bạn có thể ghép chúng theo tên hình ảnh, trạng thái, các cổng mà chúng đang hiển thị và nhiều thuộc tính khác. Ví dụ,

$người đóng tàups | nắm chặt [Tên Hình ảnh]

12. Grep cho nhóm của bạn

Trong khi chúng tôi đang nói về chủ đề của các thùng chứa. Kubernetes thường có xu hướng khởi chạy nhiều nhóm trong một lần triển khai nhất định. Mặc dù mỗi nhóm có một tên duy nhất, trong một không gian tên nhất định, chúng thường bắt đầu bằng tên triển khai. Chúng tôi có thể phân tích điều đó và liệt kê tất cả các nhóm được liên kết với một triển khai nhất định.

$kubectl get pods| nắm chặt <deployName>

13. Nắm bắt dữ liệu lớn

Thông thường, cái gọi là phân tích Dữ liệu lớn liên quan đến việc tìm kiếm, sắp xếp và đếm đơn giản các mẫu trong một tập dữ liệu nhất định. Các tiện ích UNIX cấp thấp như grep, uniq, wc đặc biệt tốt trong việc này. Bài đăng trên blog này cho thấy một ví dụ tuyệt vời về một tác vụ được hoàn thành chỉ trong vài giây bằng cách sử dụng grep và các tiện ích Unix khác trong khi Hadoop mất gần nửa giờ.

Ví dụ: tập dữ liệu này có kích thước hơn 1,7GB. Nó chứa thông tin về vô số trận đấu cờ vua, bao gồm các nước đi được thực hiện, ai thắng, v.v. Chúng tôi chỉ quan tâm đến kết quả nên chúng tôi chạy lệnh sau:

$nắm chặt 'Kết quả'triệu cơ sở-2,22.pgn| loại | uniq -NS
221 [Kết quả'*']
653728 [Kết quả'0-1']
852305 [Kết quả'1-0']
690934 [Kết quả'1 / 2-1 / 2']

Quá trình này mất khoảng 15 giây trên bộ vi xử lý 2 lõi / 4 luồng 4 năm tuổi. Vì vậy, vào lần tiếp theo bạn đang giải quyết một vấn đề dữ liệu lớn. Hãy nghĩ xem bạn có thể sử dụng grep để thay thế không.

14. grep –color = auto

Tùy chọn này cho phép grep đánh dấu mẫu bên trong đường nơi nó được tìm thấy.

15. grep -i

Đối sánh mẫu Grep vốn có phân biệt chữ hoa chữ thường. Nhưng nếu bạn không quan tâm đến điều đó thì việc sử dụng cờ -i sẽ khiến grep không phân biệt chữ hoa chữ thường.

16. grep -n

Cờ -n sẽ hiển thị số dòng, do đó bạn không phải lo lắng về việc tìm kiếm dòng tương tự sau này.

17. git grep

Git, hệ thống điều khiển phiên bản, bản thân nó có một lệnh grep tích hợp hoạt động khá giống như grep thông thường của bạn. Nhưng nó có thể được sử dụng để tìm kiếm các mẫu trên bất kỳ cây đã cam kết nào bằng cách sử dụng git CLI gốc, thay vì các đường ống tẻ nhạt. Ví dụ: nếu bạn đang ở trong nhánh chính của repo của mình, bạn có thể chuyển qua repo bằng cách sử dụng:

(bậc thầy)$git grep <mẫu>

18. grep -o

Cờ -o thực sự hữu ích khi bạn đang cố gắng gỡ lỗi regex. Nó sẽ chỉ in phần phù hợp của dòng, thay vì toàn bộ dòng. Vì vậy, trong trường hợp, bạn nhận được quá nhiều dòng không mong muốn cho một mẫu được cung cấp và bạn không thể hiểu tại sao điều đó lại xảy ra. Bạn có thể sử dụng cờ -o để in chuỗi con vi phạm và lý do về regex của bạn từ đó.

19. grep -x

Cờ -x sẽ in một dòng, nếu và chỉ khi, toàn bộ dòng khớp với regex được cung cấp của bạn. Điều này hơi giống với cờ -w in một dòng nếu và chỉ của một từ khớp với regex được cung cấp.

20. grep -T

Khi xử lý nhật ký và đầu ra từ tập lệnh shell, bạn có nhiều khả năng gặp phải các tab cứng để phân biệt giữa các cột đầu ra khác nhau. Cờ -T sẽ căn chỉnh gọn gàng các tab này để các cột được sắp xếp gọn gàng, giúp con người có thể đọc được đầu ra.

21. grep -q

Điều này sẽ chặn đầu ra và chạy lệnh grep một cách lặng lẽ. Rất hữu ích khi thay thế văn bản hoặc chạy grep trong tập lệnh daemon.

22. grep -P

Những người đã quen với cú pháp biểu thức chính quy perl có thể sử dụng cờ -P để sử dụng chính xác điều đó. Bạn không phải học biểu thức chính quy cơ bản mà grep sử dụng theo mặc định.

23. grep -D [HÀNH ĐỘNG]

Trong Unix, hầu hết mọi thứ đều có thể được coi là một tệp. Do đó, bất kỳ thiết bị, ổ cắm hoặc luồng dữ liệu FIFO nào đều có thể được đưa vào grep. Bạn có thể sử dụng cờ -D theo sau một HÀNH ĐỘNG (hành động mặc định là ĐỌC). Một vài tùy chọn khác là SKIP để bỏ qua các thiết bị cụ thể một cách âm thầm và RECURSE để đi qua đệ quy các thư mục và liên kết tượng trưng.

24. Sự lặp lại

Nếu bạn đang tìm kiếm một mẫu đã cho là sự lặp lại của một mẫu đơn giản đã biết, thì hãy sử dụng dấu ngoặc nhọn để biểu thị số lần lặp lại

$nắm chặt -VÀ [0-9]{10}

Điều này in ra các dòng có chứa các chuỗi dài từ 10 chữ số trở lên.

25. Các lệnh tắt lặp lại

Một số ký tự đặc biệt được dành riêng cho một kiểu lặp lại mẫu cụ thể. Bạn có thể sử dụng chúng thay vì dấu ngoặc nhọn, nếu chúng phù hợp với nhu cầu của bạn.

? : Mẫu trước dấu chấm hỏi phải khớp với 0 hoặc một lần.

*: Dấu sao đứng trước mẫu phải khớp với 0 hoặc nhiều lần.

+: Mẫu trước dấu cộng phải khớp một hoặc nhiều lần.

25. Byte Offsets

Nếu bạn muốn biết xem độ lệch byte của các dòng nơi tìm thấy biểu thức phù hợp, bạn cũng có thể sử dụng cờ -b để in hiệu số. Để in phần bù chỉ của phần khớp của một dòng, bạn có thể sử dụng cờ -b với cờ -o.

$nắm chặt -NS -hoặc <MẪU> [fileName]

Offset có nghĩa đơn giản là, sau bao nhiêu byte kể từ đầu tệp thì chuỗi khớp sẽ bắt đầu.

26. egrep, fgrep và rgerp

Bạn sẽ thường thấy lệnh gọi của egrep, để sử dụng cú pháp biểu thức chính quy mở rộng mà chúng ta đã thảo luận trước đó. Tuy nhiên, đây là cú pháp không được dùng nữa và bạn nên tránh sử dụng cú pháp này. Sử dụng grep -E để thay thế. Tương tự, sử dụng grep -F, thay vì fgrep và grep -r thay vì rgrep.

27. grep -z

Đôi khi đầu vào cho grep không phải là các dòng kết thúc bằng ký tự dòng mới. Ví dụ: nếu bạn đang xử lý danh sách tên tệp, chúng có thể đến từ các nguồn khác nhau. Cờ -z ra lệnh cho grep coi ký tự NULL là phần cuối của dòng. Điều này cho phép bạn coi luồng đến như bất kỳ tệp văn bản thông thường nào.

28. grep -a [fileName]

Cờ -a ra lệnh cho grep xử lý tệp được cung cấp như thể nó là văn bản thông thường. Tệp có thể là một tệp nhị phân, nhưng grep sẽ xử lý nội dung bên trong, như thể chúng là văn bản.

29. grep -U [fileName]

Cờ -U ra lệnh cho grep xử lý các tệp được cung cấp như thể chúng là tệp nhị phân chứ không phải văn bản. Theo mặc định, grep đoán loại tệp bằng cách xem vài byte đầu tiên. Sử dụng cờ này ghi đè đoán hoạt động.

Grep -m NUM

Với các tệp lớn, quá trình ghi xám cho một biểu thức có thể mất vĩnh viễn. Tuy nhiên, nếu bạn chỉ muốn kiểm tra NUM số trận đấu đầu tiên, bạn có thể sử dụng cờ -m để thực hiện việc này. Nó nhanh hơn và đầu ra cũng thường có thể quản lý được.

Phần kết luận

Rất nhiều công việc hàng ngày của một sysadmin liên quan đến việc sàng lọc một loạt văn bản lớn. Đây có thể là nhật ký bảo mật, nhật ký từ máy chủ web hoặc thư của bạn, hoạt động của người dùng hoặc thậm chí là văn bản lớn của các trang nam. Grep cung cấp cho bạn thêm chút linh hoạt khi xử lý các trường hợp sử dụng này.

Hy vọng rằng, một vài ví dụ và trường hợp sử dụng ở trên đã giúp bạn hiểu rõ hơn về hóa thạch sống của một phần mềm.