install -c
和之间有什么区别cp
?大多数安装倾向于使用install -c
,但从man
页面上看,它似乎与 没有什么不同cp
(除了可能还可以设置权限)。我什么时候应该使用install -c
,什么时候应该使用cp
?
答案1
一个显著的区别是 cp 截断目标文件并开始将数据从源复制到目标文件。
另一方面,安装会首先删除目标文件。
这很重要,因为如果目标文件已在使用中,那么如果您cp
在目标文件上新建一个文件,则可能会对使用该文件的任何人造成不良影响。例如,覆盖正在运行的可执行文件可能会失败。截断现有进程正在读取/写入的数据文件可能会导致非常奇怪的行为。如果您只是先删除目标文件(如安装时所做的那样),事情会像往常一样继续 - 被删除的文件实际上不会被删除,直到所有进程都关闭该文件。
答案2
install -c
从技术上讲,和之间的区别cp
在于install
将目标文件的权限设置为rwxr-xr-x
。 保留源文件的权限减去 umask。这些默认行为在不同情况下很有用。显然,随着和现在提供的cp
所有选项,功能已经融合。cp
install
如今,install
在 makefile 中和其他地方都普遍使用cp
。这种区别有时很有用,因为某些操作系统或安装系统允许您挂接到install
程序中以注册已安装的软件包。现代软件包管理系统使这种做法过时了,但有些人仍在使用它。此外,在同一次操作中设置目标文件权限的可能性非常方便。
答案3
该install
实用程序本质上是一个花哨的cp
。但作为一款专门执行安装的工具,它包含一些cp
不具备的功能。我的/usr/bin/install
GNU coreutils 不仅可以复制,还可以将权限/所有权更改为 arg 标志(保存chgrp
、调用) chown
,chmod
一个剥离调试信息的选项(保存strip
调用),以及一些用于 SELinux 上下文的 mojo。
它只是提供对软件安装有用的便利操作。没有什么能改变生活,但都是有用的,并使您的脚本更简洁。