Node.js——os操作系统模块

os操作系统模块

1、获取内存相关信息

使用os模块之前首先需要引入该模块,代码如下:

js 复制代码
const path=require("os");

1.1、获取系统剩余内存

通过os模块的freemem()方法可以获取空闲的系统内存量,该方法返回一个整数(单位:字节)​。

js 复制代码
const os = require("os")
console.log("剩余内存:"+os.freemem()+"B")
复制代码
剩余内存:118022144B

1.2、获取系统总内存

通过os模块的totalmem()方法可以获取系统的总内存量,该方法返回一个整数(单位:字节)​。

js 复制代码
const os = require("os")
console.log("总内存:"+os.totalmem()+"B")
复制代码
总内存:17179869184B

示例:显示系统的内存使用情况

js 复制代码
const os=require("os")
let free1 = os.freemem()
let all1 = os.totalmem()
let free = (free1 / 1024 / 1024 / 1024).toFixed(2)    //将剩余内存的单位转换为GB
let all = (all1 / 1024 / 1024 / 1024).toFixed(2)      //将总内存的单位转换为GB
let rate = ((all1 - free1) / all1 * 100).toFixed(2)
console.log("总内存:"+all+"GB")
console.log("剩余内存:"+free+"GB")
console.log("内存使用率:"+rate+"%")
复制代码
总内存:16.00GB
剩余内存:1.17GB
内存使用率:92.71%

2、获取网络相关信息

使用os模块可以获取计算机的网络信息,这需要通过networkInterfaces()方法实现,该方法的返回值是一个对象,该对象包含已分配了网络地址的网络接口信息,其说明如表所示。

