Linux--文件系统深入理解与日志分析 理论+数据恢复实验(inode与block详解,软链接与硬链接详解与总结,误删文件恢复实验,日志文件分类与分析)

文章目录

  • 前言
  • 一:inode与block
      • 1.1:元信息,inode和block概述
      • 1.2:inode的内容
          • 1.2.1:inode包含文件的元信息
          • 1.2.2:Linux系统文件三个主要的时间属性
          • 1.2.3:目录文件的结构
          • 1.2.4:☆☆☆inode的号码☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
          • 1.2.5:文件存储小结
          • 1.2.6:inode的大小
          • 1.2.7:inode的特殊作用
  • 二:硬链接与软链接
      • 2.1:硬链接
      • 2.2:软链接
      • 2.3:软链接与硬链接总结
  • 三:恢复误删除的文件
      • 3.1:实验:恢复XFS类型的文件
          • 3.1.1:xfsdump命令格式
      • 3.2:xfsdump使用限制
      • 3.3:实验过程:在CentOS 7中恢复xfs类型的数据
      • 3.4:实验:恢复EXT类型的文件
      • 3.5:实验过程:在CentOS6中恢复ext文件
  • 四:日志文件的分类
      • 4.1:日志的功能
      • 4.2:日志文件的分类
      • 4.3:日志保存位置
      • 4.4:☆☆☆主要日志文件介绍☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
  • 五:日志文件分析
      • 5.1:内核及系统日志
          • 5.1.1:由系统服务rsyslogd统一管理
          • 5.1.2:☆☆☆日志消息的级别☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
          • 5.2.3:日志记录的一般格式
      • 5.2:用户日志
          • 5.2.1:保存目录
          • 5.2.2:分析工具
      • 5.3:程序日志
          • 5.3.1:由相应的程序独立进行管理
          • 5.3.2:分析工具
          • 5.3.3:日志管理策略

前言

  • 在处理Linux系统出现的各种故障时,故障的症状是最容易发现的,而导致这一故障的原因才是最终排除故障的关键。
  • 熟悉Linux系统中常见的日志文件,了解一般故障的分析与解决办法,将有助于管理员快速定位故障点,“对症下药”,及时解决各种系统问题。

一:inode与block

  • 崭新的操作系统的文件除了实际内容外,通常含有非常多的属性,例如Linux操作系统的文件权限(rwx)与文件属性(所有者,群组,时间参数等)。文件系统通常会将这两部分分别存放在inode和block中

1.1:元信息,inode和block概述

  • 文件数据包括元信息与实际数据

  • 文件存储在硬盘上,硬盘最小存储单元是“扇区”,每个扇区存储512字节

  • 元信息

    元信息是关于信息的信息,用于描述信息的结构、语义、用途和用法等,比如文件的创建者,文件的创建日期,文件的大小等

  • block(块)

    操作系统读取硬盘的时候,不会一个个扇区的读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个“块”(block)

    连续的八个扇区组成一个block,“块”的大小,最长见的是4KB

    是文件存取的最小单位

  • inode(索引节点)

    文件数据存储在“块”中,那么还必须找到一个地方存储文件的元信息,比如文件的创建者,文件的创建日期,文件的大小等

    这种存储文件元信息的区域就叫做inode,中文译名为(索引节点),也叫i节点

    一个文件必须占用一个inode,但至少占用一个block

    • 存储内容 存储位置
      元信息 inode
      数据 block

1.2:inode的内容

1.2.1:inode包含文件的元信息
  • inode包含很多的文件元信息,但不包括文件名,例如:

    文件的字节数

    文件拥有者的UserID

    文件的GroupID

    文件的读,写,执行权限

    文件的时间戳

  • 使用stat命令即可查看某个文件的inode信息

    [root@localhost ~]# touch 333.txt
    [root@localhost ~]# stat 333.txt
      文件:"333.txt"
      大小:0         	块:0          IO 块:4096   普通空文件
    设备:802h/2050d	Inode:50331717    硬链接:1
    权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
    环境:unconfined_u:object_r:admin_home_t:s0
    最近访问:2019-11-16 21:25:30.259045437 +0800
    最近更改:2019-11-16 21:25:30.259045437 +0800
    最近改动:2019-11-16 21:25:30.259045437 +0800
    创建时间:-
    
    
1.2.2:Linux系统文件三个主要的时间属性
  • ctime(change time)

    最后一次改变文件或目录(属性)的时间,例如执行chmod,chown等命令

  • atime(access time)

    最后一次访问文件或目录的时间

  • mtime(modify time)

    最后一次修改文件或目录(内容)的时间

