![“make install”和“sudo make install”之间的区别](https://linux22.com/image/17947/%E2%80%9Cmake%20install%E2%80%9D%E5%92%8C%E2%80%9Csudo%20make%20install%E2%80%9D%E4%B9%8B%E9%97%B4%E7%9A%84%E5%8C%BA%E5%88%AB.png)
有时我会遇到使用问题,这会在写入某些文件夹时make install
出现错误。permission denied
所以我本能地使用sudo make install
.这会带来额外的问题吗?
我正在使用 Debian Etch。
答案1
避免将本地安装放入系统目录中。系统目录例如/usr
是保留给包管理系统使用的。根据定义,如果您这样做,则make install
意味着您正在进行本地安装,如果您需要这样做,则sudo make install
意味着您没有权限访问您正在编写的任何位置。
因此,如果您遇到权限错误make install
,请检查并查看您是否正在尝试安装到系统目录中,然后安装到/usr/local
或类似的目录中。/usr/local
保留用于本地安装。您可能需要授予自己写入权限/usr/local
,但这通常很容易完成。在 Debian 上,这可以通过将您自己添加到组中来完成staff
。更好的是,找到或创建一个二进制包,然后安装它。这样您就可以轻松跟踪已安装的软件包并获得软件包管理的其他好处。
/usr/local
请注意,根据 FHS,包管理系统相反不会安装到 中。看Debian 政策手册第 9.1 节 - 文件系统层次结构以获得概述。
答案2
正如上面已经回答的那样,sudo make install
允许您将文件安装在对用户来说是只读的目录中。
我可以预见的问题是,稍后您可能想要卸载或升级该程序。如果您仍然拥有源代码目录树,那么 amake uninstall
将为您卸载该程序,但如果像许多其他典型用户一样,您已经删除了源代码目录树,那么您就不走运了。由于您没有使用包管理系统安装该程序,因此您可能也无法通过这种方式卸载该程序。
安装此类程序的最佳方法可能是将它们安装在您的主目录中。将选项传递--prefix=/home/<user>/<some>/<directory>
给./configure
.这将允许您使用make install
而不是sudo make install
因为/home/<user>/<some>/<directory>
您可以写入。卸载也很简单——rm -rf /home/<user>/<some>/<directory>
答案3
以下是问题命令的基本概要:
- sudo - 以 root 身份运行命令
- make-运行脚本以从源代码构建
由于 sudo 命令运行您以 root 身份传递的命令,这意味着 make 命令具有超级用户权限。这意味着如果 makefile 是恶意的,或者它可能调用的任何脚本是恶意的,那么它可能会危害您的系统。
简而言之,如果您不信任该软件,请不要安装它。如果您信任该软件,那么以 root 身份运行应该不会有任何损害。
笔记:
sudo make install
su; make install
与大多数情况相同。