第21章 Linux 高级篇-日志管理

  • 日志管理
  • 基本介绍
    日志文件是重要的系统信息文件,其中记录了许多重要的系统事件,包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等。这些信息有些非常敏感,所以在 Linux 中这些日志文件只有 root 用户可以读取。
    日志对于安全来说也很重要,它记录了系统每天发生的各种事情,通过日志来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。
    可以这样理解日志是用来记录重大事件的工具。
  • 系统常用的日志
    /var/log/ 目录就是系统日志文件的保存位置
日志文件 说明
/var/log/boot.log 系统启动日志
/var/log/cron 记录与系统定时任务相关的日志
/var/log/cups/ 记录打印信息的曰志
/var/log/dmesg 记录了系统在开机时内核自检的信总。也可以使用 dmesg 命令直接查看内核自检信息
/var/log/btmp 记录错误登陆的日志。这个文件是二进制文件,不能直接用Vi查看,而要使用 lastb 命令查看
/var/log/lasllog 记录系统中所有用户最后一次的登录时间的曰志。这个文件也是二进制文件。不能直接用Vi查看,而要使用lastlog命令查看
/var/log/mailog 记录邮件信息的日志
/var/log/message 记录系统里要佶息的日志.这个日志文件中会记录 Linux 系统的绝大多数重要信息。如果系统出现问题,首先要检查的应该就是这个日志文件
/var/log/secure 记录验证和授权方面的倍息,只要涉及账户和密码的程序都会记录,比如系统的登录、ssh 的登录、su 切换用户,sudo 授权,甚至添加用户和修改用户密码都会记录在这个日志文件中
/var/log/wtmp 永久记录所有用户的登陆、注销信息,同时记录系统的后动、重启、关机事件。同样,这个文件也是二进制文件.不能直接用Vi查看,而要使用 last 命令查看
/var/tun/ulmp 记录当前已经登录的用户的信息。这个文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息。同样,这个文件不能直接用Vi查看,而要使用 w、who、users 等命令查看
除系统默认的日志之外,采用 RPM 包方式安装的系统服务也会默认把日志记录在 /var/log/ 目录中(源码包安装的服务日志存放在源码包指定的目录中)。不过这些日志不是由 rsyslogd 服务来记录和管理的,而是各个服务使用自己的日志管理文档来记录自身的日志。以下介绍的日志目录在你的 Linux 上不一定存在,只有安装了相应的服务,日志才会出现。
日志文件 说明
/var/log/httpd/ RPM 包安装的apache取务的默认日志目录
/var/log/mail/ RPM 包安装的邮件服务的额外日志因录
/var/log/samba/ RPM色安装的Samba服务的日志目录
/var/log/sssd/ 守护进程安全服务目录
  • 日志管理服务 rsyslogd

CentOS 7.6日志服务是 rsyslogd,CentOS 6.x 日志服务是 syslogd,rsyslogd 功能更强大。rsyslogd 的使用、日志文件的格式,和 syslogd 服务兼容的。

  • 查询 Linux 中的 rsyslogd 服务是否启动
    • ps aux | grep "rsyslog" | grep -v "grep"
  • 查询 rsyslogd 服务的自启动状态
    • systemctl list-unit-files | grep rsyslog
  • 配置文件:/etc/rsyslog.conf
    • 编辑文件时的格式:*.*,其中第一个 * 代表日志类型,第二个 * 代表日志类别
