“ make install”和“ sudo make install”之间的区别


15

有时我在使用时遇到问题,make installpermission denied在写入某些文件夹时给我一个错误。所以我本能地使用sudo make install。这会带来其他问题吗?

我正在使用Debian Etch。

Answers:


16

避免在系统目录中进行本地安装。系统目录(例如/usr)保留给包管理系统使用。根据定义,如果您执行make install此操作意味着您要进行本地安装,而如果需要执行sudo make install此操作则意味着您无权访问任何编写位置。

因此,如果通过遇到权限错误make install,请检查并查看是否要尝试安装到系统目录中,然后/usr/local改为安装到或类似目录中。/usr/local保留用于本地安装。您可能需要授予自己写权限/usr/local,但这通常很容易做到。在Debian上,可以通过将自己添加到staff组中来完成。更好的是,找到或创建一个二进制软件包,然后安装它。这样,您可以轻松跟踪已安装的软件包并获得软件包管理的其他好处。

请注意,相反/usr/local,根据FHS,软件包管理系统未安装到该软件包中。有关概述,请参见Debian策略手册-文件系统层次结构的9.1节


3

这是一个基本的命令问题清单:

  • 以root身份运行命令
  • 运行脚本以从源代码构建

由于sudo命令运行命令,因此您以root身份传递该命令,这意味着make命令具有超级用户特权。这意味着,如果makefile是恶意的,或者它可能调用的任何脚本是恶意的,那么它可能会危害您的系统。

简而言之,如果您不信任该软件,请不要安装它。如果您信任该软件,那么以root身份运行不会对您造成任何伤害。

注意:

sudo make installsu; make install大多数情况下相同。


3
您在“大多数情况下”是正确的。是一个特例。
ederag

3

如上所述,sudo make install您可以将文件安装在目录中,否则该目录对于用户是只读的。

我可以预见的问题是,以后您可能要卸载或升级该程序。如果您仍然具有源代码目录树,则a make uninstall将为您卸载程序,但是,如果像许多其他典型用户一样,您已删除了源代码目录树,那么您很不走运。并且由于您尚未使用程序包管理系统安装该程序,因此您可能也无法以这种方式卸载该程序。

安装此类程序的最佳方法可能是将其安装在主目录中。将选项传递--prefix=/home/<user>/<some>/<directory>./configure。这将使您可以使用,make install而不是sudo make install因为它/home/<user>/<some>/<directory>是可写的。卸载也很容易-rm -rf /home/<user>/<some>/<directory>

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.