31、深入理解Linux文系统和日志分析
文章目录
深入理解Linux文系统和日志分析
inode与block
硬链接与软链接
恢复误删除的文件
分析日志文件
inode和block概述
文件数据包括元信息与实际数据
文件存储在硬盘上,硬盘最小存储单位是"“扇区”,每个扇区存储512字节 4k
block(块)
●连续的八个扇区组成一个block
●是文件存取的最小单位
inode(索引节点)
●中文译名为“索引节点”,也叫i节点
●用于存储文件元信息
元信息 inode
数据 block
inode包含很多文件的元信息,例如:
文件的字节数
文件拥有者的User ID
文件的Group ID
文件的读、 写、执行权限
文件的时间戳
文件类型
链接数
有关文件的其他数据
PS:inode不包含文件名
可以用stat命令,查看某个文件的inode信息
每个文件名 对应唯一 inode号
cp命令与inode:
分配一个空闲的inode号
在inode表中生成新条目在目录中创建一个目录项
将名称与inode编号关联拷贝数据生成新的文件
rm命令与inode
链接数递减,从而释放的inode号可以被重用把数据块放在空闲列表中
删除目录项
数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖
mv 命令 和inode
mv移动文件或重命名文件,只是改变文件名,不影响inode 号(这里指的是非挂载磁盘);
ctime(change time):最后一次改变文件或目录的时间,例如执行chmod、chown
atime(access time):是最近一次访问文件或目录的时间
mtime(modify time):是最后一次修改文件或目录(内容)的时间
inode不包含文件名。
文件名是存放在目录当中的。Linux系统中一切皆文件,因此目录也是一种文件。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YvINrjI6-1641742724988)(C:\Users\XTC\AppData\Roaming\Typora\typora-user-images\1641262160569.png)]
每个inode都有一个号码,操作系统用inode号码来识别不同的文件,linux系统内部使用不同文件名,而使用inode来识别文件。 对于系统来说,文件名只是inode号码便于识别的别称,文件名和inode号码是一 一对应关系,每个inode号码对应一个文件名。
表面上,用户通过文件名,打开文件
实际上,系统内部这个过程分成三步:
系统找到这个文件名对应的inode号码
通过inode号码 ,获取inode信息
根据inode信息,找到文件数据所在的block
读出数据使用Is -i命令,可以看到文件名对应的inode号码: ls -i /etc/passwd
使用stat命令,查看文件inode信息中的inode号码: stat /etc/passwd
文件存储小结
当一个用户在Linux系统中试图访问一个文件时,系统会先根据文件名去查找它的 inode ,看该用户是否具有访问这个文件的权限
如果有,就指向相对应的数据block
如果没有,就返回Permission denied
inode 的大小
inode也会消耗硬盘空间,每个inode的大小,一般是128字节或256字节
inode的总数,在格式化时就确定
查看每个硬盘分区的inode总数和已经使用的数量,可以使用命令: df -i
由于inode 号码与文件名分离,导致Linux系统具备以下几种特有的现象:
文件名包含特殊字符,可能无法正常删除。这时直接删除inode,能够起到删除文件的作用;
删除inode号的方法:
法一: find 文件位置 -inum inode号码 -exec rm -i {} ;
法二: find 文件位置 -inum inode号码 -delete
磁盘还有容量,但显示磁盘已满 说明inode已满 需删除
恢复ext3 类型的文件
然后再拷贝进去
恢复xfs类型的文件
日志文件
日志保存位置默认位于:/var/log目录下
日志的功能:
用于记录系统、程序运行中发生的各种事件
通过阅读日志,有助于诊断和解决系统故障
内核及系统日志: 这种日志数据由系统服务rsyslog统一管理,根据其主配置文件/etc/rsyslog.conf中的设置决定将内核消息及各种系统程序消息记录到什么位置
用户日志: 这种日志数据用于记录Linux系统用户登录及退出系统的相关信息,包括用户名、登 录的终端、登录时间、来源主机、正在使用的进程操作等
程序日志: 有些应用程序会选择由自己独立管理一份日志文件(而不是交给rsyslog服务管理),用于记录本程序运行过程中的各种事件信息
用户日志分析
lastlog /secure用的多
在wtmp、btmp、 lastlog等日志文件中 ,保存了系统用户登录、 退出等相关的事件消息。 但是这些文件都是二进制的数据文件,不能直接使用tail、less等文本查看工具进行浏览,需要使用who、w、users、 last和lastb等用户查询命令来获取日志信息
查询当前登录的用户情况—users、who、w命令
user : 可以看到当前有哪些用户在登录
who : 可以看到每个用户的详细信息
w : 查看每个用户及其运行的进程信息,内容更加丰富
查询用户登录的历史记录—last、lastb命令
last:用于查询成功登录到系统的用户记录
lastb:用于查询登录失败的用户记录
跟踪
程序日志由相应的应用程序独立进行管理
Web服务:/var/log/httpd/
access_log ——记录客户访问事件
error_log ——记录错误事件
代理服务:/var/log/squid/
access.log、cache.log
分析工具
文本查看、grep过来检索、Webmin管理套件中查看
awk、sed等文本过滤、格式化编辑工具
Webalizer、Awstats等专用日志分析工具
日志管理策略
及时做好备份和归档
延长日志保存期限
控制日志访问权限
日志中可能会包含各类敏感信息,如账户和口令等
集中管理日志
将服务器的日志文件发到统一-的日志文件服务器
便于日志信息的统- -收集、 整理和分析
杜绝日志信息的意外丢失、恶意篡改或删除
详细日志分析命令:
users: 命令只是简单地输出当前登录的用户名称,每个显示的用户名对应一个登录会话。如果一个用户有不止一个登录会话,那他的用户名将显示与其相同的次数
who: 命令用于报告当前登录到系统中的每个用户的信息。使用该命令,系统管理员可以查看当前系统存在哪些不合法用户,从而对其进行审计和处理。who 的默认输出包括用户名、终端类型、登录日期及远程主机
w: 命令用于显示当前系统中的每个用户及其所运行的进程信息,比 users、who 命令的输出内容要丰富一些
last: 命令用于查询成功登录到系统的用户记录,最近的登录情况将显示在最前面。通过last命令可以及时掌握Linux主机的登录情况,若发现未经授权的用户登录过,则表示当前主机可能已被入侵。
lastb; 命令用于查询登录失败的用户记录,如登录的用户名错误、密码不正确等情况都将记录在案。登录失败的情况属于安全事件,因为这表示可能有人在尝试猜解你的密码。除了使用lastb命令查看以外,也可以直接从安全日志文件/var/log/secure中获得相关信息
有哪些系统常见日志
/var /log/messages //系统主日志文件
[root@localhost ~]#cat /var/log/messages |wc -l
3784
tail -f 或者tailf 或 tail -100查看时间,主机名,服务,具体信息
/var/log/dmesg //开机后的内核自检信息,dmesg命令看的是一样的
/var/log/secure //涉及到登陆,验证之类的都会记录比如su
用户日志采用二进制格式,但可以用命令查看,避免认为修改内容,保证日志的有效性
/var/log/ wtmp (last)
/ var/ log/ btmp(lastb)
/ var/ log/ lastlog (lastlog)所有账号的登录信息
还有一些服务的日志比如
/var/log/ yum. log
/var/ logl/cron
也并不是所有安装的程序的日志都会在/var/log下,只有rpm包安装的才会,源码装的在自己指定的目录中,例如httpd,源码安装的日志目录在/usr/local/httpd/logs/
扩展1 journalctl
journalctl工具是centos-7才有的工具
systemd 统一管理所有unit的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核日志和应用日志)。日志的配置文件/etc/systemd/journald.conf
ps -ef l grep journald
journalctl -b //查看本次启动的日志
journalctl -k //查看内核日志
[root@localhost log]# journalctl |wc -l //查看系统总共的日志
2787
journalctl -xe 经常用来查看最近报错的日志
-e:从结尾开始看
-x:提供问题相关的网址
注:学生可研究日志工具可研究: Webmin、 webalizer、Awstats等专用日志分析工具
扩展2 rsyslog
熟悉了系统中的主要日志文件以后,下面将介绍针对日志文件的分析方法。分析日志文件的目的在于通过浏览日志查找关键信息、对系统服务进行调试,以及判断发生故障的原因等。
日志文件的基本格式和分析方法。
对于大多数文本格式的日志文件(如内核及系统日志、大多数的程序日志),只要使用
tail、more、less、cat等文本处理工具就可以查看日志内容。而对于一些二进制格式的日志文件(如用户日志),则需要使用特定的查询命令。
内核及系统日志
内核及系统日志功能主要由默认安装的 rsyslog-7.4.7-16.el7.x86_64.rpm软件包提供。
rsyslog服务所使用的配置文件为/etc/rsyslog.conf。通过查看/etc/rsyslog.conf 文件中的内容,可以了解到系统默认的日志设置
grep -v “^$” /etc/rsyslog.conf //过滤掉空行
日志消息的等级
0-7
rsyslog服务
ps -ef l grep rsyslogd //查看服务是否开启
vim /etc/rsyslog.conf //rsyslog服务配置文件
mail.* 代表比 *等级高的都记录, *代表任何,也就是说任何日志都记录
.none代表不记录日志
日志存放位置为 *:所有日志高于疼痛这个等级就会对所有在线用户广播
.=代表只记录=后面级别的日志
.!代表除了!后面级别的日志不记录其他的都记录
存放路径之前有 “-“ 代表先放入缓存足够大之后再存放在路径
也可以自定义日志
vim /etc/rsyslog.conf
加入一行内容
*.info /var/ log/info.log
systemctl restart rsyslog
//重启服务之后/var/log下面就生成了info.log了
总结:
block与inode、硬链接与软链接、恢复误删除的文件
Linux主要包含的日志文件
Linux系统的日志消息级别
Linux系统中用户日志的查询命令 who、w、users、last、last