我安装了Node和NPM。
$ node -v
v0.10.25
$ npm -v
1.3.24
作为普通用户,如果我尝试安装全局程序包,则会收到权限错误:
$ npm -g install grunt-cli
npm http GET https://registry.npmjs.org/grunt-cli
npm http 304 https://registry.npmjs.org/grunt-cli
npm ERR! error rolling back Error: EACCES, unlink '/usr/local/bin/grunt'
npm ERR! error rolling back grunt-cli@0.1.13 { [Error: EACCES, unlink '/usr/local/bin/grunt'] errno: 3, code: 'EACCES', path: '/usr/local/bin/grunt' }
npm ERR! Error: EACCES, unlink '/usr/local/bin/grunt'
npm ERR! { [Error: EACCES, unlink '/usr/local/bin/grunt'] errno: 3, code: 'EACCES', path: '/usr/local/bin/grunt' }
npm ERR!
npm ERR! Please try running this command again as root/Administrator.
很公平,让我使用sudo
:
$ sudo npm -g install grunt-cli
/usr/local/bin/grunt -> /usr/local/lib/node_modules/grunt-cli/bin/grunt
grunt-cli@0.1.13 /usr/local/lib/node_modules/grunt-cli
├── resolve@0.3.1
├── nopt@1.0.10 (abbrev@1.0.4)
└── findup-sync@0.1.2 (lodash@1.0.1, glob@3.1.21)
看起来不错,但现在如果我尝试使用新安装的软件包,我就不能:
$ grunt
fs.js:695
return binding.readlink(pathModule._makeLong(path));
^
Error: EACCES, permission denied '/usr/local/bin/grunt'
at Object.fs.readlinkSync (fs.js:695:18)
at Object.realpathSync (fs.js:1283:25)
at tryFile (module.js:142:15)
at Function.Module._findPath (module.js:181:18)
at Function.Module._resolveFilename (module.js:336:25)
at Function.Module._load (module.js:280:25)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:902:3
令人沮丧。但是,如果我卸载sudo npm -g uninstall grunt-cli
,然后通过完全切换到root再次尝试,它可以工作:
$ sudo su -
root# npm -g install grunt-cli
/usr/local/bin/grunt -> /usr/local/lib/node_modules/grunt-cli/bin/grunt
grunt-cli@0.1.13 /usr/local/lib/node_modules/grunt-cli
├── resolve@0.3.1
├── nopt@1.0.10 (abbrev@1.0.4)
└── findup-sync@0.1.2 (lodash@1.0.1, glob@3.1.21)
^D
$ grunt
grunt-cli: The grunt command line interface. (v0.1.13)
这适用于所有全球软件包(咕噜咕噜,主管等)并且非常令人沮丧。为什么sudo
失败,但su
有效?我该怎么做才能修复我的环境?
答案 0 :(得分:2)
猜测,它可能是umask - 你可能有077
,而root的默认值是022
。因此,使用sudo,创建的文件不是世界可读的,但是它们是su。
使用sudo安装时,/ usr / local / bin / grunt文件的权限/所有权是什么?与su一起安装时