NỘI DUNG
Tiếp theo nội dung Phần 6: Bộ 3 nguyên tử text editor nano/vi/vim và cách buff damage với skill so sánh nội dung file bằng comm/diff, kỳ này tôi sẽ chuyển sang một vấn đề “nhức nhối” đó là giám sát hệ thống và file. Ngoài nhân vật nam chính của show diễn hôm nay là tail command, tôi cũng sẽ đề cập 2 thằng có quan hệ họ hàng với nó là head và watch.
#1 Khởi động với các chiêu cơ bản của tail
Về cơ bản tail command cho phép hiển thị thông tin ở phần cuối của file giúp bạn có thể xem nhanh “phần kết” của các file có nội dung dài lê thê kiểu như series “Cô dâu 8 tuổi”. Tail command xử lý file với định dạng plain text. Với đám sử dụng binary format như system log file, bạn sẽ cần thứ khác kiểu như journactl.
Lưu ý: Tôi có giới thiệu journactl trong nội dung Phần 4: Quản lý process, thu thập thông tin hệ thống, log và phần cứng
Cú pháp tổng quát của tail có dạng:
tail [option] [filename]
Lưu ý: Tôi để ngắn gọn là filename nhưng thực tế có thể bạn phải cung cấp thêm thông tin đường dẫn tương ứng nếu file cần xử lý không phải ở thư mục hiện hành.
Khi chạy mặc định, tail sẽ in ra 10 dòng cuối cùng của file. Nếu muốn hiệu chỉnh giá trị này bạn có thể dùng option “-n” để quy định số dòng hiển thị với cú pháp:
tail -n number_of lines filename
Nếu muốn ngắn gọn hơn, bạn có thể dùng “–“ thay cho “-n” với cú pháp:
tail -number_of_lines filename
Nếu muốn xử lý nhiều file cùng lúc, bạn có thể dùng cú pháp:
tail -n number_of_lines filename1 filename2 filename3
Lúc này bạn sẽ thấy có một dòng header tương ứng tên cho từng file (nếu muốn tắt nó đi thì bạn dùng thêm option “-q”)
Trường hợp nếu quan tâm đến một vị trí cụ thể trong file thay vị đoạn kết, bạn có thể sử dụng dấu “+” theo cú pháp:
tail +line_number filename
Lúc này tail sẽ hiển thị thông tin từ dòng line_number. Tuy nhiên, với chiêu này, khi đụng mấy file lớn thì thông tin sẽ rất dài và khó đọc. Bạn có thể kết hợp với less command thông qua việc sử dụng piping để dễ đọc thông tin hơn.
tail +line_number filename | less
Lưu ý: Tôi có đề cập piping trong nội dung Phần 5: Nâng cấp kỹ năng tìm kiếm trên Linux với grep command
Ngoài ra, nếu không muốn dùng line_number, bạn có thể chơi trội với option “-c” tương ứng dạng bytes với cú pháp:
tail -c number_of_bytes file
Lúc này tail sẽ hiện thị phần dữ liệu có dung lượng number_of_bytes cuối cùng của file
Lưu ý: cái này thường dùng với các file có kích thước xác định, chứ dạng kích thước lung tung thì rất khó kiểm soát khi dùng
#2 Các combo giám sát hệ thống và file đầy uy lực với tail
Ngoài việc piping từ tail sang less để xem thông tin như tôi đề cập ở phần trên, bạn có thể piping từ mấy thằng khác vào tail để tạo ra nhiều combo bẩn bựa có sức sát thương cao như sau.
#2.1 Combo xử lý với ls command
Trước hết, bạn có thể nâng cấp trình xử lý ls command quen thuộc với tail như ví dụ sau.
ls -tl | tail -3
Với combo này, bạn sẽ nhanh chóng định vị thông tin 3 file/folder có thời gian hiệu chỉnh cũ nhất (thông qua option -t của ls).
#2.2 Combo xử lý với ps và sort command để giám sát process
Tiếp tục, bạn có thể kết hợp với ps command để xác định thông tin của các process (tiến trình) cụ thể. Tôi ví dụ với:
ps aux | sort -nk +4 | tail -3
Để tôi tua lại và thuyết minh về cái combo nói trên cho bạn dễ hình dung.
Đầu tiên, ps là command hiển thị thông tin về process tôi có giới thiệu trong Phần 4: Quản lý process, thu thập thông tin hệ thống, log và phần cứng. Ở đây nó dùng thêm 3 option:
- –a: liệt kê tất cả proccess (kể cả không phải của user hiện hành);
- –u: hiện thị output thân thiện người dùng;
- –x: liệt kê tất cả process bao gồm luôn đám không chạy trong TTY. TTY là viết tắt của teletypewriter. Câu chuyện về thằng này trong phiên bản chi tiết sẽ rất dài nên tôi không đề cập ở đây. Về cơ bản TTY command sẽ in ra filename của cái terminal kết nối đến standard input, nếu không xác định được filename (ví dụ như trường hợp command chạy với piping hoặc là một phần của script), nó sẽ hiển thị kết quả là “not a tty” ra stdout – standard output (Vâng tôi biết, cái đoạn giải thích này làm bạn ức chế vì còn phọt ra thêm cả đống thứ rắc rối khác nhưng thôi tạm thời bạn cứ nhắm mắt làm ngơ để tập trung nhiệm vụ chính – là thằng tail đi).
Kế tiếp, sort là command để sắp xếp thông tin output (của thằng ps trong ví dụ trên). Ở đây nó dùng 2 option:
- –n: sắp xếp theo dạng numerically (số học);
- –k+4: sắp xếp theo cột thứ 4 (tương ứng cột %MEM – memory)
Tiếp tục, kết quả của thằng sort sau đó được đẩy qua tail (với piping) để hiện thị 3 process ngốn memory nhất.
#2.3 Combo giám sát log file theo thời gian thực
Do đặc tính hiển thị thông tin ở phần cuối của file nên tail đặc biệt hữu ích khi cần giám sát thông tin cập nhật vào file theo thời gian thực (ví dụ xem log file của các ứng dụng). Để thực hiện mưu đồ này, bạn sẽ cần sử dụng option “-f” (follow) để cho phép hiển thị thông tin liên tục dạng stream và cập nhật cho đến khi bạn ngắt command với Ctr + C.
Ngoài ra, option “-s” cũng hay dùng chung với “-f” để xác định sleep interval, nghĩa là quy định khoảng thời gian tail dừng việc hiển thị thông tin cập nhật để “ngủ”. Cú pháp sử dụng sẽ có dạng như sau:
tail -f -s sleep_interval_in_seconds filename
Thực tế combo này sẽ rất hữu dụng trong các tình huống như giám sát log file của ứng dụng trên web server để xác định khả năng hệ thống có đang bị tấn công khai thác hay không. Tuy nhiên, cái này cần phải sắp xếp dàn cảnh hơi rối rắm nên trong bài này tôi xin minh họa với ví dụ đơn giản sau cho dễ hình dung (Tôi sẽ quay lại minh họa chủ đề dàn cảnh nói trên trong một diễn biến khác ngay khi có ngữ cảnh phù hợp).
sudo tail -f /var/log/vmware-network.log
Ngoài ra, bạn có thể cho nó phọt ra thông tin cô đọng súc tích hơn bằng cách piping rồi kết hợp với mấy thằng như grep để lọc ra nội dung liên quan đến từ khóa mà bạn quan tâm.
Lưu ý: tôi đề cập thằng grep chi tiết trong nội dung Phần 5: Nâng cấp kỹ năng tìm kiếm trên Linux với grep command
#3 Đám họ hàng head và watch của tail
#3.1 Bà con gần head command
Head cho phép hiển thị thông các dòng đầu tiên của file (mặc định cũng là 10). Nhìn chung nó cũng tương tựu như tail tuy nhiên có một điểm khác biệt quan trọng là head không có option “-f” do bản chất các file sẽ tiếp tục sinh sôi nảy nở từ phần cuối chứ không phải phần đầu. Cú pháp của head cũng tương tự:
head option filename
Option phổ biến nhất là “-n” cho phép bạn hiệu chỉnh số dòng hiển thị tương tự như tail. Ngoài ra, nếu muốn bạn có thể kết hợp cả 2 thằng head và tail lại để trích xuất nhanh thông tin từ các vị trí cần quan tâm với ví dụ
head -n 15 /etc/passwd | tail -n 5
Tuy nhiên, cần lưu ý bạn có một giải pháp ngon hơn cho tình huống trên với sed như tôi đề cập trong nội dung Phần 5: Nâng cấp kỹ năng tìm kiếm trên Linux với grep command.
#3.2 Họ hàng xa watch command
Nói thiệt tình thì watch và tail có họ hàng mịa gì đâu. Tôi cho nó nhận vơ vào là vì 2 thằng này có bản chất có thể kết hợp với các command khác (như ps) để hỗ trợ giám sát hệ thống mà thôi. Nhìn chung, watch command được dùng để chạy định kỳ một command cụ thể. Mặc định thì nó chạy sau mỗi 2 giây tuy nhiên bạn có thể chỉ định giá trị khác với option “-n” với cú pháp:
watch -n second_number command
Để tắt watch và lấy lại quyền kiểm soát terminal bạn dùng tổ hợp Ctrl + C.
Như tôi nói trên, thằng watch này cũng có thể kết hợp với ps như tail để định kỳ ton hót cho bạn biết các thông tin quan trọng về hệ thống ví dụ đám process nào đang ngốn CPU nhiều nhất với minh họa sau:
watch -n 1 'ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head'
Lưu ý, trong ví dụ trên ps hiển thị static info, nếu muốn xem output cập nhật thường xuyên thì bạn cần chuyển sang dùng các tool khác như htop/top. Cái đám này tôi xin phép đề cập trong một nội dung khác. Còn nội dung kỳ này tôi xin dừng ở đây.
2 thoughts on “Giải ngố Kali Linux – Phần 7: Nâng cấp kỹ năng giám sát hệ thống và file với tail command”