Linux文件系统与日志分析详解

目录

一、inode与block

1.inode与block概述

2.查看文件inode号等详细信息

3.inode大小

4.inode特点

二、恢复误删文件

1.恢复xfs文件系统的文件

 2.恢复ext文件系统的文件

三、分析日志文件

1. 日志文件的分类

 2.常见的一些日志文件

3.内核及系统日志配置文件

4.用户日志分析

5.程序日志分析

6.日志管理 


一、inode与block

1.inode与block概述

        文件是存储在硬盘上的,硬盘的最小存储单位叫做“扇区”(sector),每个扇区存储512字节。

        一般连续八个扇区组成一个“块”(block),一个块是4K大小,是文件存取的最小单位。操作系统读取硬盘的时候,是一次性连续读取多个扇区,即一个块一个块的读取。

        文件数据包括实际数据与元信息(类似文件属性)。文件数据存储在“块”中,存储文件元信息(比如文件的创建者、创建日期、文件大小、文件权限等)的区域就叫做 inode。因此,一个文件必须占用一个 inode,并且至少占用一个 block。

        inode不包含文件名。文件名是存放在目录当中的。Linux系统中一切皆文件,因此目录也是一种文件。

        每个inode都有一个号码,操作系统用inode号码来识别不同的文件。Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称,文件名和inode号码是一一对应关系,每个inode号码对应一个文件名。

        所以,当用户在Linux系统中试图访问一个文件时,系统会先根据文件名去查找它对应的inode号码;通过inode号码,获取inode信息,根据incde信息,看该用户是否具有访问这个文件的权限,如果有,就指向相对应的数据block,并读取数据。

2.查看文件inode号等详细信息

查看文件inode号

[root@localhost ~]# ls -i 文件或目录

[root@localhost ~]#ls -i 1.txt
68141264 1.txt

 查看文件inode号等详细信息

[root@localhost ~]# stat 文件或目录

[root@localhost ~]#stat initial-setup-ks.cfg
  文件:"initial-setup-ks.cfg"
  大小:2080            块:8          IO 块:4096   普通文件
设备:fd00h/64768d      Inode:67170387    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:system_u:object_r:admin_home_t:s0
最近访问:2022-07-29 21:48:52.562988764 +0800
最近更改:2022-07-29 21:48:52.563988763 +0800
最近改动:2022-07-29 21:48:52.563988763 +0800
创建时间:-
时间属性解释
最近访问(atime)最后一次访问文件或目录的时间
最近更改(mtime)最后一次修改文件或目录(内容)的时间
最近改动(ctime)最后一次改变文件或目录(属性)的时间

注: 当更改文件内容时,mtime改变,ctime也会随之改变。

3.inode大小

  • inode也会消耗硬盘空间,每个inode的大小,一般是128字节或256字节。
  • inode的总数,在格式化时就确定。
  • 查看每个硬盘分区的inode总数和已经使用的数量,可以使用 df -i 。
[root@localhost ~]# df -i
文件系统                   Inode 已用(I)  可用(I) 已用(I)% 挂载点
/dev/mapper/centos-root 26214400  145278 26069122       1% /
devtmpfs                  221158     446   220712       1% /dev
tmpfs                     225137       1   225136       1% /dev/shm
tmpfs                     225137     646   224491       1% /run
tmpfs                     225137      16   225121       1% /sys/fs/cgroup
/dev/sda1                 524288     328   523960       1% /boot
/dev/mapper/centos-home 38400000      10 38399990       1% /home
tmpfs                     225137       9   225128       1% /run/user/42
tmpfs                     225137       1   225136       1% /run/user/0

4.inode特点

由于 inode 号与文件名分离,导致Linux系统会有以下几种特殊现象:

  • 文件名包含特殊字符,可能无法正常删除。这时直接删除inode,能够起到删除文件的作用。

[root@localhost ~]# find 文件位置 -inum inode号 -exec rm -i {} \;

或                                                                           -delete

[root@localhost ~]#ls -i abc
67170385 abc
[root@localhost ~]#find ./ -inum 67170385 -delete
  •  mv移动文件或重命名文件,只是改变文件名,不影响inode号。
[root@localhost ~]#ls -i 1.txt
68141264 1.txt
[root@localhost ~]#mv 1.txt file1
[root@localhost ~]#ls -i file1
68141264 file1
  • vim修改文件后,inode号会改变(这是由于vim编辑器是编辑原文件.swap,修改完成后替换原文件)
[root@localhost ~]#ls -i file1
68141264 file1
[root@localhost ~]#vim file1
[root@localhost ~]#ls -i file1
68141260 file1

