深入理解Linux文件系统与日志分析

inode与block

硬链接与软连接

恢复误删除的文件

分析日志文件

inode与block概述

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

文件存储在硬盘上,硬盘最小存储单位是扇区,每个扇区存储521个字节

在Linux系统中,文件名和文件数据是分开存储的
文件数据包含 元信息(即不包含文件名的文件属性) 和 实际数据
文件元信息存储在 inode(索引节点)里,文件实际数据存储在 block(块)里;文件名存储在目录块里


查看文件的元信息  

  stat 文件名

在这里我么可以看到文件的大小,块的数量与io,这个文件还是个普通文件,inode号是67144898,并且只有一个硬链接数。后面的是访问信息,分别是最近访问,最近更改与最近改动,分别可以用ctime,mtime和atime来表示。每当使用时就会自动刷新时间。


查看文件的inode号            stat 文件名      ls -i 文件名

这是我们之前使用ls命令学的方法,后面加上小i加上文件名就能显示文件的inode号。
查看每个分区的inode数量      df -i

使用df-i 可以查看到文件系统还有多少的inode号可用。

Linux系统不使用 文件名 识别文件,而使用 inode号 来识别文件,文件名只是 inode号 便于识别的别称,文件名和inode号是一一对应的。

这里我们对文件进行了赋值,结束后文件inode号并没有改变,而我们使用vim进行赋值再试一次

直接查看、修改文件内容或者改变文件名都不会影响 inode号,使用 vi 编辑器修改文件保存退出后会影响 inode号

这里我们看到文件的inode号变了,因为是vim编辑的原理是重新创建一个.war的文件来覆盖住前面的文件,原先的文件已经不是原来的文件了,所以inode号也会跟着改变。

用户通过文件名访问文件的过程:
先根据文件名找到对应的inode号;再通过inode号获取inode信息;再根据inode信息判断用户是否具有访问权限;如果有则指向实际数据的块并读取数据,否则拒绝访问。

文件删除

针对无法正常删除文件名含有特殊符号的文件时,可根据 inode号 来删除文件    

 find 目录 -inum <inode号> -delete

find 目录 -inum <inode号> | xargs rm -f

find 目录 -inum <inode号> -exec rm -rf {} \;

Linux日志

内核及系统日志
/var/log/messages
/var/log/cron
/var/log/dmesg
/var/log/maillog

用户登录事件日志

/var/log/secure
/var/log/lastlog
/var/log/wtmp
/var/run/btmp

实验1恢复数据

先添加硬盘,用fdisk分盘,格式化硬盘,创建xy101目录,挂载硬盘到xy101,cd到opt目录,下载文件,挂载光盘,配置yum源环境,安装依赖包,解压,进入安装,创建软连接,进入xy101目录,输入值,误删除,extundelete备份,解光盘,extundelete还原。

以上就是命令还原的全过程。是根据inode号进行还原的。

实验2 inode号被占满

先创建一个新的硬盘,大小设置为10m,格式化挂载后查看已有inode号数量,然后创建等数文件,再次输入值创建文件发现inode号被占满,但是内存还有,到此实验结束。

访问文件的流程

Linux日志消息优先级

Linux系统内核日志消息的优先级别(数字等级越小,优先级越高,消息越重要):
0    EMERG(紧急):会导致主机系统不可用的情况。如系统崩溃
1    ALERT(警告):必须马上采取措施解决的问题。如数据库被破坏
2    CRIT(严重):比较严重的情况。如硬盘错误,可能会阻碍程序的部分功能
3    ERR(错误):运行出现错误。不是非常紧急,尽快修复的
4    WARNING(提醒):可能影响系统功能,需要提醒用户的重要事件。不是错误,如磁盘用了85%等
5    NOTICE(注意):不会影响正常功能,但是需要注意的事件。无需处理
6    INFO(信息):一般信息。正常的系统信息
7    DEBUG(调试):程序或系统调试信息等。包含详细开发的信息,调试程序时使用
    none:没有优先级,不记录任何日志消息。

 配置日志服务器收集日志

rsyslog是一个C/S架构,可以通过套接字来进行监听记录工作,可以基于TCP和UDP工作,默认的监听端口是514,只需要在MODULES打开即可。

