1.0 OS模块介绍

Node中的OS模块提供了和当前系统相关的一系列实用方法。在代码中可以直接用os = require("os")的方式来引入。OS模块本身非常的简单,本文将简单对其常用的方法和重要属性进行介绍并提供示例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
wendingding$ node
> console.dir(os,{showHiddren:true,depth:0,colors:true})

{ arch: [Object],
cpus: [Function: cpus],
EOL: '\n',
endianness: [Object],
freemem: [Object],
homedir: [Object],
hostname: [Object],
loadavg: [Function: loadavg],
networkInterfaces: [Function: networkInterfaces],
platform: [Object],
release: [Object],
tmpdir: [Object],
totalmem: [Object],
type: [Object],
userInfo: [Function: getUserInfo],
uptime: [Object],
getNetworkInterfaces: [Function: deprecated],
tmpDir: [Function: deprecated],
constants: [Object]
}

2.0 基本使用

OS模块中的这些方法都不接受参数,全是获取(信息)型的方法,使用简单直接调用即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//001 导入模块
var os = require("os");
//002 迭代os对象
for(var f in os)
{
//003 获取os对象所有的方法并控制输出
if(typeof os[f] === "function")
{
console.log("当前方法名称:",f);
console.log("调用执行结果:",os[f]());
}else
{
//004 获取os对象中所有的属性并输出名称
console.log("当前属性名称:",f);
}
console.log("_____________");
}

使用自己的电脑进行测试,执行上面的代码,打印OS模块中所有的方法名并调用这些方法输出结果,下面列出命令行执行JavaScript文件的结果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
wendingding$ node os.js 
当前方法名称: arch
调用执行结果: x64
_____________
当前方法名称: cpus
调用执行结果: [ { model: 'Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz',
speed: 2700,
times: { user: 730600, nice: 0, sys: 570160, idle: 4650220, irq: 0 } },
{ model: 'Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz',
speed: 2700,
times: { user: 247120, nice: 0, sys: 137070, idle: 5566140, irq: 0 } },
{ model: 'Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz',
speed: 2700,
times: { user: 667530, nice: 0, sys: 377510, idle: 4905300, irq: 0 } },
{ model: 'Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz',
speed: 2700,
times: { user: 256200, nice: 0, sys: 137540, idle: 5556590, irq: 0 } } ]
_____________
当前属性名称: EOL
_____________
当前方法名称: endianness
调用执行结果: LE
_____________
当前方法名称: freemem
调用执行结果: 159780864
_____________
当前方法名称: homedir
调用执行结果: /Users/文顶顶
_____________
当前方法名称: hostname
调用执行结果: wendingding.local
_____________
当前方法名称: loadavg
调用执行结果: [ 1.8583984375, 1.6640625, 1.6328125 ]
_____________
当前方法名称: networkInterfaces
调用执行结果: { lo0:
[ { 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' }
···省略···
]}
_____________
当前方法名称: platform
调用执行结果: darwin
_____________
当前方法名称: release
调用执行结果: 17.4.0
_____________
当前方法名称: tmpdir
调用执行结果: /var/folders/6t/83z6zbfn0w56l2dzc_c2y1wh0000gn/T
_____________
当前方法名称: totalmem
调用执行结果: 8589934592
_____________
当前方法名称: type
调用执行结果: Darwin
_____________
当前方法名称: userInfo
调用执行结果: { uid: 501,
gid: 20,
username: 'wendingding',
homedir: '/Users/文顶顶',
shell: '/bin/bash' }
_____________
当前方法名称: uptime
调用执行结果: 8730
_____________
当前方法名称: getNetworkInterfaces
调用执行结果: { lo0:
[ { 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',
scopeid: 0,
internal: true },
{ address: 'fe80::1',
netmask: 'ffff:ffff:ffff:ffff::',
family: 'IPv6',
mac: '00:00:00:00:00:00',
scopeid: 1,
internal: true } ],
en0:
[ { address: '192.168.51.245',
netmask: '255.255.255.0',
family: 'IPv4',
mac: 'a4:5e:60:e0:65:b1',
internal: false } ],
awdl0:
[ { address: 'fe80::58c6:9eff:feb1:f896',
netmask: 'ffff:ffff:ffff:ffff::',
family: 'IPv6',
mac: '5a:c6:9e:b1:f8:96',
scopeid: 8,
internal: false } ],
utun0:
[ { address: 'fe80::18e0:16fa:bb6:ab15',
netmask: 'ffff:ffff:ffff:ffff::',
family: 'IPv6',
mac: '00:00:00:00:00:00',
scopeid: 12,
internal: false } ] }
_____________
当前方法名称: tmpDir
调用执行结果: /var/folders/6t/83z6zbfn0w56l2dzc_c2y1wh0000gn/T
_____________
当前属性名称: constants
_____________
(node:2128) [DEP0023] DeprecationWarning: os.getNetworkInterfaces is deprecated.
(node:2128) [DEP0022] DeprecationWarning: os.tmpDir() is deprecated.

整体结构

OS模块对象的EOL属性是一个字符串常量,该常量定义了相关操作系统的行末标志。如果是POSIX 系统,那么则对应的是\n符号,如果是Windows系统,那么对应的是\r\n符号。

现存的CPU架构可能存在:'arm', 'arm64', 'ia32', 'mips', 'mipsel', 'ppc', 'ppc64', 's390', 's390x', 'x32', 'x64'等情况。

二进制编译环境的字节顺序通常有两种:'BE'(大端模式)和'LE'(小端模式)

平均负载是系统活动的测量由操作系统自己计算得出,表达为一个分数. 通常理想的平均负载应该比系统的逻辑CPU的数目要少,平均负载是UNIX相关的概念,在Windows平台上,其返回值总是[0, 0, 0]。

关于OS常量和错误常量相关的信息,请参考官方文档