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

时间:2011-02-12 06:14:07

标签: node.js bash amazon-ec2 sudo

我刚刚在新的EC2微型实例上安装了nodejs。

我正常安装,。/ configure - >制作 - > 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节点“。

我需要这个来安装npm properfly。有关如何在运行“sudo node”时包含节点路径的想法吗?

14 个答案:

答案 0 :(得分:310)

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

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

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

答案 1 :(得分:30)

我在/usr/local/bin

中将secure_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

答案 2 :(得分:11)

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

  1. 找到节点:
  2. 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

    2. 已经完成了!

答案 3 :(得分:7)

为什么不使用节点的绝对路径?如果你打算使用一个upstart脚本,那么无论如何都需要一个绝对路径。

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

答案 4 :(得分:5)

尝试以下方法:

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

答案 5 :(得分:4)

对我来说,它只是将节点文件夹的所有权从root更改为ec2-user(以ec2-user身份登录)。

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

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

然后

npm install mongojs

应该可以正常工作(如果您已经安装了npm ok!)

答案 6 :(得分:4)

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

sudo `which node`

答案 7 :(得分: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/Installation

答案 8 :(得分:1)

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

答案 9 :(得分:0)

使用“ sudo $(哪个节点)”代替“ sudo节点”怎么样?

答案 10 :(得分:0)

以root身份输入

sudo su

然后执行standard steps

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
. ~/.nvm/nvm.sh
nvm install node
node -e "console.log('Running Node.js ' + process.version)"

答案 11 :(得分:0)

这是我为解决类似问题所做的工作。注意:我已经通过 snap 安装了 node。

第一步:通过snap安装节点

sudo snap install node --classic

第 2 步:查找节点已安装的位置

whereis node

就我而言

/snap/bin/node.npm 
/snap/bin/node.npx 
/snap/bin/node.yarn 
/snap/bin/node 
/snap/bin/node.yarnpkg

第 3 步:创建指向 node、npm、npx 和 yarn 的符号链接

sudo ln -s /snap/bin/yarn /usr/bin/yarn
sudo ln -s /snap/bin/node /usr/bin/node
sudo ln -s /snap/bin/npm /usr/bin/npm

最后所有用户都可以访问节点,即使是 sudo 组

sudo node

Installing node via snap for all users, ubuntu, debian

答案 12 :(得分:0)

我尝试了上述答案中提到的所有内容,但没有任何效果。可能是因为我对符号链接相关的概念缺乏了解。我通过不使用 nvm 解决了这个问题。 我刚刚创建了一个新的 ec2 实例,并没有安装 nvm。相反,我像这样安装了 node 和 npm:

%%sql

SELECT *

FROM 'dataset.mock-data'

LIMIT 10

这为我做到了。

答案 13 :(得分:-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,我现在可以安装我想要的任何软件包。