错误:EACCES:权限被拒绝

Posted

技术标签:

【中文标题】错误:EACCES:权限被拒绝【英文标题】:Error: EACCES: permission denied 【发布时间】:2016-11-14 09:36:36 【问题描述】:

我运行 npm install lodash 但它抛出 Error: EACCES: permission denied 错误。我知道这是权限问题,但据我所知,在本地安装节点模块不需要 sudo 权限。如果我使用 sudo 运行它,它会安装在 ~/node_modules 文件夹中。 drwxrwxr-x 是现有文件夹的文件权限。我无法弄清楚可能出了什么问题。

以下是错误信息。

npm ERR! tar.unpack untar error /home/rupesh/.npm/lodash/4.13.1/package.tgz
npm ERR! Linux 3.13.0-88-generic
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install" "lodash"
npm ERR! node v4.3.1
npm ERR! npm  v2.14.12
npm ERR! path /home/rupesh/node_modules/lodash
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall mkdir

npm ERR! Error: EACCES: permission denied, mkdir '/home/rupesh/node_modules/lodash'
npm ERR!     at Error (native)
npm ERR!   [Error: EACCES: permission denied, mkdir '/home/rupesh/node_modules/lodash']
npm ERR!   errno: -13,
npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'mkdir',
npm ERR!   path: '/home/rupesh/node_modules/lodash',
npm ERR!   fstream_type: 'Directory',
npm ERR!   fstream_path: '/home/rupesh/node_modules/lodash',
npm ERR!   fstream_class: 'DirWriter',
npm ERR!   fstream_stack: 
npm ERR!    [ '/usr/local/lib/node_modules/npm/node_modules/fstream/lib/dir-writer.js:35:25',
npm ERR!      '/usr/local/lib/node_modules/npm/node_modules/mkdirp/index.js:47:53',
npm ERR!      'FSReqWrap.oncomplete (fs.js:82:15)' ] 
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

npm ERR! Please include the following file with any support request:
npm ERR!     /home/rupesh/Desktop/es6/npm-debug.log

【问题讨论】:

是文件夹node_modulesroot 的所有者吗? node_module 文件夹尚未在我打算安装 lodash 的文件夹中创建。 你是在 /home/rupesh/ 目录或其他目录中运行 npm install 吗? 我运行 npm install 的文件夹路径是 ~/Desktop/es6 ls -l ~/Desktop | grep es6 的输出是什么确保你是 es6 目录的所有者 【参考方案1】:

这个命令修复了这个问题。它对我有用:

sudo npm install -g --unsafe-perm=true --allow-root

【讨论】:

对于像我这样的任何人,虽然此命令在撰写本文时似乎有效,但对于 Node v10.10.0,我收到以下错误:“npm ERR!无法安装 /var/www/项目:缺少包名” 标志 --unsafe-perm=true --allow-root 为我们工作,使用 node v10.15.0 以 root 用户身份安装 node-sass 无法安装的现有应用程序。我们用于将 node-sass 安装到本地目录 node_modules 文件夹的确切命令是 # npm install --save-dev --unsafe-perm=true --allow-root node-sass@latest 你可以使用root来解决问题(虽然不推荐这样做)。 我能够通过使用这些标志让它工作,所以答案是:sudo npm install -g --unsafe-perm=true --allow-root @ 这对我有用:sudo npm install --save -g solgraph --unsafe-perm=true --allow-root【参考方案2】:

我在全球范围内安装 webpack 服务器时遇到同样的问题,使用来自this Url 的步骤解决了我的问题,我会为你工作。

上面提到的步骤有: 在开始之前备份您的计算机。

为全局安装创建一个目录:

1. mkdir ~/.npm-global

配置 npm 以使用新的目录路径:

2.npm config set prefix '~/.npm-global'

打开或创建一个 ~/.profile 文件并添加以下行:

3.export PATH=~/.npm-global/bin:$PATH

回到命令行,更新你的系统变量:

4.source ~/.profile

测试:在不使用 sudo 的情况下全局下载包。

npm install -g jshint

您可以使用相应的 ENV 变量来代替步骤 2-4(例如,如果您不想修改 ~/.profile):

NPM_CONFIG_PREFIX=~/.npm-global

【讨论】:

在莫哈韦工作。非常感谢经过 4-5 小时的故障排除,这成功了! 4.在卡塔利娜source ~/.zshrc 这适用于我在 Ubuntu 18.04 上。感谢您的帮助 曾在 Mac M1 Big Sur 上工作。谢谢!【参考方案3】:

