Linux 系统管理(1) -- 获取硬件信息
当系统启动时,Linux 内核会自动检测硬件设备并加载相应的驱动程序。但这些硬件检测信息在启动时很快就滚动消失,所以需要在进入系统后再次显示这类信息,以发现潜在的问题。
demsg
dmesg 命令可以列出系统启动时硬件检测和驱动加载的情况,以及后续由内核生成的其他信息。dmesg 命令的输出示例:

从输出信息中可以找到 Linux 内核版本、内核命令行选项以及连接到此计算机的硬件设备,如串口、鼠标接口、CD驱动器、网卡和并行端口等。
tips:
dmesg 命令的输出确实有点长,所以常通过管道符(|)将其导向 more 或 less 命令单页显示。或者输送给 head、tail、grep等文字处理工具。
如:
# dmesg | head -20
只输出前 20 行日志
# dmesg | tail -20
只输出最后 20 行日志
# dmesg | grep -i usb
只输出包含 "usb" 字符串的日志行(-i 选项表示忽略大小写)
常用作筛选的字符串包括 usb、dma、tty、memory、eth、sda等,也可以多个关键字相组合。
# dmesg | grep -E -i "eth|sda"
筛选包含字符串 "eth" 或 "sda" 的日志行

lspci
lspci 命令可以列出系统中的 PCI 总线及其连接的设备。该命令的输出如下:

输出信息中包括声音(Multimedia audio controller),USB设备(USB controller),视频输出(VGA compatible controller),有线网卡(Ethernet controller)和磁盘(SATA controller)等。
如需获取更详尽的信息,还可以在该命令后增加一至多个 -v 选项(如 -vvv)。
lsusb
如果只对USB设备感兴趣,可以通过 lsusb 命令来获知USB设备的情况(同样可以通过增加 -v 选项来获取更详细的输出)。

以上面截图中第三行为例:
- Bus 002 指明设备连接到哪条总线
- Device 003 表明这是连接到某条总线的第三台设备
- ID 指设备 id
- Logitech, Inc. Unifying Receiver 表示生产商和设备名
tips:
找出连接了多少 USB 设备:find /dev/bus

列出某台 USB 设备的详细信息,如:lsusb -D /dev/bus/usb/001/002
以树层结构列出 USB 设备:lsusb -t

其中 12M 和 480M 指 USB 类型的传输速率。
- 12M 意味着 USB1.0/1.1 的速率是12Mbit/s
- 480M 意味着 USB2.0 的速率是 480Mbit/s
- 5.0G 意味着 USB3.0 的速率是 5.0 Gbit/s
lsblk
lsblk 命令用于列出所有可用块设备的信息,还能显示他们之间的依赖关系。块设备有硬盘,闪存盘,cd-ROM等等。

- NAME :块设备名。
- MAJ:MIN :主要和次要设备号。
- RM :设备是否属于可移动设备。如 sdb 的 RM 值为1,是可移动设备。
- SIZE :设备的容量大小信息。
- RO :设备是否为只读。
- TYPE :设备是磁盘还是磁盘上的一个分区。在本例中,sda 和 sdb 是磁盘,而 sr0 是只读存储(rom)。
- MOUNTPOINT :设备的挂载点。
lscpu
lscpu 命令可以获得 CPU 的详细信息,如CPU架构(如 i686 或 x86_64)、运算模式(32bit 或 64bit)、核心数、每颗核心的线程数、型号、主频等。

lsmod
如果你新增加了硬件,却不能被系统自动识别。可能你需要手动地加载对应的内核模块。内核模块安装在 /lib/modules/ 的子目录下,该子目录的名字对应内核的版本。即 /lib/modules/4.10.0-19-generic 目录下包含了 4.10.0-19-generic 内核的驱动程序。
lsmod 命令用于列出当前系统下已经载入的内核模块。

获取已加载模块的信息,可以使用 modinfo 命令。

另外,还可以使用 modprobe 命令加载模块,rmmod 命令移除模块。
参考书目和文章:
Linux Bible,9th Edition
Linux lsblk 命令详解
Linux中显示系统中USB信息的lsusb命令