Tôi đang làm việc trên công cụ đồng bộ hóa tệp dựa trên Perl. Nó tải các tập tin vào một thư mục tạm thời (được bảo đảm trên cùng một hệ thống tập tin như các tập tin thực) và sau đó di chuyển các tập tin tạm thời vào vị trí cũ, bảo quản siêu dữ liệu như quyền, quyền sở hữu và ACL. Tôi đang tự hỏi làm thế nào để đạt được bước cuối cùng trên Linux.Tệp nguyên tử lưu trên Linux mà không làm mất siêu dữ liệu
Trên Mac OS X, ít nhất là trong C, tôi sẽ sử dụng chức năng exchangedata
. Điều này có hai tên tập tin như là đối số và hoán đổi nội dung của chúng, để lại tất cả các siêu dữ liệu (bên cạnh mtime) nguyên vẹn. Nó đảm bảo rằng hoạt động này là nguyên tử - tất cả người đọc sẽ thấy tệp cũ hoặc tệp mới, không bao giờ có gì đó ở giữa. Thật không may, tôi không nghĩ rằng nó có sẵn trên Linux.
Tôi biết rằng rename
di chuyển nguyên tử, nhưng không bảo toàn siêu dữ liệu. Mặt khác, tôi có thể mở tệp và ghi đè lên dữ liệu với nội dung của tệp mới, sẽ giữ lại tất cả siêu dữ liệu nhưng sẽ không phải là một hoạt động nguyên tử. Bất kỳ đề xuất nào về giải quyết vấn đề này?
Loại siêu dữ liệu nào bạn đang nỗ lực làm việc để bảo tồn? Tất cả có trong Unix là chủ sở hữu/nhóm và quyền cho chủ sở hữu/nhóm/tất cả mọi người. Điều đó có thay đổi quá nhiều đến mức nó sẽ là một vấn đề cho bạn? –
Nhiều hệ thống tệp Linux cũng hỗ trợ các thuộc tính mở rộng và ACL và người dùng không có đặc quyền có thể không có quyền cần thiết để thay đổi người dùng và nhóm của tệp tạm thời thành nhóm cũ. Về cơ bản, có rất nhiều tinh tế tham gia ở đây, và tôi tự hỏi nếu một cái gì đó đã tồn tại để xử lý nó. –