1.2.3:目录文件的结构
  • inode不包括文件名,文件名是存放在目录当中的

  • Linux系统中一切皆文件,因此目录也是一种文件

  • 目录文件的结构,每一行称为一个目录项

    文件名1 inode号码1
    文件名2 inode号码2
  • 每个inode都有一个号码,操作系统用inode号码来识别不同的文件

  • Linux系统内部不使用文件名,而使用inode号码来识别文件

  • 对于用户来说,文件名指示inode号码便于识别的别称

1.2.4:☆☆☆inode的号码☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
  • ☆☆☆用户通过文件名打开文件时,系统内部的过程☆☆☆

    1.系统找到这个文件名对应的inode号码

    2.通过inode号码,获取inode信息

    3.根据inode信息,找到文件数据所在的block,读出数据

    inode号码指向block存储路径

  • 查看inode号码的方法

    ls -i命令,查看文件名对应的inode号码

    [root@localhost ~]# ls -i
    50331717 333.txt               18560747 公共   1790202 图片  50331758 音乐
    50331714 anaconda-ks.cfg        1790201 模板  34291860 文档  34291859 桌面
    50331724 initial-setup-ks.cfg  18560748 视频  50331757 下载
    [root@localhost ~]# ls -i 333.txt
    50331717 333.txt
    
    

    查看文件系统的inode数量信息(总数,已用,可用)

    [root@localhost opt]# df -i
    文件系统          Inode 已用(I)  可用(I) 已用(I)% 挂载点
    /dev/sda2      10485760  117069 10368691       2% /
    devtmpfs         229705     372   229333       1% /dev
    tmpfs            233378       1   233377       1% /dev/shm
    tmpfs            233378     543   232835       1% /run
    tmpfs            233378      16   233362       1% /sys/fs/cgroup
    /dev/sda5       5241856     141  5241715       1% /home
    /dev/sda1       3145728     328  3145400       1% /boot
    tmpfs            233378      16   233362       1% /run/user/0
    
    
1.2.5:文件存储小结

Linux--文件系统深入理解与日志分析 理论+数据恢复实验(inode与block详解,软链接与硬链接详解与总结,误删文件恢复实验,日志文件分类与分析)_第1张图片

1.2.6:inode的大小
  • inode也会消耗硬盘空间,每个inode的大小一般是128字节或256字节

  • 格式化文件系统时确定inode的总数

  • 使用df -i命令可以查看每个硬盘分区的inode总数和已经使用的数量

    [root@localhost opt]# df -i
    文件系统          Inode 已用(I)  可用(I) 已用(I)% 挂载点
    /dev/sda2      10485760  117069 10368691       2% /
    devtmpfs         229705     372   229333       1% /dev
    tmpfs            233378       1   233377       1% /dev/shm
    tmpfs            233378     543   232835       1% /run
    tmpfs            233378      16   233362       1% /sys/fs/cgroup
    /dev/sda5       5241856     141  5241715       1% /home
    /dev/sda1       3145728     328  3145400       1% /boot
    tmpfs            233378      16   233362       1% /run/user/0
    
    

    df命令

    df - 报告文件系统磁盘空间的使用情况
    df -a:显示所有文件系统的磁盘使用情况,包括0块(block)的文件系统。
    df -h:以容易理解的格式输出文件系统大小,例如124KB、345MB、46GB。
    df -i:显示i节点信息,而不是磁盘块。
    df -t:显示各指定类型的文件系统的磁盘空间使用情况。
    df -x:列出不是某一指定类型文件系统的磁盘空间使用情况。
    df -T:显示文件系统类型。
    df 以512字节为单位
    df –k 以1024字节为单位
    
1.2.7:inode的特殊作用
  • 由于inode号码与文件名分离,导致一些Unix/Linux系统具有以下的现象

    1,当文件名包含特殊字符,可能无法正常删除文件,直接删除inode,也可以删除文件

    2,移动或者重命名文件时,只改变文件名,不影响inode号码

    3,打开一个文件后,系统通过inode号码来识别该文件,不再考虑文件名

  • 这使得软件更新变得简单,可以在不关闭软件的情况下进行更新,不需要重启

    因为系统通过inode号码,识别运行中的文件,不通过文件名

    更新的时候,新版文件以同样的文件名,生成一个新的inode,不会影响到运行中的文件

    等到下一次运行这个软件的时候,文件名就会自动指向新版文件,旧版文件的inode则被回收

