自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

像查詢數(shù)據(jù)庫一樣查詢你的 Linux 操作系統(tǒng)信息

運(yùn)維 系統(tǒng)運(yùn)維
Linux 提供了很多幫助用戶收集主機(jī)操作系統(tǒng)信息的命令:列出文件或者目錄的屬性信息;查詢安裝的軟件包、正在執(zhí)行的命令、開機(jī)時(shí)啟動(dòng)的服務(wù);或者了解系統(tǒng)的硬件。
  • 使用數(shù)據(jù)庫查詢操作輕松獲取系統(tǒng)信息。

Linux 提供了很多幫助用戶收集主機(jī)操作系統(tǒng)信息的命令:列出文件或者目錄的屬性信息;查詢安裝的軟件包、正在執(zhí)行的命令、開機(jī)時(shí)啟動(dòng)的服務(wù);或者了解系統(tǒng)的硬件。

每個(gè)命令使用自己的輸出格式列出系統(tǒng)的信息。你需要使用 grep、sed、awk 這樣的工具過濾命令輸出的結(jié)果,以便找到特定的信息。此外,很多這樣的信息會(huì)頻繁變動(dòng),導(dǎo)致系統(tǒng)狀態(tài)的改變。

[[411156]]

將所有的信息格式化為一個(gè)數(shù)據(jù)庫的 SQL 查詢的輸出進(jìn)行查看將會(huì)十分有益。想象一下,你能夠像查詢具有類似名稱的 SQL 數(shù)據(jù)庫表一樣查詢 ps 和 rpm 命令的輸出。

幸運(yùn)的是,有一個(gè)工具剛好實(shí)現(xiàn)了這個(gè)功能,而且功能更多:Osquery 是一個(gè) 開源的 “由 SQL 驅(qū)動(dòng)的操作系統(tǒng)儀表、監(jiān)控和分析框架”。

許多處理安全、DevOps、合規(guī)性的應(yīng)用,以及倉儲(chǔ)管理管理(僅舉幾例)在內(nèi)部依賴 Osquery 提供的核心功能。

安裝 Osquery

Osquery 適用于 Linux、macOS、Windows、FreeBSD。請按照 指南 為你的操作系統(tǒng)安裝最新版本。(我會(huì)在下面的例子中使用 4.7.0 版本。)

安裝完成后,確保 Osquery 可以工作:

  1. $ rpm -qa | grep osquery 
  2. osquery-4.7.0-1.linux.x86_64 
  3. $ osqueryi --version 
  4. osqueryi version 4.7.0 

Osquery 組件

Osquery 有兩個(gè)主要組件:

  • osqueri 是一個(gè)交互式的 SQL 查詢控制臺,可以獨(dú)立運(yùn)行,不需要超級用戶權(quán)限(除非要查詢的表格需要訪問權(quán)限)。
  • osqueryd 像一個(gè)安裝在主機(jī)的監(jiān)控守護(hù)進(jìn)程,可以定期調(diào)度查詢操作執(zhí)行,從底層架構(gòu)收集信息。

可以在不運(yùn)行 osqueryd 的情況下執(zhí)行 osqueri。另一個(gè)工具,osqueryctl,控制守護(hù)進(jìn)程的啟動(dòng)、停止,并檢查其狀態(tài)。

  1. $ rpm -ql osquery-4.8.0-1.linux.x86_64 | grep bin 
  2. /usr/bin/osqueryctl 
  3. /usr/bin/osqueryd 
  4. /usr/bin/osqueryi 

使用 osqueryi 交互式命令提示符

你和 Osquery 的交互與使用 SQL 數(shù)據(jù)庫十分相似。事實(shí)上,osqueryi 是 SQList shell 的一個(gè)修改版。執(zhí)行 osqueryi 命令進(jìn)入交互式命令提示符 ,就可以執(zhí)行 Osquery 的命令,通常以 . 開始:

  1. $ osqueryi 
  2. Using a virtual database. Need help, type '.help' 
  3. osquery> 

要退出交互式命令提示符,執(zhí)行 .quit 命令回到操作系統(tǒng)的命令提示符:

  1. osquery> 
  2. osquery> .quit 

