Nea*_*iel 79 utilities software-installation file-copy
我在很多地方都看到过用于install -d创建目录和install -c复制文件。为什么不使用mkdir和cp?使用上有优势install吗?
小智 69
这取决于你在做什么。
该install命令通常用于随包和源代码一起提供的安装脚本,用于将二进制文件安装到您的系统。它还可用于安装任何其他文件或目录。除了用于指定要安装的文件的新权限的-d和-c选项外-m,您不必执行 acp和 achmod即可获得相同的结果。例如:
install -m644 "$srcdir/$pkgname-$pkgver-linux64" "$pkgdir/opt/$pkgname"
Run Code Online (Sandbox Code Playgroud)
您还可以选择-g和-o分别设置目标组和所有者。这避免了对 的单独调用chown。通常, usinginstall通过在一个命令而不是多个命令中执行文件创建、复制、模式设置和相关操作来缩短脚本并使其更简洁。
有关参考,请参阅man install。对于使用,只需查看一些包源代码附带的任何安装脚本。
Net*_*tch 26
“安装”通常结合以下操作:
因此,它遵循 Unix 方法,即应该为将某个构建工具制作的文件安装到其工作位置的单一但完整的操作而制作工具。
我所描述的完整概念是在 BSD 系统中实现的(在所谓的“xinstall”版本中);我在这里将“安全复制”模式(具有原子重命名的新版本)视为对此至关重要。Linux 系统(来自 coreutils)错过了这个重要的部分,并且容易被旁观者进程删除和重新打开之间的竞争;但这可能已由包管理器涵盖。
Tom*_*äre 19
除了前面关于用法的描述外,cp和之间存在低级差异install,至少在 Linux 上是这样。如果复制现有文件,则cp覆盖文件的现有 inode,同时install始终为相同的文件名创建新的 inode。
这在安装正在运行的二进制文件的新版本时会有所不同。使用cp会导致 EBUSY 错误,而install会成功。正在运行的二进制文件仍将使用旧版本,但如果重新启动程序,则会使用新版本。
如果有问题的目录已经存在:
install -d 不会尝试设置所有权和文件模式位。mkdir -p 将尝试设置所有权和文件模式位。这是为了install和mkdir来自GNU coreutils。
它们都使用相同的make_dir_parents函数,但preserve_existing参数设置为:
true 为了 install -dfalse 为了 mkdir -p