Nếu tôi đang đọc tệp được lưu trữ trên hệ thống tệp NTFS và tôi cố gắng di chuyển/đổi tên tệp đó trong khi tệp vẫn đang được đọc, tôi bị ngăn không cho làm như vậy. Nếu tôi thử điều này trên một hệ thống tập tin UNIX như EXT3, nó thành công, và quá trình đọc không bị ảnh hưởng. Tôi thậm chí có thể rm các tập tin và đọc các quy trình không bị ảnh hưởng. Cái này hoạt động ra sao? Ai đó có thể giải thích cho tôi lý do tại sao hành vi này được hỗ trợ theo hệ thống tập tin UNIX nhưng không phải NTFS? Tôi có một cảm giác mơ hồ nó phải làm với các liên kết cứng và inodes, nhưng tôi sẽ đánh giá cao một lời giải thích tốt.Làm thế nào để các lệnh UNIX mv và rm hoạt động với các tệp mở?
Trả lời
hệ thống tập tin Unix sử dụng tính tham khảo và một kiến trúc hai lớp để tìm các tệp.
Tên tệp đề cập đến tên gọi là inode, cho nút thông tin hoặc nút chỉ mục. Các cửa hàng inode (một con trỏ đến) các nội dung tập tin cũng như một số siêu dữ liệu, chẳng hạn như loại tập tin (bình thường, thư mục, thiết bị, vv) và những người sở hữu nó.
Nhiều tên tệp có thể tham chiếu đến cùng một inode; chúng được gọi là hard links. Ngoài ra, file descriptor (fd) đề cập đến một inode. Một fd là kiểu đối tượng mà một tiến trình nhận được khi nó mở một tệp.
Tệp trong hệ thống tệp Unix chỉ biến mất khi tham chiếu cuối cùng bị mất, vì vậy khi không có thêm tên (liên kết cứng) hoặc tham chiếu của fd. Vì vậy, rm
không thực sự xóa tệp; nó xóa một tham chiếu thành một tệp.
Thiết lập hệ thống tệp này có vẻ khó hiểu và đôi khi gây ra sự cố (đặc biệt là với NFS), nhưng có lợi ích là không cần thiết phải khóa cho nhiều ứng dụng. Nhiều chương trình Unix cũng sử dụng tình huống này bằng lợi thế của chúng bằng cách mở một tệp tạm thời và xóa nó ngay sau đó. Ngay sau khi chúng kết thúc, ngay cả khi chúng bị hỏng, tệp tạm thời sẽ biến mất.
Trên unix, tên tệp chỉ đơn giản là liên kết đến tệp thực tế (inode). Việc mở tệp cũng tạo liên kết (tạm thời) cho tệp thực. Khi tất cả các liên kết đến một tệp đã biến mất (rm và close()) thì tệp sẽ bị xóa.
Trên NTFS, logic tên tệp là tệp. Không có lớp hướng dẫn nào từ tên tệp đến tệp metainfo, chúng là cùng một đối tượng. Nếu bạn mở nó, nó đang được sử dụng và không thể được gỡ bỏ, cũng giống như các tập tin thực tế (inode) trên unix không thể được gỡ bỏ trong khi nó đang được sử dụng.
Unix: Tên tập tin -> FileInfo -> tập tin dữ liệu
NTFS: FileName/FileInfo -> tập tin dữ liệu
- 1. Làm thế nào để loại bỏ một thư mục khi thực hiện các hoạt động tập tin tức cp, mv, rm và chown vv trong Linux
- 2. Lệnh 'ls' hoạt động như thế nào trong Linux/Unix?
- 3. Làm thế nào để đệm PCap unix hoạt động?
- 4. Unix: Làm thế nào để xóa các tập tin được liệt kê trong một tập tin
- 5. Làm thế nào để sử dụng lệnh 'mv' để di chuyển các tệp ngoại trừ các tệp trong một thư mục cụ thể?
- 6. Làm cách nào để tập lệnh được mở đầu bằng #!/Bin/rm xóa chính nó?
- 7. Làm cho các tập lệnh Python hoạt động với xargs
- 8. Unix và tee - chuỗi các lệnh
- 9. Có thư viện Java nào hoạt động trên các tệp cấu hình unix như http.conf
- 10. AIX (vs) Các lệnh Unix
- 11. rsync tương đương mv lệnh
- 12. Làm thế nào để lệnh pydoc hoạt động trong Windows?
- 13. Làm thế nào để liệt kê các kết nối đang hoạt động/mở trong Oracle?
- 14. Làm thế nào để ngăn chặn PyCharm tự động đóng các tệp đã mở?
- 15. Chỉ xóa các tệp của tôi trong Unix
- 16. phân lớp đối tượng tệp (để mở rộng các hoạt động mở và đóng) trong python 3
- 17. c makefile với các lệnh shell và các biến
- 18. Lệnh Diff để so sánh các tệp trên các máy chủ khác nhau - Unix
- 19. Lệnh Unix để tìm kiếm chuỗi văn bản trong tất cả các tệp
- 20. Làm thế nào lệnh unix định vị vẫn hiển thị các tệp/thư mục không còn nữa?
- 21. Làm thế nào để làm cho bytecode OCaml hoạt động trên Windows và Linux
- 22. Hoạt động nguyên tử di động UNIX
- 23. làm thế nào để giết các hoạt động phụ và mang lại hoạt động để đầu ngăn xếp
- 24. Không thể git rm với các ký tự đặc biệt
- 25. Unix FIFO đang hoạt động?
- 26. Chính xác thì các tệp DLL là gì và chúng hoạt động như thế nào?
- 27. Tìm Unix: Cách so khớp các tệp * .R và * Rd?
- 28. tệp .RGS hoạt động như thế nào
- 29. Làm thế nào để mô-đun mở rộng SWIG của tôi hoạt động với Pickle?
- 30. Làm thế nào để kích hoạt luân phiên các tệp nhật ký cho celeryd với djcelery?
Có bất kỳ giới hạn nào đối với nơi tôi có thể di chuyển tệp mở không? Ví dụ. chỉ trong cùng một hệ thống tập tin? –
@ivan_pozdeev thực hiện 'mv' trên một tệp trên các hệ thống tệp khác nhau thực sự sao chép dữ liệu và xóa tệp gốc, trong trường hợp này, nó tương tự như' rm' của tệp đang mở. – dsonck92