Câu trả lời:
Một sự khác biệt đáng kể là cp cắt ngắn tệp đích và bắt đầu sao chép dữ liệu từ nguồn vào tệp đích.
cài đặt, mặt khác, loại bỏ các tập tin đích đầu tiên.
Điều này rất quan trọng vì nếu tệp đích đã được sử dụng, những điều xấu có thể xảy ra với bất kỳ ai đang sử dụng tệp đó trong trường hợp bạn cp
có tệp mới ở trên tệp. ví dụ ghi đè một tệp thực thi đang chạy có thể thất bại. Cắt bớt một tệp dữ liệu mà một quy trình hiện có đang bận đọc / ghi có thể gây ra hành vi khá kỳ lạ. Nếu bạn chỉ xóa tệp đích trước, như cài đặt, mọi thứ sẽ tiếp tục như bình thường - tệp bị xóa thực sự không bị xóa cho đến khi tất cả các quy trình đóng tệp đó.
Về mặt kỹ thuật, sự khác biệt giữa install -c
và cp
là install
đặt quyền của tệp đích rwxr-xr-x
. cp
duy trì các quyền của tệp nguồn trừ ô. Những hành vi mặc định này rất hữu ích trong các tình huống khác nhau. Rõ ràng, với tất cả các tùy chọn mà cả hai cp
và install
cung cấp ngày nay, các chức năng đã hội tụ.
Ngày nay, install
thường được sử dụng trong makefiles, cp
ở mọi nơi khác. Sự khác biệt này đôi khi hữu ích vì một số hệ điều hành hoặc hệ thống cài đặt cho phép bạn nối vào install
chương trình để đăng ký các gói đã cài đặt. Các hệ thống quản lý gói hiện đại làm cho loại này trở nên lỗi thời, nhưng một số người vẫn sử dụng nó. Ngoài ra, khả năng thiết lập quyền truy cập tệp mục tiêu trong cùng một lần là rất thuận tiện.
Các install
tiện ích, tại cơ sở của nó, là một lạ mắt cp
. Nhưng như một công cụ đặc biệt cài đặt, nó chứa một vài tính năng cp
không có. My /usr/bin/install
từ coreutils GNU không chỉ bản, nhưng cũng có thể thay đổi perms / quyền sở hữu như cờ arg (tiết kiệm chgrp
, chown
, chmod
lời gọi) một tùy chọn để thông tin dải debug (tiết kiệm một strip
invocation) và cũng có một số mojo cho bối cảnh SELinux.
Nó chỉ cung cấp các hành động tiện lợi hữu ích cho việc cài đặt phần mềm. Không có gì thay đổi cuộc sống, tất cả đều hữu ích và làm cho tập lệnh của bạn sạch hơn.
cp --remove-destination
trong lõi GNU.