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

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

🌟前言

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


🌟os模块

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


🌟使用

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


var os = require("os")

🌟属性

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


🌟方法

1685514145954.png

🌟获取操作系统临时目录

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

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

🌟获取操作系统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)

1685514381465.png

但在 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!

相关实践学习
CentOS 7迁移Anolis OS 7
龙蜥操作系统Anolis OS的体验。Anolis OS 7生态上和依赖管理上保持跟CentOS 7.x兼容,一键式迁移脚本centos2anolis.py。本文为您介绍如何通过AOMS迁移工具实现CentOS 7.x到Anolis OS 7的迁移。
目录
相关文章
|
8天前
|
移动开发 前端开发 测试技术
操作系统智能助手OS Copilot新功能
作为一名前端开发人员,我主要负责公司官网和H5页面的开发,包括页面构建、交互逻辑实现及性能优化。近期试用了Copilot,顺利安装并体验了其代理模式、读取文件和管道功能。通过这些功能尝试生成《黑客帝国》风格的代码瀑布流效果,并使用文件详细描述需求,取得了不错进展。然而,在使用管道功能解释C++代码时遇到了一些问题,需进一步探索解决。 以上内容简洁地介绍了我的工作职责以及Copilot的试用体验,包括顺利的部分和遇到的问题。
操作系统智能助手OS Copilot新功能
|
8天前
|
测试技术 数据库 开发工具
云产品评测|操作系统智能助手OS Copilot新功能
我是一名测试工程师,主要负责App和Web端的测试,有时会使用阿里云服务器进行服务端问题定位及数据库等云资源的操作。在使用OS Copilot过程中遇到了一些问题: 1. **命令执行失败**:在解决Vim中文乱码时,Copilot建议的命令看似正确,但实际并未创建或修改`.vimrc`文件。 2. **任务文件解析问题**:使用`-f`功能解析任务文件时,Copilot未能正确执行获取容器日志的任务。 3. **管道功能不稳定**:管道功能对文件内容解释有效,但在某些情况下需要更明确的提示词才能正常工作。
|
7天前
|
弹性计算 人工智能 自然语言处理
操作系统智能助手OS Copilot新功能上线,快来体验吧
阿里云智能助手OS Copilot是一款基于大模型的Linux操作系统智能助手,支持自然语言问答、辅助命令执行、系统运维调优等功能。通过自然语言处理技术,OS Copilot能够帮助用户轻松完成复杂的命令操作和系统管理任务,极大提升了操作便捷性和效率。用户可以通过简单的对话获取所需的操作指令,降低了对专业技能的要求。
|
7天前
|
弹性计算 运维 JavaScript
操作系统智能助手OS Copilot新功能测评
本文介绍了使用co命令修改主机名称、安装Node环境及Vue项目的过程,以及遇到的脚本无限循环和任务执行失败等问题。通过co命令可以简化命令执行流程,但过程中遇到了一些问题,如日志读取报错和命令不正确等。最终通过简化任务和限制查询数据量解决了部分问题,并成功安装了Node环境和运行Vue项目。
|
8天前
|
运维 Linux 开发者
操作系统智能助手OS Copilot评测
作为一名个人开发者,我曾因搭建个人博客在云资源运维上花费大量时间,遇到不少问题。最近尝试了Copilot,服务端使用CentOS,配置AK/SK后顺利使用。 评测结果显示,Copilot的-t功能可轻松压缩文件夹并处理命名冲突;-f功能能执行复杂命令,但需注意表述准确性;管道功能则能解读任意文件内容,如解释系统配置文件。总体而言,Copilot提供的功能极大简化了日常服务器管理任务,提高了效率。
|
8天前
|
监控 Java Docker
云产品评测-操作系统智能助手OS Copilot新功能
作为一名Java开发人员,我日常负责微服务开发与部署,常用Docker容器化部署。最近试用OS Copilot显著提升了工作效率。版本0.9.0的`co --version`命令表现良好,特别是`-t`功能能高效查询过滤日志,如查询容器liangmu-sign最近5天的错误日志。然而,`-f`功能和管道功能在处理复杂任务时表现不佳,未能正确完成日志分析和保存任务。总体而言,`-t`功能实用,但其他功能有待改进。
36 11
|
8天前
|
弹性计算 前端开发 程序员
操作系统智能助手OS Copilot新功能
作为一名旅游公司的程序员,我主要负责旅游网站的前后端开发。近期体验了OS Copilot的安装与使用,过程顺利。-t功能用于测试命令输出,非常实用;-f功能可批量执行部署脚本,提升效率;管道功能虽有潜力,但遇到了文件路径问题。总体而言,OS Copilot显著提高了我的工作效率,但仍需完善文档和增加更多功能。
|
8天前
|
人工智能 Linux
操作系统智能助手OS Copilot新功能评测报告
作为一名对Linux感兴趣的软件工程学生,我最近成功运行了OS Copilot。起初因不熟悉AK/SK配置而遇到困难,但通过查阅资料最终掌握。使用中,-t功能令人惊艳,简化命令记忆,如查询磁盘信息非常便捷;-f功能效果一般,未完全达到预期;管道功能表现良好,符合预期。整体体验打破了我对AI的认知,带来新奇感受。
|
7天前
|
人工智能 运维 应用服务中间件
云产品评测|操作系统智能助手OS Copilot新功能
作为一名全栈开发,我在日常维护阿里云服务器时,由于对Linux不熟悉,常常感到运维困难。最近尝试了阿里云推出的OS Copilot,发现它极大简化了操作。通过简单的命令如`co nginx是否安装`和`co 将nginx设置为开启自启动 -t`,可以轻松完成复杂的任务。使用`-f`参数还能处理复杂任务,例如从Nginx日志中提取最常访问的IP地址。此外,Copilot还支持管道解析,帮助解读文件内容。总体而言,OS Copilot显著提升了我的工作效率和信心,建议进一步增加功能和优化体验。
|
8天前
|
Shell
云产品评测|操作系统智能助手OS Copilot新功能
作为一名企业开发人员,我负责网站开发和公司服务器管理。最近尝试了OS Copilot的几个功能,整体体验不错。 - **测试 -t 功能**:能查找并解释常用端口,对新手友好,但缺乏交互入口。 - **测试 -f 功能**:虽能找到大文件,但未能实现清理交互,需改进。 - **管道测试**:通过管道询问任务实现,返回详细的Shell脚本,实用性高。 总体而言,-t和管道功能较成熟,而-f功能尚需优化。