日志类型 说明
auth 安全和认证相关消息,pam 产生的日志(不推荐使用 authpriv 替代)
authpirv 安全和认证相关信息,ssh、ftp 等登录信息的验证信息(私有的)
cron 系统定时任务 crond 和 at 产生的日志
daemon 和各个守护进程相关的日志
ftp ftp 守护进程产生的日志
kern 内核产生的日志(不是用户进程产生的)
lpr 打印产生的日志
mail 邮件收发信息
news 与新闻服务器相关的日志
syslog 有syslogd服务产生的日志信息(虽然服务名称已经改了 rsyslogd 服务,但是很多配置都还是沿用了 syslogd 的,这里并没有修改服务名)
user 用户等级类别的日志信息
uucp uucp 子系统的日志信息,uucp 时早期 Linux 系统进行数据传递的协议,后来也经常用在新闻组服务中
local0-local7 为本地使用预留的服务
日志级别 说明
debug 一般的调试信息说明,日志通信最多
info 基本的通知信息
notice 普通信息,但是有一定的重要性
warning 警告信息,但是还不会影响到服务或系统的运行
err 错误信息,一般达到 err 等级的信息已经可以影响到服务或系统的运行了
crit 严重错误信息,比 err 等级还要严重,系统或整个软件不能正常工作
alert 需要立刻修改的信息,比 crit 还要严重,必须立即采取行动
emerg 内核崩溃等重要信息,系统已经无法使用了
none 什么都不记录
注意:日志级别从上到下,级别从低到高,记录信息越来越少,优先处理的等级就越高,危害就越大。
  • 由日志服务 rsyslogd 记录的日志文件,日志文件的格式包含以下4列:
    • 事件产生的时间
    • 发生事件的服务器的主机名
    • 产生事件的服务名或程序名
    • 事件的具体信息
  • 日志管理服务应用实例
    在 /etc/rsyslog.conf 中添加一个日志文件 /var/log/hsp.log,当有事件发送时,该文件会接收到信息并保存。
    • 在 /etc/rsyslog.conf 文件中增加如下命令
*.*                         /var/log/hsp.log
  • 新建 /var/log/hsp.log 文件,重启系统,再查看该文件内容。
  • 日志轮替
  • 基本介绍
    • 日志是重要的系统文件,记录和保存了系统中所有的重要事件。但是日志文件也需要进行定期的维护,因为日志文件是不断增长的,如果完全不进行日志维护,而任由其随意递增,那么用不了多久,我们的硬盘就会被写满。
    • 日志维护的最主要的工作就是把旧的日志文件删除,从而腾出空间保存新的日志文件。这项工作如果靠管理员手工来完成,那其实是非常烦琐的,而且也容易忘记。那么 Linux 系统是否可以自动完成日志的轮替工作呢?
    • logrotate 就是用来进行日志轮替(也叫日志转储)的,也就是把旧的日志文件移动并改名,同时创建一个新的空日志文件用来记录新日志,当旧日志文件超出保存的范围时就删除。
  • 日志轮替文件的命名规则
    • 日志轮替最主要的作用就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存的范围时就删除。那么,旧的日志文件改名之后,如何命名呢?主要依靠 /etc/logrotate.conf 配置文件中的“dateext”参数。
    • 如果配置文件中有“dateext”参数,那么日志会用日期来作为日志文件的后缀,如“secure-20130605”。这样日志文件名不会重叠,也就不需要对日志文件进行改名,只需要保存指定的日志个数,删除多余的日志文件即可。
    • 如果配置文件中没有“dateext”参数,那么日志文件就需要进行改名了。当第一次进行日志轮替时,当前的“secure”日志会自动改名为“secure.1”,然后新建“secure”日志,用来保存新的日志;当第二次进行日志轮替时,“secure.1”会自动改名为“secure.2”,当前的“secure”日志会自动改名为“secure.1”,然后也会新建“secure”日志,用来保存新的日志;以此类推。
  • 配置文件:/etc/logrotate.conf
    可以设置全局的日志轮替规则,当然也可以单独给某个日志文件指定策略。
    在这个配置文件中,主要分为三部分:
    • 第一部分是默认设置,如果需要转储的日志文件没有特殊配置,则遵循默认设置的参数;
    • 第二部分是读取 /etc/logrotate.d/ 目录中的日志轮替的子配置文件,也就是说,在 /etc/logrotate.d/ 目录中的所有符合语法规则的子配置文件也会进行日志轮替;
    • 第三部分是对 wtmp 和 btmp 日志文件的轮替进行设定,如果此设定和默认参数冲突,则当前设定生效(如 wtmp 的当前参数设定的轮替时间是每月,而默认参数的轮替时间是每周,则对 wtmp 这个日志文件来说,轮替时间是每月,当前的设定参数生效)。
  • logrotate 配置文件的主要参数
