Linux 内核是一个非常复杂的工程项目,也有着非常复杂的工作机制。其中就包括管理从开机到用户的 5 种运行级别,还要管理运行计算机时的各种资源,包括:CPU、内存、网络、视频输出以及存储系统。由于 Linux 内核将统筹不同的系统和资源,它也就有能力记录各种高级的底层操作信息,以便让管理员知道系统正在进行怎样的处理。问题是,对于直接由 Linux 内核输出的复杂信息让很多刚入门的 Linux 用户都无法理解。因此,为了帮助用户理解这些基础知道,我们可以使用 dmesg 这个非常强大的系统管理工具。
Linux系统启动
要了解当前内核信息最简便的方法就是输出系统启动过程的前几行内容,我们可以使用如下命令实现:
dmesg | less
前 3 行显示出来的是 Linux 系统的子系统初始化信息,对于普通用户来说意义不大,但从下面一行开始,就可以看到当前系统运行的是什么版本的 Linux 内核。
我测试跑在 Windows Azure 上的 Ubuntu Server 时,输出信息如下:
Linux version 3.13.0-24-generic (buildd@panlong) (gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1) ) #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 (Ubuntu 3.13.0-24.46-generic 3.13.9)
以上信息告诉我们,当前服务器运行的是 Linux kernel 3.13,由 Ubuntu 于 2014 年 4 月 10 日编译。
内存
Memory: 1691820K/1834552K available (7338K kernel code, 1138K rwdata, 3388K rodata, 1332K init, 1440K bss, 142732K reserved)
从输出的信息可以看出,在初始化 CPU 之后,马上就开始加载内存,从上面输入可以看到,我当前服务器的内存大约为 1.7 G 左右。再从 dmesg 输出信息往下看,Linux 在完成 CPU 和内存的加载之后很快就会开始处理视频、USB和磁盘等。
硬件检测
grep
例如要查看 sda 磁盘在内核中的信息,可以使用如下命令:
dmesg | grep sda
sda 是 Linux 中默认对第一块 SATA 盘的识别名称,sdb 是第二块 SATA 盘。如果在你的系统中没有 sda,可以常试 hda、hdb 等。
要获取网卡信息,我们可以在 dmesg 输出信息中搜索 eth0,例如:
dmesg | grep eth0
以此类推,如果你在计算机上插了 U 盘或移动硬盘,也可以使用 dmesg 命令输出最后几行信息来查看其如何加载。
dmesg | tail -20
总的来说,dmesg 是 Linux 中非常重要的一个系统信息查看和管理命令,大家也可以尝试看看你的系统是如何工作,这样可以让我们更加了解 Linux。