sudo java 找不到,使用sudo时找不到命令

Permission denied

为了运行脚本,文件必须具有 an executable permission bit set .

为了完全理解Linux file permissions,您可以学习 chmod 命令的文档 . chmod,更改模式的缩写,是用于更改文件权限设置的命令 .

要读取本地系统的chmod文档,请从命令行运行 man chmod 或 info chmod . 一旦阅读并理解,您应该能够理解运行的输出......

ls -l foo.sh

...将列出文件所有者,组所有者以及不是文件所有者的所有其他人或文件所属组的成员的READ,WRITE和EXECUTE权限(最后一个权限组有时被称为作为“世界”或“其他”)

以下是在您的情况下如何解决 Permission Denied error 的摘要 .

$ ls -l foo.sh # Check file permissions of foo

-rw-r--r-- 1 rkielty users 0 2012-10-21 14:47 foo.sh

^^^

^^^ | ^^^ ^^^^^^^ ^^^^^

| | | | |

Owner| World | |

| | Name of

Group | Group

Name of

Owner

所有者具有读写访问权限,但是 - 表示缺少可执行权限

chmod 命令修复了这个问题 . (组和其他只对文件设置了读权限,不能写入或执行它)

$ chmod +x foo.sh # The owner can set the executable permission on foo.sh

$ ls -l foo.sh # Now we see an x after the rw

-rwxr-xr-x 1 rkielty users 0 2012-10-21 14:47 foo.sh

^ ^ ^

就Linux而言,foo.sh现在是可执行的 .

Using sudo results in Command not found

使用 sudo 运行命令时,您实际上是以超级用户或root身份运行它 .

root用户未找到您的命令的原因可能是root的 PATH 环境变量不包含 foo.sh 所在的目录 . 因此找不到命令 .

PATH环境变量包含搜索命令的目录列表 . 每个用户根据需要设置自己的PATH变量 . 查看设置运行的内容

env | grep ^PATH

以下是以普通用户身份运行上述 env 命令的一些示例输出,然后是使用sudo的root用户

rkielty@rkielty-laptop:~$ env | grep ^PATH

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

rkielty@rkielty-laptop:~$ sudo env | grep ^PATH

[sudo] password for rkielty:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin

请注意,虽然类似,但在这种情况下,PATH中包含的目录,非特权用户(rkielty)和超级用户不一样 .

foo.sh 所在的目录不存在于root用户的PATH变量中,因此找不到命令错误 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值