二、恢复误删文件

1.恢复xfs文件系统的文件

        CentOS 7系统默认采用 xfs类型的文件,xfs 类型的文件可使用 xfsdump 与 xfsrestore 工具进行备份恢复。

        xfsdump的备份级别有两种:0表示完全备份;1-9表示增量备份。默认备份级别为0。

备份xfs类型文件

[root@localhost ~]# xfsdump -f 备份存放的位置 需要备份的文件或设备路径

                                               -L     //指定标签session label

                                               -M    //指定设备标签

                                 上面两个选项如果不指定,会进入交互界面指定

                                               -s     //备份单个文件,后面不能直接跟路径

恢复备份文件

[root@localhost ~]# xfsrestore -f 备份存放的位置 恢复到的路径

xfsdump使用限制:

  • 只能备份已挂载的文件系统
  • 必须使用root的权限才能操作
  • 只能备份XFS文件系统
  • 备份后的数据只能让xfsrestore解析
  • 不能备份两个具有相同UUID的文件系统(可用 blkid命令查看)
//挂载分区sdb1到/data(没有分区需要创建)
[root@localhost ~]#mkdir /data
[root@localhost ~]#mount /dev/sdb1 /data

//在挂载目录data下存一些文件(实际存放在sdb1分区)
[root@localhost ~]#cd /data
[root@localhost data]#cp /etc/passwd ./
[root@localhost data]#mkdir test
[root@localhost data]#touch test/a
[root@localhost data]#ls
passwd  test

//下载xfsdump
[root@localhost data]#yum install -y xfsdump

//备份sdb1里的文件到/opt/dump,标签为dump_sdb1,设备标签为sdb1
[root@localhost data]#xfsdump -f /opt/dump /dev/sdb1 -L dump_sdb1 -M sbd1
xfsdump: Dump Status: SUCCESS

//模拟误删挂载目录里的文件
[root@localhost data]#rm -rf *
[root@localhost data]#ls

//使用xfsrestore将备份文件/opt/dump恢复到挂载目录
[root@localhost data]#xfsrestore -f /opt/dump /data/
xfsrestore: Restore Status: SUCCESS

//恢复成功
[root@localhost data]#ls
passwd  test

 2.恢复ext文件系统的文件

        extundelete 是一个开源的 Linux 数据恢复工具,支持 ext3、ext4文件系统。(ext4只能在centos6版本恢复)

//建立sdc1分区
[root@localhost data]#fdisk /dev/sdc

//建立ext3文件系统
[root@localhost data]#mkfs.ext3 /dev/sdc1

//建立/test并挂载sdc1分区
[root@localhost data]#mkdir /test
[root@localhost data]#mount /dev/sdc1 /test
[root@localhost data]#df -Th
/dev/sdc1               ext3      4.8G   11M  4.6G    1% /test

//安装依赖环境
[root@localhost data]#yum -y install e2fsprogs-devel e2fsprogs-libs

//源码编译安装extundelete
[root@localhost test]#tar jxvf '//tmp/VMwareDnD/xZ45n3/extundelete-0.2.4.tar.bz2' 
[root@localhost test]#ls
extundelete-0.2.4  lost+found
[root@localhost test]#cd extundelete-0.2.4/
[root@localhost extundelete-0.2.4]#./configure --prefix=/usr/local/extundelete &&make && make install

//软连接到/usr/bin/使其成为系统能识别的命令
[root@localhost extundelete-0.2.4]#ln -s /usr/local/extundelete/bin/* /usr/bin/

//新建一些文件
[root@localhost extundelete-0.2.4]#cd /test
[root@localhost test]#echo a > 1.txt
[root@localhost test]#echo a > 2.txt
[root@localhost test]#ls
1.txt  2.txt  extundelete-0.2.4  lost+found

//查看文件系统/dev/sdc1下存在哪些文件,i 节点是从2开始的,2代表该文件系统最开始的目录
[root@localhost test]#extundelete /dev/sdc1 --inode 2
File name                                       | Inode number | Deleted status
.                                                 2
..                                                2
lost+found                                        11
extundelete-0.2.4                                 98305
1.txt                                             12
2.txt                                             13

//模拟误删文件
[root@localhost test]#rm -rf 1.txt 2.txt

//此时再查看文件后显示Deleted
[root@localhost test]#extundelete /dev/sdc1 --inode 2
File name                                       | Inode number | Deleted status
.                                                 2
..                                                2
lost+found                                        11
extundelete-0.2.4                                 98305
1.txt                                             12             Deleted
2.txt                                             13             Deleted

