Di chuyển một tập tin trong khi nó đang được sử dụng - Nó hoạt động như thế nào?


31

Tôi đã nhận thấy rằng trên hệ điều hành không có windows .... tức là linux / mac tôi có thể thực hiện những việc như: - Gửi zip cho một người bạn qua mục đích - Xóa tệp trong khi nó đang được chuyển

Và việc chuyển tiền không thất bại.

Hoặc, tôi có thể thực hiện các thao tác như .. - khởi động phim - xóa tệp - phim vẫn phát đến khi hoàn thành (đọc từ đĩa, không chỉ được đệm trong bộ nhớ)

Mặc dù các tệp đang bị "xóa", như tôi đã đề cập, chúng thực sự đang được chuyển đến một vị trí khác trên hệ thống tệp ... tức là thư mục Thùng rác hoặc thứ gì đó. Vì vậy, có vẻ như hệ điều hành sử dụng một con trỏ @ tệp được cập nhật khi nó di chuyển thay vì truy cập trực tiếp vào các tệp.

Bất cứ ai cũng có thể làm sáng tỏ về cách thực hiện khả năng TUYỆT VỜI này? Tôi thậm chí không chắc chắn những gì để google để tìm hiểu thêm về nó.

cảm ơn bạn.


1
Theo lý thuyết tôi cho rằng có 2 cách nó có thể xảy ra. Cả hai đều là thực tế. Các tập tin trong bộ nhớ. Hoặc hệ thống tệp có tham chiếu đến các tệp và chỉ tham chiếu bị xóa. Cả hai đều là thực tế. Thực tế tham khảo là làm thế nào các chương trình phục hồi có thể phục hồi mọi thứ. Ý tưởng rằng tập tin thực sự bị xóa khi tất cả các chương trình kết thúc nó, nghe có vẻ vô nghĩa. Bạn có thể tra cứu về các danh sách được liên kết (một cấu trúc dữ liệu lập trình, để hiểu khái niệm sâu hơn). Hoặc bạn có thể tra cứu về các hệ thống tập tin cụ thể.
barlop

Câu trả lời:


29

Mục nhập thư mục chỉ là một con trỏ đến một nút. Inode chứa thông tin meta về tệp (trừ tên) và con trỏ tới dữ liệu của tệp (nếu có). Khi bạn bắt đầu sao chép một tập tin, bạn có một tay cầm vào nút.

Hệ điều hành duy trì một số lượng các tham chiếu đến inode. Miễn là có các tham chiếu đến nút, dữ liệu của tệp và tệp được giữ. Khi tất cả các tham chiếu đến nút được loại bỏ, nút đó là và khoảng trống theo yêu cầu của tệp được giải phóng.

Khi bạn mở tệp để sao chép, nó sẽ được giữ cho đến khi quá trình của bạn đóng tệp. Điều này sẽ xảy ra khi quá trình truyền tệp kết thúc và sẽ xảy ra nếu quá trình sao chép thất bại. Nếu quá trình truyền tệp thất bại một phần và bạn đã xóa tất cả các liên kết cứng đến tệp, bạn sẽ không thể khởi động lại chuyển thành công.

EDIT: Như những người khác đã lưu ý, việc di chuyển tệp trên cùng một thiết bị được thực hiện mà không cần di chuyển dữ liệu. Thay vào đó, một mục nhập thư mục mới được tạo trong thư mục đích và mục nhập thư mục gốc sẽ bị xóa.

Có thể có nhiều mục nhập thư mục cho cùng một tệp. Chúng được gọi là liên kết cứng. Chúng được tạo bằng cách tạo một mục nhập thư mục mới cho tệp mà không xóa mục nhập gốc. Inode của hệ thống tệp có số tham chiếu để ghi lại số lượng mục nhập thư mục trỏ đến tệp.

EDIT2: Nếu quá trình gặp sự cố hoặc bị giết, tập tin sẽ được xóa sạch vì số lượng truy cập trong bộ nhớ sẽ giảm xuống không. Đây là hành động xảy ra khi chương trình kết thúc bình thường.

Trong trường hợp mất điện hoặc tắt hệ thống không theo thứ tự khác, đĩa sẽ cần fsck(kiểm tra hệ thống tệp) trước khi có thể được gắn hoàn toàn. Tùy thuộc vào trạng thái của cấu trúc thư mục và inode trên đĩa, không gian sẽ được phục hồi, tệp sẽ vẫn còn trong thư mục hoặc một mục nhập mới sẽ được thực hiện trong lost+foundthư mục. Kết quả sẽ phụ thuộc vào những thay đổi đã được xóa vào đĩa hoặc ghi vào tạp chí hệ thống tệp.


