Node.js 中的 os
模块提供了一系列操作系统相关的实用工具函数。能够直接从Node.js应用程序中查询底层操作系统的信息和使用操作系统相关的功能。由于它是Node.js的核心模块,因此无需安装,直接引入就能用
js
const os = require("os")
os
模块能做什么
- 获取操作系统的基本信息 :
- 如当前登录用户、操作系统类型、系统架构、主机名、系统运行时间等。
- 查询CPU信息 :
- 如CPU的型号、速度、核心数以及每个CPU核心的负载信息。
- 查询内存信息 :
- 如系统的总内存、空闲内存等。
- 网络接口信息 :
- 获取网络接口的详细信息,如IPv4和IPv6地址、MAC地址等。
常用的 os
模块方法
os.platform
- 返回一个字符串,标识Node.js进程运行其上的操作系统平台(如
'darwin'
、'win32'
、'linux'
等)。- 像我电脑是Windows系统,返回的就是win32。如果是苹果(Mac)的话,会返回darwin。而Linux直接返回Linux本身
- 全部的返回选项是非常多的,我们直接点进去platform能够看到
os.release
- 获取操作系统版本
os.type
- 返回操作系统的名字(如
'Linux'
、'Darwin'
(macOS的内核名称)、'Windows_NT'
等)。
os.version
- 输出当前系统的版本,比如像我输出的内容翻译过来就是win11的中国家庭版,还有一个是专业版的
os.homedir
- 读取到用户名所在的目录,也就是C盘到用户名的部分
- 底层原理就是通过
%userprofile%
(在终端输出用户名所在目录的命令) - 在Mac平台,则是使用
$HOME
- 底层原理就是通过
js
const os = require('node:os');
console.log(os.homedir());// C:\Users\XiaoYu
os.arch
- 返回一个字符串,表示Node.js二进制编译所用的架构(如
'x64'
、'arm'
、'ia32'
等) - 日常使用这个就可能比较少了,了解下就OK了
js
console.log(os.arch())//x64
os.cpus
- 返回一个对象数组,包含安装的每个CPU/核的信息,包括型号、速度(以MHz为单位)和时间(一个包含用户、系统和空闲时间的对象)。
js
const os = require('node:os');
console.log(os.cpus());
//返回的部分内容
{
model: '12th Gen Intel(R) Core(TM) i7-12700H', // CPU的型号
speed: 2688, // 表示CPU的时钟速度,以MHz或GHz为单位
times: { //是一个包含CPU使用时间的对象
user: 4483234, // 表示CPU被用户程序使用的时间(以毫秒为单位)
nice: 0, // 表示CPU被优先级较低的用户程序使用的时间(以毫秒为单位)
sys: 10543609, // 表示CPU被系统内核使用的时间(以毫秒为单位)
idle: 319127328, // 表示CPU处于空闲状态的时间(以毫秒为单位)
irq: 1739875 // 表示CPU被硬件中断处理程序使用的时间(以毫秒为单位)
}
}
- 我们还能通过length获取到这个cpus的长度
- 这个长度是和CPU的逻辑处理器有关系的,比如下面图中,我输出的就是20,表示我电脑是20个逻辑处理器(线程)的
- 通过
Ctrl+Shift+ESC
打开任务管理器,查看性能,就能找到这块内容
os.networkInterfaces
- 是network Interfaces,英文翻译就是网络接口,它的作用就是查看网络信息
js
{
// 'lo' 是本地回环接口,通常用于网络软件的测试和进程间通信
lo: [
{
address: '127.0.0.1', // IPv4的本地回环地址,用于指向本机
netmask: '255.0.0.0', // 子网掩码,定义了网络和主机部分
family: 'IPv4', // 地址族,这里是IPv4
mac: '00:00:00:00:00:00', // MAC地址,本地回环通常为00:00:00:00:00:00
internal: true, // 标识这是一个内部接口(内网)
cidr: '127.0.0.1/8' // CIDR表示法,结合IP地址和子网掩码
},
{
address: '::1', // IPv6的本地回环地址
netmask: 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', // IPv6的子网掩码
family: 'IPv6', // 地址族,这里是IPv6
mac: '00:00:00:00:00:00', // MAC地址,与IPv4接口相同
scopeid: 0, // 用于IPv6,标识地址的作用域
internal: true, // 同样是内部接口
cidr: '::1/128' // IPv6的CIDR表示法
}
],
// 'eth0' 是一个以太网接口,通常连接到局域网或互联网
eth0: [
{
address: '192.168.1.108', // 设备在局域网内的IPv4地址
netmask: '255.255.255.0', // 子网掩码
family: 'IPv4', // 地址族,这里是IPv4
mac: '01:02:03:0a:0b:0c', // 设备的MAC地址
internal: false, // 标识这是一个外部接口
cidr: '192.168.1.108/24' // CIDR表示法
},
{
address: 'fe80::a00:27ff:fe4e:66a1', // 设备在局域网内的IPv6链接本地地址
netmask: 'ffff:ffff:ffff:ffff::', // IPv6的子网掩码
family: 'IPv6', // 地址族,这里是IPv6
mac: '01:02:03:0a:0b:0c', // 与IPv4接口相同的MAC地址
scopeid: 1, // IPv6地址的作用域ID
internal: false, // 同样是外部接口
cidr: 'fe80::a00:27ff:fe4e:66a1/64' // IPv6的CIDR表示法
}
]
}
os模块功能总结
序号 | API | 作用 |
---|---|---|
1 | os.platform() |
返回标识操作系统平台的字符串。 |
2 | os.arch() |
返回Node.js二进制编译所用的架构。 |
3 | os.type() |
返回操作系统的名字。 |
4 | os.release() |
返回操作系统的发行版本。 |
5 | os.hostname() |
返回操作系统的主机名。 |
6 | os.userInfo([options]) |
返回当前有效用户的信息。 |
7 | os.cpus() |
返回一个对象数组,包含安装的每个CPU/核的信息。 |
8 | os.totalmem() |
返回系统的总内存量(以字节为单位)。 |
9 | os.freemem() |
返回系统的空闲内存量(以字节为单位)。 |
10 | os.uptime() |
返回系统的正常运行时间(以秒为单位)。 |
11 | os.loadavg() |
返回一个包含1、5、15分钟平均负载的数组。 |
12 | os.networkInterfaces() |
返回一个对象,包含已分配网络地址的网络接口。 |
13 | os.tmpdir() |
返回操作系统的默认临时文件目录。 |
14 | os.endianness() |
返回CPU的字节序,可能是"BE"(大端)或"LE"(小端)。 |
15 | os.homedir() |
返回当前用户的主目录。 |
案例:Vite配置项open:true
- 在不同的操作系统上打开指定的URL地址。根据运行代码的操作系统(macOS、Windows或Linux/Unix-like),函数会执行相应的命令行命令来启动默认的Web浏览器并导航到提供的URL
- 其实是很简单的一个代码,我们是通过执行shell命令来完成的,winow中利用start,加上要打开的网页,合起来就是 start(打开) URL(网页)。然后再进行边界判断一下,当前使用者是什么系统,采用不同的命令完成打开网页
js
// 引入Node.js的child_process模块中的exec函数,用于执行shell命令
const { exec } = require('child_process');
// 引入Node.js的os模块,用于获取操作系统相关的信息
const os = require('node:os');
function openBrowser(url) {
// 定义一个对象来映射操作系统平台和打开URL所需执行的命令
const commands = {
darwin: 'open', // macOS系统的命令
win32: 'start', // Windows系统的命令
linux: 'xdg-open', // Linux系统的命令,也适用于大多数Unix-like系统
};
// 获取当前操作系统平台的命令,如果不在映射中,默认使用 'xdg-open'
const command = commands[os.platform()] || 'xdg-open';
// 执行命令打开URL
exec(`${command} ${url}`);
}
// 调用openBrowser函数的示例,打开一个网页(这个案例的网页是能开的)
openBrowser('https://xiaoyu2002.cn');