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系统上,uidgid字段值为-1shell字段值为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进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。