在EC2上:sudo node命令未找到,但不使用sudo的node是可以使用的。
在EC2上:sudo node命令未找到,但不使用sudo的node是可以使用的。
我刚刚在新的EC2微型实例上安装了nodejs。
我正常安装了它,./configure -> make -> sudo make install。
问题:当我在ec2-user下运行"node"时,它运行得很完美。但是当我运行"sudo node"时,它就会失败。
我发现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
然后我尝试编辑root的PATH,将node的路径包含在内,这样当我以root身份登录时就可以运行"node"了 - 但是当我以ec2-user登录并运行"sudo node"时仍然不起作用。
我需要这样才能正确安装npm。有关如何在运行"sudo node"时包含node路径的任何想法吗?
问题原因:
在EC2上使用sudo命令时出现“sudo node command not found”错误,是因为在/usr/bin目录中找不到node可执行文件。
解决方法:
1. 使用以下命令找到node的位置:
whereis node
在我的情况下,返回结果为:node: /home/
2. 创建node的符号链接:
sudo ln -s /home//.nvm/versions/node/v8.9.4/bin/node /usr/bin/node
至此,问题解决!
还有一个很好的提示-我还使用了以下命令来创建npm的符号链接:
sudo ln -s /home/ec2-user/.nvm/versions/node/v8.11.3/bin/npm /usr/bin/npm
这是因为在按照链接中的步骤在AWS EC2实例上进行sudo npm install时遇到了问题。
你是一个救命恩人和绝对的传奇。+1
在EC2上使用sudo命令时出现“sudo node command not found, but node without sudo is ok”的问题。解决方法是执行以下命令:
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、npm和node-waf的路径链接到系统的/usr/bin/目录下,从而使sudo命令可以找到这些命令。
这个问题可能只在Amazon AMI系统上出现,因为Amazon AMI系统可能将root路径和用户路径分开。缺少node-waf可能会导致npm安装失败,并显示一条晦涩的错误信息。如果没有sudo访问权限,或者系统中没有/usr/local目录,上述解决方法可能无效。
为了解决此问题,可以了解shell的PATH变量以及它如何用于查找要执行的命令的二进制文件。ln命令用于创建文件的第二个名称的链接。
另外,有用户在Amazon Linux上执行命令时提出了疑问,是否将“sudo ln -s /usr/local/lib/node”改为“sudo ln -s /usr/local/lib/node_modules”。此外,如果担心打错字并且使用了nvm,可以使用以下命令进行创建符号链接:
sudo ln -s $(which node) /usr/bin/node
sudo ln -s /path/to/lib/node_modules /usr/lib/node_modules
sudo ln -s $(which npx) /usr/bin/npx
这些解决方法对于类似的问题也是适用的,例如在EC2实例上使用composer时出现权限错误的问题。
在EC2上,使用sudo命令时出现“sudo node command not found, but node without sudo is ok”的问题。这个问题的原因是在sudoers文件中的secure_path路径中没有包含node的路径。解决方法是将node的路径添加到secure_path中。
具体的解决步骤如下:
1. 打开sudoers文件:$ sudo visudo
2. 找到以下这行代码:
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
3. 将该行代码修改为:
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
4. 保存并退出sudoers文件。
通过上述步骤,我们将node的路径添加到了secure_path中,使得在使用sudo命令时,可以找到并执行node命令。