linux查看系统版本命令linux系统查询系统服务的命令查看系统版本命令 linux




linux查看系统版本命令linux系统查询系统服务的命令查看系统版本命令 linux

2022-07-20 21:30:40 网络知识 官方管理员

使用数据库查询操作轻松获取系统信息

linux查看系统版本命令(linux系统查询系统服务的命令)(1)

Linux提供了很多帮助用户收集主机操作系统信息的命令:列出文件或者目录的属性信息;查询安装的软件包、正在执行的命令、开机时启动的服务;或者了解系统的硬件。

每个命令使用自己的输出格式列出系统的信息。你需要使用grep、sed、awk这样的工具过滤命令输出的结果,以便找到特定的信息。此外,很多这样的信息会频繁变动,导致系统状态的改变。

将所有的信息格式化为一个数据库的SQL查询的输出进行查看将会十分有益。想象一下,你能够像查询具有类似名称的SQL数据库表一样查询ps和rpm命令的输出。

幸运的是,有一个工具刚好实现了这个功能,而且功能更多:Osquery是一个开源的“由SQL驱动的操作系统仪表、监控和分析框架”。

许多处理安全、DevOps、合规性的应用,以及仓储管理管理(仅举几例)在内部依赖Osquery提供的核心功能。

安装Osquery

Osquery适用于Linux、macOS、Windows、FreeBSD。请按照指南为你的操作系统安装最新版本。(我会在下面的例子中使用4.7.0版本。)

安装完成后,确保Osquery可以工作:

$rpm-qa|greposqueryosquery-4.7.0-1.linux.x86_64$$osqueryi--versionosqueryiversion4.7.0$

Osquery组件

Osquery有两个主要组件:

  • osqueri是一个交互式的SQL查询控制台,可以独立运行,不需要超级用户权限(除非要查询的表格需要访问权限)。
  • osqueryd像一个安装在主机的监控守护进程,可以定期调度查询操作执行,从底层架构收集信息。

可以在不运行osqueryd的情况下执行osqueri。另一个工具,osqueryctl,控制守护进程的启动、停止,并检查其状态。

$rpm-qlosquery-4.8.0-1.linux.x86_64|grepbin/usr/bin/osqueryctl/usr/bin/osqueryd/usr/bin/osqueryi$

使用osqueryi交互式命令提示符

你和Osquery的交互与使用SQL数据库十分相似。事实上,osqueryi是SQListshell的一个修改版。执行osqueryi命令进入交互式命令提示符,就可以执行Osquery的命令,通常以.开始:

$osqueryiUsingavirtualdatabase.Needhelp,type'.help'osquery>

要退出交互式命令提示符,执行.quit命令回到操作系统的命令提示符:

osquery>osquery>.quit$

找出可用的表

如前所述,Osquery像SQL查询一样输出数据,数据库中的信息通常保存在表中。但是如何在不知道表名的情况下查询这些表呢?你可以运行.tables命令列出所有可以查询的表。如果你是一个Linux长期用户或者一个系统管理员,就会对表名十分熟悉,因为你一直在使用操作系统命令获取同样的信息:

osquery>.tables=>acpi_tables=>apparmor_events=>apparmor_profiles=>apt_sources>=>arp_cache=>user_ssh_keys=>users=>yara=>yara_events=>ycloud_instance_metadata=>yum_sourcesosquery>

检查各个表的模式

知道表名后,可以查看每个表提供的信息。既然ps命令经常用于获取进程信息,就以processes为例。执行.schema命令加上表名查看表中保存的信息。如果要验证命令返回的结果,可以快速执行ps-ef或psaux,对比命令的输出和表中的内容:

osquery>.schemaprocessesCREATETABLEprocesses(`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`INTEGERHIDDEN,`elapsed_time`BIGINTHIDDEN,`handle_count`BIGINTHIDDEN,`percent_processor_time`BIGINTHIDDEN,`upid`BIGINTHIDDEN,`uppid`BIGINTHIDDEN,`cpu_type`INTEGERHIDDEN,`cpu_subtype`INTEGERHIDDEN,`phys_footprint`BIGINTHIDDEN,PRIMARYKEY(`pid`))WITHOUTROWID;osquery>

要进一步确认,可以使用下面的命令查看RPM包的结构信息,然后与操作系统命令rpm-qa和rpm-qi的输出比较:

osquery>osquery>.schemarpm_packagesCREATETABLErpm_packages(`name`TEXT,`version`TEXT,`release`TEXT,`source`TEXT,`size`BIGINT,`sha1`TEXT,`arch`TEXT,`epoch`INTEGER,`install_time`INTEGER,`vendor`TEXT,`package_group`TEXT,`pid_with_namespace`INTEGERHIDDEN,`mount_namespace_id`TEXTHIDDEN,PRIMARYKEY(`name`,`version`,`release`,`arch`,`epoch`,`pid_with_namespace`))WITHOUTROWID;osquery>

从Osquery的表格文档获取更多信息。

使用PRAGMA命令

或许模式信息对你来说太难看懂,还有另一种途径能够以详细的表格格式打印表中的信息:PRAGMA命令。例如,我想通过PRAGMA用一种易于理解的格式查看rpm_packages表的信息:

