Node内置模块 【操作系统os模块】

news2024/9/20 8:39:49

文章目录

  • 🌟前言
  • 🌟os模块
  • 🌟使用
  • 🌟属性
  • 🌟方法
    • 🌟获取操作系统临时目录
    • 🌟获取操作系统主机名
    • 🌟获取操作系统CPU架构
    • 🌟识别操作系统平台
    • 🌟获取操作系统发行版本
    • 🌟理解和计算“平均负载”
    • 🌟理解和计算“cpu 使用率”
    • 🌟理解和计算“内存使用率”
    • 🌟获取CPU信息
      • 🌟获取CPU核心数及CPU信息:
    • 🌟查看运行时间
      • 🌟nodejs 运行时间
      • 🌟系统运行时间
    • 🌟查看网络接口列表
  • 🌟写在最后

在这里插入图片描述

🌟前言

哈喽小伙伴们,新的专栏 Node 已开启;这个专栏里边会收录一些Node的基础知识和项目实战;今天我们带领大家初识一下 Node内置模块 操作系统os模块 ;让我们一起来看看吧🤘

🌟os模块

os 模块提供了与操作系统相关的实用方法和属性

🌟使用

我们可以通过以下方式引入该模块:

var os = require("os")

🌟属性

属性名描述
os.EOL返回操作系统特定的行末标志,可能返回的值为’\n’

🌟方法

方法描述
os.tmpdir()该方法用于获取操作系统中默认的用于存放临时文件的目录。
os.endianness()该方法用于获取CPU的字节序(endianness),可能返回的值为“BE” 或 “LE”。
os.hostname()该方法用于返回操作系统的主机名。
os.type()该方法用于获取操作系统类型。在 Linux 上返回 ‘Linux’,在 macOS 上返回 ‘Darwin’,在 Windows 上返回 ‘Windows_NT’。
os.platform()该方法用于获取操作系统平台,可能返回的值为’darwin’、‘linux’、‘win32’
os.arch()该方法用于获取操作系统 CPU 架构,可能的值有 “x64”、“arm” 和 “ia32”。
os.release()该方法用于获取操作系统的发行版本。
os.uptime()该方法用于获取系统的当前运行时间,单位为秒。
os.loadavg()该方法返回一个数组,其中存放了1分钟、5分钟及15分钟的系统平均负载。
os.totalmem()该方法返回系统的总内存量,单位为字节。
os.freemem()该方法返回系统的空闲内存量,单位为字节。
os.cpus()该方法返回一个数组,包含所安装的每个 CPU/内核的信息:型号、速度(单位 MHz)、时间(一个包含 user、nice、sys、idle 和 irq 所使用 CPU/内核毫秒数的对象)。
os.networkInterfaces()该方法返回一个数组,其中存放了系统中的所有网络接口。

🌟获取操作系统临时目录

os.tmpdir()该方法用于获取操作系统中默认的用于存放临时文件的目录。

os.tmpdir()
// 输出:/var/folders/9c/cx_t8sf14rz625px11rj3pl40000gn/T

🌟获取操作系统主机名

os.hostname() 该方法用于返回操作系统的主机名。

os.hostname()
// 输出:allcky-2.local

🌟获取操作系统CPU架构

CPU架构是CPU商给CPU产品定的一个规范,主要目的是为了区分不同类型的CPU。目前市场上的CPU分类主要分有两大阵营,一个是intel、AMD为首的复杂指令集CPU,另一个是以IBM、ARM为首的精简指令集CPU。不同品牌的CPU,其产品的架构也不相同,Intel、AMD的CPU是X86架构,IBM公司的CPU是PowerPC架构,ARM公司的CPU是ARM架构,国内的飞腾CPU也是ARM架构。此外还有MPIS架构、SPARC架构、Alpha架构。

  • X86架构: X86架构(The X86 architecture)是微处理器执行的计算机语言指令集。x86架构CPU主要应用领域:个人计算机、服务器等。在PC端市场Wintel组合(windows系统 + intel处理器)占据了大部分江山,另外一部分有ADM占领。而x64的全称叫x86-64,也就是说x64是x86架构的64位cpu。
  • ARM架构:ARM架构,也称作进阶精简指令集机器,是一个32位精简指令集(RISC)处理器架构,其广泛地使用在许多嵌入式系统设计。由于节能的特点,ARM处理器非常适用于移动通讯领域,符合其主要设计目标为低耗电的特性。ARM架构主要应用领域:手机端CPU和MCU,手机CPU市场,由高通骁龙系列、华为麒麟系列、以及三星猎户系列和联发科系列,