找出可用的表

如前所述,Osquery 像 SQL 查詢一樣輸出數(shù)據(jù),數(shù)據(jù)庫中的信息通常保存在表中。但是如何在不知道表名的情況下查詢這些表呢?你可以運(yùn)行 .tables 命令列出所有可以查詢的表。如果你是一個(gè) Linux 長期用戶或者一個(gè)系統(tǒng)管理員 ,就會(huì)對表名十分熟悉,因?yàn)槟阋恢痹谑褂貌僮飨到y(tǒng)命令獲取同樣的信息:

  1. osquery> .tables 
  2.   => acpi_tables 
  3.   => apparmor_events 
  4.   => apparmor_profiles 
  5.   => apt_sources 
  6. <<裁剪>> 
  7.   => arp_cache 
  8.   => user_ssh_keys 
  9.   => users 
  10.   => yara 
  11.   => yara_events 
  12.   => ycloud_instance_metadata 
  13.   => yum_sources 
  14. osquery> 

檢查各個(gè)表的模式

知道表名后,可以查看每個(gè)表提供的信息。既然 ps 命令經(jīng)常用于獲取進(jìn)程信息,就以 processes 為例。執(zhí)行 .schema 命令加上表名查看表中保存的信息。如果要驗(yàn)證命令返回的結(jié)果,可以快速執(zhí)行 ps -ef 或 ps aux,對比命令的輸出和表中的內(nèi)容:

  1. osquery> .schema processes 
  2. CREATE TABLE processes(`pid` BIGINT, `name` TEXT, `path` TEXT, `cmdline` TEXT, `state` TEXT, `cwd` TEXT, `root` TEXT, `uid` BIGINT, `gid` BIGINT, `euid` BIGINT, `egid` BIGINT, `suid` BIGINT, `sgid` BIGINT, `on_disk` INTEGER, `wired_size` BIGINT, `resident_size` BIGINT, `total_size` BIGINT, `user_time` BIGINT, `system_time` BIGINT, `disk_bytes_read` BIGINT, `disk_bytes_written` BIGINT, `start_time` BIGINT, `parent` BIGINT, `pgroup` BIGINT, `threads` INTEGER, `nice` INTEGER, `is_elevated_token` INTEGER HIDDEN, `elapsed_time` BIGINT HIDDEN, `handle_count` BIGINT HIDDEN, `percent_processor_time` BIGINT HIDDEN, `upid` BIGINT HIDDEN, `uppid` BIGINT HIDDEN, `cpu_type` INTEGER HIDDEN, `cpu_subtype` INTEGER HIDDEN, `phys_footprint` BIGINT HIDDEN, PRIMARY KEY (`pid`)) WITHOUT ROWID; 
  3. osquery> 

