Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在EC2上:未找到sudo node命令,但没有sudo的节点正常_Node.js_Bash_Amazon Ec2_Sudo - Fatal编程技术网

Node.js 在EC2上:未找到sudo node命令,但没有sudo的节点正常

Node.js 在EC2上:未找到sudo node命令,但没有sudo的节点正常,node.js,bash,amazon-ec2,sudo,Node.js,Bash,Amazon Ec2,Sudo,我刚刚在一个新的EC2微实例上安装了nodejs 我正常安装,./configure->make->sudo make安装 问题:当我在ec2用户下运行“node”时,它运行得非常好。当我运行“sudo节点”时,它失败了 我发现节点位于: [ec2-user@XXXX ~]$ whereis node node: /usr/local/bin/node /usr/local/lib/node 当前的路径是 [ec2-user@XXXX ~]$ echo $PATH /usr/local/bin

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

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

问题:当我在ec2用户下运行“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
然后我尝试编辑根路径以包含到节点的路径,这样当我以根用户身份登录时“节点”就会运行,但当我以ec2用户身份登录并运行“sudo节点”时,它仍然无法工作

我需要这个来正确安装npm。关于如何在运行“sudo node”时包含节点路径,您有什么想法吗?

请尝试以下操作:

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

可能还有更多,但这就是我到目前为止遇到的所有问题。缺少节点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,我现在可以安装我想要的任何软件包

这里有一种不使用符号链接或不需要根的方法:

$ 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用户身份运行节点的好处:

其内容与:


对我来说,只需将节点文件夹的所有权从根用户更改为ec2用户(以ec2用户身份登录)即可

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

然后


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

我在
/etc/sudoers
中向
安全路径添加了
/usr/local/bin

$ sudo visudo
然后更改此行:

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


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

sudo `which node`

在我的例子中,节点安装时没有sudo前缀。因此,超级用户无法使用该节点,这就是为什么它不能工作的原因。
sudo node server

发生这种情况是因为在/usr/bin中找不到该节点的可执行文件。因此,请遵循以下步骤:

  • 查找节点:
  • 节点在哪里

    在我的例子中:
    node:/home/.nvm/versions/node/v8.9.4/bin/node

  • 为节点创建符号链接:

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

  • 完成了

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

    使用

    sudo su
    
    然后呢


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

    步骤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
    
    最后,所有用户都可以访问该节点,即使是sudo组

    sudo node
    

    您是如何编辑根路径的?经过多次尝试,我这样做了,并且成功了:sudo su export PATH=$PATH:usr/local/node/curl | sh我只是好奇,这个链接是否只需要在Amazon AMI系统中完成?AmazonAMI系统是否将根路径和用户路径分开?出于几个原因,这对我来说不起作用。1) 我没有sudo权限。我在共享主机上。2)
    /usr/local
    不存在。不过,我制作了一个~/local目录。3) 从每一行代码中删除
    /usr
    sudo
    并通过我的控制台运行它们之后,没有任何变化。这很有帮助。但是,有人能解释为什么以及它是如何工作的吗?@Tarun:仔细阅读shell的PATH变量,以及如何使用它来查找任何给定命令要执行的二进制文件。ln命令只是将第二个名称链接到同一个文件。我使用的是Amazon Linux。行'sudo ln-s/usr/local/lib/node/usr/lib/node'是否意味着'sudo ln-s/usr/local/lib/node_modules/usr/lib/node_modules'?对于在
    sudoers
    文件中设置了
    secure_路径的发行版不起作用。伟大的提示-我也做了
    sudo ln-s/home/ec2 user/.nvm/versions/node/v8.11.3/bin/npm/usr/bin/npm>在遵循最佳解决方案后,我尝试在我的aws ec2实例上安装sudo
    npm
    ,与所有
    ln
    解决方案一样有效,不会干扰系统。似乎是唯一有效的解决方案
    whereis node
    
    /snap/bin/node.npm 
    /snap/bin/node.npx 
    /snap/bin/node.yarn 
    /snap/bin/node 
    /snap/bin/node.yarnpkg
    
    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 node