发送服务器:客户端    192.168.80.20
收集服务器:服务端    192.168.80.30

//关闭服务端和客户端防火墙、selinux
setenforce 0
systemctl stop firewalld
systemctl disable firewalld

//修改客户端配置文件,并启动服务
vim /etc/rsyslog.conf
#### MODULES ####
#将下面四行前的注释取消掉
$ModLoad imudp        
$UDPServerRun 514    
$ModLoad imtcp        
$InputTCPServerRun 514

#### RULES ####
#添加下列内容
$template myFormat, "%timestamp% %hostname% %syslogseverity-text% %syslogtag% %msg%\n"
$ActionFileDefaultTemplate myFormat
*.info;mail.none;authpriv.none;cron.none              @@192.168.80.30:514

#%timestamp% :时间戳
#%fromhost-ip% :接收的信息来自于哪个节点的 IP
#%hostname% :主机名
#%syslogseverity-text% :日志等级
#%syslogtag% :服务进程
#%msg% :日志内容
#接收方 IP 前面一个 @ 表示 TCP 传输,两个 @ 表示 UDP 传输

systemctl restart rsyslog

//修改服务端配置文件,并启动服务
vim /etc/rsyslog.conf
#将下面四行前的注释取消掉
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514
 
#添加以下内容
$AllowedSender tcp, 192.168.80.0/24        #允许 192.168.80.0 网段内的主机以tcp协议来传输
$template Remote,"/data/log/%fromhost-ip%/%fromhost-ip%_%$YEAR%-%$MONTH%-%$DAY%.log"        #定义模板,接受日志文件路径,区分了不同主机的日志
:fromhost-ip, !isequal, "127.0.0.1" ?Remote        #过滤掉 server 本机的日志

systemctl restart rsyslog

//在服务端创建/data/log目录,以接受大量日志信息,配置文件中的路径应当与该路径一致
mkdir -p /data/log

//验证
#客户端的终端命令行输入或者重启一个服务
logger "hello world"

#在服务端查看日志文件
tree /data/log/

journalctl 日志管理工具 

日志管理工具journalctl是centos7上专有的日志管理工具,该工具是从messages这个文件里读取信息。
Systemd统一管理所有Unit的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核日志和应用日志)。
日志的配置文件是/etc/systemd/journald.conf

#查看所有日志(默认情况下,只保存本次启动的日志)
journalctl
journalctl -r                #-r表示倒序,从尾部看(推荐)

#查看内核日志(不显示应用日志)
journalctl -k

#查看系统本次启动的日志    
journalctl -b  [-0]

#查看上一次启动的日志(需更改设置,如上次系统崩溃,需要查看日志时,就要看上一次的启动日志)
journalctl -b -1

#显示尾部指定行数的日志
查看的是/var/log/messages的日志,但是格式上有所调整,如主机名格式不一样而已
journalctl -n 20 [-f]

#查看某个服务的日志
journalctl -u nginx.service [-f]

#查看指定进程的日志
journalctl _PID=1

#查看指定用户的日志
journalctl _UID=0  --since today

journalctl -xe
# -x 是目录(catalog)的意思,在报错的信息下会,附加解决问题的网址
#-e  pager-end 从末尾开始看    
    
    
---------- rsyslog 收集 apache 日志 ----------
vim /etc/httpd/conf/httpd.conf
#ErrorLog logs/error_log
##方法一:
ErrorLog syslog     #修改配置表示对 error_log 启用 syslog
LogLevel notice    #notice 及以上的 log 全部记录,默认的 facility 是 local7
##方法二:
ErrorLog "|/usr/bin/logger -p local5.notice"   #error_log 全部通过管道写入 syslog,并且 log 的 facility 配置为 local5
#LogLevel warn

#CustomLog logs/access_log combined
CustomLog "|/usr/bin/logger -p local4.info" combined   #access_log全部通过管道写入syslog,并且log的facility配置为local4
#logger -p 指定输入消息的优先级,优先级可以是数字或者指定为 "facility.level" 的格式

# Save local4 to a file
local4.*   /opt/apache_access_log

# Save local4 to a file
local5.*   /opt/apache_error_log

Linux系统日志管理服务  rsyslog

  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值