sudo执行命令提示command not found 用n切换nodejs版本报权限错误
解决yarn全局安装n命令切换Node.js版本的两个问题
问题1:sudo执行时提示yarn/n命令不存在
根因:sudo默认的安全PATH不包含yarn全局安装的二进制文件目录,和普通用户的PATH配置不互通。
解决方法:
- 临时方案:执行命令时带上n的全路径,直接运行:
sudo $(yarn global bin)/n <你要切换的版本号> - 永久方案:把yarn全局二进制目录加入sudo安全路径
- 先执行
yarn global bin拿到完整路径,示例返回值为/home/你的用户名/.yarn/bin - 执行
sudo visudo编辑sudo配置文件,找到Defaults secure_path =开头的行,把刚才拿到的路径追加到末尾,路径之间用冒号分隔,示例修改后:
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/home/你的用户名/.yarn/bin- 按
ctrl+o保存,ctrl+x退出即可生效。
- 先执行
问题2:直接运行n提示权限被拒绝
根因:n默认将Node.js版本存储到系统级目录/usr/local/n,普通用户默认没有该目录的写入权限。
解决方法(二选一即可):
- 方案1(推荐,无系统权限修改):将n的存储目录配置为当前用户私有目录
- 打开你当前使用的shell配置文件(bash对应
~/.bashrc,zsh对应~/.zshrc,fish对应~/.config/fish/config.fish),追加以下两行配置:
export N_PREFIX="$HOME/.n" export PATH="$N_PREFIX/bin:$PATH"- 执行
source ~/.bashrc(对应你修改的配置文件)生效,后续运行n相关命令完全不需要sudo,不会再有权限报错。
- 打开你当前使用的shell配置文件(bash对应
- 方案2:直接给系统目录开放普通用户写入权限
执行以下命令修改相关目录的所属用户为当前用户,之后即可直接运行n:sudo mkdir -p /usr/local/n && sudo chown -R $(whoami) /usr/local/n /usr/local/bin /usr/local/lib /usr/local/include /usr/local/share
报错截图参考

内容的提问来源于stack exchange,提问作者gaurav
相关产品推荐
相关产品推荐