🌟识别操作系统平台

nodejs 提供了os.platform()和os.type(),可以用来识别操作系统平台。

  • os.platform()该方法用于获取操作系统平台,可能返回的值为’darwin’、‘linux’、‘win32’
  • os.type()该方法用于获取操作系统类型。在 Linux 上返回 ‘Linux’,在 macOS 上返回 ‘Darwin’,在 Windows 上返回 ‘Windows_NT’。

推荐使用os.platform():

let platforms = {darwin:'MacOSX',linux:'Linux','win32':'Windows'}
let type = os.platform()
// 获取Platform    当前:darwin
platforms[type]   
//输出:MacOSX

🌟获取操作系统发行版本

os.release() 该方法用于获取操作系统的发行版本。

在Windows系统获取操作系统发行版本:

const release = os.release();  // 输出:6.3     主版本.次版本
console.log(release)
版本主版本.次版本
Windows 10, Windows Server 201610.0
Windows 8.1, Windows Server 2012 R26.3
Windows 8, Windows Server 20126.2
Windows 7, Windows Server 2008 R26.1
Windows Vista, Windows Server 20086.0
Windows XP Professional x64 Edition,5.2

但在 MacOSX 上,os.release()得到的结果不准确,建议采用以下方式:

const { execSync } = require('child_process')
const macVersion = execSync('sw_vers -productVersion', { encoding: 'utf-8' })
console.log(release)
//输出:12.1

🌟理解和计算“平均负载”

平均负载是指:单位时间内,系统处于可运行状态和不可中断状态的平均进程数。它和 cpu 使用率没有直接关系。

其中,这里的可运行状态指的是:正在使用 cpu 或正在等待 cpu 的进程。不可中断状态指的是:内核态关键流程中的进程。

在 nodejs 中,直接调用os.loadavg()可以获得 1、5 和 15 分钟的平均负载,它和 unix 命令uptime返回值一样。

为什么需要关心平均负载这个问题呢?因为进程分为 2 种,第一种就是“CPU 密集型”,它的 cpu 使用率和平均负载都是高的;第二种是“IO 密集型”,它的 cpu 使用率不一定高,但是等待 IO 会造成平均负载高。所以,cpu 使用率和平均负载共同反应系统性能。

平均活跃进程数最理想的状态是 cpu 数量=平均负载,如果 cpu 数量 < 平均负载,那么平均负载过高。

// 判断是否平均负载过高
function isHighLoad() {
    const cpuNum = os.cpus().length;
    return os.loadavg().map(item => item > cpuNum);
}

🌟理解和计算“cpu 使用率”

很多监控软件都提供针对 cpu 使用率的“实时”监控,当然这个实时不是真的实时,有个时间差。这个功能,nodejs 如何实现呢?

第一步:封装getCPUInfo(),计算获取 cpu 花费的总时间与空闲模式花费的时间。

/**
 * 获取cpu花费的总时间与空闲模式的时间
 */
function getCPUInfo() {
    const cpus = os.cpus();
    let user = 0,
        nice = 0,
        sys = 0,
        idle = 0,
        irq = 0,
        total = 0;

    cpus.forEach(cpu => {
        const { times } = cpu;
        user += times.user;
        nice += times.nice;
        sys += times.sys;
        idle += times.idle;
        irq += times.irq;
    });

    total = user + nice + sys + idle + irq;

    return {
        total,
        idle
    };
}

