Có an toàn để mở một tập tin đang được viết bởi một tập lệnh đang chạy không?


20

Tôi đang chạy một kịch bản shell đang ghi vào một tập tin.
Kịch bản này có thể mất nhiều thời gian để hoàn thành và tôi muốn theo dõi đầu ra một phần thay vì chờ toàn bộ tập lệnh hoàn tất.

Có an toàn để mở (nhấp đúp chuột) một tập tin đang được viết bởi tập lệnh không?


4
Cái đó. Ngoài ra nếu bạn biết trước, bạn chỉ có thể dẫn đầu ra các tập lệnh qua tee.
Hennes

1
Semi liên quan là lệnh tee: bạn có thể chuyển tiếp đầu ra đến một số tệp và đến thiết bị đầu cuối cùng một lúc: man7.org/linux/man-pages/man1/tee.1.html
Cheiron

Câu trả lời:


42

Đọc tệp là an toàn, mặc dù nhấp đúp vào bạn đã đề cập có thể sẽ mở tệp trong một số trình chỉnh sửa sẽ cung cấp cho bạn một tùy chọn để thực hiện thay đổi và lưu chúng. Missclicks xảy ra, vì vậy tôi khuyên bạn nên các lệnh thậm chí không cho phép bạn thay đổi tệp.

Đây là những ví dụ hoạt động trong thiết bị đầu cuối; họ sẽ chỉ đọc tệp:

cat file
less file
less +F file
tail -n 5 file
tail -f file

4
Rất nhiều trình soạn thảo tệp thông minh hơn sẽ cảnh báo bạn rằng tệp đã bị thay đổi và hỏi bạn có muốn tải lại không, nhưng các biên tập viên câm có thể không.
dùng1306322

5
@ user1306322 Điều đó vẫn không được đảm bảo an toàn. Juts vì tệp được mở để viết không có nghĩa là nó được ghi liên tục. Nếu không có gì được viết trong khi trình soạn thảo đang chạy thì nó sẽ không thông báo. Và vì một biên tập viên có thể viết một tệp mới và đổi tên trên đầu (vì đổi tên là nguyên tử), nên tệp được ghi vào đó sẽ bị xóa. Đầu ra được viết từ thời điểm đó trở đi sẽ chuyển đến một tệp bị xóa.
kasperd

13

Miễn là bạn không viết thư cho nó, nó sẽ ổn thôi.

Tuy nhiên, tôi khuyên bạn nên sử dụng

tail -f log_file

trong một nhà ga khác.

Lệnh này sẽ "theo dõi" tệp log_filevà viết nội dung mới được thêm ngay sau khi tập lệnh được cập nhật.


1

Không đủ đại diện để thêm nhận xét cho câu trả lời của Kamil Maciorowski:

Đối với một số tệp bạn sẽ muốn tail -F fileđể những điều sau đây sẽ tiếp tục thông qua một vòng quay. Xem syslog chẳng hạn.


-1

Trong trường hợp tập lệnh (hoặc triển khai khung bên dưới) liên tục mở và đóng xử lý tệp trong quá trình làm việc, nó có thể gặp lỗi vi phạm chia sẻ trong chế độ ghi tiếp theo mở vì các lý do sau:
1) Tập lệnh có thể yêu cầu ghi truy cập trong chế độ độc quyền (không bao gồm quyền truy cập đọc đồng thời), vì vậy nếu chương trình trình chỉnh sửa / xem tệp của bạn thậm chí chỉ đọc tệp, nó có thể gây ra lỗi trong tập lệnh ghi.
2) Ngoài ra, một số trình chỉnh sửa tệp / người xem khóa tệp trong toàn bộ thời gian họ mở tệp.

Tóm lại, có những vấn đề có thể phụ thuộc vào chương trình bạn đang sử dụng để xem tệp. Và có những vấn đề có thể phát sinh từ việc triển khai (hoặc khung cơ bản) của tập lệnh ghi vào tệp.


1
Theo kinh nghiệm của tôi, điều này rất không phổ biến trong Linux (lưu ý: Tôi là người dùng gia đình). Tôi biết vấn đề không tồn tại trong Windows, câu hỏi được gắn thẻ linux . "Trình soạn thảo / người xem" nào hoạt động như thế này trong Linux? Trong những hương vị của Linux là khóa bắt buộc?
Kamil Maciorowski

@KamilMaciorowski Thật không may, tôi không có danh sách cảnh báo cụ thể. Khóa không bắt buộc ở bất cứ đâu (không phải trong Windows), một số người chỉ sử dụng chúng. Tôi chỉ nói rằng vấn đề như vậy là có thể và xin vui lòng không sử dụng phương pháp này một cách bất cẩn trong các tình huống quan trọng. Tùy thuộc vào OP để quyết định xem điều này có áp dụng hay không hoặc nó có quan trọng không. Sự tồn tại đơn thuần của câu hỏi trên làm tăng tỷ lệ cược rằng hiện tượng như vậy đã xảy ra đối với OP. Câu trả lời cho rằng không có gì có thể xảy ra, cũng không cung cấp nhiều thông tin mới.
Roland Pihlakas

1
@RolandPihlakas Tôi sẵn sàng đặt cược câu trả lời này của tác giả đã trải nghiệm nó - nhưng chỉ trên Windows. Vì vậy, nó không liên quan đến các hệ thống tuân thủ POSIX như Linux, trong đó giám sát đầu ra thông qua tail -fhoặc less +Flà thông lệ.
Chromatix

@Chromatix Tôi thật sự bối rối về xây dựng một phần của lý luận của bạn và không thấy loại đề nghị hoặc thông tin mới được bạn cung cấp ở đây, bên cạnh ghét cá nhân của bạn cho Windows ... Bạn đã không trả lời các điểm trong nhận xét của tôi ở tất cả . Tại sao bạn quan tâm những gì tôi đã trải nghiệm? Xin đừng nhận cá nhân.
Roland Pihlakas

@RolandPihlakas Bởi vì câu trả lời của bạn mang lại ấn tượng rất chắc chắn rằng việc mở một tệp chỉ đọc là nguy hiểm trên Linux, khi nó thực sự không. Trên thực tế, luôn luôn an toàn khi đọc một tệp được thêm vào, miễn là bạn không cho rằng "cuối tệp" có nghĩa là "kết thúc hồ sơ" hoặc "cuối dòng". Trường hợp duy nhất khi nó bị lỗi là khi ứng dụng viết giữ "khóa bắt buộc" mà rất ít ứng dụng thực hiện (khóa POSIX tiêu chuẩn là "khóa tư vấn") và sẽ dẫn đến lỗi được xác định rõ, thay vào đó hơn hành vi thất thường.
Chromatix
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.