网络接口信息 说明
address 一个字符串,用于指定分配的网络地址,即PV4或Pv6
netmask 一个字符串,指定Pv4或IPv6网络掩码
family 指定Family的字符串,值为IPv4或IPv6之一
mac 一个字符串,指定网络接口的MAC地址
internal 布尔值,如果网络接口是不可远程访问的环回接口或类似接口,则为true,否则为false
scopeid 一个数字,指定Pv6的作用域ID
cidr 一个字符串,用于指定分配的Pv4或Pv6地址以及CIDR表示法中的路由前缀。如果网络掩码无效,则将其设置为null
js 复制代码
const os = require("os")
console.log("该计算机的网络信息如下:\n")
console.log(os.networkInterfaces())
json 复制代码
{
  lo0: [
    {
      address: '127.0.0.1',
      netmask: '255.0.0.0',
      family: 'IPv4',
      mac: '00:00:00:00:00:00',
      internal: true,
      cidr: '127.0.0.1/8'
    },
    {
      address: '::1',
      netmask: 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff',
      family: 'IPv6',
      mac: '00:00:00:00:00:00',
      internal: true,
      cidr: '::1/128',
      scopeid: 0
    },
    {
      address: 'fe80::1',
      netmask: 'ffff:ffff:ffff:ffff::',
      family: 'IPv6',
      mac: '00:00:00:00:00:00',
      internal: true,
      cidr: 'fe80::1/64',
      scopeid: 1
    }
  ],
  ap1: [
    {
      address: 'fe80::64b5:bcff:fe92:9e4c',
      netmask: 'ffff:ffff:ffff:ffff::',
      family: 'IPv6',
      mac: '66:b5:bc:92:9e:4c',
      internal: false,
      cidr: 'fe80::64b5:bcff:fe92:9e4c/64',
      scopeid: 5
    }
  ],
  en0: [
    {
      address: '240e:310:5d9c:6901:4ac:b1bc:2709:558b',
      netmask: 'ffff:ffff:ffff:ffff::',
      family: 'IPv6',
      mac: 'ee:74:a1:89:6f:bd',
      internal: false,
      cidr: '240e:310:5d9c:6901:4ac:b1bc:2709:558b/64',
      scopeid: 0
    },
    {
      address: '240e:310:5d9c:6901:383d:87d1:30f7:3147',
      netmask: 'ffff:ffff:ffff:ffff::',
      family: 'IPv6',
      mac: 'ee:74:a1:89:6f:bd',
      internal: false,
      cidr: '240e:310:5d9c:6901:383d:87d1:30f7:3147/64',
      scopeid: 0
    },
    {
      address: '240e:310:5d9c:6901:1ed4:fbff:fed8:781a',
      netmask: 'ffff:ffff:ffff:ffff::',
      family: 'IPv6',
      mac: 'ee:74:a1:89:6f:bd',
      internal: false,
      cidr: '240e:310:5d9c:6901:1ed4:fbff:fed8:781a/64',
      scopeid: 0
    },
    {
      address: 'fe80::10a4:62:35d8:49c4',
      netmask: 'ffff:ffff:ffff:ffff::',
      family: 'IPv6',
      mac: 'ee:74:a1:89:6f:bd',
      internal: false,
      cidr: 'fe80::10a4:62:35d8:49c4/64',
      scopeid: 6
    },
    {
      address: '192.168.0.101',
      netmask: '255.255.255.0',
      family: 'IPv4',
      mac: 'ee:74:a1:89:6f:bd',
      internal: false,
      cidr: '192.168.0.101/24'
    }
  ],
  awdl0: [
    {
      address: 'fe80::24e4:20ff:fe76:b752',
      netmask: 'ffff:ffff:ffff:ffff::',
      family: 'IPv6',
      mac: '26:e4:20:76:b7:52',
      internal: false,
      cidr: 'fe80::24e4:20ff:fe76:b752/64',
      scopeid: 7
    }
  ],
  llw0: [
    {
      address: 'fe80::24e4:20ff:fe76:b752',
      netmask: 'ffff:ffff:ffff:ffff::',
      family: 'IPv6',
      mac: '26:e4:20:76:b7:52',
      internal: false,
      cidr: 'fe80::24e4:20ff:fe76:b752/64',
      scopeid: 8
    }
  ],
  utun0: [
    {
      address: 'fe80::46fe:cbc0:c165:9c0c',
      netmask: 'ffff:ffff:ffff:ffff::',
      family: 'IPv6',
      mac: '00:00:00:00:00:00',
      internal: false,
      cidr: 'fe80::46fe:cbc0:c165:9c0c/64',
      scopeid: 14
    }
  ],
  utun1: [
    {
      address: 'fe80::b949:a50d:204a:ba97',
      netmask: 'ffff:ffff:ffff:ffff::',
      family: 'IPv6',
      mac: '00:00:00:00:00:00',
      internal: false,
      cidr: 'fe80::b949:a50d:204a:ba97/64',
      scopeid: 15
    }
  ],
  utun2: [
    {
      address: 'fe80::1ae5:ceb8:f142:2f92',
      netmask: 'ffff:ffff:ffff:ffff::',
      family: 'IPv6',
      mac: '00:00:00:00:00:00',
      internal: false,
      cidr: 'fe80::1ae5:ceb8:f142:2f92/64',
      scopeid: 16
    }
  ],
  utun3: [
    {
      address: 'fe80::ce81:b1c:bd2c:69e',
      netmask: 'ffff:ffff:ffff:ffff::',
      family: 'IPv6',
      mac: '00:00:00:00:00:00',
      internal: false,
      cidr: 'fe80::ce81:b1c:bd2c:69e/64',
      scopeid: 17
    }
  ],
  en5: [
    {
      address: 'fe80::aede:48ff:fe00:1122',
      netmask: 'ffff:ffff:ffff:ffff::',
      family: 'IPv6',
      mac: 'ac:de:48:00:11:22',
      internal: false,
      cidr: 'fe80::aede:48ff:fe00:1122/64',
      scopeid: 4
    }
  ],
  utun4: [
    {
      address: 'fe80::6a8f:183d:2435:4804',
      netmask: 'ffff:ffff:ffff:ffff::',
      family: 'IPv6',
      mac: '00:00:00:00:00:00',
      internal: false,
      cidr: 'fe80::6a8f:183d:2435:4804/64',
      scopeid: 18
    }
  ],
  utun5: [
    {
      address: 'fe80::63ab:e207:38c3:789a',
      netmask: 'ffff:ffff:ffff:ffff::',
      family: 'IPv6',
      mac: '00:00:00:00:00:00',
      internal: false,
      cidr: 'fe80::63ab:e207:38c3:789a/64',
      scopeid: 19
    }
  ]
}

3、获取系统相关目录

3.1、获取用户主目录

通过os模块的homedir()方法可以获取当前用户的主目录,其返回值类型为字符串,表示当前用户的主目录。

js 复制代码
const os = require("os")
console.log("当前用户的主目录为:"+os.homedir())
复制代码
当前用户的主目录为:/Users/acton_zhang

3.2、获取临时文件目录

通过os模块的tmpdir()方法可以获取本地计算机的临时文件目录,其返回值类型为字符串,表示默认的临时文件目录。

js 复制代码
const os = require("os")
console.log("当前计算机的临时文件目录为:"+os.tmpdir())
复制代码
当前计算机的临时文件目录为:/var/folders/rj/bq21mr9s5d1cfth4zzt4ndj00000gn/T

4、获取系统相关信息

使用os模块可以获取与操作系统相关的信息,如主机名、系统名、系统CPU架构等,其用到的方法如表所示。