二:硬链接与软链接

  • 在Linux下面的链接文件有两种:
  • 一种类似于Windows的快捷方式功能的文件,可以快速连接到目标文件或目录,这种称为软链接
  • 另一种则是通过文件系统的inode链接文件来产生新的文件名,而不是产生新文件,这种称之为硬链接

2.1:硬链接

  • 一般情况下,文件名和inode号码是一一对应关系,每个inode号码对应一个文件名。

  • 但是Linux系统允许,多个文件名指向同一个inode号码。这表示可以用不同的文件名来访问同样的内容

  • ln命令可以创建硬链接,命令基本格式
    ln 源文件 目标
    不能对目录做硬链接
    

    运行此命令后,源文件和目标文件的inode号码相同,都指向同一个inode。

    inode信息中的“链接数”此时就会增加1

  • 当一个文件拥有多个硬链接时,对文件内容修改,会影响到所有文件名

    但删除一个文件名,不会影响另一个文件名的访问

    删除一个文件名,就会使得inode信息中的“链接数”减少1

2.2:软链接

  • 软链接就是再创建一个独立的文件,而这个文件会让数据的读取指向它连接的那个文件的文件名

  • 例如:文件A和文件B的inode号码虽然不一样,但是文件A的内容是文件B的路径。

    读取文件A时,系统会自动将访问者导向文件B

    此时,文件A就称为文件B的“软链接(soft link)”或者“符号链接(symbolic link)”

  • 这表示,文件A依赖于文件B而存在,如果删除了文件B ,打开文件A就会报错

    这是软链接与硬链接的最大不同:文件A指向文件B的文件名,而不是文件B的inode号码,文件B的inode“链接数”不会因此产生变化。

  • 软链接的创建命令的基本格式为:

    ln -s 源文件或目录 目标文件或目录
    

2.3:软链接与硬链接总结

  • 链接文件是为文件或目录建立链接文件

  • 软链接与硬链接对比

    软链接(符号链接) 硬链接
    删除原始文件后 失效 仍旧可用
    使用范围 适用于文件或目录 只可用于文件
    保存位置 与原始文件可以位于不同的文件系统中 必须与原始文件在同一个文件系统(如一个Linux分区)内
  • 删除原始文件后,软链接无法找到原始文件的文件名,所以会报错。硬链接与原始文件inode相同,所以不影响访问,仍旧可用。

  • 删除一个文件,实际上并不清除inode节点和block的数据,只是在这个文件的父目录里面的block中,删除这个文件的名字

    Linux是通过link的数量来控制文件的删除的,只有当一个文件不存在任何link的时候,这个文件才会被删除

三:恢复误删除的文件

3.1:实验:恢复XFS类型的文件

3.1.1:xfsdump命令格式
xfsdump -f 备份存放位置 要备份的路径或者设备文件
  • xfsdump备份级别(默认为0)

    0:完全备份

    1-9:增量备份

  • xfsdump常用选项:-f,-L,-M,-s

  • xfsrestore命令格式

    xfsrestore -f 恢复文件的位置 存放恢复后文件的位置
    

3.2:xfsdump使用限制

  • 只能备份已挂载的文件系统
  • 必须使用root的权限才能操作
  • 只能备份xfs文件系统
  • 备份后的数据只能用xfsrestore解析
  • 不能备份两个具有相同UUID的文件系统

3.3:实验过程:在CentOS 7中恢复xfs类型的数据

'第一步:创建一块磁盘并挂载'
[root@localhost ~]# df -hT		'创建一块磁盘,并挂载,此操作不赘述,如有疑问,可查看我的博客“Linux磁盘与文件系统管理--理论与命令配置(https://blog.csdn.net/CN_TangZheng/article/details/102866952)”'
文件系统       类型      容量  已用  可用 已用% 挂载点
/dev/sda2      xfs        20G  3.1G   17G   16% /
devtmpfs       devtmpfs  898M     0  898M    0% /dev
tmpfs          tmpfs     912M     0  912M    0% /dev/shm
tmpfs          tmpfs     912M  9.0M  903M    1% /run
tmpfs          tmpfs     912M     0  912M    0% /sys/fs/cgroup
/dev/sda1      xfs       6.0G  174M  5.9G    3% /boot
/dev/sda5      xfs        10G   37M   10G    1% /home
tmpfs          tmpfs     183M   12K  183M    1% /run/user/42
tmpfs          tmpfs     183M     0  183M    0% /run/user/0
/dev/sdb1      xfs        20G   33M   20G    1% /111