//恢复数据前必须解挂载
[root@localhost ~]#umount /test

//恢复数据
[root@localhost ~]#extundelete /dev/sdc1 --restore-all

//恢复的文件数据会放在当前目录下的RECOVERED_FILES
[root@localhost ~]#ls
anaconda-ks.cfg  initial-setup-ks.cfg  公共  视频  文档  音乐
file1            RECOVERED_FILES       模板  图片  下载  桌面
[root@localhost ~]#ls RECOVERED_FILES/
1.txt  2.txt

三、分析日志文件

内核及系统日志由系统服务 rsyslog 统一管理,主配置文件为/etc/rsyslog.conf 

Linux 操作系统本身和大部分服务器程序的日志文件都默认放在目录/var/log/下

1. 日志文件的分类

分类记录信息
内核及系统日志这种日志数据由系统服务rsyslog统一管理,根据其主配置文件/etc/rsyslog.conf中的设置决定将内核消息及各种系统程序消息记录到什么位置。
用户日志这种日志数据用于记录Linux系统用户登录及退出系统的相关信息,包括用户名、登 录的终端、登录时间、来源主机、正在使用的进程操作等。
程序日志有些应用程序会选择由自己独立管理一份日志文件(而不是交给rsyslog服务管理),用于记录本程序运行过程中的各种事件信息。

 2.常见的一些日志文件

分类目录位置记录信息
内核及公共消息日志/var/log/messages记录Linux内核消息及各种应用程序的公共日志信息,包括启动、IO错误、网络错误、程序故障等。对于未使用独立日志文件的应用程序或服务,一般都可以从该日志文件中获得相关的事件记录信息。
计划任务日志/var/log/cron记录crond计划任务产生的事件信息。
系统引导日志/var/log/dmesg记录Linux系统在引导过程中的各种事件信息。
邮件系统日志/var/log/maillog记录进入或发出系统的电子邮件活动。
用户登录日志/var/log/secure记录用户认证相关的安全事件信息。
/var/log/lastlog记录每个用户最近的登录事件(二进制格式)。
/var/log/wtmp记录每个用户登录、注销及系统启动和停机事件(二进制格式)。
/var/run/btmp记录失败的、错误的登录尝试及验证事件(二进制格式)。

3.内核及系统日志配置文件

[root@localhost ~]# cat /etc/rsyslog.conf       //查看/etc/rsyslog.conf配置文件

规则配置格式:设备.级别    动作

#### RULES ####

# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.*                                                 /dev/console

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none                /var/log/messages

# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure

# Log all the mail messages in one place.
mail.*                                                  -/var/log/maillog


# Log cron stuff
cron.*                                                  /var/log/cron

# Everybody gets emergency messages
*.emerg                                                 :omusrmsg:*

# Save news errors of level crit and higher in a special file.
uucp,news.crit                                          /var/log/spooler

# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log

 解读:

*.info;mail.none;authpriv.none;cron.none                /var/log/messages

*.info              表示info等级及以上的所有等级信息都写入到对应的日志文件里。

mail.none       表示某事件的信息不写到日志文件里

 Linux系统内核日志消息的优先级别(数字等级越小,优先级越高,消息越重要)

级别显示含义具体描述
0emerg紧急会导致主机系统不可用的情况
1alter警告必须马上采取措施解决的问题
2crit严重比较严重的情况
3err错误运行出现错误
4warning提醒可能影响系统功能,需要提醒用户的重要事件
5notice注意下会影响正常功能,但是需要注意的事件
6info信息一般信息
7debug调试程序或系统调试信息等

设备字段

设备名解释
auth用户认证时产生的日志
authprivssh、ftp等登录信息的验证信息
daemon一些守护进程产生的日志
ftpFTP产生的日志
lpr打印相关活动
markrsyslog服务内部的信息,时间标识
news网络新闻传输协议(nntp)产生的消息
syslog系统日志
uucpUnix-to-Unix Copy 两个unix之间的相关通信
console针对系统控制台的消息
cron系统执行定时任务产生的日志
kern系统内核日志
local0~local7自定义程序使用
mail邮件日志
user用户进程

举例:

mail.=info  /var/log/maillog :明确指定日志级别为info,保存至/var/log/maillog

mail.!info  /var/log/maillog :除了指定的日志级别(info)所有日志级别信息,保存至/var/log/maillog

*.info      /var/log/maillog :所有设备的info级别,保存至/var/log/maillog