osquery>PRAGMAtable_info(rpm_packages);

这种表格式信息的一个好处是你可以关注想要查询的字段,查看命令提供的类型信息:

osquery>PRAGMAtable_info(users);+-----+-------------+--------+---------+------------+----+|cid|name|type|notnull|dflt_value|pk|+-----+-------------+--------+---------+------------+----+|0|uid|BIGINT|1||1||1|gid|BIGINT|0||0||2|uid_signed|BIGINT|0||0||3|gid_signed|BIGINT|0||0||4|username|TEXT|1||2||5|description|TEXT|0||0||6|directory|TEXT|0||0||7|shell|TEXT|0||0||8|uuid|TEXT|1||3|+-----+-------------+--------+---------+------------+----+osquery>

进行你的第一次查询

在你从表、模式、条目中获取到所有进行查询所需要的信息后,进行你的第一次SQL查询查看其中的信息。下面的查询返回系统中的用户和每个用户的用户ID、组ID、主目录和默认的命令行解释器。Linux用户通过查看/etc/passwd文件的内容并执行grep、sed、awk命令获取同样的信息。

osquery>osquery>selectuid,gid,directory,shell,uuidFROMusersLIMIT7;+-----+-----+----------------+----------------+------+|uid|gid|directory|shell|uuid|+-----+-----+----------------+----------------+------+|0|0|/root|/bin/bash|||1|1|/bin|/sbin/nologin|||2|2|/sbin|/sbin/nologin|||3|4|/var/adm|/sbin/nologin|||4|7|/var/spool/lpd|/sbin/nologin|||5|0|/sbin|/bin/sync|||6|0|/sbin|/sbin/shutdown||+-----+-----+----------------+----------------+------+osquery>

不进入交互模式的查询

如果你想要在不进入osqueri交互模式的情况下进行查询,该怎么办?要用查询操作写命令行解释器脚本,这种方式可能十分有用。这种情况下,可以直接从Bash解释器echoSQL查询,通过管道输出到osqueri:

$rpm-qlosquery-4.8.0-1.linux.x86_64|grepbin/usr/bin/osqueryctl/usr/bin/osqueryd/usr/bin/osqueryi$0

获悉系统启动时开始的服务

Osquery还可以列出系统启动时开始的所有服务。例如,可以查询startup_items表获取启动时开始的前五项服务的名称、状态和路径:

$rpm-qlosquery-4.8.0-1.linux.x86_64|grepbin/usr/bin/osqueryctl/usr/bin/osqueryd/usr/bin/osqueryi$1

查阅二进制文件的ELF信息

假如你想要弄清ls二进制文件的更多细节,通常会通过readelf-h命令,加上ls命令的路径。查询Osquery的elf_info表你可以得到同样的信息:

$rpm-qlosquery-4.8.0-1.linux.x86_64|grepbin/usr/bin/osqueryctl/usr/bin/osqueryd/usr/bin/osqueryi$2

现在你应该初步了解如何使用osqueri查询自己想要的信息。然而,这些信息保存在数量巨大的表中;我查询过的一个系统中,有156个不同的表,这个数字可能是十分惊人的:

$rpm-qlosquery-4.8.0-1.linux.x86_64|grepbin/usr/bin/osqueryctl/usr/bin/osqueryd/usr/bin/osqueryi$3

要让事情变得更容易,可以从这些表开始获取你的Linux系统的信息:

系统信息表:

$rpm-qlosquery-4.8.0-1.linux.x86_64|grepbin/usr/bin/osqueryctl/usr/bin/osqueryd/usr/bin/osqueryi$4

系统限制信息:

$rpm-qlosquery-4.8.0-1.linux.x86_64|grepbin/usr/bin/osqueryctl/usr/bin/osqueryd/usr/bin/osqueryi$5

由各种进程打开的文件:

$rpm-qlosquery-4.8.0-1.linux.x86_64|grepbin/usr/bin/osqueryctl/usr/bin/osqueryd/usr/bin/osqueryi$6

系统上开放的端口:

$rpm-qlosquery-4.8.0-1.linux.x86_64|grepbin/usr/bin/osqueryctl/usr/bin/osqueryd/usr/bin/osqueryi$7

运行中的进程信息:

$rpm-qlosquery-4.8.0-1.linux.x86_64|grepbin/usr/bin/osqueryctl/usr/bin/osqueryd/usr/bin/osqueryi$8

已安装的包信息:

$rpm-qlosquery-4.8.0-1.linux.x86_64|grepbin/usr/bin/osqueryctl/usr/bin/osqueryd/usr/bin/osqueryi$9

用户登录信息:

$osqueryiUsingavirtualdatabase.Needhelp,type'.help'osquery>0

系统日志信息:

$osqueryiUsingavirtualdatabase.Needhelp,type'.help'osquery>1

了解更多

Osquery是一个强大的工具,提供了许多可以用于解决各种使用案例的主机信息。你可以阅读文档了解更多Osquery的信息。


发表评论:

最近发表
网站分类
标签列表