'第二步:在挂载点中创建文件'
[root@localhost ~]# cp /etc/passwd /111		'将/etc/passwd 复制到/111目录下'
[root@localhost ~]# mkdir /111/222		'在/111目录下创建/222目录'
[root@localhost ~]# echo "this is test" > /111/222/test.txt		'创建带有“this is test”内容的文件test.txt,放到/111/222目录下'
[root@localhost ~]#yum install tree -y		'安装tree工具'
    ...此处省略内容
[root@localhost ~]# tree /111		'查看/111结构'
/111
├── 222
│   └── test.txt
└── passwd

1 directory, 2 files

'第三步:备份文件'
[root@localhost ~]# ls /opt		'查看/opt目录下内容'
rh
[root@localhost ~]# xfsdump -f /opt/xfs_dump /dev/sdb1		'将/dev/sdb1中的文件备份到/opt/xfs_dump中'
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.1.4 (dump format 3.0) - type ^C for status and control

 ============================= dump label dialog ==============================

please enter label for this dump session (timeout in 300 sec)
 -> xfs_dump		'请输入此转储会话的标签xfs_dump,即将文件备份到xfs_dump中'
session label entered: "xfs_dump"
    ...此处省略内容
 ============================= media label dialog =============================

please enter label for media in drive 0 (timeout in 300 sec)
 -> /dev/sdb1		'请输入驱动器0中的媒体标签/dev/sdb1,即备份/dev/sdb1中的文件'
media label entered: "/dev/sdb1"
...此处省略内容
[root@localhost ~]# ls /opt		'查看/opt下是否有备份文件'
rh  xfs_dump
'第四步:删除文件并尝试恢复'
[root@localhost ~]# rm -rf /111/*		'将/111下的文件都删除掉'
[root@localhost ~]# ls /111		'查看是否删除成功'
[root@localhost ~]# xfsrestore -f /opt/xfs_dump /111		'将/opt/xfs_dump恢复到/111中'
...此处省略内容
xfsrestore: Restore Summary:
xfsrestore:   stream 0 /opt/xfs_dump OK (success)
xfsrestore: Restore Status: SUCCESS
[root@localhost ~]# ls /111		'查看/111中内容是否恢复'
222  passwd
[root@localhost ~]# tree /111		'查看/111中内容是否恢复'
/111
├── 222
│   └── test.txt
└── passwd

1 directory, 2 files
实验成功,恢复完成

3.4:实验:恢复EXT类型的文件

  • 编译安装extundelete软件包

    • 安装依赖包

      e2fsprogs-libs-1.41.12-18.el6.x86-64.rpm

      e2fsprogs-devel-1.41.12-18.el6.x86-64.rpm

    • 配置,编译及安装

3.5:实验过程:在CentOS6中恢复ext文件

'第一步:添加一块磁盘备用,安装环境'
[root@wangermazi ~]#cd /mnt/Packages
[root@wangermazi Packages]# df -h		'查看镜像文件是否挂载'
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        20G  3.1G   16G  17% /
tmpfs           932M   76K  932M   1% /dev/shm
/dev/sda1       5.8G  168M  5.4G   3% /boot
/dev/sda3       9.7G  150M  9.0G   2% /home
/dev/sr0        3.6G  3.6G     0 100% /mnt		'挂载在/mnt目录'
[root@wangermazi ~]# cd /mnt/Packages/
[root@wangermazi Packages]# ls		'发现有很多软件包可以安装'
...省略部分内容
zip-3.0-1.el6.x86_64.rpm
zlib-1.2.3-29.el6.i686.rpm
zlib-1.2.3-29.el6.x86_64.rpm
zlib-devel-1.2.3-29.el6.i686.rpm
zlib-devel-1.2.3-29.el6.x86_64.rpm
zsh-4.3.10-7.el6.x86_64.rpm
[root@wangermazi Packages]# rpm -ivh e2fsprogs-libs-1.41.12-18.el6.x86_64.rpm 		'安装e2fsprogs-libs-1.41.12-18.el6.x86_64.rpm'
warning: e2fsprogs-libs-1.41.12-18.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing...                ########################################### [100%]
	package e2fsprogs-libs-1.41.12-18.el6.x86_64 is already installed
[root@wangermazi Packages]# rpm -ivh e2fsprogs-devel-1.41.12-18.el6.x86_64.rpm 		'安装e2fsprogs-devel-1.41.12-18.el6.x86_64.rpm'
warning: e2fsprogs-devel-1.41.12-18.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
error: Failed dependencies:
	libcom_err-devel = 1.41.12-18.el6 is needed by e2fsprogs-devel-1.41.12-18.el6.x86_64
	pkgconfig(com_err) is needed by e2fsprogs-devel-1.41.12-18.el6.x86_64		'报错,发现要先安装依赖包'
