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

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

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

问题: 当我在 ec2-user 下运行“ node”时,它运行得很好,当我运行“ sudo node”时,它失败了。

我发现那个节点在:

[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 以包含到节点的路径,这样当我以根用户身份登录时“ node”就会运行——但是当我以 ec2用户身份登录并运行“ sudo node”时,它仍然无法工作。

我需要这个正确安装 npm。有什么关于如何包括节点路径,而运行“ sudo 节点”?

112473 次浏览

尝试以下方法:

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

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

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

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

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安装失败,并出现相当隐晦的错误消息。

我不知道这样做对不对,但我就是这么做的..。

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,现在我可以安装任何我想要的软件包。

这里有一种不使用符号链接或需要 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

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

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

它的内涵是:

Https://github.com/joyent/node/wiki/installation

对我来说,只需将节点文件夹的所有权从 root 更改为 ec2-user (作为 ec2-user 登录)即可。

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

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

然后

npm install mongojs

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

我在 /etc/sudoers中把 /usr/local/bin加到 secure_path

$ sudo visudo

然后换一行:

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

致:

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

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

sudo `which node`

在我的示例中,Node 是在没有 Sudo前缀的情况下安装的。所以超级用户不能使用节点,这就是为什么它不能工作 sudo node server的原因

这是因为在/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 $(which node)”代替“ sudo node”怎么样?

作为 root 用户输入

sudo su

然后做 标准步骤

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)"

这是我为了解决类似的问题所做的。注意: 我已经通过管理单元安装了节点。

步骤1: 通过管理单元安装节点

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: 创建指向节点、 npm、 npx 和纱线的符号链接

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

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

sudo node

Installing node via snap for all users, ubuntu, debian

我试了上述答案中提到的所有方法,但都没有效果。可能是因为我缺乏对系统链接相关概念的理解。我通过不使用 nvm 修复了这个问题。 我只是创建了一个新的 ec2实例,没有安装 nvm,而是像这样安装了 node 和 npm:

sudo apt update
sudo apt install nodejs npm

我就是这么做的。

如果您已经安装了节点环境,那么将这些命令粘贴到您的实例中,它将把您的节点链接到您的用户目录。并且您将能够在 sudo 中使用 node。

    sudo ln -s "$(which node)" "/usr/local/bin/node"
sudo ln -s "$(which npm)" "/usr/local/bin/npm"