it-swarm-vi.com

Làm thế nào để tham số "đuôi" của lệnh "đuôi" hoạt động?

$ tail -f testfile

lệnh được cho là hiển thị các mục mới nhất trong tệp được chỉ định, theo thời gian thực phải không? Nhưng điều đó không xảy ra. Xin hãy sửa cho tôi, nếu những gì tôi dự định làm là sai ...

Tôi đã tạo một tập tin mới "aaa" và thêm một dòng văn bản và đóng nó. sau đó ban hành lệnh này (dòng đầu tiên):

$ tail -f aaa
xxx
xxa
axx

ba dòng cuối cùng là nội dung của tệp aaa. Bây giờ lệnh vẫn đang chạy (vì tôi đã sử dụng -f), Tôi đã mở tệp aaa qua GUI và bắt đầu thêm một vài dòng theo cách thủ công. Nhưng thiết bị đầu cuối không hiển thị các dòng mới được thêm vào trong tệp.

Có chuyện gì ở đây vậy? Các tail -f Lệnh chỉ hiển thị các mục mới nếu chúng chỉ được viết bởi hệ thống? (như tệp nhật ký, v.v.)

62
its_me

Từ tail(1)trang man :

   With  --follow  (-f),  tail  defaults to following the file descriptor,
   which means that even if a tail’ed file is renamed, tail will  continue
   to  track  its  end.   This  default behavior is not desirable when you
   really want to track the actual name of the file, not the file descrip-
   tor (e.g., log rotation).  Use --follow=name in that case.  That causes
   tail to track the named file  in  a  way  that  accommodates  renaming,
   removal and creation.

Trình chỉnh sửa văn bản của bạn đang đổi tên hoặc xóa tệp gốc và lưu tệp mới dưới cùng tên tệp. Sử dụng -F thay thế.

66

Trình chỉnh sửa của bạn có bộ đệm riêng cho tệp. Khi bạn sửa đổi văn bản trong trình chỉnh sửa, không có gì được ghi vào chính tệp đó.

Khi bạn lưu các thay đổi của mình, rất có thể trình soạn thảo chỉ cần xóa tệp cũ và tạo một tệp mới. tail -f vẫn sẽ được kết nối với tệp đã bị xóa, vì vậy nó sẽ không hiển thị bất cứ điều gì mới.

11
Stéphane Gimenez

tail "làm mới" mỗi 1 giây theo mặc định, không phải thời gian thực.

Hãy thử với điều này (bạn cần bash4):

  • Mở 2 thiết bị đầu cuối.
  • Trong thiết bị đầu cuối thực hiện touch ~/output.txttail -f ~/output.txt.
  • Trong thiết bị đầu cuối thứ hai thực hiện for i in {0..100}; do sleep 2; echo $i >> ~/output.txt ; done
  • Nhìn vào đầu ra của đuôi trong thiết bị đầu cuối.
4
Rufo El Magufo