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


120

我刚刚在新的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

当前路径是

[ec2-user@XXXX ~]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/opt/aws/bin:/home/ec2-user/bin

但是,sudo路径是

[root@ip-10-112-222-32 ~]# echo $PATH
/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/aws/bin:/root/bin

然后我尝试编辑根PATH以包含到节点的路径,因此当我以root身份登录时,“ node”会运行-但是当我以ec2-user身份登录并运行“ sudo node”时,它仍然无法使用。

我需要安装npmproperfly。关于如何在运行“ sudo节点”时包括节点路径的任何想法?


您如何编辑根PATH?
暂停,直到另行通知。

经过大量的尝试,我做到了并且有效:<pre> sudo su export PATH = $ PATH:usr / local / node / curl npmjs.org/install.sh | sh </ pre>

Answers:


319

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

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

可能还有更多,但这是到目前为止我所遇到的全部。缺少节点Waf将导致某些npm安装失败,并显示一条相当隐秘的错误消息。


我很好奇,是否必须仅在Amazon AMI系统中完成此链接?Amazon AMI系统是否将根路径与用户路径分开?
user482594 2012年

缺少错误node-waf原因npm rebuild。有没有解决这个问题的干净方法?我需要吗?
user730569'6

1
由于几个原因,这对我不起作用。1)我没有sudo访问权限。我在共享主机上。2)/usr/local不存在。不过,我将目录设置为〜/ local。3)从每行代码中删除/usrsudo通过我的控制台运行它们之后,没有任何变化。
Wolfpack'13年

1
那很有帮助。但是任何人都可以解释为什么以及如何使事情起作用吗?
塔伦·古普塔

2
@Tarun:读取shell的PATH变量,以及如何使用它查找对任何给定命令执行哪个二进制文件。ln命令仅将第二个名称链接到同一文件。
Michael Dillon

33

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

$ sudo visudo

然后更改此行:

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

至:

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin

19

发生这种情况是因为在/ 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了我尝试npm install链接
NULL指针

9

为什么不使用到节点的绝对路径?如果您打算使用暴发户脚本,则无论如何都将需要一个绝对路径。

sudo /usr/local/bin/node server.js

1
最佳解决方案,可以正常工作,并且不会像所有ln解决方案一样使系统混乱。
SidOfc

5

尝试以下方法:

export PATH=$PATH:/usr/local/bin
sudo node --version

2
对于已secure_pathsudoers文件中设置的发行版不起作用。
kenorb


4

对我而言,它只是将节点文件夹的所有权从根更改为ec2-user(以ec2-user登录)。

(注意:我在/ var / lib /中创建了我的节点文件夹)

sudo chown -R ec2-user /var/lib/node/

然后

npm install mongojs

应该工作正常(当然前提是您已经安装了npm!)


3

这是一种不使用符号链接或不需要root的方法:

$ git clone https://github.com/joyent/node.git
$ cd node
$ mkdir ~/opt
$ export PREFIX=~/opt; ./configure
$ make
$ make install
$ echo 'export PATH=~/opt/bin:${PATH}' >> ~/.bashrc

然后我做了:

$ git clone https://github.com/isaacs/npm.git
$ cd npm
$ make install

这里讨论了不以root用户身份运行节点的好处:

http://increaseyourgeek.wordpress.com/2010/08/18/install-node-js-without-using-sudo/

其内联:

https://github.com/joyent/node/wiki/安装



1

就我而言,Node安装时没有sudo前缀。因此超级用户无法使用该节点,因此为什么它不起作用sudo node server


-1

我不知道这是不是正确的方法,但这就是我所做的...

sudo su
export PATH=$PATH:/home/ec2-user/local/node/bin
curl http://npmjs.org/install.sh | sh
chown -R ec2-user /home/ec2-user/local/node
exit

这安装了npm,现在我可以安装任何想要的软件包。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.