Di chuyển tệp đến một tệp đang được đọc


10

Khi một tệp được di chuyển và tệp đích đã tồn tại và hiện đang được đọc, liệu thao tác có thành công? Nó có phụ thuộc vào thời gian thao tác đọc trên tệp đích kéo dài không?

Câu trả lời:


9

Thao tác đọc sẽ thành công, bất kể thời gian cần thiết để hoàn thành thao tác đọc.

Tại sao và làm thế nào để làm việc này?

Khi hoạt động đọc bắt đầu, Inode của tệp được sử dụng như một phần xử lý mà nội dung của tệp được đọc.

Khi di chuyển tệp khác sang tệp đích, kết quả sẽ là một nút mới, có nghĩa là nội dung vật lý của tệp trên đĩa sẽ được đặt ở một nơi khác và nội dung gốc của tệp đang đọc sẽ không được chạm vào.

Điểm chung duy nhất họ có là đường dẫn / tên tệp của họ, trong khi vị trí inode và phyrypt nằm bên dưới đĩa thay đổi.

Khi thao tác đọc kết thúc (không có quy trình nào khác vẫn có xử lý tệp mở trên tệp cũ và không có liên kết cứng nào tham chiếu inode của nó), dữ liệu cũ sẽ bị loại bỏ.

Sau khi hoàn thành thao tác di chuyển, tệp sẽ có số chỉ mục inode mới.

Bạn có thể hiển thị số tập tin inode số bằng cách sử dụng ls -i /tmp/some-file.

Vì lý do tương tự như được mô tả ở trên, có thể xóa các tệp vẫn được sử dụng bởi một ứng dụng, vì các ứng dụng sử dụng tệp sẽ chỉ đọc từ inode (chỉ vào nội dung tệp thực tế trên đĩa) trong khi tham chiếu tệp trong hệ thống tập tin bị xóa.


1
Bạn đã quên đề cập đến các liên kết cứng: Khi thao tác đọc kết thúc, nếu nút đó được liên kết từ một mục nhập thư mục khác, thì dữ liệu sẽ không bị xóa (vì nó vẫn có tên).
cjm

Cảm ơn đã chỉ ra rằng, chỉnh sửa câu trả lời của tôi và thêm nó.
Elias Probst
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.