我的 Linux 机器上有一个 Java 程序,我想在其中创建一个小型的单行 shell 脚本,/bin
以避免每次都必须导航到该程序的文件夹并设置所有命令行参数。
起初,我可以运行脚本,/bin
但 Java 无法正确启动。然而,执行完整命令时,/xxx/yyy/zzz/javaprog -args
它启动了。过了一会儿,我意识到sudo /bin/shortcut
问题解决了。
然后我检查了权限:
java program : -rwxrwxr-x 1 fred fred
/bin/shortcut : -rwxrwxrwx 1 root root
通过发布将chown fred /bin/shortcut
所有者更改为:
-rwxrwxrwx 1 fred root
现在一切都很好,我不需要 sudo 快捷方式。
有人能帮我理解一下发生了什么吗?为什么我需要 sudo 快捷方式才能使其工作,或者将其所有者更改为 Java 程序的所有者。
PS. 我理解用户/组的概念
答案1
您明白 rwxrwxrwx 是您的文件/文件夹的权限吗?前三个 RWXrwxrwx 是针对文件所有者的。第二组三个 rwxRWXrwx 是针对文件或文件夹的组所有者的,最后一组三个 rwxrwxRWX 是针对系统上的其他所有人的。R = 读取,W = 写入,X = 执行。
Chown 只是将用户和组分配给文件/文件夹
如果我没有说明清楚,请澄清一下你的问题。
答案2
Linux 权限包括所有者、组和其他。
您的java program : -rwxrwxr-x 1 fred fred
意思是该文件的所有者是 'fred',其组是 'fred'。Fred 可以读取、写入和执行此文件(第一个rwx
)。组 'fred' 中的用户可以读取、写入和执行此文件(第二个rwx
)。所有其他用户都可以读取和执行此文件(第三部分,r-x
)。
对于/bin/shortcut : -rwxrwxrwx 1 root root
,root 是所有者和组,所有用户都可以读取、写入和执行。
在您的之后chown fred /bin/shortcut
,可能应该是chown fred:fred /bin/shortcut
(也更改组),所有者是 fred,组是 root,并且所有用户都可以读取、写入和执行。