“安装”命令的目的是什么?


49

我已经看到install了很多Makefile文件中使用的命令,它的存在和用法让人感到困惑。从联机帮助页看,它似乎是cp功能较少的仿冒品,但我认为除非它具有的优势,否则不会使用cp。这是怎么回事?

Answers:


50

install不仅可以复制文件,还可以更改其所有权和权限,还可以选择从可执行文件中删除调试符号。它结合了cpchownchmodstrip。这是一个方便的高级工具,可以完成常见的基本任务序列。

installover cp安装可执行文件的一个优点是,如果目标已经存在,它将删除目标文件并创建一个新文件。这消除了任何当前属性,例如访问控制列表和功能,这些属性既可以看作是好的,也可以看作是不利的。更新可执行文件时,如果此可执行文件正在运行,它们将保持运行状态。相反,cp如果存在,则在适当位置更新文件。在大多数Unix变体中,如果目标是正在运行的可执行文件,则失败并显示错误EBUSY¹;在某些情况下,这可能会导致目标崩溃,因为它会动态加载代码段,而修改文件会导致不必要的代码加载。

install是BSD命令(在4.2BSD中添加,即在1980年代初期)。POSIX尚未采用它。

¹ “文本文件忙”。在此上下文中,出于晦涩的历史原因,“文本文件”是指“二进制可执行文件” 。


重要说明(据我所知)是它也rm与结合在一起cp。这意味着它可以通过先取消链接(rm)来覆盖正在使用的文件。cp一个人就会出错。
code_fodder

10

它提供了一种在单个命令中复制文件或创建目录时操纵文件或目录的所有权和权限的标准化方法。


9
这不是原子的。原子意味着没有其他过程可见的中间状态。install先执行复制,然后执行chown和chmod,所有单独的syscall,然后不使用重命名(至少从coreutils 8.13版本开始,不使用GNU版本)。如果您假设这一切都是原子发生的,那么您可能会感到讨厌。

3

使用install命令我们可以复制具有所需权限的文件

设置ldap时最常用的示例

install -o ldap -g ldap /etc/openldap/DB_CONFIG_EXAMPLE  /var/lib/ldap/DB_CONFIG

这可以节省我们的工作chown ldap. /var/lib/ldap/DB_CONFIG,如果您使用复制,cpchown在这种情况下也需要


1

请参见手册页install

$ man install

摘抄

SYNOPSIS
       install [OPTION]... [-T] SOURCE DEST
       install [OPTION]... SOURCE... DIRECTORY
       install [OPTION]... -t DIRECTORY SOURCE...
       install [OPTION]... -d DIRECTORY...


DESCRIPTION
       This  install  program  copies  files  (often just compiled) into 
       destination locations you choose.  If you want to download and
       install a ready-to-use package on a GNU/Linux system, you should instead 
       be using a package manager like yum(1) or apt-get(1).

       In the first three forms, copy SOURCE to DEST or multiple SOURCE(s) to 
       the existing DIRECTORY, while  setting  permission  modes and 
       owner/group.  In the 4th form, create all components of the given 
       DIRECTORY(ies).

       Mandatory arguments to long options are mandatory for short options too.

其他有用的事情,例如具有特定所有权,权限的安装以及保留原始文件的时间戳,也可以通过使用来实现install

   -g, --group=GROUP
          set group ownership, instead of process' current group

   -m, --mode=MODE
          set permission mode (as in chmod), instead of rwxr-xr-x

   -o, --owner=OWNER
          set ownership (super-user only)

   -p, --preserve-timestamps
          apply access/modification times of SOURCE files to corresponding 
          destination files

参考文献


4
正如我在问题中所说的,我阅读了主页。这使我对cp的功能一无所知。
阿塞尼克

slm强调了将两者区分开的特定功能:您可以使用来设置目标文件的特定所有者,组和模式install,而不仅仅是像那样保留现有权限cp
Joshua Miller
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.