The Node.js OS module has many useful utility functions for getting information about the computer system that the OS module’s program it is running on. It can provide information about hardware like CPUs, endianness, the home directory, IP address, hostname, the platform the program is running on, system uptime, information about the currently logged in user and more.
We can use the OS module by writing const os = require('os');
at the top of our code. There are many useful properties in the OS module. Below are more useful properties in the OS module:
os.cpus
The os.cpus()
function returns an array of objects that has various information about each logical core of the host computer’s CPU. Each entry has a few properties. There’s the model
property, which is a string that indicates the model of the computer’s CPU. The speed
property is a numeric property that is measured in megahertz. The times
property is an object with the following properties:
user
— a numeric property that indicates the number of milliseconds the CPU has spent in user mode.nice
— a numeric property that indicates the number of milliseconds the CPU has spent in nice mode. Nice mode is where the CPU is running processes that have a positive nice value, which means a process that’s a lower priority.sys
— a numeric property that indicates the number of milliseconds the CPU has spent in sys mode.idle
— a numeric property that indicates the number of milliseconds the CPU has spent in idle mode. A CPU is idle when it’s not used by any program.irq
— a number property the number of milliseconds the CPU has spent in IRQ mode. IRQ is a hardware signal that makes the CPU temporarily stop a running program and allow an interrupt handler program to run instead.
For example, we can use the function like the following:
console.log(os.cpus());
We can get the output that resembles the following:
[ { model: 'Intel(R) Xeon(R) CPU @ 2.30GHz',
speed: 2300,
times:
{ user: 3367100, nice: 0, sys: 757800, idle: 9833900, irq: 0 } },
{ model: 'Intel(R) Xeon(R) CPU @ 2.30GHz',
speed: 2300,
times:
{ user: 3387000, nice: 0, sys: 730100, idle: 10054300, irq: 0 } },
{ model: 'Intel(R) Xeon(R) CPU @ 2.30GHz',
speed: 2300,
times:
{ user: 3259600, nice: 0, sys: 748300, idle: 10168800, irq: 0 } },
{ model: 'Intel(R) Xeon(R) CPU @ 2.30GHz',
speed: 2300,
times:
{ user: 3229700, nice: 0, sys: 755800, idle: 10195600, irq: 0 } } ]
os.endianness
The os.endianness()
function returns a string identifying the endianness of the CPU for which the Node.js run-time binary is compiled from. The 2 possible values are:
'BE'
— big-endian. A big-endian CPU order places with the most significant byte first and the least significant byte last.'LE'
— little-endian, the opposite of big-endian.
If we run console.log
on the return value of os.endianness()
we may get something like the following:
'LE'
os.freemem
The os.freemem()
function returns an integer that indicates the amount of free memory in the number of bytes. If we run console.log
of the output of os.freemem()
, we get something like:
15338930176
os.getPriority
The os.getPriority
function returns an integer indicating the scheduling priority of the process which is specified by the PID. It takes one argument, which is the process ID passed in as an integer. If the PID isn’t provided or it’s 0, then the priority of the current process is returned. For example, if we write:
os.getPriority()
Then we get a number. 19 indicates the lowest CPU priority and -20 indicates the highest. Processor priority levels in Node.js are defined by the following constants:
PRIORITY_LOW
— The lowest process scheduling priority. This corresponds toIDLE_PRIORITY_CLASS
on Windows and a nice value of 19 on all other platforms.PRIORITY_BELOW_NORMAL
— This corresponds toBELOW_NORMAL_PRIORITY_CLASS
on Windows and a nice value of 10 on all other platforms.PRIORITY_NORMAL
— The default process scheduling priority. This corresponds toNORMAL_PRIORITY_CLASS
on Windows and a nice value of 0 on all other platforms.PRIORITY_ABOVE_NORMAL
— This corresponds toABOVE_NORMAL_PRIORITY_CLASS
on Windows and a nice value of -7 on all other platforms.PRIORITY_HIGH
— . This corresponds toHIGH_PRIORITY_CLASS
on Windows and a nice value of -14 on all other platforms.PRIORITY_HIGHEST
— The highest process scheduling priority. This corresponds toREALTIME_PRIORITY_CLASS
on Windows and a nice value of -20 on all other platforms.
os.homedir
The os.homedir
function returns a string of the path o the home directory of the user. On Unix and Linux systems, it will use the $HOME
variable if it’s defined. Otherwise, it will look up the home directory path by the effective UID, which is the user ID of the user identity that you’re currently assuming. For example, if you used sudo
to use the computer as a root user then the effective user ID would be the user ID of the root user. On Windows, the value of the USERPROFILE
will be used if it’s defined. Otherwise, it will be the path of the profile directory of the current user. For example, if we run console.log
on the output of os.homedir()
, then we may get something like:
'/home/runner'
if you’re on a Linux system.
os.hostname
The os.hostname
function returns the hostname of the operating system as a string. For example, if we call console.log
on the return value of os.hostname()
, then we may get something like ‘5b84600c80eb’
.
os.loadavg
The os.loadavg
function returns a number array containing 1, 5, and 15-minute load averages. The load average measures system activity, which is calculated by the operating system and expressed as a decimal number. The ideal load average should be less than the number of logical CPUs in the system. This function only works on Unix and Linux system. On Windows, it always returns [0,0,0]
. For example, if we run this function on the Linux system, like in the following code:
console.log(os.loadavg())
We may get something like:
[ 12.60791015625, 13.3916015625, 9.8798828125 ]
os.networkInterfaces
The os.networkInterfaces
function returns an object that has the network interfaces that have been assigned a network address. The keys on the returned object identify a network interface. The corresponding value of the keys is an array of objects that describe an assigned network address. Properties of an assigned network address object include:
address
— a string that has the assigned IPv4 or IPv6 addressnetmask
— a string that has the IPv4 or IPv6 network maskfamily
— a string that has 2 possible values:IPv4
orIPv6
mac
— a string that has the MAC address of the network interfaceinternal
— a boolean value that istrue
if the network interface is a loopback or similar interface that is not remotely accessible. Otherwise, it’sfalse
scopeid
— a number that has the IPv6 scope ID, applicable only whenfamily
isIPv6
cidr
— a string that has the assigned IPv4 or IPv6 address with the routing prefix in CIDR notation. CIDR notation has 2 groups of numbers. The first is the group of bits, which is the network address. The first group is followed by a slash. The second group is the number of bits that are considered significant for network routing. For example, if we have an IP address192.168.0.15/24
, then192.168.0.15
is the network address and24
is the number of significant bits for network routing purposes. If thenetmask
is invalid, this property is set tonull
.
For example, if we run:
console.log(os.networkInterfaces());
Then we may get something like:
{ 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' } ],
eth0:
[ { address: '172.18.0.103',
netmask: '255.255.0.0',
family: 'IPv4',
mac: '02:42:ac:12:00:67',
internal: false,
cidr: '172.18.0.103/16' } ] }
We have lo
for the loopback address and eth0
for the Ethernet interface.
os.platform
The os.platform
function returns a string that identifies that operating system platform of the computer that compiled the Node.js binary. The current possible values are 'aix'
, 'darwin'
, 'freebsd'
, 'linux', 'openbsd'
, 'sunos'
, or 'win32'
. It’s the same as the process.platform
property. The value 'android'
maybe returned if the Node.js binary is built on an Android device. However, Android support in Node.js is in the experimental phase. For example, if we run:
console.log(os.platform());
Then we may get something like:
'linux'
The Node.js OS module has many useful utility functions for getting information about the computer system that the OS module’s program is running on. The modules have many more properties containing useful information like CPUs, endianness, home directory, IP address, hostname, the platform the program is running on, system uptime, information about the currently logged in user and more.