我有一个程序 X,我希望我的计算机的所有用户都能够访问它。所以我不能把它放在我的主文件夹中。所以我听说那/usr/local
是正确的地方并尝试了。
但是文件夹的文件夹权限/usr/local/bin/
是drwxr-xr-x
,我发现是755
。因此,我创建了一个名为programs
using的文件夹sudo mkdir programs
,并更改了它的权限 using sudo chmod 775 programs
,因为主文件夹中的文件夹具有权限775
,并且我认为授予它的权限是正确的。
现在我去cd /usr/local/programs/
尝试将程序 X 从主文件夹复制到programs
使用的文件夹mv ~/X/ .
,我得到一个错误mv: cannot move '/home/nav/X/' to './X': Permission denied
。
我重新验证是否/usr/local/programs
确实是775
,它是。现在虽然我认为我可以复制X
到programs
usingsudo
然后使用命令将所有文件转换programs
为775
,但我感觉整个过程有问题。
那么如何安装X
并使其可供所有用户访问?我尝试这样做的原因是因为一旦我将它放入/usr/local/programs/
,我将创建一个如下所示的脚本,以便通过应用程序菜单访问它。
剧本:
要创建脚本:
sudo -H gedit /usr/share/applications/X.desktop
在文件中,粘贴以下内容:
[Desktop Entry]
Version=1.0
Name=X
Comment=Program X
GenericName=IDE
Keywords=SomeProgram, X
Exec=/usr/local/programs/X/xyz %u
Terminal=false
X-MultipleArgs=false
Type=Application
Icon=/usr/local/programs/X/icons/icon.xpm
Categories=GNOME;GTK;
StartupNotify=true
/usr/local/bin
是放置您的程序的正确目录,所以只是:并且不要移动它,因为移动它也会移动权限,而复制它会给你的程序默认权限
/usr/local/bin
.此外,
/usr/local/bin
已经在路径中,如果您将图标放入/usr/share/pixmaps
,您的桌面文件将变为:对于您的主目录中带有图标文件
xyz
的路径中的程序。X
icon.xpm
有关官方类别列表,请查看此处
是的,
/usr/local
是系统管理员安装计算机上所有用户都可以使用的程序的合适位置。但是
/usr/local
通常被分成子目录bin
,lib
,share
并且期望您将程序安装到这些子目录中,例如/usr/local/bin/X
二进制文件、/usr/local/lib/libX.so.1
库,可能还有一些附加的数据目录share
等等。通常,您构建的 Linux 程序可以
/usr/local
使用该make install
命令安装,更准确地说,sudo make install
因为只有 root 可以写入这些子目录。(至少,对于从源代码构建的软件来说,这是一个相当普遍的约定。)还有
/opt
层次结构,预计将每个程序保存在其自己的子目录中,因此/opt/X-1.0/
该目录将具有其自己的bin
、lib
、share
等子目录。也许这更接近你所描述的。权限是正确的。
您遇到的问题实际上与权限无关,但事实上只有 root才能写入
/usr/local
,这就是它的本意。请参阅上面关于使用源代码安装程序的观点
sudo make install
(假设您是从源代码构建并且源代码使用支持该功能的 Makefile),简而言之,您应该使用sudo
root 创建具有 root 所有权的这些文件,正如预期的那样。不要那样做。
/usr/local
并不是真的要那样使用。(这并不意味着人们不会以类似的方式滥用它,但您不妨学会正确使用它或找到更合适的地方。)所以问题是你需要root。使用
sudo
会有所帮助,但下面的文件X/
仍归您的用户所有。(这不一定会阻止它们被系统中的其他用户使用,但通常您希望这些文件/usr/local
归根用户所有。)权限没有问题,而且 0755 通常对于 root 是正确的。您所需要的只是让“其他”读取和执行位,因此用户将能够运行这些二进制文件。
如前所述,如果您想将程序保存在自己的子目录中,那么也许
/opt
是一个更合适的地方。即使在这种情况下,您通常也需要文件的 root 所有权。也/opt
变得越来越不受欢迎,这几天可能是一个非常不寻常的选择......如何正确地做到这一点
不幸的是,在 Linux 上正确安装软件很大程度上取决于您要安装的软件。安装它的方式通常取决于它的构建方式以及在某种程度上它使用的编程语言。
我推荐以下内容:
首先,查看您的 Linux 发行版是否为该软件提供了一个软件包。如果是这种情况,请使用其包管理器(
apt-get
、yum
、dnf
等)来安装包。如果主存储库没有包,请检查是否有扩展存储库可以启用以从中获取包。如果您从网站下载此软件,请检查他们是否以二进制包(
.deb
或.rpm
等)的形式为您的发行版提供它,而不是.tar
包含二进制文件的 tarball ( )。始终首选安装软件包,因为它可以正确集成到您的系统中。来自您的 Linux 发行版的软件包(假设它们可用并且发行版提供的版本对您来说是可接受的)有更好的机会在您的系统上正常工作。
如果您是从源代码构建它,请尝试将其安装到
/usr/local
. 这通常是默认设置,特别是对于使用 autoconf/automake 的软件包。如果./configure.sh
在构建开始时要运行一个脚本,您通常可以向它传递一个--prefix
参数来自定义它(如:)./configure.sh --prefix=/usr/local
。构建软件后,使用sudo
来安装它:sudo make install
.如果软件使用不同的构建系统和/或编程语言,请查看是否可以找到等效的指令来完成相同的操作。源代码包通常在源代码树顶部提供命名
INSTALL
或README
全部大写的文件,并提供有关如何构建/安装它们和开始使用它们的说明。阅读那些。不幸的是,那里有很多变化。有一些标准,但实际上它们太多了,在 Linux/Unix 上构建/安装软件通常涉及一些试验和错误,破译令人困惑的错误消息并查找和阅读说明,试图弄清楚它们是否会按照你的期望去做......一旦你开始经常这样做,它会变得更容易一些,但总是有你需要研究的怪癖。
这就是为什么使用发行版中的包要好得多的原因,至少你有一个标准,你有一套标准的工具可以用来安装和管理它们,并且构建细节已经为你处理好了。
sudo
)。如果 tarball 附带以程序命名的子目录,请考虑将/opt
其用作基本目录。考虑在您的某处创建符号链接$PATH
(/usr/local/bin
想到,/opt/bin
这很好,但前提是它$PATH
已经在您的内部)用于预期由用户从命令行调用的二进制文件。解压一组预构建的二进制文件通常是最难做到的。如果这就是您所拥有的,请查找有关如何正确解包的说明。
希望这些信息对决定如何管理您拥有的特定软件包有用!