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:最高优先级。