Nodejs 第十三章 OS

Node.js 中的 os 模块提供了一系列操作系统相关的实用工具函数。能够直接从Node.js应用程序中查询底层操作系统的信息和使用操作系统相关的功能。由于它是Node.js的核心模块,因此无需安装,直接引入就能用

js 复制代码
const os = require("os")

os 模块能做什么

  1. 获取操作系统的基本信息
    • 如当前登录用户、操作系统类型、系统架构、主机名、系统运行时间等。
  2. 查询CPU信息
    • 如CPU的型号、速度、核心数以及每个CPU核心的负载信息。
  3. 查询内存信息
    • 如系统的总内存、空闲内存等。
  4. 网络接口信息
    • 获取网络接口的详细信息,如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');
相关推荐
书山有路_邓28 分钟前
vscode 如何鼠标双击时选择带有-的
前端
张三风啊2 小时前
vue config 接口地址配置
前端·javascript·vue.js
多情码农无情键3 小时前
浏览器漫谈HTML--2.2从表单标签看vue的响应式系统 理论+实战
前端·javascript·html
Uluoyu3 小时前
Vue.Draggable使用nested-with-vmodel进行拖拽
前端·javascript·vue.js
北极糊的狐3 小时前
vue页面成绩案例(for渲染表格/删除/添加/统计总分/平均分/不及格显红色/输入内容去首尾空格trim/输入内容转数字number)
前端·javascript·vue.js
边洛洛4 小时前
路由传参、搜索、多选框勾选、新增/编辑表单复用
前端·javascript·vue.js
breakthrough_014 小时前
创建一个简单的 Nuxt.js 应用
开发语言·javascript·ecmascript
OEC小胖胖5 小时前
Vue 3 中 onUnload 和 onPageScroll 使用详解
前端·javascript·vue.js·前端框架·web
秋田君6 小时前
uniapp中使用Mescroll实现下拉刷新与上拉加载项目实战
javascript·uni-app
川石教育7 小时前
Vue前端开发-slot传参
前端·vue.js·前端框架·前端开发·slot组件