《NodeJS开发教程6-系统工具OS和Path》

这章我们来研究下nodejs为我们提供的常用系统工具。

1.OS模块

os模块为我们提供了一些操作系统OS的常用接口方法,nodejs是跨平台的所以,我们在之后测试输出的相关操作系统参数在不同平台上也会有不同,这里我用的是win10操作系统。
首先需要引入os模块:

var os = require("os");
  • os.tmpdir() 返回操作系统的默认临时文件夹。
var tdir=os.tmpdir();
console.log("操作系统的默认临时文件夹:"+tdir);

运行输出【操作系统的默认临时文件夹:C:\Users\ADMINI~1\AppData\Local\Temp】
  • os.endianness() 返回 CPU 的字节序,可能的是 "BE"(Big Endian大端字节序) 或 "LE"(Little Endian小端字节序)。
var cpuendia=os.endianness();
console.log("CPU 的字节序:"+cpuendia);

执行输出【CPU 的字节序:LE】//我这里是PC 一般pc都是小端字节序,所以输出为“LE”
  • os.hostname() 返回操作系统的主机名。
var hostname=os.hostname();
console.log("操作系统的主机名:"+hostname);

执行输出【操作系统的主机名:67GCH468JGG565O】
  • os.platform() 返回操作系统名。
var platform=os.platform();
console.log("操作系统名:"+platform);

执行输出【操作系统名:win32】
  • os.arch() 返回操作系统 CPU 架构,可能的值有 "x64"、"arm" 和 "ia32"。
var osarch=os.arch();
console.log("操作系统 CPU 架构:"+osarch);

执行输出【操作系统 CPU 架构:x64】
  • os.loadavg() 返回一个包含 1、5、15 分钟平均负载的数组。
var loadavg=os.loadavg();
console.log("一个包含 1、5、15 分钟平均负载的数组:%j",loadavg);

执行输出【一个包含 1、5、15 分钟平均负载的数组:[0,0,0]】
  • os.totalmem() 返回系统内存总量,单位为字节
var totalmem=os.totalmem();
console.log("系统内存总量,单位为字节:"+totalmem+"约等于"+Math.floor(totalmem/1024/1024)+"MB");

执行输出【系统内存总量,单位为字节:8488148992约等于8094MB】
  • os.freemem() 返回操作系统空闲内存量,单位是字节。
var freemem=os.freemem();
console.log("操作系统空闲内存量,单位是字节:"+freemem+"约等于"+Math.floor(freemem/1024/1024)+"MB");

执行输出【操作系统空闲内存量,单位是字节:4282806272约等于4084MB】
  • os.type() 返回操作系统类型('Linux' 在 Linux系统上, 'Darwin' 在 macOS 系统上,'Windows_NT' 在 Windows系统上.)
var ostype=os.type();
console.log("操作系统类型:"+ostype);

执行输出:【操作系统类型:Windows_NT】
  • os.cpus() 返回操作系统cpus(型号、速度(单位 MHz)、时间(一个包含 user、nice、sys、idle 和 irq 所使用 CPU/内核毫秒数)
    被赋予网络地址的对象包含的属性:
  • model <string>
  • speed <number> (兆赫兹为单位)
  • times <Object>
    • user <number> CPU花费在用户模式下的毫秒时间数.
    • nice <number> CPU花费在良好模式下的毫秒时间数.
    • sys <number> CPU花费在系统模式下的毫秒时间数.
    • idle <number> CPU花费在空闲模式下的毫秒时间数.
    • irq <number> CPU花费在中断请求模式下的毫秒时间数.
[
  {
    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: 'Intel(R) Core(TM) i7 CPU         860  @ 2.80GHz',
    speed: 2926,
    times: {
      user: 511580,
      nice: 20,
      sys: 40900,
      idle: 1070842510,
      irq: 0
    }
  },
  {
    model: 'Intel(R) Core(TM) i7 CPU         860  @ 2.80GHz',
    speed: 2926,
    times: {
      user: 291660,
      nice: 0,
      sys: 34360,
      idle: 1070888000,
      irq: 10
    }
  },
  {
    model: 'Intel(R) Core(TM) i7 CPU         860  @ 2.80GHz',
    speed: 2926,
    times: {
      user: 308260,
      nice: 0,
      sys: 55410,
      idle: 1071129970,
      irq: 880
    }
  },
  {
    model: 'Intel(R) Core(TM) i7 CPU         860  @ 2.80GHz',
    speed: 2926,
    times: {
      user: 266450,
      nice: 1480,
      sys: 34920,
      idle: 1072572010,
      irq: 30
    }
  }
]
  • os.networkInterfaces() 返回一个对象,包含只有被赋予网络地址的网络接口。
  • address <string> 被赋予的 IPv4 或 IPv6 地址
  • netmask <string> IPv4 或 IPv6 子网掩码
  • family <string> IPv4IPv6
  • mac <string> 网络接口的MAC地址
  • internal <boolean> 如果 网络接口是loopback或相似的远程不能用的接口时, 值为true,否则为false
  • scopeid <number> IPv6 数字领域识别码 (只有当 familyIPv6时可用)
  • cidr <string> 以 CIDR 表示法分配的带有路由前缀的 IPv4 或 IPv6 地址。如果 netmask 参数不可用,则该属性是 null
{
  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',
      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',
      internal: false,
      cidr: 'fe80::a00:27ff:fe4e:66a1/64'
    }
  ]
}

2.Path模块

  • path.resolve(from,to) 返回将相对路径转为绝对路径。
var absolutedir=path.resolve("tools_test.js");
console.log("将相对路径转为绝对路径:",absolutedir);

执行输出【将相对路径转为绝对路径: F:\Projects\nodejs\nodejstest-lession\lession6-nodejs-tools\tools_test.js】
  • path.isAbsolute(path) 返回是否绝对路径。
var isAbsolute=path.isAbsolute(absolutedir);
console.log("是否绝对路径:"+isAbsolute);

执行输出:【是否绝对路径:true】
  • path.dirname(path) 返回路径中代表文件夹的部分。
var dirname=path.dirname(absolutedir);
console.log("路径中代表文件夹的部分:"+dirname);

执行输出:【路径中代表文件夹的部分:F:\Projects\nodejs\nodejstest-lession\lession6-nodejs-tools】
  • path.basename(path) 返回路径中的最后一部分。
var basename=path.basename(absolutedir);
console.log("路径中的最后一部分:"+basename);

执行输出:【路径中的最后一部分:tools_test.js】
  • path.extname(path) 返回文件的扩展名。
var extname=path.extname(absolutedir);
console.log("扩展名:"+extname);

执行输出:【扩展名:.js】

url参数查询解析模块

  • querystring.stringify(obj) 把js对象以url参数形式编码
const querystring=require("querystring");

var person={name:"July",age:22,address:"中国北京"};
var str=querystring.stringify(person);
console.log("编码后的键值对参数:%s",str);

执行输出:【编码后的键值对参数:name=July&age=22&address=%E4%B8%AD%E5%9B%BD%E5%8C%97%E4%BA%AC】
  • querystring.parse(str) 解析url参数为js对象
var parse_person=querystring.parse(str);//str 是 name=July&age=22&address=%E4%B8%AD%E5%9B%BD%E5%8C%97%E4%BA%AC
console.log("解析后的键值对参数对象:%j",parse_person);

执行输出:【解析后的键值对参数对象:{"name":"July","age":"22","address":"中国北京"}】
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容