要進(jìn)一步確認(rèn),可以使用下面的命令查看 RPM 包的結(jié)構(gòu)信息,然后與操作系統(tǒng)命令 rpm -qa 和 rpm -qi 的輸出比較:

  1. osquery> 
  2. osquery> .schema rpm_packages 
  3. CREATE TABLE rpm_packages(`name` TEXT, `version` TEXT, `release` TEXT, `source` TEXT, `sizeBIGINT, `sha1` TEXT, `arch` TEXT, `epoch` INTEGER, `install_time` INTEGER, `vendor` TEXT, `package_group` TEXT, `pid_with_namespace` INTEGER HIDDEN, `mount_namespace_id` TEXT HIDDEN, PRIMARY KEY (`name`, `version`, `release`, `arch`, `epoch`, `pid_with_namespace`)) WITHOUT ROWID; 
  4. osquery> 

從 Osquery 的 表格文檔 獲取更多信息。

使用 PRAGMA 命令

或許模式信息對你來說太難看懂,還有另一種途徑能夠以詳細(xì)的表格格式打印表中的信息:PRAGMA 命令。例如,我想通過 PRAGMA 用一種易于理解的格式查看 rpm_packages 表的信息:

  1. osquery> PRAGMA table_info(rpm_packages); 

這種表格式信息的一個(gè)好處是你可以關(guān)注想要查詢的字段,查看命令提供的類型信息:

  1. osquery> PRAGMA table_info(users); 
  2. +-----+-------------+--------+---------+------------+----+ 
  3. | cid | name        | type   | notnull | dflt_value | pk | 
  4. +-----+-------------+--------+---------+------------+----+ 
  5. | 0   | uid         | BIGINT | 1       |            | 1  | 
  6. | 1   | gid         | BIGINT | 0       |            | 0  | 
  7. | 2   | uid_signed  | BIGINT | 0       |            | 0  | 
  8. | 3   | gid_signed  | BIGINT | 0       |            | 0  | 
  9. | 4   | username    | TEXT   | 1       |            | 2  | 
  10. | 5   | description | TEXT   | 0       |            | 0  | 
  11. | 6   | directory   | TEXT   | 0       |            | 0  | 
  12. | 7   | shell       | TEXT   | 0       |            | 0  | 
  13. | 8   | uuid        | TEXT   | 1       |            | 3  | 
  14. +-----+-------------+--------+---------+------------+----+ 
  15. osquery> 

進(jìn)行你的第一次查詢

在你從表、模式、條目中獲取到所有進(jìn)行查詢所需要的信息后,進(jìn)行你的第一次 SQL 查詢查看其中的信息。下面的查詢返回系統(tǒng)中的用戶和每個(gè)用戶的用戶 ID、組 ID、主目錄和默認(rèn)的命令行解釋器。Linux 用戶通過查看 /etc/passwd 文件的內(nèi)容并執(zhí)行 grep、sed、awk 命令獲取同樣的信息。

  1. osquery> 
  2. osquery> select uid,gid,directory,shell,uuid FROM users LIMIT 7; 
  3. +-----+-----+----------------+----------------+------+ 
  4. | uid | gid | directory      | shell          | uuid | 
  5. +-----+-----+----------------+----------------+------+ 
  6. | 0   | 0   | /root          | /bin/bash      |      | 
  7. | 1   | 1   | /bin           | /sbin/nologin  |      | 
  8. | 2   | 2   | /sbin          | /sbin/nologin  |      | 
  9. | 3   | 4   | /var/adm       | /sbin/nologin  |      | 
  10. | 4   | 7   | /var/spool/lpd | /sbin/nologin  |      | 
  11. | 5   | 0   | /sbin          | /bin/sync      |      | 
  12. | 6   | 0   | /sbin          | /sbin/shutdown |      | 
  13. +-----+-----+----------------+----------------+------+ 
  14. osquery> 

不進(jìn)入交互模式的查詢

如果你想要在不進(jìn)入 osqueri 交互模式的情況下進(jìn)行查詢,該怎么辦?要用查詢操作寫命令行解釋器腳本,這種方式可能十分有用。這種情況下,可以直接從 Bash 解釋器 echo SQL 查詢,通過管道輸出到 osqueri :

  1. $ echo "select uid,gid,directory,shell,uuid FROM users LIMIT 7;" | osqueryi 
  2. +-----+-----+----------------+----------------+------+ 
  3. | uid | gid | directory      | shell          | uuid | 
  4. +-----+-----+----------------+----------------+------+ 
  5. | 0   | 0   | /root          | /bin/bash      |      | 
  6. | 1   | 1   | /bin           | /sbin/nologin  |      | 
  7. | 2   | 2   | /sbin          | /sbin/nologin  |      | 
  8. | 3   | 4   | /var/adm       | /sbin/nologin  |      | 
  9. | 4   | 7   | /var/spool/lpd | /sbin/nologin  |      | 
  10. | 5   | 0   | /sbin          | /bin/sync      |      | 
  11. | 6   | 0   | /sbin          | /sbin/shutdown |      | 
  12. +-----+-----+----------------+----------------+------+ 

獲悉系統(tǒng)啟動(dòng)時(shí)開始的服務(wù)

Osquery 還可以列出系統(tǒng)啟動(dòng)時(shí)開始的所有服務(wù)。例如,可以查詢 startup_items 表獲取啟動(dòng)時(shí)開始的前五項(xiàng)服務(wù)的名稱、狀態(tài)和路徑:

  1. osquery> SELECT name,type,status,path FROM startup_items LIMIT 5; 
  2.   name = README 
  3.   type = Startup Item 
  4. status = enabled 
  5.   path = /etc/rc.d/init.d/README 
  6.   name = anamon 
  7.   type = Startup Item 
  8. status = enabled 
  9.   path = /etc/rc.d/init.d/anamon 
  10.   name = functions 
  11.   type = Startup Item 
  12. status = enabled 
  13.   path = /etc/rc.d/init.d/functions 
  14.   name = osqueryd 
  15.   type = Startup Item 
  16. status = enabled 
  17.   path = /etc/rc.d/init.d/osqueryd 
  18.   name = AT-SPI D-Bus Bus 
  19.   type = Startup Item 
  20. status = enabled 
  21.   path = /usr/libexec/at-spi-bus-launcher --launch-immediately 
  22. osquery> 

查閱二進(jìn)制文件的 ELF 信息

假如你想要弄清 ls 二進(jìn)制文件的更多細(xì)節(jié),通常會(huì)通過 readelf -h 命令,加上 ls 命令的路徑。查詢 Osquery 的 elf_info 表你可以得到同樣的信息:

  1. osquery> SELECT * FROM elf_info WHERE path="/bin/ls"
  2.       class = 64 
  3.         abi = sysv 
  4. abi_version = 0 
  5.        type = dyn 
  6.     machine = 62 
  7.     version = 1 
  8.       entry = 24064 
  9.       flags = 0 
  10.        path = /bin/ls 
  11. osquery> 

現(xiàn)在你應(yīng)該初步了解如何使用 osqueri 查詢自己想要的信息。然而,這些信息保存在數(shù)量巨大的表中;我查詢過的一個(gè)系統(tǒng)中,有 156 個(gè)不同的表,這個(gè)數(shù)字可能是十分驚人的:

  1. $ echo ".tables" | osqueryi | wc -l 
  2. 156 

要讓事情變得更容易,可以從這些表開始獲取你的 Linux 系統(tǒng)的信息:

系統(tǒng)信息表:

  1. osquery> select * from system_info; 

系統(tǒng)限制信息:

  1. osquery> select * from ulimit_info; 

由各種進(jìn)程打開的文件:

  1. osquery> select * from process_open_files; 

系統(tǒng)上開放的端口:

  1. osquery> select * from listening_ports; 

運(yùn)行中的進(jìn)程信息:

  1. osquery> select * from processes; 

已安裝的包信息:

  1. osquery> select * from rpm_packages; 

用戶登錄信息:

  1. osquery> select * from last

系統(tǒng)日志信息:

  1. osquery> select * from syslog_events; 

 

責(zé)任編輯:未麗燕 來源: Linux中國
相關(guān)推薦

2022-08-03 08:52:35

Bytebase開源

2024-04-03 13:50:00

開源模型

2021-05-20 08:37:32

multiprocesPython線程

2022-11-24 12:22:39

2019-11-20 09:10:12

開源技術(shù) 數(shù)據(jù)

2013-08-22 10:17:51

Google大數(shù)據(jù)業(yè)務(wù)價(jià)值

2022-09-09 18:59:28

Vue類型枚舉

2017-06-23 08:18:17

2012-06-14 09:48:11

OpenStackLinux

2023-04-05 14:19:07

FlinkRedisNoSQL

2010-04-08 17:31:51

Unix操作系統(tǒng)

2019-04-08 14:58:36

數(shù)據(jù)庫SQL數(shù)據(jù)類型

2010-06-01 09:32:09

MySQL數(shù)據(jù)庫

2013-12-17 09:02:03

Python調(diào)試

2022-12-21 15:56:23

代碼文檔工具

2023-05-23 13:59:41

RustPython程序

2013-12-31 09:19:23

Python調(diào)試

2017-11-06 14:18:03

2013-07-26 10:15:29

云計(jì)算大數(shù)據(jù)Hadoop

2015-04-09 11:27:34

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號