方法 说明
hostname() 返回操作系统的主机名
type() 返回操作系统名
platform() 返回编译时的操作系统名
arch() 返回操作系统的CPU架构
release() 返回操作系统的发行版本
loadavg() 返回一个包含1、5、I5分钟平均负载的数组,平均负载是UNIX特定的概念,在Windows上,其返回值始终为0,0,0
version() 返回标识操作系统内核版本的字符串
cpus() 返回一个对象数组,包含所安装的每个CPU内核的信息
uptime() 返回操作系统运行的时间,以秒为单位
getPriority([pid]) 获取指定进程的调度优先级
setPriority() 为指定的进程设置调度优先级
endianness() 获取CPU的字节序,可能返回的值为BE(大端字节序)和LE(小端字节序)

4.1、hostname()

hostname()方法返回操作系统的主机名。

js 复制代码
const os = require("os")
console.log("当前主机名:",os.hostname())

4.2、type()

type()方法返回操作系统名。在Linux上返回Linux;在macOS上返回Darwin;在Windows上返回Windows_NT。

js 复制代码
const os = require("os")
console.log("当前操作系统为:",os.type())
复制代码
当前操作系统为: Darwin

4.3、platform()

platform()方法返回编译时的操作系统名,其可能的值有aix、darwin、freebsd、linux、openbsd、sunos和win32。

js 复制代码
const os = require("os")
console.log("当前操作系统编译时的名称为:",os.platform())
复制代码
当前操作系统编译时的名称为: darwin

4.4、arch()

arch()方法返回操作系统的CPU架构,可能的值有arm、arm64、ia32、mips、mipsel、ppc、ppc64、s390、s390x、x32和x64。

js 复制代码
const os = require("os")
console.log("操作系统的CPU架构为:",os.arch())
复制代码
操作系统的CPU架构为: x64

4.5、release()

release()方法返回操作系统的发行版本,其值为字符串类型。

js 复制代码
const os = require("os")
console.log("当前操作系统的发行版本为:",os.release())
复制代码
当前操作系统的发行版本为: 24.4.0

4.6、version()

version()方法返回标识操作系统内核版本的字符串。

js 复制代码
const os = require("os")
console.log(os.version())
复制代码
Darwin Kernel Version 24.4.0: Fri Apr 11 18:28:23 PDT 2025; root:xnu-11417.101.15~117/RELEASE_X86_64

4.7、cpus()

cpus()方法的返回值为一个对象数组,其中包含各CPU内核的信息,并且每个对象包含以下属性。

  • model:字符串类型,表示CPU内核的型号。
  • speed:整型,以兆赫兹(MHz)为单位,表示CPU内核的速度。
  • times:是一个对象,其包含的属性如表所示。
属性 说明
user 整型,表示CPU在用户模式下花费的毫秒数
nice 整型,表示CPU在正常模式下花费的毫秒数(nice值仅用于可移植操作系统接口POSX,在Windows操作系统上,该值始终为0)
sys 整型,表示CPU在系统模式下花费的毫秒数
idle 整型,表示CPU在空闲模式下花费的毫秒数
irg 整型,表示CPU在中断请求模式下花费的毫秒数
js 复制代码
const os = require("os")
console.log(os.cpus())
json 复制代码
[
  {
    model: 'Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz',
    speed: 2600,
    times: {
      user: 232153460,
      nice: 0,
      sys: 146231070,
      idle: 1346721310,
      irq: 0
    }
  },
  {
    model: 'Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz',
    speed: 2600,
    times: { user: 11686000, nice: 0, sys: 6961260, idle: 1713090520, irq: 0 }
  },
  {
    model: 'Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz',
    speed: 2600,
    times: {
      user: 187586220,
      nice: 0,
      sys: 101335590,
      idle: 1436686910,
      irq: 0
    }
  },
  {
    model: 'Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz',
    speed: 2600,
    times: { user: 12194470, nice: 0, sys: 6857700, idle: 1712813270, irq: 0 }
  },
  {
    model: 'Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz',
    speed: 2600,
    times: {
      user: 151034110,
      nice: 0,
      sys: 77436550,
      idle: 1498628350,
      irq: 0
    }
  },
  {
    model: 'Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz',
    speed: 2600,
    times: { user: 12406790, nice: 0, sys: 6594480, idle: 1712962110, irq: 0 }
  },
  {
    model: 'Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz',
    speed: 2600,
    times: {
      user: 130058030,
      nice: 0,
      sys: 62830710,
      idle: 1535408100,
      irq: 0
    }
  },
  {
    model: 'Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz',
    speed: 2600,
    times: { user: 12503170, nice: 0, sys: 6381450, idle: 1713130220, irq: 0 }
  },
  {
    model: 'Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz',
    speed: 2600,
    times: {
      user: 106104660,
      nice: 0,
      sys: 47861490,
      idle: 1575517630,
      irq: 0
    }
  },
  {
    model: 'Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz',
    speed: 2600,
    times: { user: 12606760, nice: 0, sys: 6286600, idle: 1713126160, irq: 0 }
  },
  {
    model: 'Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz',
    speed: 2600,
    times: {
      user: 94871890,
      nice: 0,
      sys: 41506520,
      idle: 1593826380,
      irq: 0
    }
  },
  {
    model: 'Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz',
    speed: 2600,
    times: { user: 12586370, nice: 0, sys: 6042690, idle: 1713446560, irq: 0 }
  }
]

