OS操作系统
os基本使用
-
Nodejs 模块 可以与操作系统进行交互
const os = require("node:os")
os.type
- 返回的操作系统名称,它在Liux返回
Liux在macos 返回Darwin, 在windows上返回windows_NT
os.platform
- 返回操作系统平台标识可能的值为
'aix'、'darwin'、'freebsd'、'linux'、'openbsd'、'sunos'、以及'win32'
os.release
- 返回操作系统版本 如win10 返回
10.0.19045
os.homedir
- 返回用户目录 例如:C:\user/xxx 原理在windows就是
echo %USERPROFILE%在posix就是$HOME
os.arch
- 返回cpu架构 可能值
'arm'、'arm64'、'ia32'、'mips'、'mipsel'、'ppc'、'ppc64'、's390'、's390x'、'x64'
获取CPU的线程以及详细信息
os.cpus
- 返回包含有关每个逻辑 CPU 内核的信息的对象数组。如果没有可用的 CPU 信息 返回空数组
- 例如:
/proc文件系统不可用 则数组为空
const os = require('os')
console.log(os.cpus)
[
{
model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz',
speed: 2926,
times: {
user: 252020,
nice: 0,
sys: 30340,
idle: 1070356870,
irq: 0,
},
},
{
model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz',
speed: 2926,
times: {
user: 306960,
nice: 0,
sys: 26980,
idle: 1071569080,
irq: 0,
},
},
{
model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz',
speed: 2926,
times: {
user: 248450,
nice: 0,
sys: 21750,
idle: 1070919370,
irq: 0,
},
},
{
model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz',
speed: 2926,
times: {
user: 256880,
nice: 0,
sys: 19430,
idle: 1070905480,
irq: 20,
},
},
]
model:表示cpu的型号信息 其中 "Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz" 是一种具体的型号描述。speed:表示cpu的时钟速度,MHZ或GHZ为单位,在这情况速度为2926MHZ或2.926GHZtimes: 是一个包含CPU使用时间对象,其中包含以下属性user:表示cpu被用户的应用程序使用的时间 (以毫秒为单位)nice:表示cpu被优先级较低的用户程序使用时间 (以毫秒为单位)sys:表示cpu被 系统内核使用的时间 (以毫秒为单位)idle:表示cpu 处于空闲状态的时间(以毫秒为单位)irq:表示cpu被硬件中断处理应用程序使用时间 (以毫秒为单位)
注意:我的电脑是4核8线程就会获取8个线程,获取线程 os.cpus().length来获取系统的 CPU 核心数,作为并行处理的线程数。但这并不总是最优的,在node18.14新增了一个os.availableParallelism()能更准确获取线程数
获取网络信息
os.networkInterfaces
- 返回包含已分配网络地址的网络接口对象
const os = require('os')
console.log(os.networkInterfaces())
{
lo: [
{
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',
scopeid: 0,
internal: true,
cidr: '::1/128'
}
],
eth0: [
{
address: '192.168.1.108',
netmask: '255.255.255.0',
family: 'IPv4',
mac: '01:02:03:0a:0b:0c',
internal: false,
cidr: '192.168.1.108/24'
},
{
address: 'fe80::a00:27ff:fe4e:66a1',
netmask: 'ffff:ffff:ffff:ffff::',
family: 'IPv6',
mac: '01:02:03:0a:0b:0c',
scopeid: 1,
internal: false,
cidr: 'fe80::a00:27ff:fe4e:66a1/64'
}
]
}
address:表示本地回环接口的IP地址 分配的IPV4和IPV6地址 这里是'127.0.0.1'。netmask: 表示本地回环接口的子网掩码 IPV4或IPV6网络掩码 这里是'255.0.0.0'。family: 表示地址族IPV4或IPV6 这里是'IPv4'。scipeid: 数字的IPV6范围ID (仅在family为IPV6时指定)mac: 表示本地回环接口的MAC地址 这里是00:00:00:00:00:00请注意,本地回环接口通常不涉及硬件,因此MAC地址通常为全零。internal: 表示本地回环接口是否是内部接口,这里是true,表示它是一个内部接口。cidr表示本地回环接口的CIDR表示法 即网络地址和子网掩码的组合,这里是127.0.0.1/8表示整个127.0.0.0网络。
案例
-
知道这些有么用呢?
-
我们知道node 是跨平台的 当我们使用
webpack和vite时 运行项目 能自动打开网页 这个时候我们需用 os这个模块来区分系统
const {exect} = require('child_process')
const os = require('os')
const openBrowser = ((url)=>{
if(os.platform =='win32'){ // windows
exect(`start${url}`)
}else if(os.platfrom == 'darwin'){ // macos
exect(`open${url}`)
}else { // Liux unix-like
exect(`xdg-open{url}`)
}
})