如何在JavaScript中计算Linux上的空闲磁盘空间?

3
我可以帮您翻译中文。需要翻译的内容与IT技术相关,您希望计算并显示主文件系统的可用空间,但有3-4个用户,并且所有用户都应该在JavaScript中操作。我们该怎么做呢?
我知道在Linux Shell中,我们可以执行以下操作:
df -h

但是在javascript中不是这样的


你无法从JavaScript访问文件系统。你需要通过PHP来检查它。 - durbnpoisn
1
这不是 JavaScript 的重点...它主要用于 DOM 操作,而不是系统命令...你为什么想要实现这个?如果你的客户使用的是 Windows 系统呢? - Ko2r
因为为了我的朋友们,我创建了一个VPS,并且在管理器中,他们想要看到他们家目录下的可用空间。这仅限于我的服务器(Debian)。 - Kévin Bobo
6个回答

4

Node diskusage将会实现此功能。有关该软件包的更多信息,请参阅diskusage文档

import { check } from "diskusage";

const log = console.log.bind(console);

async function getFreeSpace(path) {
  const diskUsage = await check(path);
  log(`Disk space available to the current user: ${diskUsage.free}`);
  log(`Disk space physically free: ${diskUsage.free}`);
  log(`Total disk space (free + used): ${diskUsage.free}`);
}

getFreeSpace("/home/mike");

好的,谢谢,但是这些免费空间在哪里显示?在我的HTML页面中吗? - Kévin Bobo
1
希望你不介意我添加更多细节 - 随意回滚。 - iLuvLogix
1
@iLuvLogix一点都不! 谢谢您的回答 - 您还可以将其从callbacks移动到promises。 - mikemaccana
1
由于我的代码正在编译中,因此我添加了更多信息.. ;) - iLuvLogix
1
@iLuvLogix 很好!我把你的更改编辑成了一个单一的、现代的示例——回调和 .then() 只是噪音。由于 TS 类型会自动加载,我们不需要额外的部分。 - mikemaccana
显示剩余3条评论

3

NodeJS在v19.6中增加了对statfsstatfsSync的支持。

import { statfs } from 'fs';

// path in mounted volume
const pathToCheck = '/';

const space = statfs(pathToCheck, (err, stats) => {
  if (err) {
    throw err
  }
  console.log('Total free space',stats.bsize*stats.bfree);
  console.log('Available for user',stats.bsize*stats.bavail);
})


谢谢!它在节点18上也起作用了。 - ImBIOS

1

1
你使用的是哪个JavaScript环境?NodeJS有一个childprocess模块,可以用来生成df命令,请参阅http://nodejs.org/api/child_process.html以获取更多详细信息。
我想你不是在基于浏览器的JavaScript沙箱中尝试这个。

我也使用jQuery。我需要安装NodeJS吗? - Kévin Bobo
是的,或者使用某种服务器端语言将值返回并作为值或对象提供给您的jQuery。JavaScript在浏览器沙盒中运行,无法本地访问客户端或服务器资源,您需要通过其他方式使其了解这些信息。正如另一位发帖者建议的那样,Node DiskFree可能是合适的选择。使用Node的优势在于,如果您已经使用JavaScript,这意味着您无需在多种语言之间进行心理切换,而且还有它的模块。 - NMunro
你能给我展示一下用于df命令的子进程吗?它是如何工作的? - Kévin Bobo
使用这里的文档:Node我会按照他们的示例来做。var spawn = require('child_process').spawn; var df = spawn('df', ['-h']); df.stdout.on('data', function (data) { console.log('stdout: ' + data); }); df.stderr.on('data', function (data) { console.log('stderr: ' + data); }); df.on('close', function (code) { console.log('子进程退出代码:' + code); });你之前用过NodeJS吗?你知道如何设置它吗? - NMunro

0

你可以使用diskusage npm和child_process.exec('df / -h')来获取这个参数。 但是diskusage npm更可靠且易于使用。如果你使用cp.exec('...'),你需要自己处理返回的字符串以获取所需的参数。


0
你可以通过运行命令 df -h > df.txt 来将 df -h 的输出写入名为 df.txt 的文件中。然后你可以读取该文件并匹配一个正则表达式。
const { execSync } = require('child_process');
const { readFileSync, unlinkSync } = require('fs')

var space;

execSync('df -h > df.txt');

space = readFileSync('df.txt', (data, err) => {
  if (err) {
    throw err
  }
}).toString().match(/[0-9]+\.[0-9]+?../)[0]

console.log(space)

这个方法很有效,但你需要使用execSync而不是exec - deebugger
这是一种浪费CPU周期的可怕方式来执行一个简单操作。 - Eugene Pankov

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