AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 524646
Accepted
Nav
Nav
Asked: 2019-06-14 03:55:06 +0800 CST2019-06-14 03:55:06 +0800 CST 2019-06-14 03:55:06 +0800 CST

如何设置正确的文件夹权限以使所有用户都可以访问程序?

  • 772

我有一个程序 X,我希望我的计算机的所有用户都能够访问它。所以我不能把它放在我的主文件夹中。所以我听说那/usr/local 是正确的地方并尝试了。

但是文件夹的文件夹权限/usr/local/bin/是drwxr-xr-x,我发现是755。因此,我创建了一个名为programsusing的文件夹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到programsusingsudo然后使用命令将所有文件转换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
ubuntu software-installation
  • 2 2 个回答
  • 2637 Views

2 个回答

  • Voted
  1. Best Answer
    Fabby
    2019-06-14T04:17:19+08:002019-06-14T04:17:19+08:00

    /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的路径中的程序。Xicon.xpm

    有关官方类别列表,请查看此处

    • 3
  2. filbranden
    2019-06-14T04:59:51+08:002019-06-14T04:59:51+08:00

    我有一个程序 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。

    权限是正确的。

    您遇到的问题实际上与权限无关,但事实上只有 root才能写入/usr/local,这就是它的本意。

    请参阅上面关于使用源代码安装程序的观点sudo make install(假设您是从源代码构建并且源代码使用支持该功能的 Makefile),简而言之,您应该使用sudoroot 创建具有 root 所有权的这些文件,正如预期的那样。

    因此,我使用 sudo mkdir 程序创建了一个名为程序的文件夹,并使用 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归根用户所有。)

    权限没有问题,而且 0755 通常对于 root 是正确的。您所需要的只是让“其他”读取和执行位,因此用户将能够运行这些二进制文件。

    如前所述,如果您想将程序保存在自己的子目录中,那么也许/opt是一个更合适的地方。即使在这种情况下,您通常也需要文件的 root 所有权。也/opt变得越来越不受欢迎,这几天可能是一个非常不寻常的选择......

    如何正确地做到这一点

    不幸的是,在 Linux 上正确安装软件很大程度上取决于您要安装的软件。安装它的方式通常取决于它的构建方式以及在某种程度上它使用的编程语言。

    我推荐以下内容:

    1. 首先,查看您的 Linux 发行版是否为该软件提供了一个软件包。如果是这种情况,请使用其包管理器(apt-get、yum、dnf等)来安装包。如果主存储库没有包,请检查是否有扩展存储库可以启用以从中获取包。

    2. 如果您从网站下载此软件,请检查他们是否以二进制包(.deb或.rpm等)的形式为您的发行版提供它,而不是.tar包含二进制文件的 tarball ( )。

    始终首选安装软件包,因为它可以正确集成到您的系统中。来自您的 Linux 发行版的软件包(假设它们可用并且发行版提供的版本对您来说是可接受的)有更好的机会在您的系统上正常工作。

    1. 如果您是从源代码构建它,请尝试将其安装到/usr/local. 这通常是默认设置,特别是对于使用 autoconf/automake 的软件包。如果./configure.sh在构建开始时要运行一个脚本,您通常可以向它传递一个--prefix参数来自定义它(如:)./configure.sh --prefix=/usr/local。构建软件后,使用sudo来安装它:sudo make install.

    2. 如果软件使用不同的构建系统和/或编程语言,请查看是否可以找到等效的指令来完成相同的操作。源代码包通常在源代码树顶部提供命名INSTALL或README全部大写的文件,并提供有关如何构建/安装它们和开始使用它们的说明。阅读那些。

    不幸的是,那里有很多变化。有一些标准,但实际上它们太多了,在 Linux/Unix 上构建/安装软件通常涉及一些试验和错误,破译令人困惑的错误消息并查找和阅读说明,试图弄清楚它们是否会按照你的期望去做......一旦你开始经常这样做,它会变得更容易一些,但总是有你需要研究的怪癖。

    这就是为什么使用发行版中的包要好得多的原因,至少你有一个标准,你有一套标准的工具可以用来安装和管理它们,并且构建细节已经为你处理好了。

    1. 如果您从网站获取二进制 tarball,那么请务必查看他们关于如何解压和使用该 tarball 的说明。您可能会猜到,但您可能会犯错误,或者至少不会保持应有的整洁。考虑直接以 root 身份解压 tarball(使用sudo)。如果 tarball 附带以程序命名的子目录,请考虑将/opt其用作基本目录。考虑在您的某处创建符号链接$PATH(/usr/local/bin想到,/opt/bin这很好,但前提是它$PATH已经在您的内部)用于预期由用户从命令行调用的二进制文件。

    解压一组预构建的二进制文件通常是最难做到的。如果这就是您所拥有的,请查找有关如何正确解包的说明。

    希望这些信息对决定如何管理您拥有的特定软件包有用!

    • 2

相关问题

  • 用文件中的点绘制二维图形

  • 在 Debian 中编写 C#

  • 如何验证我使用 9.9.9.9 作为 DNS?

  • 并行安装多个 linux 发行版

  • 自编译 OpenVPN 不会从 systemd 启动

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve