Mấy hôm nay dính vài vấn đề với hệ thống nên phải tra log và xử lý text, nhân tiện ghi chép lại mấy cái lệnh hữu ích chia sẽ với mọi người.

Grep

Thường thì “grep” được dùng để tìm kiếm text trong file, rất hay được dùng khi kiểm tra log hoặc tập tin văn bản.

$ grep 'keyword' /var/log/path.log

Một số tuỳ chọn hữu ích

$ grep -A 5 -B 6 --color 'keyword' /var/log/path.log

Lệnh trên sẽ làm nổi bật keyword bằng màu sắc với --color, và -A 5hiển thị 5 dòng sau (A: After) dòng có chứa keyword, tương tự với -B 6 là hiển thị 6 dòng trước (B: Before) dòng có chứa keyword, nếu dùng -C 7 thì nghĩa là trước 7 dòng và sau 7 dòng.

Kết hợp wc

Chúng ta sẽ kết hợp với wc (wordcount) để đếm số dòng, số byte, số ký tự mà chúng ta cần

$ grep 'keyword' /var/log/path.log | wc -l

Với lệnh trên, thì sẽ đếm xem có bao nhiêu dòng chứa keyword, hoặc thay thế tuỳ chọn -l bằng -m sẽ đếm xem có bao nhiêu ký tự, hoặc -c sẽ đếm byte, thường dùng nhất vẫn chỉ có -l.

Kết hợp awk

$ cat access.log | awk '{print $1}'

Nâng cao thêm 1 chút bằng printf

$ cat access.log | awk '{printf ("Nội dung là %s %s", $1, $2)}'

Ứng dụng vào việc tìm IP có số lượng gởi yêu cầu vào máy chủ nhiều nhất

$ cat access.log | awk '{print $1}' | | sort -nr | head -20

Giả sử $1 ở đây là IP (file log thông thường của server), thì lệnh awk sẽ lấy danh sách IP, và được sắp xếp và lấy duy nhất không trùng lặp bằng lệnh sort -n | uniq -c sau đó sắp xếp đảo ngược với sort -nr và kết thúc là lấy 20 kết quả đầu tiên bằng head -20

Tìm kiếm tập tin, thư mục bằng Find

Lệnh find cũng ít khi sử dụng, nhưng tầm quan trọng và tính hữu dụng thì rất cao.

find -type f -name ‘*.log’ -mtime +15

Câu lệnh trên cơ bản tìm trong thư mục hiện hành tất cả các tập tin có đuôi .log với thời gian cập nhật mtime hơn 15 ngày (+15) hoặc có thể tìm theo thời gian tạo bằng ctime

Lệnh này được sử dụng khi cần xoá các tập tin khi dung lượng ổ cứng bị đầy, hoặc là cần lập lịch tự động xoá file backup sau 15 ngày chẳng hạn.

Kết hợp xoá tập tin

find -type f -name ‘*.log’ -mtime +15 -exec rm {} \;

hoặc

find -type f -name ‘*.log’ -mtime +15 | xargs rm

Tìm thư mục có dung lượng cao

du -h | sort -hr | head -5

Câu lệnh trên cho phép tìm 5 thư mục có dung lượng cao nhất trong thư mục hiện hành, nếu ta thêm --max-depth=1 thì lệnh chỉ giới hạn ở thư mục con cấp 1.

Fullstack Station Tips

Có hằng hà sa số câu lệnh cần thiết, nhưng mấy lệnh này mình hay sử dụng nhất. Từ các lệnh cơ bản này, bạn có thể xem phần help của mỗi lệnh để có thêm tuỳ chọn.

Comments