NodeJs 第十二章(OS)

346 阅读5分钟

在 Node.js 开发中,操作系统模块(os)是一个非常实用的内置模块,它提供了一系列用于获取操作系统相关信息的方法和属性。无论是开发服务器端应用,还是编写跨平台工具,os模块都能为开发者提供关键的系统信息,帮助我们更好地适应不同的运行环境。

一、os模块的基本介绍

os模块无需额外安装,直接通过require('os')即可引入。它就像是 Node.js 与操作系统之间的桥梁,让我们能够轻松获取操作系统的各种细节。

二、常用方法与属性

获取主机名

os.hostname() 方法用于获取当前计算机的主机名。

const os = require('os');
console.log(os.hostname()); // 输出: 主机名

image.png

获取系统信息

    • os.type():返回操作系统的类型,例如'Linux'、'Darwin'(Mac OS)、'Windows_NT'。
    • os.platform():返回操作系统的平台,如'linux'、'darwin'、'win32' 。
    • os.release():返回操作系统的版本号。

示例代码:

const os = require('os');
console.log('操作系统类型:', os.type());
console.log('操作系统平台:', os.platform());
console.log('操作系统版本:', os.release());

获取 CPU 信息

os.cpus() 方法返回一个很长的数组,主要是因为它会为系统中每个 CPU 核心提供详细的信息

多核处理器的存在

现代计算机通常配备多核处理器,这意味着一个物理 CPU 芯片中集成了多个独立的处理核心。每个核心都可以独立执行任务,从而显著提高计算机的处理能力。os.cpus() 方法会为每个 CPU 核心生成一个单独的对象,并将这些对象存储在数组中返回。

例如,如果你使用的是一个 8 核处理器,那么 os.cpus() 数组的长度就会是 8,数组中的每个元素都对应一个 CPU 核心的信息。

每个核心信息的详细性

os.cpus() 返回的数组中的每个元素都是一个包含详细 CPU 核心信息的对象,这些信息有助于开发者全面了解每个核心的状态和性能。常见的属性包括:

  • model:CPU 核心的型号,例如 "Intel(R) Core(TM) i7-9700K CPU @ 3.60GHz"

  • speed:CPU 核心的运行速度,以兆赫兹(MHz)为单位。

  • times:一个包含 CPU 在不同状态下所花费时间的对象,具体包含以下属性:

    • user:用户模式下的 CPU 时间。
    • nice:低优先级用户模式下的 CPU 时间。
    • sys:系统模式下的 CPU 时间。
    • idle:CPU 空闲时间。
    • irq:中断请求处理的 CPU 时间。
const os = require('os');
const cpus = os.cpus();
cpus.forEach((cpu, index) => {
    console.log(`CPU 核心 ${index + 1} 信息:`);
    console.log('型号:', cpu.model);
    console.log('速度:', cpu.speed, 'MHz');
    console.log('CPU 时间:', cpu.times);
});

获取CPU架构

const os = require('os');

console.log(`CPU 架构: ${os.cpus()[0].model}`);

获取 CPU 核心数

const os = require('os');

console.log(`CPU 核心数: ${os.cpus().length}`);

获取 CPU 使用率

Node.js 内置模块 os 并没有直接提供 CPU 使用率的方法,但我们可以借助第三方库如 cpu-stat 来实现:

npm install cpu-stat
const cpuStat = require('cpu-stat');

cpuStat.usagePercent((err, percent) => {
    if (err) throw err;
    console.log(`CPU 使用率: ${percent}%`);
});

获取内存信息

  • os.totalmem():返回系统的总内存量(以字节为单位)。
  • os.freemem():返回系统的空闲内存量(以字节为单位)。

示例代码:

const os = require('os');
console.log('系统总内存:', os.totalmem(), '字节');
console.log('系统空闲内存:', os.freemem(), '字节');

获取磁盘空间

Node.js 没有内置模块可以直接获取磁盘空间信息,但我们可以通过执行 shell 命令来实现:

const { exec } = require('child_process');