我在 Linux 上遇到了问题。我写了

chown -R myUserName /home/myusername/myfolder

在我的项目文件夹中。

警告:这是不是正确的解决方法; 不要运行它,如果你不确定会产生什么后果。

【讨论】:

非常不推荐。这会触及您的所有目录并删除其中任何一个的根权限。如果某些东西需要设置为 root,这会破坏您当前的配置。 我同意@PatrickDaSilva。这搞砸了我的整个服务器.. 使用绝对路径会更安全,例如 chown -R myusername /home/myusername/myfolder 而不是 ./*。如果您从根文件夹中运行答案中的命令,它将搞砸一切! 无论如何,在我看来,这是正确的解决方案。出于某种原因,Webpack 输出文件夹归 root 所有,所以现在它又归我所有,并且可以正常工作。我同意您不会随意执行此操作,但是如果您查看文件夹并且像 WTH 一样是这个根吗?然后在该文件夹上执行此操作。 @PatrickDaSilva 将用户在其主目录中拥有的文件的所有权更改为用户并没有什么坏处。事实上通常这就是你想要的: chown -R $USER ~/【参考方案4】:

它没有others (r-x) 的写权限。试试

chmod a+w <folder>

然后重复。

【讨论】:

没有chown 有一个-r 选项来防止必须在node_modules 中的每个文件夹上使用它吗? @Juanjo Salvador 它没有用。它抛出了同样的错误。 @DrakaSAN 是的,chown 有一个递归选项。【参考方案5】:

使用 npm init 创建 package.json 解决了我的问题。

【讨论】:

但我不确定为什么在安装节点模块时需要 package.json 文件,因为我没有更新或使用 package.json 文件,因为我没有使用 --save 或 --save- dev 或类似的命令。 这很奇怪。我认为你的 npm conf 中有些东西搞砸了,并且初始化重置它,无论如何它应该永远是一个谜,因为我在其他地方找不到对类似问题的单一参考。 与 npm 6.9.0 有类似的问题,这对我也有用。【参考方案6】:

尝试使用以下命令为您的项目文件夹授予所有权限

sudo chmod -R 777 /yourProjectDirectoryName

运行

sudo npm install lodash

【讨论】:

这是一个jr解决方案 您甚至可能不需要 777。对我来说,问题只是 # 太低了。 (775 修复了它。) "对文件或目录设置777权限意味着所有用户都可读、可写和可执行,可能会带来巨大的安全风险。" -linuxize.com/post/what-does-chmod-777-mean【参考方案7】:

这立即解决了我的问题 - mac Mojave 10.14.6 - phpStorm。

未处理的拒绝错误:EACCES:权限被拒绝,mkdir '/Users/myname/.npm/_cacache/index-v5/fb/5a'

sudo chown -R $USER:$GROUP ~/.npm
sudo chown -R $USER:$GROUP ~/.config

原帖: https://***.com/a/50639828

【讨论】:

【参考方案8】:

一个相关问题:

几天浪费了 3 个小时。

在 AWS EC2 机器上,以下工作:

sudo chown -R $(whoami) /home/ubuntu/.cache
sudo chown -R $(whoami) /home/ubuntu/.config
sudo chown -R $(whoami) /home/ubuntu/.local
sudo chown -R $(whoami) /home/ubuntu/.npm
sudo chown -R $(whoami) /home/ubuntu/.pm2

希望对您有所帮助。

【讨论】:

感谢@Manohar Reddy Poreddy,在尝试了许多对我有用的解决方案之后。【参考方案9】:

从我在您发布的日志中可以看到:

npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'mkdir',
npm ERR!   path: '/home/rupesh/node_modules/lodash',
npm ERR!   fstream_type: 'Directory',
npm ERR!   fstream_path: '/home/rupesh/node_modules/lodash',
npm ERR!   fstream_class: 'DirWriter',

目录/home/rupesh/node_modules/ 没有必要的权限来创建目录,所以运行chown -r rupesh:rupesh /home/rupesh/node_modules/ 这应该可以解决它。

【讨论】:

执行 chown -R rupesh:rupesh /home/rupesh/node_modules/ 并再次运行 npm install lodash 在 ~/node_module 文件夹中安装了 lodash。但这一次它不会抛出错误。但它不是在哪里我打算安装。 是的,我知道您应该在主目录而不是桌面中创建项目。 npm 出于某种原因正在将您的模块安装在/home/rupesh/node_modules 中。无论如何,在您的主目录中工作的任何方式都应该是理想的 我认为 ~/Projects/es6 等效于 ~/Desktop/es6 结构明智。我无法弄清楚为什么 node_modules 没有在 es6 文件夹中创建以及为什么 lodash(或其他)模块里面没有安装。我之前没有遇到过这个问题,但是今天出了什么问题,这就是我想弄清楚的。 是的,我阅读了我之前的两条评论并意识到了愚蠢:),我环顾四周,找不到其他人有同样的问题。你的代码能找到loadash 模块吗?。【参考方案10】:

LUBUNTU 19.10 / 运行相同的问题:$ npm start

转储: 错误:EACCES:权限被拒绝,打开'/home/simon/xxx/pagebuilder/resources/scripts/registration/node_modules/.cache/@babel/register/.babel.7.4.0.development.json' 在 Object.fs.openSync (fs.js:646:18) 在 Object.fs.writeFileSync (fs.js:1299:33) 保存时 (/home/simon/xxx/pagebuilder/resources/scripts/registration/node_modules/@babel/register/lib/cache.js:52:15) 在 _combinedTickCallback (内部/进程/next_tick.js:132:7) 在 process._tickCallback (internal/process/next_tick.js:181:9) 在 Function.Module.runMain (module.js:696:11) 在对象。 (/home/simon/xxxx/pagebuilder/resources/scripts/registration/node_modules/@babel/node/lib/_babel-node.js:234:23) 在 Module._compile (module.js:653:30) 在 Object.Module._extensions..js (module.js:664:10) 在 Module.load (module.js:566:32)

看起来我的默认用户(管理员)没有节点模块目录的权限。

这为我解决了问题!

$ sudo chmod a+w node_modules -R ## from project root

【讨论】:

也在 20.04 工作。【参考方案11】:

FWIW 我有相同的症状,但包装不同。创建 package.json 并运行 npm init 没有解决了我的问题。

在这个系统上,显然是在这个位置创建了具有 root 权限的新文件夹。在npm install 期间,会创建新文件夹。这导致 npm install 中途失败,即使使用 sudo。

解决方案是在没有根 umask 的不同位置运行 npm install app

【讨论】:

【参考方案12】:

我通过更改我的 npm 目录的权限解决了这个问题。我去了 npm 全局目录,它位于

/home/<user-name>

我通过输入这个命令进入了这个目录

cd /home/<user-name>

然后输入此命令更改.npm文件夹的权限。

sudo chmod -R 777 ".npm"

它对我来说就像一种魅力。但这有一个安全漏洞,即所有级别都可以访问您的全局包目录。

【讨论】:

你为什么要允许全世界访问这个特定的文件夹? 无论您希望完成什么,chmod 777 都是错误危险的。您绝对不想这样做在任何情况下向所有用户授予对可执行文件或系统文件的写入权限。您将希望尽快恢复正常权限(对于您的用例,可能是chmod 755)并在尝试再次使用之前了解 Unix 权限模型。如果这种情况发生在可以访问 Internet 的系统上,请检查入侵者是否可以利用它来提升他们的权限。【参考方案13】:

如果您遇到如下错误

Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/<PackageName>/vendor'

我建议使用下面的命令来安装你的全局包

sudo npm install -g <PackageName> --unsafe-perm=true --allow-root

【讨论】:

这个答案似乎更实用【参考方案14】:
sudo chown -R $(whoami) /usr/local/bin

使当前用户成为/usr/local/bin 文件夹的所有者。这个文件夹的权限是个麻烦。

【讨论】:

【参考方案15】:

在根目录下首次安装时不使用 -g(全局)。尝试使用 -g (global) 后它对我有用。

【讨论】:

工作!在 Mac 上将我的代码文件夹移动到我的根文件夹: HardDrive/ ,并且“npm install”运行完美。然后我将代码文件夹移回 HardDrive/users/myUserName/Projects/code 中我想要的位置,再次运行“npm install”,这一次,它成功了。【参考方案16】:

这是 GNU/Linux (Debian) 用户的解决方案(将 USERNAME 替换为 您的用户名):

sudo chown -R $USER:$(id -gn $USER) /home/USERNAME/.config

【讨论】:

【参考方案17】:

尝试使用这个: 在命令行的主目录中,为全局安装创建一个目录:

mkdir ~/.npm-global

配置 npm 以使用新的目录路径:

npm config set prefix '~/.npm-global'

在您喜欢的文本编辑器中,打开或创建一个 ~/.profile 文件并添加以下行:

export PATH=~/.npm-global/bin:$PATH

在命令行上,更新你的系统变量:

source ~/.profile

在不使用 sudo 的情况下测试全局安装包,希望对您有所帮助

【讨论】:

【参考方案18】:

我尝试了大多数这些建议,但没有一个奏效。然后我运行npm clean-install,它解决了我的问题。

【讨论】:

【参考方案19】:

在尝试了任何事情之后,我关注了 NPM 的这个视频。 它顺利地为我解决了! https://www.youtube.com/embed/bxvybxYFq2o

说明如下(在较旧的 Mac 上):

    在终端中,在您的用户目录中,创建此文件夹mkdir .npm-global。这将是所有全局 NPM 安装所在的新文件夹,而不是存在权限问题的默认 .npm。 cd .npm-global/ 运行npm config set prefix /Users/your_user/.npm-global 设置路径让系统知道在哪里可以找到包:运行vi ~/.profile。如果您没有此文件,请先运行touch ~/.profile,然后运行vi ~/.profile。在最顶部写export PATH=/Users/your_user/.npm-global/bin:$PATH。您也可以使用文本编辑器打开此文件(因为它是一个隐藏文件,请使用 SHIFT + CMD + . 显示它)。 回到终端,在 /.npm-global 文件夹中,运行source ~/.profile

您现在应该可以在全球范围内安装您的软件包了。

但是,上述内容似乎不适用于 BigSure 等较新的操作系统。

这应该可以解决:

sudo chown -R `whoami` ~/.npm
sudo chown -R `whoami` /usr/local/lib/node_modules

【讨论】:

【参考方案20】:

删除 dist 文件夹,这解决了我的问题!

【讨论】:

【参考方案21】:

在 Windows 上,最终发现该端口已被 IIS 使用。

停止 IIS(右键单击,退出),解决了问题。

【讨论】:

【参考方案22】:

只需将全局node_modules 目录的所有者更改为您的用户即可:

sudo chown -R $USER:$GROUP /usr/local/lib/node_modules

【讨论】:

【参考方案23】:

node 建议执行以下操作:

 sudo chown -R $USER:$(id -gn $USER) /home/venkatesh/.config

如果你执行

npm config

你会看到这样的东西

│                   npm update check failed                   │
│             Try running with sudo or get access             │
│            to the local update config store via             │
│ sudo chown -R $USER:$(id -gn $USER) /home/venkatesh/.config │

它对我有用。

【讨论】:

【参考方案24】:

以管理员身份打开 CMD(在这种情况下为 Windows WSl)为我解决了问题。我使用的是 NodeJS 版本 14.15.1

【讨论】:

【参考方案25】:

我在运行 Bigsur 11.4 的 Mac 上尝试了上面的一些答案,但没有奏效。但有效的是 npmjs 文档网站上发布的以下说明。 https://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally

【讨论】:

【参考方案26】:

在所有chown 命令之后,权限被拒绝错误仍然存​​在。但是,更新 npm sudo npm install -g npm@8.3.2 并将路径更改为 PATH="$PATH" 对我有用。

【讨论】:

【参考方案27】:

执行这些命令,问题就解决了!

sudo chmod -R 777 /usr/local/bin
sudo chmod -R 777 /usr/local/lib/node_modules

【讨论】:

对于/usr/local 和所有子目录,权限应为rwxr-xr-x 并由root 拥有。系统用户可以在这个目录结构中读取和执行,但不能编辑、创建文件。话虽如此,您的回答建议向所有人授予权限。而且,没有描述将如何和什么会受到影响,或者为什么会解决这个问题。 @Kuliraj 我明白你所说的。我已经更新了这个答案,这样如果有人在本地机器上的开发过程中遇到这个问题,他们可以快速解决这个问题。

以上是关于错误:EACCES:权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

Meteor 错误:EACCES:权限被拒绝,rmdir 'build'

错误:EACCES:权限被拒绝,取消链接 '/usr/local/bin/npm

sh 未处理的拒绝错误:EACCES:权限被拒绝

错误:EACCES:权限被永远拒绝

NPM/Cordova 权限错误:EACCES:权限被拒绝,scandir

电子制造商:EACCES:权限被拒绝