4.8、uptime()

uptime()方法返回操作系统的运行时间,以秒为单位。

js 复制代码
const os = require("os")
const time = os.uptime()
console.log("系统的运行时间为:"+os.uptime())
复制代码
系统的运行时间为:8328465

示例:查看计算机的运行时间。

js 复制代码
const os = require("os")
let alltime = os.uptime()                              //获取总秒数
let sec = alltime % 60                                 //计算秒数
let allmin = parseInt(alltime / 60)                    //计算总分钟数
let min = allmin % 60                                  //计算分钟数
let hour = parseInt(allmin / 60)                       //计算小时数
console.log("当前计算机运行了" + alltime + "秒")
console.log("转换后为:%d时%d分%d秒", hour, min, sec)
js 复制代码
当前计算机运行了8328526秒
转换后为:2313时28分46秒

4.9、getPriority()

getPriority()方法获取指定进程的调度优先级,其语法格式如下:

js 复制代码
os.getPriority([pid])
  • pid为指定进程的PID,如果省略pid或者pid为0,该方法将返回当前进程的优先级。
js 复制代码
const os = require("os")
console.log(os.getPriority(10904))
复制代码
19

4.10、setPriority()

setPriority()方法为指定的进程设置调度优先级。具体语法格式如下:

js 复制代码
os.setPriority([pid,]priority)
  • pid为进程的PID,当省略pid或者pid为0时,表示当前进程;priority为分配给该进程的调度优先级,该值的取值范围为-20~19的整数。
js 复制代码
const os = require("os")
os.setPriority(10904,10)

5、os模块常用属性

os模块中除了上面介绍的方法,还提供了两个常用的属性,分别是EOL和constants,它们的作用如下。

  • os.EOL:操作系统特定的行末标志。在POSIX上是\n,在Windows上是\r\n
  • os.constants:os常量列表,包含信号常量、错误常量、dlopen常量、优先级常量以及libuv常量。如果要查看某一类常量列表,则使用如下属性值。
    • os.constants.signals:信号常量列表。
    • os.constants.errno:错误常量列表。
    • os.constants.dlopen:dlopen常量列表。
    • os.constants.priority:优先级常量列表。

os模块中的libvu常量无法单独查看,需要通过constants属性查看,该常量仅包含UV_UDP_REUSEADDR这一项。

js 复制代码
const os = require("os")
console.log(os.constants.priority)
json 复制代码
[Object: null prototype] {
  PRIORITY_LOW: 19,
  PRIORITY_BELOW_NORMAL: 10,
  PRIORITY_NORMAL: 0,
  PRIORITY_ABOVE_NORMAL: -7,
  PRIORITY_HIGH: -14,
  PRIORITY_HIGHEST: -20
}

获取的优先级常量的含义如下:

  • PRIORITY_LOW:低优先级。
  • PRIORITY_BELOW_NORMAL:优先级别比低优先级高,比正常优先级低。
  • PRIORITY_NORMAL:正常优先级。
  • PRIORITY_ABOVE_NORMAL:优先级别比高优先级低,比正常优先级高。
  • PRIORITY_HIGH:高优先级。
  • PRIORITY_HIGHEST:最高优先级。
相关推荐
糖拌西瓜皮12 小时前
TypeScript 进阶:泛型、条件类型、类型守卫与装饰器
javascript·node.js
两个人的幸福2 天前
Windows 桌面应用自研 PHP 队列(下):完整代码与六大工程化优化
php
米丘3 天前
vite8 vite preview 命令做了什么?
node.js·vite
blanks20204 天前
生成 公钥私钥 笔记
node.js
BingoGo5 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
JaguarJack5 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
用户3074596982075 天前
PHP 扩展——从入门到理解
php
糖拌西瓜皮5 天前
Java开发者视角:深入理解Node.js异步编程模型
java·后端·node.js
鹏仔先生6 天前
拷贝漫画APP下载页PHP程序,后台带免费AI写作
php
LDR0066 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言