/usr/bin/install 除了复制之外还有什么作用?

/usr/bin/install 除了复制之外还有什么作用?
  1. make install大部分时间都是用Makefile调用吗/usr/bin/install

  2. /usr/bin/install除了将刚刚编译好的文件复制到 之外还需要做哪些必要的工作呢/usr/bin/local

  3. 手册页显示/usr/bin/install复制文件并设置属性。设置哪些属性如此重要?

  4. 它是否只是设置了不必要的权限模式和所有者/组?

答案1

install除了将文件复制到目录之外,还提供了许多功能。

  • -s选项从可执行文件中删除符号表,节省空间
  • -m选项设置权限位。开发人员目录中的文件是根据其 umask 创建的,这可能会阻止其他人执行这些文件。install -m 755 file1 /usr/local/bin确保每个人都可以执行该文件,这可能是开发人员希望共享目录中的文件所具有的功能。
  • -o选项-g设置所有者和组。使用 时cp,目标文件的所有者和组将设置为运行该命令的用户的 uid 和 gid cp,并且使用 时cp -p,目标文件的所有者和组将与构建目录中的文件相同,两者都不会成为开发商想要的。节目wall需要分组ttyscreen节目需要分组utmp,等等。
  • 它减少了需要放入 makefile 配方中的命令数量。比、、和install -s -m 755 -o root -g bin file1 file2 lib/* $(DESTDIR)四个命令更简洁。cpstripchmodchown

最后一个要点可能是install发明该命令的原因以及许多 makefile 使用它的原因。

Install但并不总是被使用。我见过cp -r lib $(DESTDIR)/lib有一整棵树需要复制的东西,以及./install.sh开发人员是否更喜欢使用自定义脚本。许多软件包都派生install.sh自 X11 附带的软件包,它类似于install但支持-t(转换)选项以指定的方式重命名目标文件。

答案2

  1. 由于 makefile 中使用哪些命令基本上取决于项目开发人员,因此这里很难给出明确的答案。一般来说,我想说,install对于 2 中提到的任何安装过程,在 makefile 中使用该命令是一种很好的做法,但话又说回来,install它不是 POSIX,所以总是使用它可能不是最可移植的方法

    AFAIK 大多数工具都可以用来自动生成 makefile,例如automakecmakewill use install.

  2. 通常install用于复制文件并在一个命令中设置权限/所有者/组,就像您所说的那样。另一种常用的功能是从不再需要的二进制文件中删除不必要的符号(例如调试符号)。它还提供了一些额外的选项,例如在安装之前进行备份并在 SELinux 环境中工作,这可能很有用。

选择哪些权限取决于文件本身。大多数安装的文件是每个人都可读的,但只能由 root 写入(这个想法是将程序文件放在每个人都可以访问但不能被篡改的地方)。并非所有情况都是如此,如果文件包含敏感数据,那么通常会限制对组或根用户的访问。

相关内容