将应用程序安装到 /usr/local

将应用程序安装到 /usr/local

一些自动安装的应用程序(例如 Netbean、JDK)经常安装到/usr/local我的普通用户(而不是 root)运行它。

但另一个应用程序,只需提取tar.gz文件并运行它。在普通用户下,我无法使用命令从一个目录cp复制到另一个目录,我必须使用root用户(命令)。Download/usr/localsu

但因为我是用root用户复制的,所以这个目录属于root,所以无法在普通用户下运行。这让我很头疼。我如何在普通用户下运行它,就像我上面列出的其他应用程序一样。或者,还有其他安装方法吗?

答案1

/usr/local及其子目录(binlibshare等)应该(并且可能是)拥有 root 并设置为 755,以便任何人都可以在那里执行内容。

如果您解压某些内容并将其复制进去,那么它可能是单个二进制文件的权限,也应该是 755 以允许一般使用。

请记住如何$PATH运作。在这方面,您的 JDK 示例可能会令人困惑,但是您./configure将在一个普通的 tarballmake install中放置可执行文件/usr/local/bin,将库放在 中/usr/local/lib,以及将文档等其他内容放入 中/usr/local/share。这些是适当的路径,您需要遵循相同的模式。换句话说,仅仅将内容放在/usr/localbin/ 的任何位置(例如包的单个目录)或子目录中是行不通的。

答案2

您可能会遇到两个潜在问题。

第一个问题-目录的执行权限

您复制到 /usr/local 的目录之一的权限可能没有正确设置。目录上的权限需要使得 root 以外的用户可以从这些目录中执行程序/脚本。

可能需要设置该目录的权限,以便“其他”用户能够在该目录之外执行应用程序。

例如

# don't have permissions on directory
root$ cd /usr/local
$ ls -ld somedir
drwxr-x--- 2 root root 4096 Apr 25 13:27 somedir

# have permissions on the script
root$ ls -l somedir/testscript.bash 
-rwxr-xr-x 1 root root 23 Apr 25 13:27 somedir/testscript.bash

在这种情况下,即使其他用户对脚本具有读取和执行脚本的执行权限,他们也不会被允许,因为他们没有脚本所在目录的读取和执行权限。

更改目录的权限允许他们访问:

 user$ ls -ld somedir/
 drwxr-xr-x 2 root root 4096 Apr 25 13:27 somedir/

 user$ somedir/testscript.bash 
 hi

整个问题可以通过更改从 tar.gz 文件解压的目录的权限来解决,方法是查找所有包含脚本的目录并对chmod +rx <dir>这些目录运行命令。

第二个问题-文件的执行权限

.tar.gz 文件中的文件的权限可能尚未设置,因此存档中的应用程序或脚本在解包时可能会丢失这些权限。只需chmod +x <script>解决具有此特定问题的文件即可解决此问题。

### For example
user$ ls -ld somedir
drwxr-xr-x 2 root root 4096 Apr 25 13:27 somedir/

user$ ls -l somedir/testscript.bash 
-rw-r--r-- 1 root root 23 Apr 25 13:27 somedir/testscript.bash

user$ somedir/testscript.bash
bash: somedir/testscript.bash: Permission denied

相关内容