参数 参数说明
daily 日志的轮替周期是毎天
weekly 日志的轮替周期是每周
monthly 日志的轮控周期是每月
rotate 数宇 保留的日志文件的个数。0指没有备份
compress 当进行日志轮替时,对旧的日志进行压缩
create mode owner group 建立新日志,同时指定新日志的权限与所有者和所属组。如 create 0600 root utmp
mail address 当进行日志轮替时.输出内存通过邮件发送到指定的邮件地址
missingok 如果日志不存在,则忽略该日志的警告信息
nolifempty 如果曰志为空文件,則不进行日志轮替
minsize 大小 日志轮替的最小值。也就是日志一定要达到这个最小值才会进行轮持,否则就算时间达到也不进行轮替
size 大小 日志只有大于指定大小才进行日志轮替,而不是按照时间轮替,如 size 100k
dateext 使用日期作为日志轮替文件的后缀,如 secure-20130605
sharedscripts 在此关键宇之后的脚本只执行一次
prerotate/cndscript 在日志轮替之前执行脚本命令。endscript 标识 prerotate 脚本结束
postrolaie/endscripl 在日志轮替之后执行脚本命令。endscripi 标识 postrotate 脚本结束
  • 把自己的日志加入日志轮替
    如果有些日志默认没有加入日志轮替(比如源码包安装的服务的日志,或者自己添加的日志),那么这些日志默认是不会进行日志轮替的,这样当然不符合我们对日志的管理要求。如果需要把这些日志也加入日志轮替,那该如何操作呢?
    这里有两种方法:
    • 第一种方法是直接在 /etc/logrotate.conf 配置文件中写入该日志的轮替策略,从而把日志加入轮替;
    • 第二种方法是在 /etc/logrotate.d/ 目录中新建立该日志的轮替文件,在该轮替文件中写入正确的轮替策略,因为该目录中的文件都会被包含到主配置文件中,所以也可以把日志加入轮替。
      推荐第二种方法,因为系统中需要轮替的日志非常多,如果全部直接写入 /etc/logrotate.conf 配置文件,那么这个文件的可管理性就会非常差,不利于此文件的维护。
  • 日志轮替服务应用实例
    对于自己设置的 /var/log/hsp.log 日志,不是系统默认日志,而是通过 /etc/rsyslog.conf 配置文件自己生成的日志,所以默认这个日志是不会进行轮替的。如果需要把这个日志加入。就采用第二种方法,在 /etc/logrotate.d/ 目录中建立此日志的轮替文件。
    • 先创建 /etc/logrotate.d/hsplog 轮替文件
    • 在文件中写入命令,即事先约定好的日志轮替规则
/var/log/hsp.log {
     missingok
     daily
     copytruncate
     rotate 7
     nolifempty
}
  • 日志轮替机制原理
    • logrotate 在很多 Linux 发行版上都是默认安装的。系统会定时运行 logrotate,一般是每天一次。系统是这么实现按天执行的。crond 会每天定时执行 /etc/cron.daily 目录下的脚本,而这个目录下有个文件叫 logrotate。logrotate 通过这个文件依赖定时任务执行的。
  • 查看内存日志
  • 基本介绍
    日志管理工具 journalctl 是CentOS 7上专有的日志管理工具,该工具是从 message 这个文件里读取信息。Systemd 统一管理所有 Unit 的启动日志。带来的好处就是,可以只用 journalctl 一个命令,查看所有日志(内核日志和应用日志)。日志的配置文件是 /etc/systemd/journald.conf
  • journalctl 用法
    • 查看所有日志(默认情况下 ,只保存本次启动的日志):journalctl
    • 查看内核日志(不显示应用日志):journalctl -k
    • 查看系统本次启动的日志:journalctl -b
    • 实时滚动显示最新日志:journalctl -f
    • 显示尾部的最新10行日志:journalctl -n

