仅对于您所需的软件,请使用主目录而不是/usr/local
。
无需更改所有权/usr/local
或在不需要时不必以root用户身份运行命令,您只需配置构建,使其安装在主目录中即可/usr/local
。这解决了更改所有权的所有潜在问题/usr/local
,包括其bin
和sbin
子目录root
的路径。
如果确实需要允许其他用户运行您的软件,则可以授予他们访问权限。实际上,它们可能已经可以了,因为默认情况下,您的主目录具有允许的读取和执行访问权限。(如果您不希望这样做,则可以很容易地对其进行更改,只需使用chmod
要私有化的任何文件或目录,还可以更改您的umask
。)
在主目录中安装了软件之后,本应进入的二进制文件/usr/local/bin
将进入。您将获得主目录的其他子目录,这些子目录与您安装的软件所需的子目录相对应。当您从源代码安装软件时,这通常会自动发生。/home/username/bin
/usr/local
配置构建
您从源代码构建的大多数软件都有一个运行步骤:
./configure
对于大多数带有configure
可像这样运行的脚本的软件,默认情况下,/usr/local
当最终运行sudo make install
安装版本时,默认配置为在内部安装该版本。原因是它隐式等效于运行:
./configure --prefix=/usr/local
要在您的主目录中配置要安装的构建,请改用以下命令:
./configure --prefix="$HOME"
实际上,在Ubuntu中,主目录路径不包含空格,其他空格或其他将由shell特殊对待的字符,例如*
,因此,除非您对用户帐户进行了非常奇怪的设置,否则只需键入:
./configure --prefix=$HOME
(不过,我不建议养成编写脚本的习惯。而且,在其他某些OS(例如macOS)上,用户主目录路径中包含空格的情况也很少见。)
或者,如果您愿意,可以键入完整的主目录路径:
./configure --prefix=/home/username
(username
当然,请用您的实际用户名替换。如果由于某种原因您的主目录不在其中,/home
则必须进行相应的调整。)
安装构建
运行之后make
,您可能已经习惯了运行sudo make install
,但是当您在自己的主目录中安装时,不需要以root用户身份运行它,因此可以-并且应该-省略sudo
。赶紧跑:
make install
同样,对于支持uninstall
目标的软件:
make uninstall
这正是您要的...,只是在您的主目录中/usr/local
。
运行程序
bin
您的主目录的子目录可能是:
- 已经在您的中
$PATH
,或
$PATH
如果您只是注销并重新登录,它将在您的手中。
原因是.profile
您的主目录中的文件包含登录时运行的命令,默认情况下,该文件包含在大多数 Ubuntu 版本中创建的用户帐户(包括在安装OS时创建的初始管理员帐户)的文件:
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
该代码在您登录时运行(因为它在中.profile
),并且仅在当时存在您的个人bin
目录$PATH
时才将其放置在其中。这就是为什么您可能需要注销然后重新登录。
随之而来的是较旧的版本,如Ubuntu 14.04,以及较新的版本,如Ubuntu 17.10。但是,Ubuntu 16.04可能是本文撰写时最受欢迎的版本,它具有以下功能:
# set PATH so it includes user's private bin directories
PATH="$HOME/bin:$HOME/.local/bin:$PATH"
只需将bin
主目录的.local/bin
子目录(以及子目录)添加到$PATH
,而不检查这些目录是否确实存在。因此,如果您使用16.04,或者从创建用户帐户时从 16.04的系统升级,则bin
主目录的子目录可能已经在您的中$PATH
。
您的.profile
文件从复制/etc/skel
创建用户帐户时,目录。如果您的用户帐户是在较旧的Ubuntu版本上创建的,则该版本具有的版本.profile
,并且对于您的用户帐户,它并没有通过升级到最新版本进行更改。
一旦bin
您的主目录的子目录位于您的目录中$PATH
,您就可以运行其可执行文件已安装在其中的程序,只需键入它们的名称即可,就像使用Ubuntu的软件包管理器安装的程序或安装在其中的程序一样/usr/local
。
该.local
选项
您可能已经注意到,.profile
在某些Ubuntu版本(包括如上所述的16.04)中创建的用户帐户的默认文件不仅会添加$HOME/bin
路径,还会添加$HOME/.local/bin
。如果您.profile
没有添加,但是想要添加,则只需对其进行编辑。
尽管通常用于存储设置和缓存的数据,但是您也可以.local
在主目录的子目录中安装软件。你应该感到不羁这样做,因为从可用性和安全性的角度来看,--prefix="$HOME/.local"
是类似--prefix="$HOME"
。
请记住,.
默认情况下,以图形开头的文件和目录在图形文件浏览器中(使用Ctrl+ H取消隐藏和重新隐藏)或通过ls
命令(通过-A
或-a
标志显示)都不会显示。这可能不是您想要的,或者可能正是您想要的。这是个人喜好问题。
但是,我已经观察到某些在源代码的基础上自动构建和安装软件的基于源的自动化软件包管理器$HOME/.local
。我实际上不知道这有多普遍-我希望进一步调查并更新此答案-但您可能更喜欢仅将其$HOME
用于手动编译的东西。这样,就可以清楚地知道事情是从哪里来的。而且,如果发生冲突,该软件仍然可以共存。
您也可以故意在中安装某些软件,$HOME/.local
并在中另外安装其他软件$HOME
。由你决定。如果环境变量中第一个bin
出现的目录$PATH
是命令运行的目录,则两个目录中都存在相同名称的命令。
幸得赞纳和Videonauth对指出错误在以前的版本这个答案的,关于它的Ubuntu版本在其默认代码.profile
,并帮助我纠正他们(见这里)。