os 模块提供了与操作系统相关的实用方法和属性。通过它,你可以获取系统的硬件信息、网络接口、系统常量等,非常适合用于系统监控、诊断工具或需要了解运行环境的应用程序。本章将详细介绍 os 模块的常用 API 并提供实用示例。
os 是 Node.js 的内置模块,无需安装,直接引入即可:
const os = require('os');
返回当前操作系统的换行符:POSIX 上是 \n,Windows 上是 \r\n。在生成跨平台文本文件时非常有用。
console.log('换行符:', JSON.stringify(os.EOL));
// Windows: '\r\n', Linux/macOS: '\n'
os.constants 对象包含了各种错误码、信号等常量。例如:
console.log(os.constants.signals); // 信号常量
console.log(os.constants.errno); // 错误码常量
返回编译 Node.js 的可执行文件的 CPU 架构。可能的值有 'arm'、'arm64'、'ia32'、'mips'、'mipsel'、'ppc'、'ppc64'、's390'、's390x'、'x32'、'x64'。
console.log('CPU架构:', os.arch()); // 例如 'x64'
返回一个对象数组,包含每个逻辑 CPU 核心的信息。每个对象包含 model(型号)、speed(速度,单位 MHz)和 times(一个包含用户、系统、空闲等时间统计的对象)。
const cpus = os.cpus();
console.log('CPU 核心数:', cpus.length);
cpus.forEach((cpu, index) => {
console.log(`CPU ${index}: ${cpu.model}, 速度: ${cpu.speed}MHz`);
});
os.freemem() 返回系统空闲内存的字节数,os.totalmem() 返回系统总内存的字节数。
const freeMem = os.freemem();
const totalMem = os.totalmem();
console.log(`空闲内存: ${(freeMem / 1024 / 1024).toFixed(2)} MB`);
console.log(`总内存: ${(totalMem / 1024 / 1024).toFixed(2)} MB`);
console.log(`内存使用率: ${((1 - freeMem/totalMem) * 100).toFixed(2)}%`);
返回当前用户的主目录路径。
console.log('用户主目录:', os.homedir());
返回操作系统的主机名。
console.log('主机名:', os.hostname());
返回一个对象,包含网络接口信息。每个网络接口包含地址、家族、MAC 地址等详细信息。这对于获取本机 IP 地址非常有用。
const nets = os.networkInterfaces();
for (const name of Object.keys(nets)) {
for (const net of nets[name]) {
// 跳过内部地址和 IPv6
if (!net.internal && net.family === 'IPv4') {
console.log(`接口 ${name}: ${net.address}`);
}
}
}
返回编译 Node.js 的操作系统平台。可能的值有 'aix'、'darwin'、'freebsd'、'linux'、'openbsd'、'sunos'、'win32'。
console.log('操作系统平台:', os.platform());
返回操作系统的版本。
console.log('操作系统版本:', os.release());
返回操作系统的默认临时目录。
console.log('临时目录:', os.tmpdir());
返回操作系统名称。在 Linux 上返回 'Linux',在 macOS 上返回 'Darwin',在 Windows 上返回 'Windows_NT'。
console.log('操作系统类型:', os.type());
返回系统启动后的运行时间(单位:秒)。
const uptime = os.uptime();
const hours = Math.floor(uptime / 3600);
const minutes = Math.floor((uptime % 3600) / 60);
const seconds = Math.floor(uptime % 60);
console.log(`系统已运行: ${hours} 小时 ${minutes} 分钟 ${seconds} 秒`);
返回当前用户的信息,包括用户名、uid、gid、主目录、默认 shell。在 Windows 上可能部分字段缺失。
const userInfo = os.userInfo();
console.log('用户名:', userInfo.username);
console.log('主目录:', userInfo.homedir);
console.log('Shell:', userInfo.shell);
返回系统的平均负载数组(1分钟、5分钟、15分钟)。注意:在 Windows 上始终返回 [0, 0, 0]。
const loadavg = os.loadavg();
console.log('1分钟平均负载:', loadavg[0]);
console.log('5分钟平均负载:', loadavg[1]);
console.log('15分钟平均负载:', loadavg[2]);
以下是一个简单的系统监控脚本,定期输出系统信息:
const os = require('os');
function getSystemInfo() {
return {
platform: os.platform(),
hostname: os.hostname(),
arch: os.arch(),
cpus: os.cpus().length,
memory: {
total: (os.totalmem() / 1024 / 1024 / 1024).toFixed(2) + ' GB',
free: (os.freemem() / 1024 / 1024 / 1024).toFixed(2) + ' GB',
usage: ((1 - os.freemem() / os.totalmem()) * 100).toFixed(2) + '%'
},
uptime: os.uptime(),
loadavg: os.loadavg()
};
}
setInterval(() => {
console.clear();
console.log('===== 系统监控 =====');
console.log(getSystemInfo());
}, 2000);
os.loadavg() 返回空值。os.tmpdir())返回的路径分隔符是平台相关的,建议与 path 模块配合使用。shell 字段。os 模块常与 fs、path 等结合,例如创建临时文件:
const os = require('os');
const path = require('path');
const fs = require('fs').promises;
async function createTempFile() {
const tmpDir = os.tmpdir();
const filePath = path.join(tmpDir, 'my-temp-file.txt');
await fs.writeFile(filePath, '临时数据');
console.log('临时文件创建于:', filePath);
}
createTempFile();
os 模块提供了丰富的 API 来获取底层操作系统信息,对于系统监控、环境检测、跨平台工具开发非常有帮助。通过本章的学习,你应该掌握了常用方法的使用,并能够结合实际需求编写系统相关的程序。下一章我们将介绍 url 模块,用于解析和处理 URL。