一些自动安装的应用程序(例如 Netbean、JDK)经常安装到/usr/local
我的普通用户(而不是 root)运行它。
但另一个应用程序,只需提取tar.gz
文件并运行它。在普通用户下,我无法使用命令从一个目录cp
复制到另一个目录,我必须使用root用户(命令)。Download
/usr/local
su
但因为我是用root用户复制的,所以这个目录属于root,所以无法在普通用户下运行。这让我很头疼。我如何在普通用户下运行它,就像我上面列出的其他应用程序一样。或者,还有其他安装方法吗?
答案1
/usr/local
及其子目录(bin
、lib
、share
等)应该(并且可能是)拥有 root 并设置为 755,以便任何人都可以在那里执行内容。
如果您解压某些内容并将其复制进去,那么它可能是单个二进制文件的权限,也应该是 755 以允许一般使用。
请记住如何$PATH
运作。在这方面,您的 JDK 示例可能会令人困惑,但是您./configure
将在一个普通的 tarballmake install
中放置可执行文件/usr/local/bin
,将库放在 中/usr/local/lib
,以及将文档等其他内容放入 中/usr/local/share
。这些是适当的路径,您需要遵循相同的模式。换句话说,仅仅将内容放在/usr/local
bin/ 的任何位置(例如包的单个目录)或子目录中是行不通的。
答案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