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:最高优先级。
相关推荐
曹牧2 小时前
Java:驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立连接
java·开发语言·ssl
cch89182 小时前
PHP vs C++:10倍性能差距的编程语言对决
android·java·开发语言
司马万2 小时前
RUST基础1----数据类型
开发语言·算法·rust
cnnews2 小时前
Termux中安装python包
android·linux·开发语言·python·安卓·termux
FlyChat2 小时前
PHP全栈攻坚:智搜搜索从0到1搭建实战——融合ES/Redis/Kafka多组件+多语言爬虫的企业级搜索引擎架构解析
elasticsearch·搜索引擎·php
房开民10 小时前
c++总结
java·开发语言·c++
毕设源码-赖学姐10 小时前
【开题答辩全过程】以 基于Java的医院器材管理系统的设计与实现为例,包含答辩的问题和答案
java·开发语言
float_com10 小时前
【java常用API】----- Arrays
java·开发语言
不会写DN11 小时前
PHP 中的文件读写与上传
android·开发语言·php