我有一个程序 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
答案1
/usr/local/bin
是放置程序的正确目录所以就:
sudo cp ~/X/xyz /usr/local/bin
和不要移动它因为移动它也会移动权限,而复制它将为您的程序提供默认权限/usr/local/bin
.
另外,/usr/local/bin
已经在路径中,如果您将图标放入 中/usr/share/pixmaps
,您的桌面文件将变为:
[Desktop Entry]
Version=1.0
Name=xyz
Comment=Program xyz
GenericName=IDE
Keywords=SomeProgram, xyz
Exec=xyz %u
Terminal=false
X-MultipleArgs=false
Type=Application
Icon=icon.xpm
Categories=GNOME;GTK;Development;IDE
StartupNotify=true
对于主目录中带有图标文件的xyz
路径中的程序。X
icon.xpm
官方类别列表看看这里
答案2
我有一个程序 X,我希望我的计算机的所有用户都能够访问该程序。所以我不能把它放在我的主文件夹中。所以我听说那
/usr/local
是正确的地方并尝试了。
是的,/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
等子目录。也许这更接近你所描述的。
但是 中的文件夹的文件夹权限
/usr/local/bin/
是drwxr-xr-x
,我发现是 755。
权限是正确的。
您遇到的问题实际上与权限无关,但与以下事实有关只有根能够写入/usr/local
,这就是它的本来面目。
请参阅我上面关于使用源代码安装程序的观点sudo make install
(假设您从源代码构建并且源代码使用支持该功能的 Makefile),简而言之,您应该使用sudo
root 创建这些文件,并具有 root 所有权,正如其预期的那样。
因此,我使用 sudo mkdir 程序创建一个名为programs 的文件夹,并使用 sudo chmod 775 程序更改其权限,因为主文件夹中的文件夹具有权限 775,我认为这是授予它的正确权限。
不要那样做。/usr/local
并不是真的应该这样使用。 (这并不意味着人们不会以类似的方式滥用它,但你不妨学会正确使用它或者找到更合适的地方。)
现在我转到 cd
/usr/local/programs/
并尝试使用以下命令将程序 X 从主文件夹复制到程序文件夹mv ~/X/ .
,但出现错误:mv: cannot move '/home/nav/X/' to './X': Permission denied.
所以问题是你需要root。使用sudo
会有所帮助,但下面的文件X/
仍然由您的用户拥有。 (这不一定会阻止系统中的其他用户使用它们,但通常您希望这些文件归/usr/local
root 所有。)
权限没有问题,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 上构建/安装软件经常涉及一些试验和错误,破译令人困惑的错误消息,查找和阅读说明,试图弄清楚它们是否会按照您的期望进行操作...一旦你开始经常这样做,事情就会变得容易一些,但总会有一些怪癖需要你去研究。
这就是为什么使用发行版中的包要好得多,至少您有一个标准,您有一组可用于安装和管理它们的标准工具,并且构建细节都已为您处理好。
- 如果您从网站获取二进制 tarball,请务必查看他们有关如何解压和使用该 tarball 的说明。您可能会猜测,但您可能会犯错误,或者至少不会保持应有的整洁。考虑以 root 身份直接解压 tarball(使用
sudo
)。如果 tarball 附带以程序命名的子目录,请考虑将其用作/opt
基目录。考虑在您的某个位置$PATH
(/usr/local/bin
想到,/opt/bin
这很好,但前提是它已经在您的文件中$PATH
)中为用户从命令行调用的二进制文件创建符号链接。
解压一组预构建的二进制文件通常是最难做到的。如果您有这样的东西,请查找有关如何正确打开包装的说明。
希望这些信息有助于决定如何管理您拥有的特定包!