第二步:当前时间点 t1,选定一个时间差 intervel,计算 t1 和 t1 + interval 这两个时间点的 cpu 时间差与空闲模式时间差,返回 1 - 空闲时间差 / cpu时间差。返回的结果就是时间差 intervel 内的平均 cpu 使用率。

function getCPUUsage(interval = 1000) {
    const startInfo = getCPUInfo();

    return new Promise(resolve => {
        setTimeout(() => {
            const endInfo = getCPUInfo();

            const idleDiff = startInfo.idle - endInfo.idle;
            const totalDiff = startInfo.total - endInfo.total;
            resolve(1 - Math.abs(idleDiff / totalDiff));
        }, interval);
    });
}

使用方式如下:

getCPUUsage().then(usage => console.log("cpu使用率:", usage));

🌟理解和计算“内存使用率”

cpu 的指标有平均负载、cpu 使用率,内存的指标有内存使用率。

// 返回系统的总内存量,单位为字节
os.totalmem()
// 返回系统的空闲内存量,单位为字节
os.freemem()

借助 nodejs 接口,实现内存使用率:

/**
 * 获取内存使用率
 * @returns 内存使用率
 */
function getMemUsage() {
    return 1 - os.freemem() / os.totalmem();
}
/**
 * 将字节转换为其他类型值
 * @param {*} size 转换字节数
 * @param {*} type 转换目标,可用类型 kb,mb,gb
 * @returns 转换后的大小
 */
function byteTo(size,type='kb') {
    var rules = {
        kb: 1024,
        mb: 1024 * 1024,
        gb: 1024 * 1024 * 1024
    }
    return size / rules[type]
}

byteTo(getMemUsage(),'mb')   // 内存使用率 输出: xxMB

🌟获取CPU信息

os.cpus() 该方法返回一个数组,包含所安装的每个 CPU/内核的信息:型号、速度(单位 MHz)、时间(一个包含 user、nice、sys、idle 和 irq 所使用 CPU/内核毫秒数的对象)。

console.log(os.cpus())

输出结果:

[
  {
    model: 'Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz',
    speed: 2700,
    times: { user: 18665060, nice: 0, sys: 11753350, idle: 33536690, irq: 0 }
  },
  {
    model: 'Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz',
    speed: 2700,
    times: { user: 9616620, nice: 0, sys: 5249430, idle: 49073350, irq: 0 }
  },
  {
    model: 'Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz',
    speed: 2700,
    times: { user: 17431130, nice: 0, sys: 10963700, idle: 35544600, irq: 0 }
  },
  {
    model: 'Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz',
    speed: 2700,
    times: { user: 8412530, nice: 0, sys: 4786440, idle: 50740410, irq: 0 }
  }
]

🌟获取CPU核心数及CPU信息:

console.log('CPU核心数量:',os.cpus().length) // 输出:4
console.log('CPU信息:',os.cpus()[0].model)  // 输出:Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz

🌟查看运行时间

🌟nodejs 运行时间

process.uptime()

🌟系统运行时间

os.uptime()

🌟查看网络接口列表

获得网络接口列表的方法如下所示:

os.networkInterfaces()
{
    lo: [
        {
            address: '127.0.0.1',
            netmask: '255.0.0.0',
            family: 'IPv4',
            mac: '00:00:00:00:00:00',
            internal: true
        },
        {
            address: '::1',
            netmask: 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff',
            family: 'IPv6',
            mac: '00:00:00:00:00:00',
            internal: true
        }
    ],
    eth0: [
        {
            address: '192.168.1.108',
            netmask: '255.255.255.0',
            family: 'IPv4',
            mac: '01:02:03:0a:0b:0c',
            internal: false
        },
        {
            address: 'fe80::a00:27ff:fe4e:66a1',
            netmask: 'ffff:ffff:ffff:ffff::',
            family: 'IPv6',
            mac: '01:02:03:0a:0b:0c',
            internal: false
        }
    ]
}

🌟写在最后

更多Node知识以及API请大家持续关注,尽请期待。各位小伙伴让我们 let’s be prepared at all times!