[root@wangermazi Packages]# rpm -ivh libcom_err-devel-1.41.12-18.el6.x86_64.rpm 		'安装依赖包'
warning: libcom_err-devel-1.41.12-18.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing...                ########################################### [100%]
   1:libcom_err-devel       ########################################### [100%]
[root@wangermazi Packages]# rpm -ivh e2fsprogs-devel-1.41.12-18.el6.x86_64.rpm 		'继续安装e2fsprogs-devel-1.41.12-18.el6.x86_64.rpm'
warning: e2fsprogs-devel-1.41.12-18.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing...                ########################################### [100%]		'安装成功'
'第二步:编译安装'
'还需要安装一个extundelete-0.2.4.tar.bz2软件,软件在Windows系统中,所以要将软件所在文件夹(cccc)共享,并挂载到Linux中,挂载点我创建为/111'
'Windows共享并挂载在Linux系统中,有疑问可以查看我的博客“Linux 安装及管理程序--理论和命令配置”,地址:https://blog.csdn.net/CN_TangZheng/article/details/102849246'
[root@wangermazi Packages]# mount.cifs //192.168.100.3/cccc /111
Password: 
[root@wangermazi Packages]# ls /111		'发现extundelete-0.2.4.tar.bz2存在'
extundelete-0.2.4.tar.bz2  john-1.8.0.tar.gz
[root@wangermazi Packages]# cd /111		'进入111目录'
[root@wangermazi 111]# tar jxvf extundelete-0.2.4.tar.bz2 -C /opt		'将压缩包解压到opt目录中'
...此处省略信息
[root@wangermazi 111]# ls /opt		'查看是否解压成功'
extundelete-0.2.4  rh
'开始编译安装'
[root@wangermazi 111]# cd /opt/extundelete-0.2.4/		'进入软件文件中查看'
[root@wangermazi extundelete-0.2.4]# ls
acinclude.m4  autogen.sh   configure     depcomp     LICENSE      Makefile.in  README
aclocal.m4    config.h.in  configure.ac  install-sh  Makefile.am  missing      src
[root@wangermazi extundelete-0.2.4]# yum install gcc gcc-c++ -y		'安装编译器'
[root@wangermazi extundelete-0.2.4]# ./configure 		'开始配置'
Configuring extundelete 0.2.4
Writing generated files to disk
[root@wangermazi extundelete-0.2.4]# make		'make编译'
make -s all-recursive
Making all in src
extundelete.cc:571: 警告:未使用的参数‘flags’
[root@wangermazi extundelete-0.2.4]# make install		'make install 安装'
Making install in src
  /usr/bin/install -c extundelete '/usr/local/bin'
