Ununtu下提示sudo: xxx: command not found
踩坑记录,网上查找的各个博客都是复制来复制去,试了半天,耗费了几个小时,对我都没什么用,最后使用其他方法,也是因为对linux不熟悉吧
系统:ubuntu18.04 64位
安装了zsh,ohmyzsh并使用
问题
在准备内网穿透,使用frp时,配置好了frps.ini,使用
./frps -c ./frps.ini
提示permission denied
在使用sudo后
sudo ./frps -c ./frps.ini
提示sudo: ./frps: command not found
发现情况后试了以下其他命令,发现部分命令也是有这个情况,例如sudo source
但在使用一些其他命令时,例如sudo vim
能正常使用,然后去网上查资料
原因
根据查阅资料,是因为在编译sudo包的时候默认开启了- -with-secure-path选项。在执行Linux命令时,如果在其前面加上sudo,就表示以root权限执行。但是这其实是有一个前提的,就是只有那些Linux内置系统命令才可以用如此的形式来执行,而对于Shell内置命令或其他用户自定义命令、别名等,是不能用sudo来使用root权限的。因为当在Linux下用sudo执行某一命令时,是在原进程(parent process)的基础上fork出来一个子进程(child process),这个子进程是以root权限执行的。然后在子进程中,执行你在sudo后面跟的命令,在子进程中是无法调用涉及到父进程的状态的一些命令的,所以非系统内置命令会被拒绝。这就是为什么会出现command not found的提示。
我的解决办法
在查阅众多博客解决办法无效后,最后试了试
chmod +x ./frps
然后成功
网上解决方法
目前对我来说无法解决,但是说不定之后用得上,在此记录
方法1
使用sudo -i
或者sudo -s
进入root模式
经测试不适用我的情况
sudo -i
sudo -s
方法2
编辑/etc/sudoers和~/.zshrc
经测试不适用我的情况
1.编辑/etc/sudoers
sudo visudo
进入编辑页面
更改第一个Defaults env_reset
为Defaults !env_reset
然后保存退出
2. 编辑~/.zshrc
vim ~/.zshrc
添加
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
alias sudo='sudo env PATH=$PATH'
PATH的值为sudoers里面的secure_path的值,然后保存退出
然后运行
source ~/.zshrc
测试
甚至带出新的问题
解决方法
在stackflow查阅到解决办法
注释掉~/.zshrc
中添加的部分然后
source ~/.zshrc
unalias sudo
即可解决
方法三
在secure_path中添加当前运行路径
sudo visudo
经测试对我无用
Comments | 2 条评论