第22章 Linux 高级篇-定制自己的 Linux 系统

  • 基本介绍

通过裁剪现有 Linux系统(CentOS 7.6),创建属于自己的 min Linux 小系统,可以加深我们对 Linux 的理解。

  • 基本原理
  • 启动流程介绍
    制作 min Linux 小系统之前,先了解一下 Linux 的启动流程
    • 首先 Linux 要通过 POST 自检,检查硬件设备有没有故障
    • 如果有多块启动盘的话,需要在 BIOS 中选择启动磁盘
    • 启动 MBR 中的 bootloader 引导程序
    • 加载内核文件
    • 执行所有进程的父进程、老祖宗 systemd
    • 打印欢迎界面
      在 Linux 的启动流程中,加载内核文件时关键文件:
    • kernel 文件:vmlinuz-3.10.0-957.el7.x86_64
    • initrd文件:initramfs-3.10.0-957.el7.x86_64.img
  • 制作 min Linux 思路分析
  • 在现有的 Linux 系统(CentOS 7.6)上加一块硬盘 /dev/sdb,在硬盘上分为两个分区,一个是 /boot,一个是 /,并将其格式化。需要明确的是,现在加的这个硬盘在现有的 Linux 系统中是 /dev/sdb,但是,当我们把东西全部设置好时,要把这个硬盘拔除,放在新系统上,此时,就是 /dev/sda
  • 在 /dev/sdb 硬盘上,将其打造成独立的 Linux 系统,里面的所有文件是需要拷贝进去的
  • 作为能独立运行的 Linux 系统,内核是一定不能少,要把内存文件和 initramfs 文件也一起拷到 /dev/sdb 上
  • 以上步骤完成,自制的 Linux 系统就完成,创建一个新的 Linux 虚拟机,将其硬盘指向我们创建的硬盘,启动即可。
  • 具体操作步骤

具体步骤,请查看原视频。

第23章 Linux 内核源码-介绍&内核升级

  • Linux 0.01内核源码
  • 基本介绍
    Linux 的内核代码可以从网上下载,解压后文件一般也都位于 Linux 目录下,内核源代码有很多版本,可以从 Linux 0.01 内核入手,总共的代码有1万行左右,最新版本5.9.8总共代码超过700万行,非常庞大。
    内核地址:https://www.kernel.org/
  • Linux 0.01内核源码目录&阅读
    • Linux 0.01的阅读需要懂 C 语言
    • 阅读源码前,应知道 Linux 内核源码整体分布情况。现代的操作系统一般由进程管理、内存管理、文件系统、驱动程序和网络等组成。Linux 内核源码的各个目录大致与此相对应。
    • 在阅读方法或顺序上,有纵向和横向之分。所谓纵向就是顺着程序执行顺序逐步进行;所谓横向,就是按模块进行。它们经常结合在一起进行。
    • 对于 Linux 启动的代码可顺着 Linux 的启动顺序一步步来阅读;对于像内存管理部分,可以单独拿出来进行阅读分析。实际上,这是一个反复的过程,不可能读一遍就理解。
  • Linux 0.01内核源码目录
目录 说明
boot 和系统引导相关的代码
fs 存放 Linux 支持的文件系统代码
include 存放 Linux 核心需要的头文件,比如 asm,Linux,sys
kernel 和系统内核相关的源码
lib 存放库代码
mm 和内存管理相关的代码
  • 查看 init 目录下,main.c 中 main 函数