'第三步:挂载分区'
[root@wangermazi extundelete-0.2.4]# df -hT		'挂载分区,此操作不赘述,如有疑问,可查看我的博客“Linux磁盘与文件系统管理--理论与命令配置(https://blog.csdn.net/CN_TangZheng/article/details/102866952)”'
Filesystem     Type     Size  Used Avail Use% Mounted on
/dev/sda2      ext4      20G  3.2G   16G  18% /
tmpfs          tmpfs    932M   76K  932M   1% /dev/shm
/dev/sda1      ext4     5.8G  168M  5.4G   3% /boot
/dev/sda3      ext4     9.7G  150M  9.0G   2% /home		'格式化命令,mkfs -t ext4 /dev/sdb1,格式化成ext4格式'
/dev/sr0       iso9660  3.6G  3.6G     0 100% /media/RHEL_6.5 x86_64 Disc 1 
/dev/sr0       iso9660  3.6G  3.6G     0 100% /mnt
/dev/sdb1      ext4      20G  172M   19G   1% /222
'第四步:在挂载点创建文件并删除,尝试恢复文件'
[root@wangermazi extundelete-0.2.4]# cd /222		'进入挂载点'
[root@wangermazi 222]# ls	
lost+found
[root@wangermazi 222]# echo a>a		'创建文件'
[root@wangermazi 222]# echo a>b
[root@wangermazi 222]# echo a>c
[root@wangermazi 222]# ls		'创建成功'
a  b  c  lost+found
[root@wangermazi 222]# rm -rf b		'删除b'
[root@wangermazi 222]# ls
a  c  lost+found
[root@wangermazi 222]# cd ~		'回到家目录'
[root@wangermazi ~]# umount /222		'解挂载'
[root@wangermazi ~]# extundelete /dev/sdb1 --restore-all		'恢复文件'
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 160 groups loaded.
Loading journal descriptors ... 28 descriptors loaded.
Searching for recoverable inodes in directory / ... 
0 recoverable inodes found.		'出错,没有文件被恢复,因为删除b的时候没有在家目录操作'
Looking through the directory structure for deleted files ... 
0 recoverable inodes still lost.
No files were undeleted.
[root@wangermazi ~]# ls		'RECOVERED_FILES 是恢复的文件存放的位置'
anaconda-ks.cfg  install.log.syslog  公共的  视频  文档  音乐
install.log      RECOVERED_FILES     模板    图片  下载  桌面
[root@wangermazi ~]# mount /dev/sdb1 /222		'重新挂载/222'
[root@wangermazi ~]# ls /222
a  c  lost+found
[root@wangermazi ~]# rm -rf /222/a /222/c		'在家目录中删除a c'
[root@wangermazi ~]# ls /222
lost+found
[root@wangermazi ~]# umount /222		'解挂载/222'
[root@wangermazi ~]# extundelete /dev/sdb1 --restore-all		'恢复数据'
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 160 groups loaded.
Loading journal descriptors ... 29 descriptors loaded.
Searching for recoverable inodes in directory / ... 
2 recoverable inodes found.		'找到两个文件'
Looking through the directory structure for deleted files ... 
0 recoverable inodes still lost.
[root@wangermazi ~]# cd RECOVERED_FILES/		'进入恢复的文件中查找'
[root@wangermazi RECOVERED_FILES]# ls		'误删的文件恢复成功'
a  c
[root@wangermazi RECOVERED_FILES]# cp a /opt 		'将文件复制到目标位置'
[root@wangermazi RECOVERED_FILES]# ls /opt
a  extundelete-0.2.4  rh
'实验恢复成功'

四:日志文件的分类

4.1:日志的功能

  • 用于记录系统,程序运行中发生的各种事件

    日志文件是用于记录Linux系统中各种运行消息的文件,相当于Linux主机的“日记”

    不同的日志文件记载了不同类型的信息,如Linux内核消息,用户登录事件,程序错误等

  • 通过阅读日志,有助于诊断和解决系统故障

    在Linux系统中运行的程序通常会把系统消息和错误消息写入相应的日志文件

    当 主机遭受攻击时,日志文件还可以帮助寻找攻击者留下的痕迹

4.2:日志文件的分类

  • 内核及系统日志

    由系统服务rsyslog统一进行管理,日志格式基本相似

  • 用户日志

    记录系统用户登录及退出系统的相关信息,包括用户名,登录的终端,登录时间,来源主机,正在使用的进程操作等。

  • 程序日志

    由各种应用程序独立管理的日志文件,记录格式不统一

    程序安装后不会生成日志文件,只有在启动的时候才会生成日志文件,没有访问它,日志文件就是空的

4.3:日志保存位置

  • 默认位于:/var/log目录下

    • Linux系统本身和大部分服务器程序的日志文件都默认存放在/var/log下
    • 一部分程序共用一个日志文件,一部分程序使用单个日志文件,而有些大型服务器程序因日志文件较多,所以会在/var/log目录中建立相应的子目录来存放日志文件
    • 有相当一部分日志文件只有root用户才有权读取,保证了相关日志信息的安全性

4.4:☆☆☆主要日志文件介绍☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

  • 日志类别 存放目录
    内核及公共消息日志 /var/log/messages
    计划任务日志 /var/log/cron
    系统引导日志 /var/log/dmesg
    邮件系统日志 /var/log/maillog
    用户登录日志 /var/log/lastlog,/var/log/secure,/var/log/wtmp,/var/log/btmp
  • /var/log/messages:记录Linux内核消息和各种应用程序的公共日志信息,包括启动,I/O错误,网络错误,程序故障等

    对于未使用独立日志文件的应用程序或服务,一般都可以从该日志文件中获得相关的时间记录信息

  • /var/log/cron:记录crond计划任务产生的事件信息

  • /var/log/dmesg:记录Linux系统在引导过程中的各种事件信息

  • /var/log/maillog:记录进入或发出系统的电子邮件活动

  • /var/log/lastlog:记录每个用户最近的登录时间

  • /var/log/secure:记录用户认证相关的安全事件信息

  • /var/log/wtmp:记录每个用户登录,注销及系统启动和停机事件

  • /var/log/btmp:记录失败的,错误的登录尝试及验证事件

  • yum安装的都存放在/var/log

    手工编译安装的都是自己指定的目录

