要读取Eyecandy HTML版本,请访问linux_stat。
LinuxStat可让您读取Linux系统的状态。它可以向您显示CPU统计数据和使用情况,内存统计和用法,交换统计统计和用法,电池使用情况,BIOS信息,内核详细信息,本地IP,OS详细信息和解析OS-REALE + LSB-REALE等。
它仅适用于Linux,检测OS取决于该GEM的用户。
| 目录 |
|---|
| 运行时依赖关系 |
| 建立依赖性 |
| 可选的运行时依赖项 |
| 安装 |
| 用法 |
| 笔记 |
| 返回类型 |
| 红宝石在轨道上 |
| 安卓 |
| 克隆此仓库 |
| 发展 |
| 测试 |
| 贡献 |
| 执照 |
| 语言 |
# pacman -S gcc make ruby
# apt install gcc build-essential ruby ruby-dev build-essential
# emerge --ask dev-lang/ruby
# yum install gcc ruby-devel ruby make
如果您拥有Ruby 2.3.0+,则可以在 *AmazonLinux上运行Linux_stat。
# zypper install gcc ruby ruby-devel make
如果使用LinuxStat :: USB和/或LinuxStat :: PCI,则需要HWDATA来解码供应商和产品ID
您可以简单地安装HWDATA。
# pacman -S hwids
# apt install hwdata
# emerge --ask sys-apps/hwids
# yum install hwdata
zypper install hwdata
但是没有HWDATA,它将不会显示此类信息。
您还可以指向HWDATA(pci.ids / usb.ids)文件的下载副本。
请点击下面的注释7,以获取有关此信息的更多信息。
将此行添加到您的应用程序的gemfile:
gem 'linux_stat'然后执行:
$ bundle install
或自行安装:
$ gem install linux_stat
以下是表中的LinuxStat模块和模块函数。 USAGES.MD由linuxstat.rb -md命令生成,该命令可在安装后可用。
为了易于使用,LinuxStat也分配给LS常数。因此,LinuxStat :: USB可以用LS :: USB替换。
| LinuxStat模块 | 描述 |
|---|---|
| LinuxStat :: Bios | 系统的BIOS相关信息 |
| LinuxStat ::电池 | 系统的第一个电池实现信息 |
| LinuxStat :: CPU | 系统的CPU使用和其他相关信息 |
| linuxstat :: fs | 系统的文件系统相关信息。文件系统模块使用。 |
| LinuxStat ::文件系统 | 系统的文件系统使用和其他相关信息 |
| linuxstat :: ftw | 文件树步行:浏览文件并为您提供与其自己的和子文件和目录相关的数据 |
| LinuxStat ::内核 | 系统的内核相关信息 |
| LinuxStat ::内存 | 系统的内存(RAM)用法和其他相关信息 |
| LinuxStat ::坐骑 | 系统的安装点相关信息 |
| LinuxStat :: Net | 系统的互联网使用和其他信息 |
| LinuxStat :: OS | 系统的OS相关信息和解析发布文件 |
| LinuxStat :: PCI | 系统的PCI设备相关信息(HWDATA的可选解析) |
| LinuxStat :: PrettifyBytes | 将字节转换为人类可读格式(KB,KIB等) |
| LinuxStat :: procfs | 在C中读取Proc File System,以更快地访问。使用过的浓度 |
| LinuxStat ::流程 | 系统的过程和相关信息 |
| LinuxStat :: ProcessInfo | 系统的单个过程CPU,内存使用情况,CPU时间等。信息 |
| LinuxStat ::交换 | 系统交换相关信息 |
| LinuxStat :: Sysconf | 由其他LinuxStat模块使用,提供各种系统详细信息,例如PageSize,Max Children,Open Files等 |
| linuxstat :: sysinfo | 由其他LinuxStat模块使用,更快地访问诸如TotalRAM,Freeram,TotalHigh,Load平均值等的信息。 |
| LinuxStat ::热力 | 系统的热状态,与风扇相关的信息,传感器计数,风扇数等。 |
| LinuxStat :: USB | 系统的USB设备相关信息和其他计数(HWDATA的可选解析) |
| LinuxStat :: Uname | 由其他LinuxStat模块(System在C中的UNAME信息)使用,该信息也由uname命令提供。 |
| LinuxStat ::用户 | 系统的各种用户相关信息,提供当前的用户名,主目录等。 |
为了计算当前使用情况,我们需要在给定的间隔中获得两种用法,然后从第一个减去第二个用法。例如,如果当前下载( LinuxStat::Net.total_bytes_received )为1000字节,并且如果0.1秒前为100个字节,则意味着在0.1秒内收到900个字节。这意味着当前速度为9000字节/s或9 kb/s。
没有投票,就不可能计算当前的用法。尽管可以计算总使用量。系统监视器也这样做...
因此,这些方法需要轮询间隔:
他们睡在给定的间隔,然后区分数据。
有关更多信息,请查看上述方法的RI文档。
除非您在线程中实现它们,否则这些方法可以稍微降低您的应用程序。
其他方法没有实施睡眠,它们只是在毫秒下工作。
例如:
LinuxStat::CPU.stat(0.1)
=> {0=>7.69, 1=>0.0, 2=>0.0, 3=>18.18, 4=>10.0}
这将入睡0.1秒。要可靠,请使用大约0.05秒左右的时间。
如果您想构建系统监视器并且不想等待,则必须做类似的事情:
#!/usr/bin/ruby
require 'linux_stat'
usages = []
thread = Thread.new { }
counter = 0
while true
thread = Thread.new { usages = LinuxStat::CPU.usages(0.5).values } unless thread.alive?
# clears the screen and prints the info
puts "e[2Je[He[3J"
"#{counter += 1}n"
"e[1;33mTotal CPU Usage:e[0m #{usages[0]}%n"
"#{usages[1..-1].to_a.map.with_index { |x, i| "e[1;33mCore #{i}e[0m => #{x}%n" }.join}"
"Total Download: #{LinuxStat::PrettifyBytes.convert_decimal LinuxStat::Net.total_bytes_received}n"
"Total Upload: #{LinuxStat::PrettifyBytes.convert_decimal LinuxStat::Net.total_bytes_transmitted}"
end
这不会在每个循环中等待0.5秒,但也不会在每个循环中更新CPU使用情况。因此,您将在每0.5秒间隔内每次使用CPU使用中看到的内容。
您还将看到柜台像疯狂一样增加。这意味着它没有等待0.5秒。
但是其他方法没有此延迟,因此在此示例中,您将可以实时看到“总下载”和“总上传”,一旦Linux内核更新数据并执行循环。
只需运行linuxstat.rb命令即可测试哪种方法在微秒中测量什么时间。
有6种不同的方法来计算CPU的数量。但是他们在这里是有原因的!
好吧,本节实际上揭开了方法。
LinuxStat::CPU.count() :它为系统配置了CPU。它不计入热插入的CPU。如果4个CPU中的3个被热插入,它仍将显示4个。它调用sysconf(_SC_NPROCESSORS_CONF)
LinuxStat::ProcessInfo.nproc(pid = $$) : [也与LinuxStat::ProcessInfo.count_cpu() ]混为一谈。
它像其他3种方法一样返回处理器的数量。没有任何争论,就像跑步require 'etc' ; puts Etc.nprocessors
因此,请注意检查实际上分配给PID的处理器数量的数量。
例如:
$ ruby -r linux_stat -e "puts LS::ProcessInfo.nproc"
4
$ taskset -c 0 ruby -r linux_stat -e "puts LS::ProcessInfo.nproc"
1
$ taskset -c 0-1 ruby -r linux_stat -e "puts LS::ProcessInfo.nproc"
2
$ taskset -c 0-1,3 ruby -r linux_stat -e "puts LS::ProcessInfo.nproc"
3
$ taskset -c 0-1,3 ruby -r linux_stat -e "puts LS::ProcessInfo.nproc "
3
或参数:
irb(main):001:0> require 'linux_stat'
=> true
irb(main):002:0> LinuxStat::ProcessInfo.command_name 4775
=> "electron"
irb(main):003:0> LinuxStat::ProcessInfo.nproc 4775
=> 4
LinuxStat::CPU.online() :这将返回在线CPU作为数组的数量。它不会受到任务集或其他任何内容的影响。
例如:
irb(main):001:0> require 'linux_stat'
=> true
irb(main):002:0> LinuxStat::CPU.online
=> [0, 1, 3]
通过使用LinuxStat::CPU.online.count您可以计算系统上的实际在线CPU。
任何N数量的CPU都可以进出,这将正确报告。
它只是从 /proc /stat获取信息;但是,如果失败,它将读取/sys/devices/system/cpu/在线并解析输出以获取数组。
LinuxStat::CPU.count_online这是一种更强大的方法,可计算在线CPU。如果不是全部,它不应该在大多数情况下失败!但是,如果出于某些怪异的原因失败,它将返回零。
LinuxStat::CPU.offline() :
这将返回离线CPU作为数组的数量。它不会受到任务集或其他任何内容的影响。
例如:
irb(main):001:0> require 'linux_stat'
=> true
irb(main):002:0> LinuxStat::CPU.offline
=> [2]
任何N数量的CPU都可以进出,这将正确报告。
它只是从/sys/devices/system/cpu/离线获取信息,然后解析输出。
LinuxStat::Sysconf.processor_configured() :听起来重复!实际上,这是用C编写的,它由LinuxStat::CPU.count调用。
区别在于LinuxStat::CPU.count缓存返回值,而此方法没有。
LinuxStat::Sysconf.processor_online() :这可能再次对LinuxStat :: cpu.online听起来很强烈,但实际上不是!
如果您在循环时使用,则可能不会每次报告正确的CPU数量。
最糟糕的是,更新CPU总数可能需要很长时间。
好处是,它很快!
它主要是为了完整的Sysconf。
文件系统可以进行参数。默认情况下它是“/”或系统的根...
但是为了举例来说,要获取 /的免费磁盘空间,您要这样做:
$ irb
irb(main):001:0> require 'linux_stat'
=> true
irb(main):002:0> LinuxStat::Filesystem.free('/').fdiv(1024 ** 3).to_s << " GiB"
=> "35.666873931884766 GiB"
查看拇指drive的自由和总空间:
$ irb
irb(main):001:0> require 'linux_stat'
=> true
irb(main):002:0> LinuxStat::Mounts.mount_point('/dev/sdb1')
=> "/run/media/sourav/5c2b7af7-d4c3-4ab4-a035-06d18ffc8e6f"
irb(main):003:0> thumbdrive = _
=> "/run/media/sourav/5c2b7af7-d4c3-4ab4-a035-06d18ffc8e6f"
irb(main):004:0> LinuxStat::Filesystem.free(thumbdrive).fdiv(1024 ** 3).to_s << " GiB"
=> "2.504791259765625 GiB"
irb(main):005:0> LinuxStat::Filesystem.total(thumbdrive).fdiv(1024 ** 3).to_s << " GiB"
=> "29.305004119873047 GiB"
LinuxStat :: ProcessInfo的所有方法都可以采用包含过程ID的参数。默认情况下,它是$$或当前过程的PID,Ruby本身。
示例:说您想看看CPU Firefox正在消耗多少CPU,因为您必须执行以下操作(Firefox可以创建很多子过程):
LinuxStat::Process.names.find { |x| x[1].include? 'firefox' }[0]
=> 770 # but this differs all the time
$ irb
irb(main):001:0> require 'linux_stat'
=> true
irb(main):002:0> pid = LinuxStat::Process.names.find { |x| x[1].include? 'firefox' }[0]
=> 770
irb(main):003:0> LinuxStat::ProcessInfo.cpu_usage(pid: pid)
=> 0.0
irb(main):004:0> LinuxStat::ProcessInfo.cpu_usage(pid: pid)
=> 15.0
获取Firefox的内存使用情况(例如):
$ irb
irb(main):001:0> require 'linux_stat'
=> true
irb(main):002:0> LinuxStat::ProcessInfo.mem_stat(LinuxStat::Process.names.find { |x| x[1].include? 'firefox'.freeze }[0])
=> {:memory=>468472, :virtual_memory=>4754080, :resident_memory=>814388}
仅获取MIB中的内存使用量:
$ irb
irb(main):001:0> require 'linux_stat'
=> true
irb(main):002:0> LinuxStat::ProcessInfo.memory(LinuxStat::Process.names.find { |x| x[1].include? 'firefox'.freeze }[0]).fdiv(1024).round(2).to_s << " MiB"
=> "467.51 MiB"
LinuxStat :: FS模块为您从STATVF收集的哈希提供了原始信息。
它没有在上面记录,因为不建议直接运行它。但这不应该引起任何问题。 LinuxStat::Filesystem.stat_raw(fs = '/')会自动执行此操作。
它总是需要一个论点,而且非常快。它直接调用CAPI,而无需任何中间红宝石代码。
例如,获取有关'/'或root的信息:
$ irb
irb(main):001:0> require 'linux_stat'
=> true
irb(main):002:0> LinuxStat::FS.stat('/')
=> {:block_size=>4096, :fragment_size=>4096, :blocks=>29292283, :block_free=>9349843, :block_avail_unpriv=>9349843, :inodes=>58612160, :free_inodes=>56708247, :filesystem_id=>2050, :mount_flags=>1024, :max_filename_length=>255}
irb(main):003:0> t = Time.now ; puts LinuxStat::FS.stat('/') ; Time.now - t
{:block_size=>4096, :fragment_size=>4096, :blocks=>29292283, :block_free=>9349843, :block_avail_unpriv=>9349843, :inodes=>58612160, :free_inodes=>56708247, :filesystem_id=>2050, :mount_flags=>1024, :max_filename_length=>255}
=> 5.0468e-05
要了解有关它们的更多信息,只需运行RI和方法名称即可。查看所有可用方法。
大多数LinuxStat ::用户都支持参数。
例如,要使用用户名来获取用户的房屋:
$ irb
irb(main):001:0> require 'linux_stat'
=> true
irb(main):002:0> LinuxStat::User.home_by_username('root')
=> "/root"
irb(main):003:0> LinuxStat::User.home_by_username('ftp')
=> "/srv/ftp"
irb(main):004:0> LinuxStat::User.home_by_username('mail')
=> "/var/spool/mail"
或通过GID/UID获取用户的家:
$ irb
irb(main):001:0> require 'linux_stat'
=> true
irb(main):002:0> LinuxStat::User.homes_by_uid(1001)
=> ["/home/userx", "/home/userz"]
irb(main):003:0> LinuxStat::User.homes_by_uid(1000)
=> ["/home/sourav"]
irb(main):004:0> LinuxStat::User.home_by_gid(1001)
=> "/home/userx"
irb(main):005:0> LinuxStat::User.home_by_gid(1000)
=> "/home/sourav"
irb(main):006:0> LinuxStat::User.home_by_gid(0)
=> "/root"
或通过用户名获取UID/GID:
$ irb
irb(main):001:0> require 'linux_stat'
=> true
irb(main):002:0> LinuxStat::User.uid_by_username('root')
=> 0
irb(main):003:0> LinuxStat::User.uid_by_username('ftp')
=> 14
irb(main):004:0> LinuxStat::User.gid_by_username('ftp')
=> 11
irb(main):005:0> LinuxStat::User.gid_by_username('InvalidUser')
=> nil
或获取当前用户(例如,在Docker中):
$ irb
irb(main):001:0> require 'linux_stat'
=> true
irb(main):002:0> LinuxStat::User.get_current_user
=> "x"
irb(main):003:0> LinuxStat::User.get_user
=> "x"
irb(main):004:0> LinuxStat::User.get_login
=> ""
是的,get_login()可以返回一个空字符串。但是LinuxStat :: User.get_user也将其视为LinuxStat :: User.get_current_user在大多数情况下不应返回空字符串。
PCI和USB模块实际上依赖于/usr/share/hwdata/中的hwdata。 ls :: usb.devices_stat和ls :: pci.devices_stat返回哈希中的信息:
$ ruby -r linux_stat -e "puts LS::USB.devices_stat.to_s[0..200]"
[{:path=>"/sys/bus/usb/devices/1-1.2/", :id=>"04d9:1203", :vendor_id=>"04d9", :product_id=>"1203", :bus_num=>1, :dev_num=>7, :hwdata=>{:vendor=>"Holtek Semiconductor, Inc.", :product=>"Keyboard"}, :aut
但是,如果文件不可用,它将不会返回与HWDATA相关的信息。
因此建议安装HWDATA。但是您可能会面临Heroku和其他在线PAA的问题,您无法安装它。因此,版本1.1.1+具有称为hwdata_file = file模块函数。
LS::PCI.hwdata_file = File.join(__dir__, 'hwdata', 'pci.ids')
LS::USB.hwdata_file = File.join(__dir__, 'hwdata', 'usb.ids')
假设您在./hwdata目录下有pci.ids和usb.ids 。
在轨道上,您可以将__dir__放在Rails.root中。RB。
但是请注意,该文件只能设置一次。建议您在应用程序的开头这样做。
irb(main):001:0' require 'linux_stat'
=> true
irb(main):002:0> LS::USB.hwdata_file_set?
=> false
irb(main):003:0> LS::USB.devices_stat ; ''
=> ""
irb(main):004:0> LS::USB.hwdata_file_set?
=> true
它可以在USB和PCI模块上使用。
设置文件后,调用LS::PCI.hwdata_file = file是徒劳的。
irb(main):001:0> require 'linux_stat'
=> true
irb(main):002:0> LS::PCI.initialize_hwdata
=> true
irb(main):003:0> LS::PCI.initialize_hwdata
=> false
如果工作起作用,它将返回true,否则会返回false。它打算做一次。
如果您不初始化并调用使用HWDATA的方法,他们将调用它,并且第一个呼叫可能需要0.1至0.2秒,然后连续的呼叫将在毫秒下进行。
通常,我们需要与KB,MB GB,TB或KIB,MIB,GIB,TIB等合作。而且我们需要一些工作来将字节转换为这些单元。由于LinuxStat在字节和Kolobytes中提供了许多数据,因此一直将它们转换为非常乏味。为了避免这种重复,它带有PrettifyBytes模块。
例如,将字节转换为十进制后缀:
$irb
irb(main):001:0> require 'linux_stat'
=> true
irb(main):002:0> LinuxStat::PrettifyBytes.convert_decimal(1000)
=> "1.00 kilobyte"
irb(main):003:0> LinuxStat::PrettifyBytes.convert_decimal(10000)
=> "10.00 kilobytes"
irb(main):004:0> LinuxStat::PrettifyBytes.convert_decimal(100000)
=> "100.00 kilobytes"
irb(main):005:0> LinuxStat::PrettifyBytes.convert_decimal(10 ** 13)
=> "10.00 terabytes"
将字节转换为二元后缀:
irb(main):006:0> LinuxStat::PrettifyBytes.convert_binary(1000)
=> "1000.00 bytes"
irb(main):007:0> LinuxStat::PrettifyBytes.convert_binary(10000)
=> "9.77 kibibytes"
irb(main):008:0> LinuxStat::PrettifyBytes.convert_binary(100000)
=> "97.66 kibibytes"
irb(main):009:0> LinuxStat::PrettifyBytes.convert_binary(10 ** 13)
=> "9.09 tebibytes"
将它们转换为简短的十进制后缀:
irb(main):010:0> LinuxStat::PrettifyBytes.convert_short_decimal(1000)
=> "1.00 kB"
irb(main):011:0> LinuxStat::PrettifyBytes.convert_short_decimal(10000)
=> "10.00 kB"
irb(main):012:0> LinuxStat::PrettifyBytes.convert_short_decimal(100000)
=> "100.00 kB"
irb(main):013:0> LinuxStat::PrettifyBytes.convert_short_decimal(10 ** 13)
=> "10.00 TB"
将它们转换为简短的IEC二进制后缀:
irb(main):014:0> LinuxStat::PrettifyBytes.convert_short_binary(1000)
=> "1000 B"
irb(main):015:0> LinuxStat::PrettifyBytes.convert_short_binary(10000)
=> "9.77 KiB"
irb(main):016:0> LinuxStat::PrettifyBytes.convert_short_binary(100000)
=> "97.66 KiB"
irb(main):017:0> LinuxStat::PrettifyBytes.convert_short_binary(10 ** 13)
=> "9.09 TiB"
它可以支持多达数百个Yottabytes和Yobibytes或Yb和Yib的值。您也可以做类似的事情:
$ irb
irb(main):001:0> require 'linux_stat'
=> true
irb(main):002:0> LinuxStat::PrettifyBytes.convert_short_decimal(LinuxStat::Mounts.device_stat('/dev/sdb1')[:total])
=> "31.47 GB"
irb(main):003:0> LinuxStat::PrettifyBytes.convert_short_binary(LinuxStat::Mounts.device_stat('/dev/sdb1')[:total])
=> "29.31 GiB"
irb(main):004:0> LinuxStat::PrettifyBytes.convert_short_binary(LinuxStat::Mounts.device_stat('/dev/sdb1')[:used])
=> "26.80 GiB"
irb(main):005:0> LinuxStat::PrettifyBytes.convert_short_binary(LinuxStat::Mounts.device_stat('/dev/sdb1')[:available])
=> "2.51 GiB"
阅读RI文档以获取更多信息。
通常,如果方法返回浮点,整数或时间,则在所有情况下,它都会返回浮点,整数或时间。但是,如果状态不可用,它将返回零。
如果该方法返回哈希 /数组,则在所有情况下,它将返回哈希 /数组。如果状态不可用,它将返回一个空的哈希 /数组。
如果该方法返回字符串,则在所有情况下都将返回字符串。如果状态不可用,它将返回一个空的冷冻字符串。
它没有实现在运行时提出的任何错误,以易于使用。
如果您需要检查一些返回整数或浮动的统计数据,并且您会发现零,则您知道它不可用,因此您可以相应地工作。但是,如果您需要以0为0的整数或浮点值,则可以在对象上使用.to_i或.to_f方法,则无需将其转换为数字。
如果提出了一些错误,则应将其报告为错误。
gem linux_stat : $ bundle add linux_stat
您可以直接在导轨中使用LinuxStat。
LinuxStat确实支持Android OS。但是,在所有设备等所有设备上都没有对其进行严格测试。
但是在Termux中,您只能在不面对问题的情况下运行LinuxStat。请注意,由于热插图功能,CPU计数可能会有所不同。因此,如果您看到CPU计数发生了变化,那么与此无关。
还欢迎有关在Termux上运行LinuxStat的问题。
该宝石的用户被要求遵循上述安装步骤安装此GEM。
此存储库仅用于开发目的。它具有c扩展程序,可能会使您的稳定应用程序更糟糕。克隆,从此存储库中编译代码生产应用程序可能会出现故障并直接崩溃整个应用程序。
红宝石上的宝石在各种测试后释放。
因此,只需安装宝石,就不要仅仅因为版本带有新功能碰撞而克隆此仓库,而宝石也没有在Rubygems.org上发行。
查看存储库后,用bundle exec rake install编译并将此宝石安装到本地计算机上
您还可以运行bin/console以获得交互提示,该提示可以让您进行实验。
要测试所有模块,请运行rake install ,然后exe/linuxstat.rb 。还要检查下面的“测试”。
像其他宝石一样,它没有像RSPEC这样的测试。
我们建议在各种Linux系统上使用exe/linuxstat.rb文件进行测试。
首先,您需要执行bundle exec rake install以编译并安装此GEM。
如果您需要测试特定的模块,例如CPU,只需这样的运行:
$ ruby exe/linuxstat.rb CPU
或者:
$ ruby exe/linuxstat.rb cpu
也就是说,通过的论点不是案例敏感的。但是,如果传递的参数不可用并完全错误,它将运行所有模块方法。例如,您不能这样做:
$ ruby exe/linuxstat.rb upc
这不是有效的模块,不能运行。
欢迎在https://github.com/souravgoswami/linux_stat上的GitHub上的错误报告和拉动请求。
根据MIT许可证的条款,该宝石可作为开源。