目录 说明
time_init() 初始化运行时间
tty_init() tty初始化
trap_init() 陷阱门(硬件中断向量)初始化
sched_init() 调度程序初始化
buffer_init() 缓冲管理初始化
hd_init() 硬盘初始化
sti() 所有初始化工作完成后,开启中断
move_to_user_mode() 进入到用户模式
  • Linux 内核最新版和内核升级

第24章 Linux 系统-备份与恢复

  • 基本介绍
  • Linux 备份和恢复很简单,有两种方式:
    • 把需要的文件(或者分区)用TAR打包就行,下次需要恢复的时候,再解压开覆盖即可
    • 使用 dump 和 restore命令
  • 安装 dump 和 restore
  • 如果 Linux 上没有 dump 和 restore 指令,需要先安装
    • yum -y install dump
    • yum -y install restore
  • 使用 dump 完成备份
  • 基本介绍
    • dump 支持分卷和增量备份(所谓增量备份是指备份最近一次备份以来修改过的文件,也称差异备份)。
    • 完全备份:完全备份就是把所有需要备份的数据全部备份,当然完全备份可以备份整块硬盘,整个分区或某个具体的目录。
    • 增量备份:顾名思义,就是指备份增加的部分。好处就是备份数据少,占用资源也少。但坏处就是恢复的时候要先恢复原始的,然后恢复增量的,比较麻烦。
  • dump 基本语法
    • dump [-cu] [-123456789] [-f <备份后文件名>] [-T <日期>] [目录或文件系统]
    • dump []-wW
    • dump -W #查询分区的备份时间及备份级别(整个分区)
    • cat /etc/dumpdates #查看已备份文件的备份时间
选项 说明
-c 创建新的归档文件,并将由一个或多个文件参数所指定的内容写入归档文件的开头。
-0123456789 备份的层级。0为最完整备份,会备份所有文件。若指定0以上的层级,则备份至上一次备份以来修改或新增的文件。
-f <备份后文件名> 备份后文件名
-j 调用 bzlib 库压缩备份文件,其实就是把备份文件压缩为 .bz2 格式,让文件更小
-T <日期> 指定开始备份的时间与日期
-u 备份完毕后,在 /etc/dumpdares 中记录备份的文件系统,层级,日期与时间等。
-t 指定文件名,若该文件已存在备份文件中,则列出名称
-W 显示需要备份的文件及其最后一次备份的层级,时间 ,日期。
-w 与-W类似,但仅显示需要备份的文件。
  • dump 应用案例
    • 案例1:将 /boot 分区所有内容备份到 /opt/boot.bak0.bz2 文件中,备份层级为“0”
      dump -0uj -f /opt/boot.bak0.bz2 /boot/
    • 案例2:在 /boot 目录下增加一个文件,再备份,备份等级为“1”(只备份上次使用层级“0”备份后发生过改变的数据),此次备份内容保存到 /opt/boot.bak1.bz2 文件中,比较两次备份的文件大小
      dump -1uj -f /opt/boot.bak1.bz2 /boot/
  • dump 备份文件或者目录
    dump 在备份分区时(比如 /boot),是可以支持增量备份的(备份层级可选1-9)。如果备份文件或者目录时,不支持增量备份,只能完整备份,即只能使用备份级别0。
    • 案例1:将 /etc 目录所有内容备份到 /opt/etc.bak0.bz2 文件中,备份层级为“0”
      dump -0uj -f /opt/etc.bak0.bz2 /etc/
    • 案例2:在 /etc 目录下增加一个文件,再备份,备份等级为“1”,备份内容保存到 /opt/boot.bak1.bz2 文件中,输入下面命令会报错
      dump -1uj -f /opt/ect.bak1.bz2 /ect/
  • 使用 restore 完成恢复
  • 基本介绍
    restore 命令用来恢复已备份的文件,可以从 dump 生成的备份文件中恢复原文件。
  • restore 基本语法
    • restore [模式选项] [选项]
    • 选项: -f <指定备份文件的文件名>:从指定的文件中读取备份数据,进行还原操作
    • 模式选项:restore命令常用的模式有四种,这四种模式不能混用