五:日志文件分析

  • 分析日志文件的目的在于通过浏览日志查找关键信息,对系统服务进行调试,以及判断发生故障的原因等
  • 对于大多数文本格式的日志文件(如内核及系统日志,大多数的程序日志),只要使用tail,more,less,cat等文本处理工具就可以查看日志内容
  • 对于一些二进制格式的日志文件(如用户日志),需要使用特定的查询命令

5.1:内核及系统日志

5.1.1:由系统服务rsyslogd统一管理
  • 软件包:rsyslog-7.4.7-16.el7.x86_64

  • 主要程序:/sbin/rsyslogd

  • 配置文件:/etc/rsyslog.conf

5.1.2:☆☆☆日志消息的级别☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
  • 受rsyslogd服务管理的日志文件都是Linux系统中最重要的日志文件,它们记录了Linux系统中内核,用户认证,邮件,计划任务等最基本的系统消息

  • 在Linux内核中,根据日志消息的重要程度不同,将其分为不同的优先级(数字等级越小,优先级越高,消息越重要)

    级别 解释
    0 EMERG(紧急) 会导致主机系统不可用的情况
    1 ALERT(警告) 必须马上采取措施解决的问题
    2 CRIT(严重) 比较严重的情况(某些功能不可用)
    3 ERR(错误) 运行出现错误
    4 WARNING(提醒) 可能会影响系统功能的事件
    5 NOTICE(注意) 不会影响系统但值得注意
    6 INFO(信息) 一般信息
    7 DEBUG(调试) 程序或系统调试信息等(做维护的时候可能会用到)
  • 内核及大多数系统消息都被记录到公共日志文件/var/log/messages中,而其他一些程序消息被记录到各自独立的日志文件中

  • 日志消息还可以记录到特定的存储设备中,或者直接发送给指定用户

5.2.3:日志记录的一般格式
  • [root@localhost log]# more messages
    Oct 23 14:13:17 localhost journal: Runtime journal is using 8.0M (max allowed 91.1M, trying
     to leave 136.7M free of 903.6M available → current limit 91.1M).
    Oct 23 14:13:17 localhost kernel: Initializing cgroup subsys cpuset
    Oct 23 14:13:17 localhost kernel: Initializing cgroup subsys cpu
    Oct 23 14:13:17 localhost kernel: Initializing cgroup subsys cpuacct
    ...省略内容
    以这段消息举例:Oct 23 14:13:17 localhost kernel: Initializing cgroup subsys 
    时间标签:Oct 23 14:13:17:消息发出的日期和时间
    主机名:localhost:生成消息的计算机的名称
    子系统名称:kernel:发出消息的应用程序的名称
    消息:Initializing cgroup subsys :消息的具体内容
    

5.2:用户日志

5.2.1:保存目录
  • 保存了用户登录,退出系统等相关信息

    /var/log/lastlog:最近的用户登录事件

    /var/log/wtmp:用户登录,注销及系统开,关机事件

    /var/log/utmp:当前登录的每个用户的详细信息

    /var/log/secure:与用户验证相关的安全性事件