✨原创不易,还希望各位大佬支持一下!
👍 点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/449015.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MPLS VPN 实验

目录 MPLS VPN 实验 拓扑图 实验目的 基础配置 R2 R3 R4 公网部分配置IGP&#xff08;ospf&#xff09; R2 R3 R4 激活MPLS R2 R3 R4 VRF创建 R2 R4 将接口画入VRF空间 R2 R4 配置接口IP地址 R2 R4 站点1基本配置 站点2基本配置 通过静态路由在CE和…

【SPSS】两独立样本的极端反应检验和两配对样本的非参数检验详细操作教程(附案例实战)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

链式二叉树的查找,遍历(递归实现)等接口的实现

目录 前言: 一&#xff1a;二叉树的建立 (1)本文采用的二叉树表示方法 (2)手动建立一颗二叉树 二&#xff1a;二叉树的遍历 (1)二叉树的三种遍历方式 (2)分治思想 (3)前序遍历 (4)中序遍历 (5)后序遍历 三&#xff1a;求二叉树的节点和高度(深度) (1)求二叉树节点 ①…

python+vue 餐饮食品安全监管投诉平台

系统主要包括个人中心、用户管理、餐饮类型管理、餐饮企业管理、案例类型管理、案例展示管理、法规分类管理、法律法规管理、在线投诉管理、查处信息管理、系统管理等功能模块。 绪论 网站的开发背景&#xff0c;意义和系统状况等&#xff0c;详细讲述了系统的用处&#xff0c;…

基于构效关系模型的药物设计(QSAR)

基于构效关系模型的药物设计&#xff08;QSAR&#xff09; 定量构效关系&#xff08;QSAR&#xff0c;Quantitative Structure-Activity Relationship&#xff09;分析是指利用理论计算和统计分析工具来研究系列化合物结构&#xff08;包括二维分子结构、三维分子结构和电子结…

Latex数学公式排版

文章目录 Latex使用最佳方式&#xff1a;读官方文档Latex中的字符数学公式排版1.引入宏包:2.公式排版基础3.数学符号(1).希腊字母(2).指数,上下标,导数(3).分式和根式(4).关系符(5).算符(6).巨算符(7).箭头 Latex使用 最佳方式&#xff1a;读官方文档 The not so short intro…

案例分析:真实案例对“引用类型”的思考

在一个风和日丽的早上&#xff0c;我刚坐到工位上&#xff0c;正准备美美的享受早餐时&#xff0c;我的测试小兄弟杨过火急火燎的来找我说&#xff1a;“小米&#xff0c;不好了&#xff0c;运营童鞋反馈&#xff0c;咱们商城小程序金刚区的新店专区&#xff0c;新开的店铺无法…

mac上 qt与mysql的连接问题

经过两天的折磨和挣扎&#xff0c;将Mac上QT与mysql数据库链接问题的解决做一个梳理&#xff0c;以防忘记&#xff0c;并供他人借鉴&#xff1b; 环境版本&#xff1a;Mac10.14&#xff0c;MySQL5.7.24&#xff0c;Qt5.14.2 首先我重新下载安装了Qt&#xff08;安装了源码&am…

Hadoop课程笔记

Hadoop笔记 nn和sn的区别 nn有inprogress&#xff0c;sn没有&#xff0c;隔一段时间sn会拉取nn上的fsi和edits进行合并然后返回给nnnn和dn 序列化和反序列化 当需要将内存中对象从一个服务器传输到另一个服务器的时候&#xff0c;将内存中的对象写进磁盘&#xff08;序列化&am…

python知识点总结(国家一级假勤奋大学生整理)

python知识点总结 0. 持续更新~1. print不加end自动加回车自动换行2. eval()提取值3. 三双引号字符串中可以包含换行符&#xff0c;制表符以及其他特殊字符4. 字符串不能修改5. 用in 或 not in判断字串是否在母串中6. 网上做题print慎用‘&#xff0c;’会产生不该有的空格7. i…