选项 说明
-C 对比模式,将备份文件和实际文件相互对比
-i 交互模式,手工选择需要恢复的文件
-t 查看模式,用于查看备份文件中有哪些文件
-r 还原模式,用于还原数据
  • restore 应用案例
    • 案例1:restore 比较模式
      mv /boot/hello.java /boot/hello100.java #把/boot目录中的一个文件改名字,造成丢失的假象
      restore -C -f /opt/boot1.bak.bz2 #注意与之前最新的备份文件 /opt/boot1.bak.bz2 比较,发现文件丢失
    • 案例2:restore 查看模式
      restore -t -f /opt/boot.bak0.bz2
    • 案例3:restore 还原模式,注意:如果有增量备份,需要先还原完全备份的文件,再进行增量备份文件的恢复,有几个增量备份文件,就要恢复几个,按顺序来恢复即可
      mkdir /opt/boottmp
      cd /opt/boottmp
      restore -r -f /opt/boot.bak0.bz2
      restore -r -f /opt/boot.bak1.bz2
    • 案例4:restore 恢复备份的文件或者整个目录文件
      mkdir /opt/ecttmp
      cd /opt/ecttmp
      restore -r -f /opt/ect.bak0.bz2

第25章 Linux 可视化管理-Webmin 和 BT 运维工具

  • Webmin
  • 基本介绍
    Webmin 是功能最强大的基于 Web 的 Unix/Linux 系统管理工具。管理员通过浏览器访问 Webmin 的各种管理功能并完成相应的管理操作。除了各种版本的 Linux 以为还包括:AIX、HPUX、Solaris、Unixware、Irix 和 FreeBSD 等系统。
  • 安装 Webmin &配置
    • 下载安装包:wget http://download.webmin.com/download/yum/webmin-1.700-1.noarch.rpm
    • 安装:rpm -ivh webmin-1.700-1.noarch.rpm
    • 重置密码:/usr/libexec/webmin/changepass.pl /etc/webmin root test
      这里 root 是 Webmin 的用户名,不是 Linux 系统的 root 用户,并且把 root 密码改成了 test
    • 修改 Webmin 服务的端口号(修改是出于安全目的)
      编辑 /etc/webmin/miniserv.conf 文件,将 port=10000 修改为其他端口号,如 port=6666
    • 重启 Webmin
      /etc/webmin/restart #重启
      /etc/webmin/start #启动
      /etc/webmin/stop #停止
    • 防火墙放开6666端口
      firewall-cmd --zone=public --remove-port=10000/tcp --permanent #配置防火墙关闭10000端口
      firewall-cmd --zone=public --add-port=6666/tcp --permanent # 配置防火墙开放6666端口
      firewall-cmd --reload #更新防火墙配置
      firewall-cmd --zone=public --list-ports #查看已经开放的端口号
    • 登录 Webmin
      在浏览器里输入 http://主机IP:6666 就可以访问
      用 root 用户名和新密码 test 登录 Webmin
  • BT(宝塔面板)
  • 基本介绍
    BT 宝塔 Linux 面板是提升运维效率的服务器管理软件,支持一键 LAMP/LNMP/集群/监控/网站/FTP/数据库/JAVA 等多项服务器管理功能。
  • 安装和使用
    安装:yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
    安装成功后,控制台会显示登录地址、账户密码,然后复制到浏览器就可以登录。
  • 如果 BT 的用户名和密码忘记了,可以使用 bt default 命令查看。

第26章 Linux 面试题(腾讯,百度,美团,滴滴)

该章节内容可能会更新吧,未完待续。