Node第十二章(OS的使用)

269 阅读1分钟

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.926GHZ
  • times: 是一个包含CPU使用时间对象,其中包含以下属性
    • user :表示cpu被用户的应用程序使用的时间 (以毫秒为单位)
    • nice:表示cpu被优先级较低的用户程序使用时间 (以毫秒为单位)
    • sys :表示cpu被 系统内核使用的时间 (以毫秒为单位)
    • idle :表示cpu 处于空闲状态的时间(以毫秒为单位)
    • irq :表示cpu被硬件中断处理应用程序使用时间 (以毫秒为单位)

注意:我的电脑是4核8线程就会获取8个线程,获取线程 os.cpus().length来获取系统的 CPU 核心数,作为并行处理的线程数。但这并不总是最优的,在node18.14新增了一个os.availableParallelism()能更准确获取线程数

image.png

获取网络信息

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}`) 
   }
})