os 操作系统相关
os模块是NodeJS的核心模块之一,它提供了与操作系统相关的实用方法和属性,用于获取操作系统信息、CPU信息、内存信息、网络接口信息等。在跨平台开发、系统监控、资源管理等场景中,os模块是非常实用的工具。
导入模块
os模块是NodeJS内置模块,ESM下使用node:os导入使用。
import os from "node:os";
操作系统基本信息
os模块提供了一系列方法用于获取操作系统的基本信息。
import os from "node:os";
// 操作系统类型
console.log("操作系统类型:", os.type()); // 例如:Linux、Darwin、Windows_NT
// 操作系统平台
console.log("平台:", os.platform()); // 例如:linux、darwin、win32
// 操作系统版本
console.log("版本:", os.release());
// 操作系统架构
console.log("架构:", os.arch()); // 例如:x64、arm64
// 主机名
console.log("主机名:", os.hostname());
// 操作系统默认临时文件目录
console.log("临时目录:", os.tmpdir());
// 当前用户主目录
console.log("用户主目录:", os.homedir());
// 操作系统运行时间(秒)
console.log("系统运行时间:", os.uptime(), "秒");
用户信息
os.userInfo()方法用于获取当前用户的信息。
import os from "node:os";
const userInfo = os.userInfo();
console.log("用户名:", userInfo.username);
console.log("用户主目录:", userInfo.homedir);
console.log("用户Shell:", userInfo.shell);
console.log("用户UID:", userInfo.uid);
console.log("用户GID:", userInfo.gid);
注:在Windows系统上,uid和gid字段值为-1,shell字段值为null。
CPU信息
os模块提供了获取CPU相关信息的方法。
import os from "node:os";
// 获取CPU核心数
console.log("CPU核心数:", os.cpus().length);
// 获取CPU详细信息
const cpus = os.cpus();
cpus.forEach((cpu, index) => {
console.log(`CPU ${index}:`, cpu.model);
console.log(" 速度:", cpu.speed, "MHz");
console.log(" 时间:", cpu.times);
});
// 获取系统平均负载(Unix系统)
// 返回包含1分钟、5分钟、15分钟平均负载的数组
console.log("系统平均负载:", os.loadavg());
注:os.loadavg()在Windows系统上始终返回[0, 0, 0]。
内存信息
os模块提供了获取系统内存使用情况的方法。
import os from "node:os";
// 系统总内存(字节)
const totalMem = os.totalmem();
console.log("总内存:", (totalMem / 1024 / 1024 / 1024).toFixed(2), "GB");
// 系统空闲内存(字节)
const freeMem = os.freemem();
console.log("空闲内存:", (freeMem / 1024 / 1024 / 1024).toFixed(2), "GB");
// 内存使用率
const usedMem = totalMem - freeMem;
const memUsage = ((usedMem / totalMem) * 100).toFixed(2);
console.log("内存使用率:", memUsage, "%");
网络接口信息
os.networkInterfaces()方法用于获取网络接口的详细信息。
import os from "node:os";
const networkInterfaces = os.networkInterfaces();
for (const [name, interfaces] of Object.entries(networkInterfaces)) {
console.log(`网络接口: ${name}`);
interfaces.forEach((iface) => {
console.log(" 地址:", iface.address);
console.log(" 子网掩码:", iface.netmask);
console.log(" 协议族:", iface.family);
console.log(" MAC地址:", iface.mac);
console.log(" 是否内部接口:", iface.internal);
console.log("---");
});
}
系统常量
os模块提供了一些操作系统相关的常量。
import os from "node:os";
// 操作系统特定的行尾标记
// Windows: \r\n Unix/Linux/macOS: \n
console.log("行尾标记:", JSON.stringify(os.EOL));
// 操作系统优先级常量
console.log("进程优先级常量:", os.constants.priority);
// 错误常量
console.log("部分错误常量:", {
ENOENT: os.constants.errno.ENOENT,
EACCES: os.constants.errno.EACCES,
EEXIST: os.constants.errno.EEXIST,
});
// 信号常量
console.log("部分信号常量:", {
SIGINT: os.constants.signals.SIGINT,
SIGTERM: os.constants.signals.SIGTERM,
SIGKILL: os.constants.signals.SIGKILL,
});
进程优先级
os模块提供了获取和设置进程优先级的方法。
import os from "node:os";
// 获取当前进程优先级
const currentPriority = os.getPriority();
console.log("当前进程优先级:", currentPriority);
// 获取指定进程优先级(需要传入PID)
const pid = process.pid;
console.log(`进程 ${pid} 优先级:`, os.getPriority(pid));
// 设置进程优先级(需要相应权限)
// 优先级范围:-20(最高)到 19(最低),Windows为不同的常量值
try {
os.setPriority(0, os.constants.priority.PRIORITY_NORMAL);
console.log("进程优先级设置成功");
} catch (err) {
console.error("设置优先级失败:", err.message);
}
机器信息
NodeJS 22提供了获取机器唯一标识和可用并行度的方法。
import os from "node:os";
// 获取机器ID(如果可用)
try {
const machineId = os.machine();
console.log("机器类型:", machineId);
} catch (err) {
console.log("无法获取机器类型");
}
// 获取可用的并行度(CPU核心数的估计值)
console.log("可用并行度:", os.availableParallelism());
作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。