硬件信息检查
dmesg
功能说明:显示开机信息。显示系统运行时硬件的检测或者断开连接信息。
使用前注意权限问题,内核日志是限制非管理员权限阅读的。遇到
dmesg: read kernel buffer failed: Permission denied,先修改权限,使用命令sudo sysctl -w kernel.dmesg_restrict=0
在ubuntu 20.1以上版本中,还可以更改/etc/sysctl.d/10-kernel-hardening.conf中的配置kernel.dmesg_restrict=0,再执行sudo service procps restart使其生效。
另外如果是docker容器中,修改权限会遇到sysctl: setting key "kernel.yama.ptrace_scope", ignoring: Read-only file system,解决办法请参考 http://fleey.cn/archives/108.html
dmesg 命令显示 linux 内核的环形缓冲区信息,我们可以从中获得诸如系统架构、cpu、挂载的硬件,RAM等多个运行级别的大量的系统信 息。当计算机启动时,系统内核(操作系统的核心部分)将会被加载到内存中。在加载的过程中会显示很多的信息,在这些信息中我们可以看到内核检测硬件设备。
dmesg 命令用于设备故障的诊断是非常重要的。进行硬件的连接或断开连接操作时,在 dmesg 命令的帮助下,我们可以看到硬件的检测或者断开连接的信息。dmesg 命令在多数基于Linux和Unix的操作系统中都可以使用。
常用
- 查看网卡启动信息
dmesg | grep eth - 列出所有被检测到的硬件
dmesg | grep sda - 清空dmesg缓冲区日志
dmesg -c, 即使清除了缓冲区数据也可以查看日志文件,文件保存在/var/log/dmesg - 监控硬件变化
dmesg | tail -20
lshw
功能说明:检查全部硬件信息
需要安装软件包
apt install -y lshw
lspci
功能说明:检查PCI设备
需要安装软件包
apt install -y lshw
lsusb
功能说明:检查USB设备
网络检查
lsof
功能说明:查看进程打开的文件、目录,以及查看进程监听的端口等 socket 相关的信息
需要安装软件包
apt install -y lsof
检查结果解释:
- COMMAND:程序的名称
- PID:进程标识符
- USER:进程所有者
- FD:文件描述符,应用程序通过文件描述符识别该文件
FD 列中的常见内容有 cwd、rtd、txt、mem 和一些数字等等。
其中 cwd 表示当前的工作目录;rtd 表示根目录;txt 表示程序的可执行文件;mem 表示内存映射文件;标准输入输出文件通常以数字表示。 - TYPE:文件类型,如 DIR、REG 等
REG 和 DIR 分别表示普通文件和目录。 - DEVICE:以逗号分隔设备编号
- SIZE:文件的大小(bytes)
- NODE:索引节点(文件在磁盘上的标识)
- NAME:打开文件的确切名称
常用:
- 查看哪些进程打开了某个文件或设备
直接指定文件(设备)的名称作为 lsof 的参数就可以查看哪些进程打开了这个文件(设备),例:lsof /bin/bash或lsof /dev/sda1 - 查看哪些进程打开了某个目录及目录下的文件
lsof +d /var/log #不递归查询 lsof +D /var/log #递归查询 - 查看某个进程打开的所有文件
先用ps查询进程的PID,再用lsof查询,用bash举例ps -C bash lsof -p bash的PID - 复杂查询条件
- 使用
-a参数,使查询组合多个条件 -c使多条件为或的关系- 对条件取反,则直接在条件前加
^ - 另外也可以使用正则表达式,使用
/包裹表达式
- 使用
- 只列出 IPv4 或 IPv6 打开的文件
lsof -i 4 #IPv4 lsof -i 6 #IPv6 - 列出与某端口相关的文件,例:
lsof -i:22 - 列出指定范围内被打开的 TCP 端口,例:
lsof -i TCP:1-1024 - 查看某个用户打开的所有文件,例:
lsof -u root
netstat
功能说明:显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。
常用:
- 列出所有端口
netstat -a,默认不显示监听状态栏 - 列出所有 tcp 端口
netstat -at - 列出所有 udp 端口
netstat -au - 列出所有监听端口
netstat -l - 列出特定进程的使用端口
netstat -p [PID] - 持续输出 netstat 信息
netstat -c - 显示核心路由信息
netstat -r - 显示网络接口列表
netstat -i
什么是监听端口
首先了解一下TCP/IP协议中的端口指的是什么?如果把IP地址比作一间房子 ,端口就是出入这间房子的门。真正的房子只有一个或者几个门,但是一个IP地址下的端口可以有65536(即:256×256)个之多!端口是通过端口号来标记的,端口号只有整数,范围是从0到65535(256×256-1)。
在互联网上主机与主机之间通过TCP/IP协议发送和接收数据包,各个数据包根据其目的主机IP地址来进行路由。当数据包顺利的被传送到目的主机后,它要如何进入主机呢?当然是要通过端口(现实中的门)进入了。我们知道大多数操作系统都支持多应用程序(多进程)同时运行,不同的应用具有不同的处理功能,那么目的主机应该把接收到的数据包传送给哪一个应用程序呢?这就要靠端口了,一个应用对应一个或多个端口,这样我们就可以把数据包传递给对应的程序了。这就是监听端口的由来。
同一个端口只能被一个应用程序使用。如果多个应用使用了相同端口,就会出现端口冲突问题。这种情况通常我们不需要担心,因为端口冲突会导致应用程序无法启动。
tcpdump
功能说明:根据使用者的定义对网络上的数据包进行截获的包分析工具。支持与或非逻辑语句帮助筛选信息。
需要安装软件包
apt install -y tcpdump
输出信息的描述:
- 时间精确到微秒
- localhost.42333 > localhost.9501 表示通信的流向
- [S] 表示这是一个SYN请求
- [.] 表示这是一个ACK确认包,(client)SYN->(server)SYN->(client)ACK 就是3次握手过程
- [P] 表示这个是一个数据推送,可以是从服务器端向客户端推送,也可以从客户端向服务器端推
- [F] 表示这是一个FIN包,是关闭连接操作,client/server都有可能发起
- [R] 表示这是一个RST包,与F包作用相同,但RST表示连接关闭时,仍然有数据未被处理。可以理解为是强制切断连接
- win 342是指滑动窗口大小
- length 12指数据包的大小
查看数据包的详细信息,使用 -XX -vvv -nn:
-v当分析和打印的时候,产生详细的输出。-vv产生比-v更详细的输出。-vvv产生比-vv更详细的输出。-XX输出包的头部数据,会以16进制和ASCII两种方式同时输出。-nn直接以IP以及PORT number显示,而非主机名与服务名称。
常用:
- 监视指定主机的数据包
tcpdump host 主机IP - 截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信
tcpdump host 210.27.48.1 and \(210.27.48.2 or 210.27.48.3 \) - 获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包
tcpdump ip host 210.27.48.1 and ! 210.27.48.2 - 监视指定主机和端口的数据包
tcpdump tcp port 23 and host 210.27.48.1 - 对本机的UDP 222端口进行监视
tcpdump udp port 222 - 检查数据包的详细信息:
系统模块检查
lsmod
功能说明:检查当前内核已经加载的模块和驱动
需要安装软件包
apt install -y kmod
检查结果通常有三列,分别是:
- 模块名称(Module)
- 模块的大小(Size)
- 此模块是否被其他模块使用(Used by)
系统状态检查
du
功能说明:显示指定的目录或文件所占用的磁盘空间
常用:
du -h将空间大小换算成更易读的k、m、gdu -D显示链接文件的原文件大小
df
功能说明:显示目前在 Linux 系统上的文件系统磁盘使用情况统计
常用:
df -h将空间大小换算成更易读的k、m、gdu -a输出所有文件的磁盘用量,不仅仅是目录du -d仅当目录(或在 –all 选项启用时包括文件)层级不高于命令行参数指定的 N 层时输出对应目录或文件的对应大小du --time显示目录中或其子目录下所有文件的最后修改时间
tree
功能说明:以树状图形式列出目录的内容
常用:
tree -a列出所有文件tree -d仅列出目录tree -f列出每个文件的完整路径tree -L 数字列出的目录深度tree --charset UTF8设置字符集,将来用于终端或HTML展示-u列出文件或目录的拥有者名称,没有对应的名称时,则显示用户识别码-g列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码tree -p列出文件权限tree -h将空间大小换算成更易读的k、m、gtree -D显示上次修改或状态更改的日期--timefmt根据格式打印并格式化时间,例如:’%F %T’ 或 ‘%c’-v按字母排序-t按最后修改的时间排序-c按上次状态更改时间对文件排序-r反转排序的顺序--dirsfirst在文件之前列出目录- 输出:
-X打印出树的XML表示-J打印出树的 JSON 表示-H 根名输出为网页表示,参数为根名,会影响超链接,建议用.;-T 标题替换默认的 HTML 标题和 H1 标题,--nolinks关闭 HTML 输出中的超链接
iostat
功能说明:动态监视系统的磁盘操作活动
常用:
-c显示CPU资源情况-d显示磁盘使用情况-h改变显示单位,使其更加易读iostat delay countdelay表示每隔几秒刷新一次,count表示总共输出几次
cpu属性值说明:
%user:CPU处在用户模式下的时间百分比。
%nice:CPU处在带NICE值的用户模式下的时间百分比。
%system:CPU处在系统模式下的时间百分比。
%iowait:CPU等待输入输出完成时间的百分比。
%steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。
%idle:CPU空闲时间百分比。
disk属性值说明:
rrqm/s: 每秒进行 merge 的读操作数目。即 rmerge/s
wrqm/s: 每秒进行 merge 的写操作数目。即 wmerge/s
r/s: 每秒完成的读 I/O 设备次数。即 rio/s
w/s: 每秒完成的写 I/O 设备次数。即 wio/s
rsec/s: 每秒读扇区数。即 rsect/s
wsec/s: 每秒写扇区数。即 wsect/s
rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。
wkB/s: 每秒写K字节数。是 wsect/s 的一半。
avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。
avgqu-sz: 平均I/O队列长度。
await: 平均每次设备I/O操作的等待时间 (毫秒)。
svctm: 平均每次设备I/O操作的服务时间 (毫秒)。
%util: 一秒中有百分之多少的时间用于 I/O 操作,即被io消耗的cpu百分比
vmstat
功能说明:实时动态监视操作系统的虚拟内存、进程、CPU活动
常用:
-n表示在周期性循环输出时,输出的头部信息仅显示一次vmstat delay countdelay表示每隔几秒刷新一次,count表示总共输出几次
字段说明:
Procs(进程):
- r: 运行队列中进程数量
- b: 等待IO的进程数量
Memory(内存):
- swpd: 使用虚拟内存大小
- free: 可用内存大小
- buff: 用作缓冲的内存大小
-cache: 用作缓存的内存大小
Swap:
- si: 每秒从交换区写到内存的大小
- so: 每秒写入交换区的内存大小
IO:(现在的Linux版本块的大小为1024bytes)
- bi: 每秒读取的块数
- bo: 每秒写入的块数
system:
- in: 每秒中断数,包括时钟中断
- cs: 每秒上下文切换数
CPU(以百分比表示)
- us: 用户进程执行时间(user time)
- sy: 系统进程执行时间(system time)
- id: 空闲时间(包括IO等待时间)
- wa: 等待IO时间
free
功能说明:显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等
常用:
-h改变显示单位,使其更加易读-t显示总和free -s delay -c count-s后面delay表示每隔几秒刷新一次,-c后面count表示总共输出几次