exec('df -h', (error, stdout, stderr) => {
    if (error) {
        console.error(`执行出错: ${stderr}`);
        return;
    }
    console.log(`磁盘空间信息:\n${stdout}`);
});

或者使用第三方库如 diskusage

npm install diskusage
const diskusage = require('diskusage');

diskusage.check('/', function(err, info) {
    if (err) throw new Error(err);
    console.log(`磁盘空间信息: ${JSON.stringify(info, null, 4)}`);
});

获取网络信息

os.networkInterfaces() 方法返回一个对象,其中每个属性代表一个网络接口。属性值是一个数组,数组中的每个元素都是一个对象,包含该接口的详细信息,例如 IP 地址、MAC 地址等。

const os = require('os');

console.log(os.networkInterfaces());
/*
{
  en0: [
    {
      address: '192.168.1.100',
      netmask: '255.255.255.0',
      family: 'IPv4',
      mac: '00:1a:a5:d2:27:28',
      internal: false
    }
  ],
  lo0: [
    {
      address: 'fe80::1%lo0',
      netmask: 'ffff:ffff:ffff:ffff::',
      family: 'IPv6',
      scopeid: 1,
      internal: true
    }
  ]
}
*/

获取操作系统类型

os.type() 方法返回一个字符串,表示当前操作系统的类型。例如,在 Windows 上它会返回 "Windows_NT",而在 Linux 上则会返回 "Linux"

const os = require('os');

console.log(os.type()); // 输出: 操作系统类型

获取操作系统的平台

os.platform() 方法返回一个字符串,表示当前操作系统的平台。例如,对于 Windows 系统,它会返回 "win32";对于 Linux 系统,则会返回 "linux"

const os = require('os');

console.log(os.platform()); // 输出:

获取操作系统的版本

os.release() 方法返回一个字符串,表示当前操作系统的版本。例如,在 Windows 上,它可能返回 "10.0.19041",而在 Linux 上,它可能返回 "4.15.0-142-generic"

const os = require('os');

console.log(os.release()); // 输出: 操作系统版本

获取用户的主目录

os.homedir() 方法返回一个字符串,表示当前用户的主目录路径。

const os = require('os');

console.log(os.homedir()); // 输出: 用户主目录路径

image.png

获取操作系统的内核名称

os.arch() 方法返回一个字符串,表示当前操作系统的 CPU 架构。常见的值包括 "x64"(64位架构)和 "ia32"(32位架构)。

const os = require('os');
console.log(os.arch()); // 输出: CPU 架构

获取操作系统的默认编码

os.EOL 属性返回一个字符串,表示当前操作系统的行尾符。例如,在 Windows 上,它会返回 "\r\n",而在 Unix 和 Linux 上,则会返回 "\n"

const os = require('os');

console.log(os.EOL); // 输出: 行尾符

获取操作系统的临时文件夹路径

os.tmpdir() 方法返回一个字符串,表示当前操作系统的临时文件夹路径。

const os = require('os');

console.log(os.tmpdir()); // 输出: 临时文件夹路径

获取系统启动时间

os.uptime() 方法返回一个数字,表示自系统上次启动以来经过的秒数。

const os = require('os');

console.log(os.uptime()); // 输出: 启动时间(秒)

获取系统负载

os.loadavg() 方法返回一个数组,表示过去 1 分钟、5 分钟和 15 分钟的平均负载。

const os = require('os');

console.log(os.loadavg()); // 输出: 平均负载

获取环境变量

os.env() 方法可以获取当前环境变量,但是实际上需要使用 process.env 来访问环境变量。

const process = require('process');

console.log(process.env); // 输出: 环境变量

三、实际应用场景

  1. 性能监控:通过定期获取 CPU 和内存使用情况,我们可以实时监控应用的性能,及时发现性能瓶颈。
  1. 系统适配:根据不同的操作系统类型和版本,调整应用的行为或配置,确保应用在各种环境下都能稳定运行。
  1. 网络管理:获取网络接口信息,有助于实现网络相关的功能,如网络连接检测、IP 地址解析等。