/usr/bin/env: node: 权限被拒绝

13

-rwxr-xr-x 1 mod mod 81232432 Jan 18 13:48 /root/.nvm/versions/node/v17.4.0/bin/node - ABadOmelette
权限 -rwxr-xr-x 告诉我们 node 是可执行的。如果你运行 node/root/.nvm/versions/node/v17.4.0/bin/node(两者都试一下),会发生什么? - md2perpe
1
在控制台中输入以下命令,就像您使用 ls -l "$(which node)" 命令一样。 - md2perpe
因此,节点是可运行的,所以那不是问题。 - md2perpe
1
如果你运行/usr/bin/env node会发生什么? - md2perpe
显示剩余11条评论
5个回答

13

我在一个Docker化的Node环境中工作时发现,由于容器是使用root用户运行的,所以挂载的源代码目录的所有权与主机环境不同。使用以下命令更改所有权:

chown -R root:root .

对我来说这样就解决了错误!


1
解决了我的问题。 - blockhead
如何使这个永久性?似乎我每次ssh进入服务器都需要运行它。我甚至没有在一个docker化的环境中工作。 - blockhead
一旦您运行该命令,它应该是永久性的。除非有其他进程再次更改权限? - Raaka
https://dev59.com/8ShT14gBEkM9YrnyBSmc - Raman Joshi
在更改 chown 后,我需要在 npm 命令中添加 --unsafe-perm 才能使其正常工作,例如 npm run prod --unsafe-perm - Mtxz

4
问题最终是文件所有权的问题。根用户拥有该项目中的许多内容,而不是我的个人资料。只需将所有权从根用户更改为我即可。

https://dev59.com/8ShT14gBEkM9YrnyBSmc - Raman Joshi

1

对我来说,使用NVM重新安装node解决了这个问题:


0

对于其他人遇到类似情况的,还有另一种调查途径。可能会有其他因素影响执行权限。驱动器挂载上有一个 exec 标志,用于启用脚本执行(对于自动挂载的 USB 闪存驱动器来说是一个很好的安全特性!)。因此,如果您的代码在您挂载的驱动器上,则需要设置该选项才能在其上运行脚本。明显的迹象是脚本权限正确(适当的用户、组和执行位设置),但仍然抱怨 shebang 行(第一行)被拒绝访问。此外,如果您键入 mount 命令,可能会看到您源代码所在的挂载点设置了 noexec(如果设置了 exec,则可能不会显示在此处)。您的挂载设置各不相同,但一个起点是您的 /etc/fstab 文件。


-2

你应该以超级用户身份运行命令 sudo npm run build


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接