Một vài lưu ý khi sử dụng Shell Script (phần 3)
Bài đăng này đã không được cập nhật trong 8 năm
Phần trước: Một vài lưu ý khi sử dụng Shell Script (phần 2)
III. Hãy ngừng việc sử dụng tail -f
Tôi thấy có rất nhiều người sử dụng tail -f
để monitor những files hay có sự thay đổi, thường là các log files. Nếu bạn là một trong số họ, tôi muốn suggest cho bạn một cách khác tốt hơn: đó là việc sử dụng less +F
.
Documentation về less
có giải thích rất chi tiết về option +F
như sau:
Scroll forward, and keep trying to read when the end of file is reached.
Về cơ bản, câu lệnh này đc sử dụng để monitor phần cuối của file, qua đó thấy được những thay đổi được ghi mới. Xử lý trên tương tự như tail -f
, vậy điểm tốt hơn là ở đâu?
Chúng ta hãy đi đến một ví dụ đơn giản: phát sinh yêu cầu cần tìm kiếm vài thứ trong file, hoặc đơn giản chỉ là cuộn lên hay xuống nội dung của file, mà file đó đang được theo dõi bởi tail -f
. Khi đó, chúng ta phải thoát tail
, hoặc mở một shell mới, rồi thực hiện ack
file đó, hay mở với vim
để tìm kiếm. Sau đó, chúng ta lại phải chạy tail
một lần nữa để tiếp tục monitor file. Thật là phiền hà, và less
có thể giải quyết vấn đề này.
less
cho phép bạn chuyển đổi giữa navigation mode và watching mode.
Ví dụ, khi chúng ta cần giám sát file production.log:
$ less +F production.log
Important
log
information
here
Waiting for data... (interrupt to abort)
Trông thì có vẻ giống với tail
. Tuy nhiên, khi bạn muốn tìm kiếm foo trong file, bạn có thể Ctrl-c
chuyển sang normal mode để sử dụng tất cả các tính năng bình thường khác của less
, bao gồm cả search. Bạn cũng có thể di chuyển đến các kết quả search trước hoặc sau bằng phím tắt n
và N
, đánh dấu với m
v.vv..
Sau tất cả các thao tác trên, chỉ cần đơn giản nhấn F
để quay lại watching mode.
Khi nào không nên sử dụng less
Khi bạn cần theo dõi nhiều files một lúc, tail -f
cho bạn output tốt hơn nhiều.
$ tail -f *.txt
==> file1.txt <==
content for first file
==> file2.txt <==
content for second file
==> file3.txt <==
content for third file
Khi có thay đổi, file name và nội dung thay đổi sẽ được in ra màn hình, khá là thuận tiện.
Với less
thì khác, kết quả output sẽ như sau:
$ less +F *.txt
content for first file
Trong một thời điểm, less
chỉ hiển thị nội dung của một file duy nhất. Nếu bạn muốn biết điều gì đang xảy ra với file thứ hai, bạn phải Ctrl-c
để chuyển về normal mode, sau đó gõ :n
để chuyển đến buffer tiếp theo, và F
để quay trở lại watching mode.
Tuỳ vào mong muốn của bạn để lựa chọn sử dụng less
hay tail
. Trong trường hợp phải theo dõi nhiều files, bạn vẫn có thể sử dụng less
, nhưng tôi thì thường lựa chọn tail
hơn.
Source: Stop using tail -f (mostly)
All rights reserved