是否
make install
有一个Makefile大部分时间通话/usr/bin/install
?/usr/bin/install
除了将刚刚编译的文件复制到之外,还需要做哪些必要的工作/usr/bin/local
?手册页显示
/usr/bin/install
复制文件并设置属性。哪些属性设置如此重要?- 是否只是设置了不必要的权限模式和所有者/组?
是否make install
有一个Makefile大部分时间通话/usr/bin/install
?
/usr/bin/install
除了将刚刚编译的文件复制到之外,还需要做哪些必要的工作/usr/bin/local
?
手册页显示/usr/bin/install
复制文件并设置属性。哪些属性设置如此重要?
Answers:
install
除了将文件复制到目录外,还提供了许多功能。
-s
选项从可执行文件中删除符号表,从而节省空间-m
选项设置权限位。位于开发人员目录中的文件是根据其umask创建的,这可能会阻止其他人执行它们。install -m 755 file1 /usr/local/bin
确保每个人都可以执行该文件,这很可能是开发人员想要共享目录中文件的目的。-o
和-g
选项设置所有者和组。使用cp
,目标文件的所有者和组将被设置为运行该文件的人的uid和gid;cp
使用cp -p
,目标文件的所有者和组将与构建目录中的文件相同。是开发人员想要的。该wall
方案需要在组tty
中,screen
程序必须是基团utmp
等。install -s -m 755 -o root -g bin file1 file2 lib/* $(DESTDIR)
比四个命令更简洁cp
,strip
,chmod
,和chown
。最后一个要点可能是为什么install
发明了该命令以及为什么许多makefile使用它。
Install
但是并不总是使用。我已经看到cp -r lib $(DESTDIR)/lib
何时有整棵树要复制的东西,以及./install.sh
开发人员是否喜欢使用自定义脚本。许多软件包都有install.sh
X11附带的软件包的派生,这很像,install
但支持-t
(transform)选项以指定方式重命名目标文件。
由于在makefile中使用什么命令基本上取决于项目开发人员,因此很难在此处给出明确的答案。通常,我会说,install
在makefile中使用命令执行2中提到的任何安装过程是一种很好的做法,但是同样install
不是POSIX,因此始终使用它可能不是最可移植的方法
AFAIK的大多数工具都可以用来自动生成makefile文件,例如automake
和cmake
将要使用的文件install
。
通常install
用于复制文件并在您说的一个命令中设置权限/所有者/组。另一种常用的功能是从不再需要它们的二进制文件中剥离不必要的符号(例如调试符号)。它还提供了一些其他选项,例如在SELinux上下文中安装和工作之前进行备份,这可能会很有用。
选择哪种权限取决于文件本身。大多数人都可以读取大多数已安装的文件,但只能由root用户写入(其想法是将程序文件放在每个人都可以访问但不能篡改的位置)。并非所有情况都如此,如果文件包含敏感数据,通常会限制对组或仅对根用户的访问。