5.3 dmesg:系统启动异常诊断
5.3.1 命令详解
【命令星级】 ★★★☆☆
【功能说明】
dmesg用于显示内核环形缓冲区(kernel-ring buffer)的内容。在进行系统引导时,内核会将硬件和模块初始化相关的信息写到这个缓冲区中。内核环形缓冲区中的消息对于诊断系统问题非常有用。
内核环形缓冲区的内容同时会保存在/var/log目录中,即名称为dmesg的文件里。可通过如下命令进行查看:
[root@centos7 ~]# ll -h /var/log/dmesg
-rw-r--r--. 1 root root 119K Oct 24 20:49 /var/log/dmesg
【语法格式】
dmesg [option]
dmesg [选项]
**说明:**在dmesg命令及后面的选项里,每个元素之间都至少要有一个空格。
【选项说明】
表5-3针对该命令的参数选项进行了说明。
表5-3 dmesg命令的参数选项及说明
5.3.2 使用范例
**范例5-6:**查看内核环形缓冲区。
[root@centos7 ~]# dmesg |less #通过less命令分页查看缓冲区内容,用于查看应急故障等信息。
[ 0.000000] Initializing cgroup subsys cpuset
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Initializing cgroup subsys cpuacct
[ 0.000000] Linux version 3.10.0-1127.19.1.el7.x86_64 ([email protected]) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) ) #1 SMP Tue Aug 25 17:23:54 UTC 2020
[ 0.000000] Command line: BOOT_IMAGE=/vmlinuz-3.10.0-1127.19.1.el7.x86_64 root=UUID=95c7620f-87ac-46eb-90ef-bbf800bd84ed ro crashkernel=auto biosdevname=0 net.ifnames=0 rhgb quiet LANG=en_US.UTF-8
[ 0.000000] e820: BIOS-provided physical RAM map:
[ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009ebff] usable
[ 0.000000] BIOS-e820: [mem 0x000000000009ec00-0x000000000009ffff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000000dc000-0x00000000000fffff] reserved
[ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000003fedffff] usable
[ 0.000000] BIOS-e820: [mem 0x000000003fee0000-0x000000003fefefff] ACPI data
[ 0.000000] BIOS-e820: [mem 0x000000003feff000-0x000000003fefffff] ACPI NVS
[ 0.000000] BIOS-e820: [mem 0x000000003ff00000-0x000000003fffffff] usable
:
5.4 stat:显示文件或文件系统状态
5.4.1 命令详解
【命令星级】 ★★★☆☆
【功能说明】
stat命令用于详细显示文件或文件系统的状态信息。
【语法格式】
stat [option] [file]
stat [选项] [<文件或目录>]
**说明:**在stat命令及后面的选项里,每个元素之间都至少要有一个空格。
【选项说明】
表5-4针对该命令的参数选项进行了说明。
表5-4 stat命令的参数选项及说明
5.4.2 使用范例
**范例5-7:**查看文件的属性信息。
[root@centos7 ~]# stat /etc/hosts
File: ‘/etc/hosts’
Size: 166 Blocks: 8 IO Block: 4096 regular file
#Size:文件大小。
#Blocks: 占用block数量。
#IO Block: Block总大小为4096(8*512)。
#regular file:文件类型为普通文件。
Device: 803h/2051d Inode: 16879251 Links: 1
#Device: 设备编号的十六进制(h)和十进制(d)。
#Inode: 文件的inode值。
#Links: 文件的硬链接数。
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
#Access: 文件权限。
#Uid和Gid:用户和用户组。
Context: system_u:object_r:net_conf_t:s0
Access: 2020-10-24 20:55:47.235014226 +0800 #访问时间。
Modify: 2020-10-24 20:55:35.728013814 +0800 #修改时间。
Change: 2020-10-24 20:55:35.732013814 +0800 #状态更改时间。
Birth: -
**范例5-8:**查看文件系统属性。
[root@centos7 ~]# stat -f /etc/hosts #-f参数显示文件所在分区的文件系统状态而非文件状态,了解即可。
File: "/etc/hosts"
ID: 80300000000 Namelen: 255 Type: xfs
Block size: 4096 Fundamental block size: 4096
Blocks: Total: 4453632 Free: 3836123 Available: 3836123
Inodes: Total: 8912384 Free: 8837689
**范例5-9:**如何取得/etc/hosts文件的权限对应的数字内容,比如-rw-r–r–为644,请使用命令取得644这样的数字。
从范例5-7可以发现,文件属性有如下一行内容:
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
显然,可以用sed、cut、awk、grep等命令将这行内容中的644提取出来。
但是这里有一个思想:当命令结果包含我们所需要的内容时,我们首先要考虑,是否有具体的参数能够一步获得我们所需的结果呢?对于上面的范例5-9,我们可使用如下命令:
[root@centos7 ~]# stat -c %a /etc/hosts
644
这个方法是最简单的。同理,想要获取范例5-7结果中的其他值,可以使用其他相应的参数。