职场规则实录(不要成全别人,恶心自己)

即使我们因为做出某种决定失去了某些东西,但这并不一定意味着这个决定是错误的。相反,很多时候,即使我们面临诸多风险,我们也要冒险去做出决定,因为在这种风险中可能存在着丰富的机会和收获。就像投资一样,就算我们的投资并没有获得预期的收益,但这并不代表这个投资是错…

Linux 性能优化大全!

性能指标 高并发和响应快对应着性能优化的两个核心指标&#xff1a;吞吐和延时 应用负载角度&#xff1a;直接影响了产品终端的用户体验 系统资源角度&#xff1a;资源使用率、饱和度等 性能问题的本质就是系统资源已经到达瓶颈&#xff0c;但请求的处理还不够快&#xff0…

【超算/先进计算学习】日报5

目录 今日已完成任务列表遇到的问题及解决方案任务完成详细笔记程序性能分析程序流程分析程序静态分析工具 understand程序性能动态分析工具 gprof-使用方式程序性能动态分析工具 gprof-输出结果详解程序性能动态分析工具 gropf-函数调用关系图程序动态分支辅助方式-计时函数其…

git版本控制

git版本控制 time&#xff1a;2023-04-18 版本控制 集中式版本控制 多人协作开发 创建仓库 使用当前目录作为 Git 仓库&#xff0c;我们只需使它初始化。 git init使用我们指定目录作为Git仓库。 git init newrepo克隆远程仓库 git clone https://gitee.com/zhang-min…

银行数字化转型导师坚鹏:银行数字化创新应用与案例分析

银行数字化创新应用与案例分析 课程背景&#xff1a; 很多银行存在以下问题&#xff1a; 不知道如何进行数字化创新&#xff1f; 不知道金融科技在银行业的重要应用&#xff1f; 不清楚银行同业的数字化创新有哪些案例&#xff1f; 课程特色&#xff1a; 用独特视角…

在C上++ -- 函数重载与引用

一、函数重载 函数重载&#xff1a;是函数的一种特殊情况&#xff0c;C允许在同一作用域中声明几个功能类似的同名函数&#xff0c;这 些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同&#xff0c;常用来处理实现功能类似数据类型 不同的问题。 简单来说&#xff1a…

点云处理及三维重建软件(Point Cloud Viewer, PCV)的设计与实现

GitHub 地址&#xff1a;point-cloud-viewer 文章目录 使用教程以及相关工具库Step 1 搭建环境Step 2 使用Cmake构建工程Step3 使用VS 编写code并编译执行 点云处理及三维重建软件(PCV)的设计与实现一&#xff0c; 软件总体设计1.1 软件设计流程需求分析总体设计技术选型详细设…

【RestFul系列】RestFul学习笔记

目录 一、REST定义 二、REST架构的主要原则 三、RESTful介绍 1、资源&#xff08;Resources&#xff09; 2、 表现层&#xff08;Representation&#xff09; 3、 状态转化&#xff08;State Transfer&#xff09; 四、RESTful的使用 1、RESTful资源操作 2、接口示例&…

verilog设计实现8b-10b编码器包括3b4b,5b6b 及modelsim仿真

下面是8b10b编码器的设计步骤。 确定数据输入和输出接口。例如,您需要确定8位并行数据输入和10位串行数据输出。 计算数据带宽。这与芯片中可用的时钟速度密切相关。 选择编码表。根据应用选择最佳编码表,8b10b编码器至少应使用一张编码表。详细了解和选择编码表有利于改善编…

图的存储及基本操作总结(邻接矩阵、邻接表)及C/C++代码实现

文章目录 前言一、邻接矩阵1.概念2.图像示例3. 代码实现注意邻接矩阵的特点 二、邻接表1.概念2.图像示例3.代码实现邻接表的特点 前言 图是一种比较复杂的数据结构&#xff0c;每个结点之间可以有多种关系。 所以&#xff0c;一个图可以呈现出千奇百怪的形式。 对于不同的形式…