Module: LinuxStat::OS

Defined in:
lib/linux_stat/os.rb

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.



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

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.



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

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.



115
116
117
# File 'lib/linux_stat/os.rb', line 115

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.



33
34
35
# File 'lib/linux_stat/os.rb', line 33

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



98
99
100
# File 'lib/linux_stat/os.rb', line 98

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.



106
107
108
# File 'lib/linux_stat/os.rb', line 106

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.



17
18
19
# File 'lib/linux_stat/os.rb', line 17

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.



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

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.



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

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