Module: LinuxStat::OS

Defined in:
lib/linux_stat/os.rb

Overview

Shows various OS related information of the current system.

Class Method Summary collapse

Class Method Details

.bitsObject

Reads ruby configuration and tries to guess if the system is 64 bit.

If it fails then it runs utsname.h to guess the machine.

It the machine is 64 bits, it will return 64, else it returns 32.

The return type is strictly Integer and doesn’t fail.



129
130
131
132
133
134
135
# File 'lib/linux_stat/os.rb', line 129

def bits
	@@bits ||= if RbConfig::CONFIG['host_cpu'].end_with?('64') || RUBY_PLATFORM.end_with?('64') || machine.end_with?('64')
		64
	else
		32
	end
end

.distributionObject

Reads /etc/lsb-release or /etc/os-release tries to get information about the distribution.

If the information isn’t available, it will read and return /etc/issue.

The return type is String. If none of the info is available, it will return an empty frozen String.



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/linux_stat/os.rb', line 46

def distribution
	@@distribution ||= if os_release.key?(:NAME)
		os_release[:NAME]
	else
		v = lsb_release

		if v.key?(:DISTRIB_DESCRIPTION)
			v[:DISTRIB_DESCRIPTION]
		elsif v.key?(:DISTRIB_ID)
			v[:DISTRIB_ID]
		elsif File.readable?('/etc/issue'.freeze)
			IO.read('/etc/issue'.freeze, encoding: 'ASCII-8bit'.freeze).strip
		else
			'Unknown'.freeze
		end
	end
end

.hostnameObject

Returns the hostname from LinuxStat::Sysconf.hostname.

The return type is String. If the info info isn’t available, it will return an empty String.



117
118
119
# File 'lib/linux_stat/os.rb', line 117

def hostname
	LinuxStat::Sysconf.hostname
end

.lsb_releaseObject

Reads /etc/lsb-release and returns a Hash. For example:

LinuxStat::OS.lsb_release

=> {:LSB_VERSION=>"1.4", :DISTRIB_ID=>"Arch", :DISTRIB_RELEASE=>"rolling", :DISTRIB_DESCRIPTION=>"Arch Linux"}

If the info isn’t available, it will return an empty Hash.

The amount of data read is 4096 bytes. Any more than that will result in truncated output.

The information is also cached, and once loaded, won’t change in runtime. Because changing the /etc/lsb-release isn’t expected in runtime.



35
36
37
# File 'lib/linux_stat/os.rb', line 35

def lsb_release
	@@lsb_release ||= File.readable?('/etc/lsb-release') ? release('/etc/lsb-release') : {}
end

.machineObject

Uses utsname.h to determine the machine

It returns a String but if the info isn’t available, it will return an empty String



100
101
102
# File 'lib/linux_stat/os.rb', line 100

def machine
	@@machine ||= LinuxStat::Uname.machine
end

.nodenameObject

Uses utsname.h to determine the system nodename

It returns String but if the info isn’t available, it will return an empty String.



108
109
110
# File 'lib/linux_stat/os.rb', line 108

def nodename
	LinuxStat::Uname.nodename
end

.os_releaseObject

Reads /etc/os-release and returns a Hash. For example:

LinuxStat::OS.os_release

=> {:NAME=>"Arch Linux", :PRETTY_NAME=>"Arch Linux", :ID=>"arch", :BUILD_ID=>"rolling", :ANSI_COLOR=>"38;2;23;147;209", :HOME_URL=>"https://www.archlinux.org/", :DOCUMENTATION_URL=>"https://wiki.archlinux.org/", :SUPPORT_URL=>"https://bbs.archlinux.org/", :BUG_REPORT_URL=>"https://bugs.archlinux.org/", :LOGO=>"archlinux"}

If the info isn’t available, it will return an empty Hash.

The amount of data read is 4096 bytes. Any more than that will result in truncated output.

The information is also cached, and once loaded, won’t change in runtime. Because changing the /etc/lsb-release isn’t expected in runtime.



19
20
21
# File 'lib/linux_stat/os.rb', line 19

def os_release
	@@os_release ||= File.readable?('/etc/os-release') ? release('/etc/os-release') : {}
end

.uptimeObject

Reads /proc/uptime and returns the system uptime:

LinuxStat::OS.uptime

=> {:hour=>10, :minute=>34, :second=>12.59}

If the stat isn’t available, an empty hash is returned.



144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
# File 'lib/linux_stat/os.rb', line 144

def uptime
	return {} unless uptime_readable?

	uptime = IO.read('/proc/uptime'.freeze).to_f
	uptime_i = uptime.to_i

	h = uptime_i / 3600
	m = uptime_i % 3600 / 60
	s = uptime.%(3600).%(60).round(2)

	{
		hour: h,
		minute: m,
		second: s
	}.freeze
end

.versionObject Also known as: distrib_version

Gives you the version of the OS you are using.

On ArchLinux for example:

LinuxStat::OS.version

=> "rolling"

On Ubuntu 20.04:

LinuxStat::OS.version

=> "20.04"

On CentOS 26:

LinuxStat::OS.version

=> "26"

The return type is String. But if the information isn’t available, it will return an empty frozen String.



84
85
86
87
88
89
90
91
92
93
94
# File 'lib/linux_stat/os.rb', line 84

def version
	@@distrib_version ||= if os_release.key?(:VERSION_ID)
		os_release[:VERSION_ID]
	elsif lsb_release.key?(:DISTRIB_RELEASE)
		lsb_release[:DISTRIB_RELEASE]
	elsif os_release.key?(:VERSION)
		os_release[:VERSION]
	else
		''.freeze
	end
end