install -c 与 cp 有何不同

install -c 与 cp 有何不同

install -c和之间有什么区别cp?大多数安装倾向于使用install -c,但从man页面上看,它似乎与 没有什么不同cp(除了可能还可以设置权限)。我什么时候应该使用install -c,什么时候应该使用cp

答案1

一个显著的区别是 cp 截断目标文件并开始将数据从源复制到目标文件。

另一方面,安装会首先删除目标文件。

这很重要,因为如果目标文件已在使用中,那么如果您cp在目标文件上新建一个文件,则可能会对使用该文件的任何人造成不良影响。例如,覆盖正在运行的可执行文件可能会失败。截断现有进程正在读取/写入的数据文件可能会导致非常奇怪的行为。如果您只是先删除目标文件(如安装时所做的那样),事情会像往常一样继续 - 被删除的文件实际上不会被删除,直到所有进程都关闭该文件。

答案2

install -c从技术上讲,和之间的区别cp在于install将目标文件的权限设置为rwxr-xr-x。 保留源文件的权限减去 umask。这些默认行为在不同情况下很有用。显然,随着和现在提供的cp所有选项,功能已经融合。cpinstall

如今,install在 makefile 中和其他地方都普遍使用cp。这种区别有时很有用,因为某些操作系统或安装系统允许您挂接到install程序中以注册已安装的软件包。现代软件包管理系统使这种做法过时了,但有些人仍在使用它。此外,在同一次操作中设置目标文件权限的可能性非常方便。

答案3

install实用程序本质上是一个花哨的cp。但作为一款专门执行安装的工具,它包含一些cp不具备的功能。我的/usr/bin/installGNU coreutils 不仅可以复制,还可以将权限/所有权更改为 arg 标志(保存chgrp、调用) chownchmod一个剥离调试信息的选项(保存strip调用),以及一些用于 SELinux 上下文的 mojo。

它只是提供对软件安装有用的便利操作。没有什么能改变生活,但都是有用的,并使您的脚本更简洁。

相关内容