在EC2:找不到sudo节点命令,但没有sudo的节点是可以的

foo*_*bar 117 bash sudo amazon-ec2 node.js

我刚刚在一个新的EC2微实例上安装了nodejs.

我正常安装它./configure - > make - > sudo make install.

问题:当我在ec2-user下运行"node"时,它运行完美.当我运行"sudo节点"时,它失败了.

我发现该节点在:

[ec2-user@XXXX ~]$ whereis node
node: /usr/local/bin/node /usr/local/lib/node
Run Code Online (Sandbox Code Playgroud)

而目前的路径是

[ec2-user@XXXX ~]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/opt/aws/bin:/home/ec2-user/bin
Run Code Online (Sandbox Code Playgroud)

但是,sudo路径是

[root@ip-10-112-222-32 ~]# echo $PATH
/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/aws/bin:/root/bin
Run Code Online (Sandbox Code Playgroud)

然后我尝试编辑根PATH以包含节点的路径,因此当我以root身份登录时"node"运行 - 但是当我以ec2-user身份登录并运行"sudo node"时它仍然不起作用.

我需要这个来安装npm properfly.有关如何在运行"sudo节点"时包含节点路径的任何想法?

Mic*_*lon 314

是的,它有点烦人但你可以通过一些链接修复它:

sudo ln -s /usr/local/bin/node /usr/bin/node
sudo ln -s /usr/local/lib/node /usr/lib/node
sudo ln -s /usr/local/bin/npm /usr/bin/npm
sudo ln -s /usr/local/bin/node-waf /usr/bin/node-waf
Run Code Online (Sandbox Code Playgroud)

可能会有更多,但到目前为止我已经遇到过这一切.缺少node-waf会导致某些npm安装失败并出现相当神秘的错误消息.

  • @Tarun:读取shell的PATH变量以及如何使用它来查找要为任何给定命令执行的二进制文件.ln命令只是将第二个名称链接到同一个文件. (2认同)

Jac*_*ost 33

我加入/usr/local/binsecure_path/etc/sudoers

$ sudo visudo
Run Code Online (Sandbox Code Playgroud)

然后改变这一行:

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin
Run Code Online (Sandbox Code Playgroud)

至:

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
Run Code Online (Sandbox Code Playgroud)


Jef*_*Pal 14

发生这种情况是因为在/ usr/bin中找不到节点可执行文件.请按照以下步骤操作:

  1. 找到节点:

whereis node

在我的情况下: node: /home/<my_user>/.nvm/versions/node/v8.9.4/bin/node

  1. 为节点创建一个符号链接:

    sudo ln -s /home/<my_user>/.nvm/versions/node/v8.9.4/bin/node /usr/bin/node

完成!

  • 很棒的提示 - 我也做了 `sudo ln -s /home/ec2-user/.nvm/versions/node/v8.11.3/bin/npm /usr/bin/npm` 因为我试图做 sudo `npm install`在我的 aws ec2 实例上遵循[链接](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/setting-up-node-on-ec2-instance.html) (2认同)

Shr*_*hna 7

为什么不使用节点的绝对路径?如果您计划使用upstart脚本,则无论如何都需要绝对路径.

sudo /usr/local/bin/node server.js
Run Code Online (Sandbox Code Playgroud)

  • 最佳解决方案,有效且不会像所有“ln”解决方案那样扰乱系统。 (2认同)

Amr*_*mro 5

尝试以下方法:

export PATH=$PATH:/usr/local/bin
sudo node --version
Run Code Online (Sandbox Code Playgroud)

  • 对于在`sudoers`文件中设置了`secure_path`的发行版不起作用。 (2认同)

Pav*_*kou 5

您可以node使用which命令将完整路径从父级(非 sudo shell)传递到可执行文件。

sudo `which node`
Run Code Online (Sandbox Code Playgroud)


小智 5

使用“sudo $(哪个节点)”而不是“sudo 节点”怎么样?