Ununtu下提示sudo: xxx: command not found

Ununtu下提示sudo: xxx: command not found

踩坑记录,网上查找的各个博客都是复制来复制去,试了半天,耗费了几个小时,对我都没什么用,最后使用其他方法,也是因为对linux不熟悉吧
系统:ubuntu18.04 64位
安装了zsh,ohmyzsh并使用

问题

在准备内网穿透,使用frp时,配置好了frps.ini,使用

./frps -c ./frps.ini

提示permission denied
image.png

在使用sudo后

sudo ./frps -c ./frps.ini

提示sudo: ./frps: command not found
image.png
发现情况后试了以下其他命令,发现部分命令也是有这个情况,例如sudo source
image.png
但在使用一些其他命令时,例如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

然后成功
image.png

网上解决方法

目前对我来说无法解决,但是说不定之后用得上,在此记录

方法1

使用sudo -i或者sudo -s进入root模式
经测试不适用我的情况

  • sudo -i
    image.png
  • sudo -s
    image.png

方法2

编辑/etc/sudoers和~/.zshrc
经测试不适用我的情况

1.编辑/etc/sudoers

sudo visudo

进入编辑页面
image.png

更改第一个Defaults env_resetDefaults !env_reset
image.png
然后保存退出

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

测试

image.png
甚至带出新的问题
image.png
解决方法
在stackflow查阅到解决办法
注释掉~/.zshrc中添加的部分然后

source ~/.zshrc
unalias sudo

即可解决

方法三

在secure_path中添加当前运行路径

sudo visudo

image.png
经测试对我无用