Tại sao MV (1) sao chép các đối tượng nếu quyền di chuyển bị từ chối?


7

mvhành động như cp(1)thể cho phép quá trình di chuyển bị từ chối?

Nếu vậy, nó không trái với quy tắc làm một điều và làm nó tốt?

Câu trả lời:


14

Câu trả lời ngắn gọn là nó không.

mv được định nghĩa là:

thực hiện các hành động tương đương với rename()chức năng

rename()không sao chép nội dung, nó chỉ đổi tên nó trên đĩa. Đó là một hoạt động nguyên tử hoàn toàn không bao giờ thất bại hoàn thành một phần.

Điều đó không nói lên toàn bộ câu chuyện, tuy nhiên. Trường hợp hiệu ứng này có thể xảy ra là khi cố gắng di chuyển tệp giữa các thiết bị: trong trường hợp đó, không thể thực hiện đổi tên trong hệ thống tệp. Để có tác dụng di chuyển, mvđầu tiên sao chép nguồn vào đích và sau đó xóa nguồn. Trong thực tế, mv /mnt/a/X /mnt/b/Yvề cơ bản là tương đương với cp /mnt/a/X /mnt/b/Y && rm /mnt/a/X. Đó là cách duy nhất để di chuyển tập tin giữa các thiết bị có thể hoạt động.

Khi mvkhông có quyền xóa tệp nguồn đó, một lỗi sẽ được báo cáo, nhưng tại thời điểm đó, bản sao đã xảy ra. Không thể tránh điều đó bằng cách kiểm tra các quyền trước vì các điều kiện chủng tộc có thể xảy ra khi các quyền thay đổi trong quá trình vận hành.

Thực sự không có cách nào để ngăn chặn tình huống có thể xảy ra này, ngoài việc không thể di chuyển các tệp giữa các thiết bị. Sự lựa chọn cho phép mvgiữa bất kỳ nguồn và đích nào làm cho mọi thứ đơn giản hơn trong trường hợp chung, với chi phí cho hành vi kỳ quặc (nhưng không phá hủy) trong những trường hợp bất thường này.

Đây cũng là lý do tại sao việc di chuyển một tệp lớn trong một thiết bị nhanh hơn nhiều so với việc di chuyển nó sang thiết bị khác.

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.