Linux学习----基础篇(常见故障排除)
当一个故障发生时,要解决故障,必须掌握一定的思路,个人认为应该从以下几点来进行:
- 查看错误信息,当故障发生时,系统一般都会给出错误信息,通过查看错误信息可以定位故障
- 查看日志,日志中会详细记录系统及应用软件的运行状态,如果出现故障,通过日志也可以定位故障
- 定位故障后就是分析故障的原因
- 解决故障
1、日志
1.1、日志分类
- 内核及系统日志:这些日志由系统服务syslog统一管理,CentOS 6之前版本的系统syslog的配置文件为/etc/syslog.conf,CentOS 6版本开始配置文件为/etc/rsyslog.conf。syslog根据配置文件中的设置决定将内核日志及各种系统程序日志记录在何处
- 用户日志:这些日志用于记录系统用户登录及退出的相关信息,包括用户名、登录的终端、登录时间、来源主机和正在使用的进程等
- 程序日志:一些应用程序会自己独立管理一份日志,而不是交由syslog管理,用于记录自身运行过程中产生的各种事件信息
1.2、各种日志
Linux中系统日志及大部分应用程序的日志默认保存在/var/log目录下,主要有以下一些日志文件:
- messages:公共日志文件,记录Linux内核消息及各种应用程序消息的公共日志信息,包括启动、IO错误、网络错误、程序故障等。对于未使用独立日志的应用程序或服务,一般都可以从该文件获得相关的事件记录信息
- cron:记录任务计划crond产生的事件消息
- dmesg:包含内核缓冲信息(kernel ring buffer),该信息是系统启动时在屏幕上显示的与硬件及服务有关的信息。该日志文件记录的是上次系统启动时的信息,注意该文件与dmesg命令的区别
- maillog:记录进入及发出系统的电子邮件信息
- boot.log:记录系统启动时软件的日志信息,该日志文件会有以boot.log-时间为名的备份文件,如果boot.log中没有相关信息,可尝试查看这些备份文件
- secure:记录用户远程登录、认证过程中的事件信息
- wtmp:记录系统所有登录及退出信息,该文件为二进制文件,通过命令last查看该文件的内容
- btmp:记录错误登录信息,该文件为二进制文件,通过命令lastb查看该文件的内容
- lastlog:记录系统中所有用户最后一次登录时间,该文件为二进制文件,通过命令lastlog查看该文件的内容
2、单用户模式的进入
在单用户模式下,系统的一些服务不会启动,进入单用户也不需要密码,所以单用户模式可以用来解决系统出现的某些问题,最常见的问题就是忘记root密码。
CentOS 6及之前的版本使用GRUB,从CentOS 7开始使用的是GRUB 2,所以CentOS 6之前的版本与CentOS 7版本进入单用户模式的方式有所区别,这里分两种情况详细介绍如何进入单用户模式。
2.1、CentOS 6及之前版本
系统启动进入启动倒计时,界面如下:
此时按键盘上的任意键,即可进入系统选择菜单,界面如下:
此时将光标移动到需要进入单用户模式的内核选项上,按键盘上的e键,进入如下界面:
此时将光标移动到kernel内核选择行,继续按下键盘上的e键,进入如下界面:
此时输入single或者1,如下:
回车,将重新进入如下界面:
此时按下键盘上的b键,系统将引导进入单用户模式,如下所示:
2.2、CentOS 7
系统启动时进入系统选择菜单界面,如下:
此时将光标移动到需要进入单用户模式的内核上,按键盘上的e,进入如下界面:
在上图的红框处那行的最后加上init=/bin/sh,如下:
此时按下键盘上的Ctrl+x键,系统将引导进入单用户模式,如下图所示:
在单用户模式下使用以下命令可以重启系统:
exec /sbin/init
注意:CentOS 7下,进入单用户模式后,/目录是以只读的形式挂载的,所以默认情况下进入单用户模式后对于系统我们是没办法进行修改操作的,此时可以使用以下命令重新以可读写方式挂载/目录
mount -o remount,rw /
注意:如果安装系统时选择的语言是简体中文,在单用户模式下的显示会出现乱码,使用命令locale可以查看当前系统的编码,通过修改环境变量可以改变当前系统的编码,使用命令export LANG=en_US将系统编码修改成英语,就可以解决乱码的问题。
注意:在CentOS 7单用户模式中修改了root密码后,如果系统开启了SELinux,需要在/目录下创建一个名为.autorelabel的空文件,否则密码修改将不会成功。
2.3、GRUB配置文件
GRUB的配置文件为/etc/grub.conf,GRUB2的配置文件为/etc/grub2.cfg。两个配置文件内容有所不同,但本质上的配置没有太大的差别。
/etc/grub.conf文件
额外的:root(hd0,0) , 相对下面的内核和initrd全局定义root为第一块磁盘的第一个分区,此处的root不是真的root,而是开机时的/boot 分区,因为bootloader开机还没有加载内核以及/分区。加载的内核需要通过/boot分区加载/分区和内核。
/etc/grub2.cfg文件与/etc/grub.conf文件内容有很大区别,但是核心设置部分差别不大,可参考/etc/grub.conf。