Node.js os 模块
Node.js 的 os
模块是一个内置的核心模块,提供了与操作系统相关的实用方法和属性。通过这个模块,我们可以获取关于当前运行 Node.js 的操作系统的各种信息,如 CPU 架构、内存使用情况、网络接口等。
为什么需要 os 模块
在开发应用程序时,有时我们需要根据不同的操作系统环境执行不同的操作,或者需要监控系统的资源使用情况。os
模块就为我们提供了这样的能力,让我们可以轻松地获取这些系统信息。
如何使用 os 模块
要使用 os
模块,首先需要引入它:
const os = require('os');
常用方法介绍
1. 获取操作系统信息
实例
console.log(os.platform()); // 返回操作系统平台,如 'darwin', 'win32', 'linux'
console.log(os.type()); // 返回操作系统名称,如 'Linux', 'Darwin', 'Windows_NT'
console.log(os.arch()); // 返回 CPU 架构,如 'x64', 'arm'
console.log(os.release()); // 返回操作系统版本
console.log(os.type()); // 返回操作系统名称,如 'Linux', 'Darwin', 'Windows_NT'
console.log(os.arch()); // 返回 CPU 架构,如 'x64', 'arm'
console.log(os.release()); // 返回操作系统版本
2. 获取内存信息
实例
console.log(os.totalmem()); // 返回系统总内存(字节)
console.log(os.freemem()); // 返回系统可用内存(字节)
// 转换为 MB 显示
console.log(`总内存: ${os.totalmem() / 1024 / 1024} MB`);
console.log(`可用内存: ${os.freemem() / 1024 / 1024} MB`);
console.log(os.freemem()); // 返回系统可用内存(字节)
// 转换为 MB 显示
console.log(`总内存: ${os.totalmem() / 1024 / 1024} MB`);
console.log(`可用内存: ${os.freemem() / 1024 / 1024} MB`);
3. 获取 CPU 信息
实例
console.log(os.cpus()); // 返回包含每个 CPU/核心信息的对象数组
console.log(os.loadavg()); // 返回 1, 5, 15 分钟的平均负载(仅 Linux/Unix)
// 获取 CPU 核心数
console.log(`CPU 核心数: ${os.cpus().length}`);
console.log(os.loadavg()); // 返回 1, 5, 15 分钟的平均负载(仅 Linux/Unix)
// 获取 CPU 核心数
console.log(`CPU 核心数: ${os.cpus().length}`);
4. 获取网络接口信息
实例
console.log(os.networkInterfaces()); // 返回网络接口信息
5. 获取用户相关信息
实例
console.log(os.homedir()); // 返回当前用户的主目录
console.log(os.userInfo()); // 返回当前用户的信息
console.log(os.hostname()); // 返回操作系统的主机名
console.log(os.userInfo()); // 返回当前用户的信息
console.log(os.hostname()); // 返回操作系统的主机名
实际应用示例
示例 1:系统监控工具
实例
const os = require('os');
function systemMonitor() {
console.log('=== 系统监控 ===');
console.log(`操作系统: ${os.type()} ${os.release()}`);
console.log(`CPU 架构: ${os.arch()}`);
console.log(`CPU 核心数: ${os.cpus().length}`);
console.log(`总内存: ${(os.totalmem() / 1024 / 1024).toFixed(2)} MB`);
console.log(`可用内存: ${(os.freemem() / 1024 / 1024).toFixed(2)} MB`);
console.log(`系统运行时间: ${(os.uptime() / 60 / 60).toFixed(2)} 小时`);
}
systemMonitor();
function systemMonitor() {
console.log('=== 系统监控 ===');
console.log(`操作系统: ${os.type()} ${os.release()}`);
console.log(`CPU 架构: ${os.arch()}`);
console.log(`CPU 核心数: ${os.cpus().length}`);
console.log(`总内存: ${(os.totalmem() / 1024 / 1024).toFixed(2)} MB`);
console.log(`可用内存: ${(os.freemem() / 1024 / 1024).toFixed(2)} MB`);
console.log(`系统运行时间: ${(os.uptime() / 60 / 60).toFixed(2)} 小时`);
}
systemMonitor();
示例 2:获取网络 IP 地址
实例
const os = require('os');
function getLocalIP() {
const interfaces = os.networkInterfaces();
for (const interfaceName in interfaces) {
for (const iface of interfaces[interfaceName]) {
if (iface.family === 'IPv4' && !iface.internal) {
return iface.address;
}
}
}
return '127.0.0.1';
}
console.log(`本机 IP 地址: ${getLocalIP()}`);
function getLocalIP() {
const interfaces = os.networkInterfaces();
for (const interfaceName in interfaces) {
for (const iface of interfaces[interfaceName]) {
if (iface.family === 'IPv4' && !iface.internal) {
return iface.address;
}
}
}
return '127.0.0.1';
}
console.log(`本机 IP 地址: ${getLocalIP()}`);
注意事项
os
模块提供的信息是只读的,不能用于修改系统配置。- 不同操作系统返回的信息可能有所不同,特别是 Windows 和 Unix-like 系统之间。
- 某些方法(如
loadavg()
)在 Windows 上可能不可用或返回不同的值。 - 内存信息以字节为单位返回,通常需要转换为更易读的单位(如 MB 或 GB)。
方法
方法 | 描述 | 示例 |
---|---|---|
os.arch() | 返回操作系统的 CPU 架构。 | console.log(os.arch()); // 输出:'x64' |
os.constants | 返回包含操作系统特定常量的对象(如错误码、信号等)。 | console.log(os.constants.signals); |
os.cpus() | 返回一个对象数组,每个对象包含 CPU 内核的信息,如型号、速度、使用情况等。 | console.log(os.cpus()); |
os.endianness() | 返回 CPU 的字节序(BE 表示大端字节序,LE 表示小端字节序)。 | console.log(os.endianness()); // 输出:'LE' |
os.freemem() | 返回系统的空闲内存量(以字节为单位),可用于监控系统资源。 | console.log(os.freemem()); |
os.homedir() | 返回当前用户的主目录路径。 | console.log(os.homedir()); |
os.hostname() | 返回主机名。 | console.log(os.hostname()); |
os.loadavg() | 返回一个包含 1、5 和 15 分钟平均负载的数组,仅在 Unix 系统上有效。 | console.log(os.loadavg()); |
os.networkInterfaces() | 返回一个对象,包含每个网络接口的地址信息,如 IP 地址 、MAC 地址 。 | console.log(os.networkInterfaces()); |
os.platform() | 返回操作系统平台,如 'darwin' 、'win32' 、'linux' 等。 | console.log(os.platform()); |
os.release() | 返回操作系统的发行版本。 | console.log(os.release()); |
os.tmpdir() | 返回操作系统默认的临时文件目录路径。 | console.log(os.tmpdir()); |
os.totalmem() | 返回系统总内存量(以字节为单位)。 | console.log(os.totalmem()); |
os.type() | 返回操作系统的名称,如 'Linux' 、'Darwin' (macOS)、'Windows_NT' 等。 | console.log(os.type()); |
os.uptime() | 返回操作系统运行时间,以秒为单位。 | console.log(os.uptime()); |
os.userInfo([options]) | 返回当前用户的详细信息,如用户名、主目录、UID、GID 等。支持配置 options 对象,可设置字符编码(默认是 'utf8' )。 | console.log(os.userInfo()); |
属性
属性 | 描述 | 示例 |
---|---|---|
os.EOL | 返回当前操作系统的行尾标识符(\n 或 \r\n ),方便处理跨平台的文件读写。 | console.log(os.EOL); // Windows 输出:'\r\n',Linux 输出:'\n' |
实例
创建 main.js 文件,代码如下所示:
实例
const os = require('os');
// 获取系统架构
console.log('系统架构:', os.arch());
// 获取 CPU 信息
console.log('CPU 信息:', os.cpus());
// 获取空闲内存
console.log('空闲内存:', os.freemem());
// 获取总内存
console.log('总内存:', os.totalmem());
// 获取主目录
console.log('主目录:', os.homedir());
// 获取系统平台
console.log('系统平台:', os.platform());
// 获取系统名称
console.log('系统名称:', os.type());
// 获取平均负载(仅适用于 Unix 系统)
console.log('平均负载:', os.loadavg());
// 获取网络接口信息
console.log('网络接口信息:', os.networkInterfaces());
// 获取系统架构
console.log('系统架构:', os.arch());
// 获取 CPU 信息
console.log('CPU 信息:', os.cpus());
// 获取空闲内存
console.log('空闲内存:', os.freemem());
// 获取总内存
console.log('总内存:', os.totalmem());
// 获取主目录
console.log('主目录:', os.homedir());
// 获取系统平台
console.log('系统平台:', os.platform());
// 获取系统名称
console.log('系统名称:', os.type());
// 获取平均负载(仅适用于 Unix 系统)
console.log('平均负载:', os.loadavg());
// 获取网络接口信息
console.log('网络接口信息:', os.networkInterfaces());
代码执行结果类似如下:
系统架构: arm64 CPU 信息: [ { model: 'Apple M1', speed: 24, times: { user: 18515240, nice: 0, sys: 9460280, idle: 38401220, irq: 0 } } ... ] 空闲内存: 167411712 总内存: 8589934592 主目录: /Users/RUNOOB 系统平台: darwin 系统名称: Darwin 平均负载: [ 11.4658203125, 4.49560546875, 3.35791015625 ] 网络接口信息: { ...