首页 文章

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

提问于
浏览
110

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

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

Problem: 当我在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以包含节点的路径,因此当我以root身份登录时“node”运行 - 但是当我以ec2-user身份登录并运行“sudo node”时它仍然不起作用 .

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

10 回答

  • 3

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

    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 安装失败并显示相当神秘的错误消息 .

  • 4

    我在 /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
    
  • 301

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

    • 找节点:

    whereis node

    在我的情况下: node: /home/<my_user>/.nvm/versions/node/v8.9.4/bin/node

    • 为节点创建符号链接:

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

    完成!

  • 6

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

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

    尝试以下方法:

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

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

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

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

    然后

    npm install mongojs
    

    应该工作正常(假设您已经安装了npm ok!)

  • -1

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

  • 9

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

    sudo `which node`
    
  • 29

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

  • 5

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

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

相关问题