要讀取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許可證的條款,該寶石可作為開源。