5
Chính xác. Tôi không thể đặt nó tốt hơn bản thân mình. Ngẫu nhiên, một mẹo phổ biến, nếu bạn cần một số lưu trữ tệp cào trong một chương trình, là tạo một tệp trong đó /tmpvà ngay lập tức unlink(2). Tại thời điểm đó, không có tệp nào trong một thư mục (vì vậy không có gì để dọn dẹp khi thoát hoặc gặp sự cố), nhưng quá trình của bạn vẫn có quyền truy cập vào tệp và không có quá trình nào khác có thể vô tình hoặc cố tình gây rối với nó. Điều đó minh họa tài sản quan tâm.
Norman Gray

Điều này có nghĩa là nếu một tệp đang mở bị xóa trong khi chương trình đang sử dụng và xảy ra mất điện, dữ liệu bị mắc kẹt sẽ vẫn còn trên ổ chiếm dung lượng? Điều gì về nếu quá trình sử dụng tập tin gặp sự cố hoặc bị giết?
Jason C

1
@JasonC Tôi đã cập nhật câu trả lời để trả lời câu hỏi của bạn.
BillThor

6

Theo giải thích của Matt Jenkins, HĐH (hệ thống tệp) theo dõi các tệp được mở bởi các ứng dụng. Miễn là một quá trình giữ một tệp mở, dữ liệu của nó vẫn ở trên đĩa (mặc dù nó đã bị xóa và không còn hiển thị hoặc có thể truy cập được đối với các chương trình khác.

Lưu ý rằng hậu quả của việc này là không gian bị chiếm bởi một tệp chỉ có thể được lấy lại sau khi quá trình cuối cùng sử dụng nó đã đóng nó. Đó là Câu hỏi thường gặp cho các hoạt động của hệ thống tệp Linux / Unix: Lệnh "'df" cho biết phân vùng đã đầy, trong khi' du 'báo cáo không gian trống "(xem ví dụ: http://batleth.sapienti-sat.org/projects/FAQs/ext3- faq.html ). Nếu bạn cần giải phóng dung lượng, không đủ để xóa các tệp lớn (ví dụ: logfiles), bạn cũng phải đảm bảo không có quá trình nào giữ chúng mở (thường là sự cố với logfiles).


Không đúng trong trường hợp OS X / HFS +: Bạn có thể di chuyển các tệp, ví dụ như vào Thùng rác, nhưng không qua các phân vùng hoặc xóa chúng (tức là làm sạch Thùng rác).
Daniel Beck

2

Thật ra nó khá đơn giản. Tệp duy trì một danh sách các tài liệu tham khảo - các quá trình đang truy cập tệp. Khi bạn xóa tệp, nó chỉ xóa danh sách khỏi thư mục chứ không xóa tệp. Các chương trình vẫn mở tệp vẫn có thể truy cập được. Các tập tin chỉ thực sự bị xóa khi tất cả các chương trình đang truy cập nó đóng nó.

Ngoài ra, với việc di chuyển tệp - nếu nó nằm trong cùng một hệ thống tệp - thì tệp không thực sự di chuyển như vậy, nó chỉ thay đổi con trỏ đến thư mục mà tệp nằm trong.


"Tập tin duy trì một danh sách các tài liệu tham khảo"?
Daniel Beck

Không phải là "OS hoặc Explorer" không phải tệp.
Moab

2
Đó thực sự sẽ là hệ thống tập tin.
JRobert

HĐH sử dụng hệ thống tệp để lưu trữ các tham chiếu trong tệp (nlinks trong cấu trúc tiêu đề tệp) - ở đó - tất cả chúng tôi đều hạnh phúc;)
Majenko

1
"Tài liệu tham khảo" là cả hai quá trình có xử lý mở đối với tệp và các liên kết cứng (bao gồm tên tệp đầu tiên) đến tệp. Các khối dữ liệu không được đánh dấu miễn phí và có sẵn để sử dụng lại cho đến khi số tham chiếu về không.
mpez0

0

Trong các hệ thống tệp unix, một tệp có thể có một hoặc nhiều liên kết cứng đến nó. Các tập tin sống miễn là có ít nhất một. Khi cái cuối cùng bị xóa, không gian của tệp sẽ được giải phóng. liên kết ở trên sẽ cung cấp cho bạn một điểm bắt đầu để đọc nhiều hơn - đặc biệt là phần "Bộ đếm liên kết".


1
Đúng, nhưng đó không phải là những gì đang xảy ra ở đây. Vấn đề là ngay cả sau khi loại bỏ liên kết cứng cuối cùng , tệp vẫn tồn tại cho đến khi tất cả các pocess đã đóng tay cầm của chúng với chúng.
sleske
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.