5.2.2:分析工具
  • 分析工具

    users,who,w,last,lastb

  • 查询当前登录的用户情况:users,who,w命令

    • user命令只简单的输出当前登录的用户名称,每个显示的用户名对应一个登录会话。如果一个用户有不止一个登录会话,那他的用户名将显示与其相同的次数

    • [root@localhost ~]# users		
      root root root		'root用户打开三个终端'
      
      
    • who命令用户报告当前登录到系统中的每个用户的信息

      使用该命令,系统管理员可以查看当前系统存在哪些不合法用户,从而对其进行审计和处理

      who命令的默认输出包括用户名,终端类型,登录日期及远程主机

      [root@localhost ~]# who
      root     :0           2019-11-16 21:24 (:0)
      root     pts/0        2019-11-16 21:25 (192.168.197.1)
      root     pts/1        2019-11-16 21:27 (:0)
      
    • w命令用于显示当前系统中的每个用户及其所运行的进程信息,比users,who命令的输出内容要更加丰富一些

      [root@localhost ~]# w
       00:29:58 up  3:05,  3 users,  load average: 0.00, 0.01, 0.05
      USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
      root     :0       :0               21:24   ?xdm?  28.45s  0.08s /usr/libexec/gnome-session
      root     pts/0    192.168.197.1    21:25    6.00s  0.09s  0.02s w
      root     pts/1    :0               21:27    3:02m  0.01s  0.01s bash
      
      
  • 查询用户登录的历史记录:last,lastb命令

    • last命令用于查询成功登录到系统的用户记录,最近的登录情况将显示在最前面

    • 通过last命令可以及时掌握Linux主机的登录情况,若发现未经授权的用户登录过,则表示当前主机可能已被入侵

      [root@localhost ~]# last
      root     pts/1        :0               Sat Nov 16 21:27   still logged in   
      root     pts/0        192.168.197.1    Sat Nov 16 21:25   still logged in   
      root     pts/0        :0               Sat Nov 16 21:24 - 21:24  (00:00)    
      root     :0           :0               Sat Nov 16 21:24   still logged in   
      reboot   system boot  3.10.0-693.el7.x Sat Nov 16 21:24 - 00:32  (03:08)    
      root     pts/0        :1               Sat Nov 16 21:23 - 21:23  (00:00)    
      root     :1           :1               Wed Oct 23 14:15 - crash (24+07:08)  
      cn-tangz :0           :0               Wed Oct 23 14:15 - 14:15  (00:00)    
      reboot   system boot  3.10.0-693.el7.x Wed Oct 23 14:13 - 00:32 (24+10:19)  
      
      wtmp begins Wed Oct 23 14:13:18 2019
      
      
    • lastb命令用于查询登录失败的用户记录,如登录的用户名错误,密码不正确等情况都会记录在案。

      登录失败的情况属于安全事件,因为这表示可能有人在尝试猜出你的密码

      除了使用lastb命令查看以外,还可以直接从安全日志文件/var/log/secure中获得相关信息

      [root@localhost ~]# lastb
      lisi :1           :1               Sun Nov 17 00:35 - 00:35  (00:00)    
      lisi :1           :1               Sun Nov 17 00:35 - 00:35  (00:00)    
      
      btmp begins Sun Nov 17 00:35:42 2019
      
      

      或者

      [root@localhost ~]# tail /var/log/secure
      Nov 17 00:35:30 localhost gdm-password]: pam_unix(gdm-password:auth): conversation failed
      Nov 17 00:35:30 localhost gdm-password]: pam_unix(gdm-password:auth): auth could not identify password for [root]
      Nov 17 00:35:30 localhost gdm-password]: pam_succeed_if(gdm-password:auth): requirement "uid >= 1000" not met by user "root"
      Nov 17 00:35:30 localhost gdm-password]: gkr-pam: no password is available for user
      Nov 17 00:35:31 localhost gdm-launch-environment]: pam_unix(gdm-launch-environment:session): session opened for user gdm by (uid=0)
      Nov 17 00:35:32 localhost polkitd[561]: Registered Authentication Agent for unix-session:c2 (system bus name :1.163 [/usr/bin/gnome-shell], object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale zh_CN.UTF-8)
      Nov 17 00:35:41 localhost unix_chkpwd[38503]: password check failed for user (lisi)
      Nov 17 00:35:41 localhost gdm-password]: pam_unix(gdm-password:auth): authentication failure; logname= uid=0 euid=0 tty=/dev/tty2 ruser= rhost=  user=cn-lisi
      Nov 17 00:35:45 localhost unix_chkpwd[38508]: password check failed for user (lisi)
      Nov 17 00:35:45 localhost gdm-password]: pam_unix(gdm-password:auth): authentication failure; logname= uid=0 euid=0 tty=/dev/tty2 ruser= rhost=  user=clisi
      
      上述结果可以发现,lisi用户登录失败
      

5.3:程序日志

5.3.1:由相应的程序独立进行管理
  • web服务:/var/log/httpd/

    access_log,error_log(httpd网站服务程序使用的两个日志文件access_log和error_log,分别记录客户访问事件,错误事件。)

  • 代理服务:/var/log/squid/

    access.log , cache.log

  • FTP服务:/var/log/xferlog

5.3.2:分析工具
  • 文本查看,grep过滤检索,webmin管理套件中查看
  • awk,sed等文本过滤,格式化编辑工具
  • webalizer,awstats等专用日志分析工具
5.3.3:日志管理策略
  • 及时做好备份和归档

  • 延长日志保存期限

  • 控制日志访问权限

    日志中可能会包含各类敏感信息,如账户,口令等

  • 几种管理日志

    将服务器的日志文件发到统一的日志文件服务器

    便于日志信息的统一收集,整理和分析

你可能感兴趣的:(Linux系统)