12/08/2018, 15:34

Có nên dùng tails -f để đọc file log?

Less +F Trước đây mỗi khi cần theo dõi log trên server tôi thường dùng command: $ tail -f <tên file> và tôi tin chắc rằng cũng không ít người làm như tôi. Chuyện sẽ không có gì đáng nói cho đến một lần tôi sử dụng tail -f để theo dõi log production và admin của server khuyến cáo tôi ...

Less +F

Trước đây mỗi khi cần theo dõi log trên server tôi thường dùng command:

$ tail -f <tên file>

và tôi tin chắc rằng cũng không ít người làm như tôi. Chuyện sẽ không có gì đáng nói cho đến một lần tôi sử dụng tail -f để theo dõi log production và admin của server khuyến cáo tôi không nên sử dụng tail -f mà nên sử dụng:

$ less +F <tên file>

Tại sao lại là less +F mà không phải tail -f. Và đây là câu trả lời.

Trong document của lệnh less có giải thích rõ ý nghĩa của +F như sau:

"Scroll forward, and keep trying to read when the end of file is reached. Normally this command would be used when already at the end of the file. It is a way to monitor the tail of a file which is growing while it is being viewed. (The behavior is similar to the “tail -f” command.)"

Tạm dịch là:

"Cuộn về phía trước, cố gắng đọc đến kết thúc của file. Thông thường, lệnh này được sử dụng cho file có kết thúc cụ thể. Đây cũng là cách để theo dõi kết thúc của một file vẫn đang được ghi tiếp khi mà đang xem nó. (Hành vi tương tự với lệnh "tail -f.)"

Document có nói giống với tail -f, vậy tại sao tôi lại nghĩ nó hơn?

Đơn giản là less +F cho phép bạn chuyển đổi giữa chế độ điều hướng và chế độ xem. Tất cả những gì chúng ta muốn có đều ở đó. Thử tưởng tượng bạn đang sử dụng tail -f và bạn lại muốn tìm kiếm 1 cái gì đó trong tệp này hoặc đơn giản chỉ là điều hướng lên hoặc xuống, bạn sẽ phải thoát khỏi tail hoặc mở 1 tab mới để có thể sử dụng vim chặng hạn để tìm kiếm những gì bạn muốn, Sau đó bạn lại phải chạy lại tail hoặc chuyển sang tab đang chạy tail. Với less +F thì bạn ko cần phải làm như vậy.

Giả sử bạn muốn xem file production.log

$ less +F production.log

Important
log
information
here

Waiting for data... (interrupt to abort)

Đây là hành động giống với tail -f. Bây giờ chúng ta sẽ nói sẽ nói về sự khác biệt, giả sử bạn muốn search từ "foo" trong file production.log bạn chỉ cần dùng "Ctrl + C" để chuyển về trạng thái mở file bình thường (Chế độ mặc đinh của less, không có option +F). Và lúc này bạn có thể làm mọi thứ như less thông thường như search /foo, sự xuất hiện trước đó hoặc sau đó với n và N, lên xuống với j và k,... Khi bạn xong thì chỉ cần bấm F để quay lại mode theo dõi thay đổi.

Khi nào thì dùng tail -f

Less khá tốt trong trường hợp trên nhưng không có nghĩa là nó tốt trong mọi trường hợp. Khi bạn muốn mở nhiều file cùng 1 lúc thì tail -f lại cho bạn trải nghiệm tốt hơn nhiều. Ví dụ như sau:

$ tail -f *.txt

==> file1.txt <==
content for first file

==> file2.txt <==
content for second file

==> file3.txt <==
content for third file

Khi một thay đổi xảy ra, nó in tên tập tin và nội dung mới, khá tiện dụng phải không?

Với less +F thì đây là kết quả ta thu được:

$ less +F *.txt

content for first file

Nó sẽ chỉ hiển thị thay đổi ở file đầu tiên, nếu bạn muốn xem điều gì xảy ra ở file thứ 2 thì bạn cần dùng Ctrl+C để trở ra mode view thông thường và dùng :n để xem file tiếp theo.

Tùy theo nhu cầu của bạn, less vẫn có thể dùng với nhiều tập tin nhưng tôi nghĩ tail -f sẽ tốt hơn. Điều quan trọng là biết các công cụ mà ta có sẵn một cách hiệu quả nhất.

0