/ usr / bin / install除了复制外还做什么?


11
  1. 是否make install有一个Makefile大部分时间通话/usr/bin/install

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

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

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

“大多数时候是否使用Makefile进行安装安装,请致电/ usr / bin / install?” 不,它会做任何想要的事情。这是一个目标。您对安装可执行文件有疑问吗?还是关于make?不清楚。
Faheem Mitha 2014年

都。@FaheemMitha
蒂姆

好吧,好吧,1和2是不同的问题,1的答案可能不是,而是定义了“大多数时间”。无论如何,我不确定1。
Faheem Mitha 2014年

Answers:


17

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

  • -s选项从可执行文件中删除符号表,从而节省空间
  • -m选项设置权限位。位于开发人员目录中的文件是根据其umask创建的,这可能会阻止其他人执行它们。install -m 755 file1 /usr/local/bin确保每个人都可以执行该文件,这很可能是开发人员想要共享目录中文件的目的。
  • -o-g选项设置所有者和组。使用cp,目标文件的所有者和组将被设置为运行该文件的人的uid和gid;cp使用cp -p,目标文件的所有者和组将与构建目录中的文件相同。是开发人员想要的。该wall方案需要在组tty中,screen程序必须是基团utmp等。
  • 它减少了需要放在makefile配方中的命令数量。install -s -m 755 -o root -g bin file1 file2 lib/* $(DESTDIR)比四个命令更简洁cpstripchmod,和chown

最后一个要点可能是为什么install发明了该命令以及为什么许多makefile使用它。

Install但是并不总是使用。我已经看到cp -r lib $(DESTDIR)/lib何时有整棵树要复制的东西,以及./install.sh开发人员是否喜欢使用自定义脚本。许多软件包都有install.shX11附带的软件包的派生,这很像,install但支持-t(transform)选项以指定方式重命名目标文件。


2
  1. 由于在makefile中使用什么命令基本上取决于项目开发人员,因此很难在此处给出明确的答案。通常,我会说,install在makefile中使用命令执行2中提到的任何安装过程是一种很好的做法,但是同样install不是POSIX,因此始终使用它可能不是最可移植的方法

    AFAIK的大多数工具都可以用来自动生成makefile文件,例如automakecmake将要使用的文件install

  2. 通常install用于复制文件并在您说的一个命令中设置权限/所有者/组。另一种常用的功能是从不再需要它们的二进制文件中剥离不必要的符号(例如调试符号)。它还提供了一些其他选项,例如在SELinux上下文中安装和工作之前进行备份,这可能会很有用。

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

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.