11

如何查看正在运行的 node.js 进程对给定文件的权限(读/写/执行)?

我希望该fs.Stats对象有一些关于权限的信息,但我没有看到任何信息。是否有一些内置功能可以让我进行此类检查?例如:

var filename = '/path/to/some/file';
if (fs.canRead(filename)) // OK...
if (fs.canWrite(filename)) // OK...
if (fs.canExecute(filename)) // OK...

当然,我不必尝试在每种模式下打开文件并将错误作为否定肯定处理,对吧?必须有一个更简单的方法...

4

4 回答 4

19

我迟到了,但是,我正在寻找与您相同的原因并了解到这一点。

fs.access是你需要的。它可从节点 v0.11.15 获得。

function canWrite(path, callback) {
  fs.access(path, fs.W_OK, function(err) {
    callback(null, !err);
  });
}

canWrite('/some/file/or/folder', function(err, isWritable) {
  console.log(isWritable); // true or false
});
于 2016-03-22T04:38:03.160 回答
5

很好地提到了fs.accessSync (path[, mode]) :

同步测试用户对 path 指定的文件或目录的权限。mode 参数是一个可选的整数,它指定要执行的可访问性检查。检查文件访问常量以获取可能的模式值。可以创建由两个或多个值的按位或组成的掩码(例如 fs.constants.W_OK | fs.constants.R_OK)。

如果任何可访问性检查失败,则会抛出错误。否则,该方法将返回未定义。

嵌入示例:

try {
  fs.accessSync('etc/passwd', fs.constants.R_OK | fs.constants.W_OK);
  console.log('can read/write');
} catch (err) {
  console.error('no access!');
}
于 2020-05-02T11:48:25.373 回答
1

检查可读性并不像 PHP 这样的语言通过将其抽象到单个库函数中来使其看起来那么简单。一个文件可能对所有人可读,或仅对其组或仅对其所有者可读;如果不是每个人都可以阅读,您需要检查您是否真的是该组的成员,或者您是否是该文件的所有者。尝试打开文件并处理错误通常更容易和更快(不仅编写代码,而且执行检查)。

于 2012-06-18T18:41:50.930 回答
-4

使用子进程怎么样?

var cp = require('child_process');

cp.exec('ls -l', function(e, stdout, stderr) {
  if(!e) {
    console.log(stdout);
    console.log(stderr);
    // process the resulting string and check for permission
  }
});

不确定是否process和 *child_process* 共享相同的权限。

于 2012-06-18T19:30:24.397 回答