mail.*     /var/log/maillog :mail的所有日志级别信息,都保存至/var/log/maillog

mail.notice;news.info  /var/log/maillog :mail的notice以上日志级别和news的info以上的级别保存至/var/log/maillog

mail,news.crit  -/var/log/maillog :mail和news的crit以上的日志级别保存/var/log/maillog中;“-”代表异步模式

4.用户日志分析

         在wtmp、btmp、 lastlog等日志文件中 ,保存了系统用户登录、 退出等相关的事件消息。 但是这些文件都是二进制的数据文件,不能直接使用tail、less等文本查看工具进行浏览,需要使用who、w、users、 last和lastb等用户查询命令来获取日志信息。

查询当前登录的用户情况——users,who,w

[zhangsan@localhost ~]$ users
root root root

[zhangsan@localhost ~]$ who
root     pts/0        2022-08-10 08:58 (192.168.116.1)
root     :0           2022-08-10 16:34 (:0)
root     pts/1        2022-08-10 16:34 (:0)

[zhangsan@localhost ~]$ w
 18:53:30 up 10:01,  3 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.116.1    08:58    2.00s  0.52s  0.00s w
root     :0       :0               16:34   ?xdm?   1:55   0.12s /usr/libexec/gno
root     pts/1    :0               16:34    2:01m  0.03s  0.03s bash

查询用户登录的历史记录——last,lastb

这两个命令的日志在/var/log/secure

[root@localhost zhangsan]# last           //查看登录成功的日志

                                              lastb         //查看登录失败的日志

[root@localhost zhangsan]#last
root     pts/1        :0               Wed Aug 10 16:34   still logged in
root     :0           :0               Wed Aug 10 16:34   still logged in
root     pts/0        192.168.116.1    Wed Aug 10 08:58   still logged in
reboot   system boot  3.10.0-1160.el7. Wed Aug 10 08:52 - 18:57  (10:05)
root     pts/1        :0               Tue Aug  9 16:53 - crash  (15:58)
root     pts/0        :0               Tue Aug  9 16:51 - crash  (16:00)

[root@localhost zhangsan]#lastb
root     tty4                          Tue Aug  9 16:54 - 16:54  (00:00)

btmp begins Tue Aug  9 16:54:35 2022

5.程序日志分析

程序日志由相应的应用程序独立进行管理

Web服务:/var/log/httpd/

  • access_log ——记录客户访问事件
  • error_log ——记录错误事件

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

  • access.log、cache.log

分析工具

  • 文本查看、grep过来检索、Webmin管理套件中查看
  • awk、sed等文本过滤、格式化编辑工具
  • Webalizer、Awstats等专用日志分析工具

6.日志管理 

  • 及时做好备份和归档
  • 延长日志保存期限
  • 控制日志访问权限
  • 集中管理日志(rsyslog、Shell/Python 脚本文件;ELK) 
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux系统中的根目录(/)是整个文件系统的顶级目录,它包含了所有文件和目录。下面是根目录下的一些常见文件和目录的详细解释: 1. /bin:存放系统基本命令,如ls、cp、rm等。 2. /boot:存放操作系统启动所需的文件,如内核、GRUB引导程序等。 3. /dev:存放设备文件,如硬盘、光驱、串口、USB等设备。 4. /etc:存放系统配置文件,如用户账户、网络配置、服务启动脚本等。 5. /home:存放用户的主目录,每个用户有一个单独的子目录,如/home/user1、/home/user2等。 6. /lib:存放系统库文件,包括共享库和内核模块。 7. /media:存放可移动设备挂载点,如USB、光驱等。 8. /mnt:临时挂载点,可以用来挂载其他文件系统。 9. /opt:第三方软件安装目录,如Oracle、Chrome等。 10. /proc:虚拟文件系统,存放内核运行时的信息,如系统进程、内存使用情况等。 11. /root:root用户的主目录。 12. /run:存放系统启动时创建的临时文件,如PID文件等。 13. /sbin:存放系统管理员使用的命令,如系统启动、网络配置等。 14. /srv:存放服务相关的数据文件,如Web服务器的网页文件等。 15. /sys:虚拟文件系统,存放系统设备信息和内核参数等。 16. /tmp:临时文件目录,存放临时文件和缓存文件。 17. /usr:存放用户安装的应用程序和文件,如用户安装的软件、文档、图标等。 18. /var:存放系统日志文件和服务相关的数据文件,如邮件、网页、数据库等。 以上是Linux根目录下的一些常见文件和目录,它们各自拥有不同的用途,是Linux系统正常运行所必需的文件和目录。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值