sudo: узел: команда, не найденная

Мне связали проблему с nodejs. У меня есть nodejs двоичные файлы здесь: ~/node-v8.5.0-linux-x64/ и у меня есть гибкая ссылка, что я создал использование: ln -s node-v8.5.0-linux-x64/ node.

В моем .bashrc у меня есть это: export PATH=$PATH:$HOME/node/bin.

node и npm работают отлично, когда я обычно зарегистрирован. Поскольку они оба установлены в моем доме, я не должен быть зарегистрирован как корень для установки пакета глобально.

Но я хотел попробовать; таким образом я работал:

sudo npm install -g angular-cli
sudo node app.js

и это не работало.

sudo: node : command not found

Я думал, возможно, $PATH изменения, когда я использую sudo но затем я проверил его использование sudo echo $PATH:

/home/dc/bin:/home/dc/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/dc/node/bin

Оболочка должна знать, куда пойти, когда я ввожу node команда, но кажется, что это не делает. Я также попробовал -H, -i и -u опции для sudo но ничего подобного не помогает также.

Кто-то может объяснить, что происходит здесь?

5
задан 13 September 2017 в 06:13

2 ответа

Нет, sudo не сохраняет Ваш $PATH переменная среды из соображений безопасности. Вместо этого это заменяется a secure_path определенный в /etc/sudoers, который Вы не должны изменять.

$ sudo grep secure_path /etc/sudoers
Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

Вы думаете, чтобы проверить что $PATH переменная остается такой же с Вашей командой

sudo echo $PATH

но на самом деле Bash разворачивает переменные прежде, чем начать выполнять любого (здесь sudo) команда, что означает строку выше, показывает Ваше собственное $PATH значение. Получить тот как sudo, используйте, например.

sudo bash -c 'echo $PATH'

То, что можно сделать, к, например, разрешите команду, которую Вы хотите выполнить (node или npm) в оболочке Вашего собственного пользователя использование обрабатывают замену с which:

sudo "$(which npm)" install -g angular-cli
sudo "$(which node)" app.js

Это сначала работает which npm или which node как Ваш пользователь, который возвращает полный путь исполняемых файлов, принадлежащих указанным командам. Затем тот вывод буквально вставляется в Ваш sudo команда, таким образом, sudo на самом деле полагает, что это выполнялось с полными путями как ниже, устраняя необходимость искать что-либо в $PATH:

sudo /home/dc/node/bin/npm install -g angular-cli
sudo /home/dc/node/bin/node app.js
7
ответ дан 23 November 2019 в 09:05

Вы можете просто создать программную ссылку для узла, npm и npx в каталоге /sbin например

ln -s /usr/local/lib/nodejs/node-v12.14.1-linux-x64/bin/node /sbin/node

Синтаксис > ln -s (источник) (назначение)

Теперь запущенный sudo-узел должен работать

2
ответ дан 6 February 2020 в 11:21

Другие вопросы по тегам:

Похожие вопросы: