作为一名IT从业者,对于Linux系统的日志分析和故障排查是必备技能。日志是在Linux系统中重要的信息源,它有助于了解系统的运行状况并发现和解决系统问题。
系统管理员应该经常查看系统日志,以了解系统的运行状态,并及时识别和处理故障。
要查看实时日志,可以使用tail
命令。例如,可以使用以下命令查看系统日志文件/var/log/syslog
的最后10行:
tail n 10 /var/log/syslog
要查看历史日志,可以使用grep
命令。例如,可以使用以下命令查找包含"error"关键字的日志:
grep "error" /var/log/syslog
日志分析是追溯故障的一种重要手段,可以通过查看日志文件来了解故障产生的原因和过程。
awk
命令进行格式化输出awk
是一个非常强大的文本处理工具,可以用来分析日志数据,提取日志中的时间戳和日志级别。例如,可以使用以下命令提取日志中的时间戳和日志级别:
awk '{print $4, $5}' /var/log/syslog
sort
和uniq
命令进行排序和去重sort
命令可以对文本文件进行排序,uniq
命令可以去除重复的行。对日志文件按时间戳排序可以使用以下命令:
sort /var/log/syslog | uniq c
Linux系统有多种故障排查工具,例如ps
、last
、dmesg
、journalctl
、netstat
和ss
等。
要查找异常进程,可以使用ps
命令结合awk
命令。例如,可以使用以下命令查找CPU占用率超过90%的进程:
ps aux | awk '$3 > 90' | sort k 10nr | head n 10
要查找异常用户登录,可以使用last
命令。例如,可以使用以下命令查找最近一次非正常退出的登录用户:
lastb | grep 'reboot' | awk '{print $1, $2, $3, $4, $5}' | sort u k 1,1n k 2,2n k 3,3n k 4,4n k 5,5n | tail n 10
除了以上命令,Linux系统中还有多种其它常用命令。例如,dmesg
命令可以查看内核消息缓冲区的内容,主要用于硬件故障排查;journalctl
命令可以查看系统日志,支持实时查看和历史查询;netstat
命令可以查看网络连接状态,包括TCP、UDP、UNIX套接字等;ss
命令类似于netstat
,但功能更强大。
A1:可以使用logrotate
工具定期清理系统日志。首先创建一个配置文件,例如/etc/logrotate.d/syslog
,内容如下:
/var/log/syslog { daily # 每天执行一次日志轮换 rotate 7 # 保留7份日志备份 compress # 压缩备份文件 missingok # 如果日志文件不存在,不报错并继续执行下一个任务 notifempty # 如果日志文件为空,不进行备份和压缩操作 sharedscripts # 同时运行postrotate和prerotate脚本 postrotate /bin/kill HUP cat /var/run/syslogd.pid 2> /dev/null
2> /dev/null || true # 向syslogd进程发送HUP信号,让其重新打开日志文件进行写入操作 endscript}
将这个配置文件添加到crontab
中,使其每天自动执行一次:
crontab e && echo "0 0 * * * /usr/sbin/logrotate /etc/logrotate.conf" >> /etc/crontab && exit 0
A2:可以通过修改内核配置文件来实现。首先找到内核模块的配置文件,通常位于/etc/modprobe.d/
目录下,例如aliases.conf
,然后在文件中添加一行配置,指定内核模块的路径和参数:
options modules path=/path/to/your/kernel_modules auto_install=yes enable=yes recompile=yes force=yes quiet=yes permanenent=yes modprobe.blacklist=nopanic nosplash nomodeset xhci_pci idle=poll ignore_msi ignore_msix rcu_gp_freq_max=1400 rcu_gp_freq_min=850 rcu_gp_freq_sync=650 rcu_gp_quiet_devfail=1 rcu_preempt_freq=1400 rcu_use_default=no apm=power_off nolapic maxcpus=4 tsc=reliable nohpet nohwp iommu=on vfiopci.ids=10de:1c82,10de:1cb4,10de:0bea vfiopci.dscr_verify=0 vfiopci.allow_unsafe_interrupts=1 vfiopci.mdev_support=1 vfiopci.coherent_pools=1 vfiopci.disable_legacy=1 vfiopci.enable_fbsd_irqfd=1 vfiopci.force_vga=on vfiopci.disable_s3=1 vfiopci.disable_s2=1 vfiopci.disable_s1=1 vfiopci.no_shareable_msi=1 vfiopci.disable_devid=1 vfiopci.disable_puregold=1 vfiopci.disable_reset_on_oops=1 vfiopci.enable_acceleration=1 vfiopci.enable_autoconfig=1 vfiopci.enable_runtime_msi=1 vfiopci.enable_locked_msi=1 vfiopci.enable_executing_msi=1 vfiopci.enable_distributed_tracing=1 vfiopci.enable_perfmon=1 vfiopci.enable_debugfs=1 vfiopci.enable_dumpfile=1 vfiopci.enable_kfd=1 vfiopci.enable_irqfd=1 vfiopci.enable_nested="no" uaccess="load|store|read|write" ioeventfd="on" pciehp="on" pciehp_atomic="on" pciehp_coherent="on" pciehp_mmap="on" pciehp_noacpi="on" pciehp_nonnative="on" pciehp_rdma="on" pciehp_vendor="on" drm_kms_helper="uvm" drm_vmmouse="off" drm_debugfs="off" drm_mm." />; options drivers allowdelayedroot = yes module +ipmi +serio +bluetooth +bnep +ath3k +ath9k +ath10k +usbhid +hid +cdc +rfkill +rtsx +extcon +joydev +input +mtdev +spidev +videobuf2kcore +i2c rhndev "module" "drivers" "module*" "/proc/acpi/bus/*" /proc/acpi/devices/* "class*/*:/*" "/sys/*:*" "/class/*:" "/device/*:" "/initrd/*" /etc/modprobe.d/* /bin/true; savedefault; silent; modules." > /etc/modprobe.conf && exit 0; echo "Loading kernel modules on boot..." && exit 0; }' >> /etc/rc.local && exit 0; crontab e && echo "@reboot /usr/bin/logger "Kernel modules loaded at $(date)"" >> /etc/crontab && exit 0; echo "Kernel modules will be loaded at next boot." && exit 0; fi; done; }' >> /etc/rc.local && exit 0; echo "Kernel modules will be loaded at next boot." && exit 0; fi; done; }' >> /etc/rc.local && exit 0; echo "Kernel modules will be loaded at next boot." && exit 0; fi; done; }' >> /etc/rc.local && exit 0; echo "Kernel modules will be loaded at next boot." && exit 0; fi; done; }' >> /etc/rc.local &&
以上列举了列日志分析和故障排查的常用命令和问题解答。掌握这些命令和技巧可以帮助您更好的处理日常的故障和维护工作。
感谢观看本文,如果您有任何问题或疑问,请在评论区留言。
如果您喜欢本文,请点赞、分享或关注我们。谢谢!