热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linux文件系统和日志

目录引言一、inode和block详解1、概述2、inode的内容inode包含文件的元信息(不包含文件名)系统文件三个时间属性目录文件的结

目录

引言

一、inode和block详解

1、概述

2、inode的内容

 inode包含文件的元信息(不包含文件名)

系统文件三个时间属性

目录文件的结构,目录也是一种文件 

3、用户通过文件名打开文件时,系统内部的过程

4、查看inode号码的方法

5、inode大小

6、inode的特殊作用

由于inode号码与文件名分离,导致Linux系统具备以下几种特有的现象

二、可能出现的inode故障

三、硬链接和软链接(符号链接)

链接文件分类

四、恢复删除的文件

1、恢复误删除的文件ext3

2、恢复误删除的文件XFS

xfsdump的命令格式

xfsdump 的备份级别

xfsdump命令常用的选项

xfsrestore 命令格式

xfsdump使用限制

操作步骤

五、分析日志文件

1、日志的功能

2、日志文件的分类

3、日志保存位置

4、常见的一些日志文件

内核及公共消息日志

计划任务日志

系统引导日志

邮件系统日志

用户登录日志

5、内核及系统日志由系统服务rsyslog 统一管理

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

主要程序:/sbin/rsyslogd

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

7、公共日志/var/log/messages文件的记录格式

8、详细日志分析命令

 9、日志管理策略

及时作好备份和归档

延长日志保存期限

控制日志访问权限

集中管理日志

10、程序日志分析

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

分析工具

总结



引言

之前给大家分享了很多的linux系统管理的知识,相信持续关注我的人也知道,关于系统管理的知识基本上我都有给大家分享了,今天最后给大家分享关于系统文件和日志的内容,分享完今天的内容,相信如果是新手小伙伴,已经成为初级的linux工程师了,废话不多说下面开始我今天的分享

一、inode和block详解

1、概述

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

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

block(块):连续的八个(4个)扇区组成一个block,是文件存取的最小单位(数据)

inode(索引节点):中文译名为“索引节点”,也叫i节点,用于存储文件元信息

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


2、inode的内容


 inode包含文件的元信息(不包含文件名)

文件的字节数——文件拥有者的User ID——文件的Group lD

文件的读、写、执行权限——文件的时间戳

系统文件三个时间属性

ctime:最后一次改变文件或目录(属性)的时间

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

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


目录文件的结构,目录也是一种文件 



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

3、用户通过文件名打开文件时,系统内部的过程

系统找到这个文件名对应的inode号码
通过inode号码,获取inode信息
根据inode信息,找到文件数据所在的block,读出数据

4、查看inode号码的方法

ls -i  命令: 查看文件名对应的inode号码
stat   命令: 查看文件inode信息中的inode号码

5、inode大小

inode也会消耗硬盘空间,所以格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据:另一个是inode区,存放inode所包含的信息。每个inode的大小,一般是128字节或256字节

通常情况下不需要关注单个inode的大小,而是需要重点关注inode.总数

inode的总数在格式化时就给定了,执行"df-i"命令即可查看每个硬盘分区对应的的inode总数和已经使用的inode数量

6、inode的特殊作用


由于inode号码与文件名分离,导致Linux系统具备以下几种特有的现象

文件名包含特殊字符,可能无法正常删除。这时直接删除inode,能够起到删除文件的作用
移动文件或重命名文件,只是改变文件名,不影响inode 号码
打开一个文件以后,系统就以inode 号码来识别这个文件,不再考虑文件名
文件数据被修改保存后,会生成一个新的inode号码
find ./ -inum 52305140 -exec rm -i {} \;
find ./ -inum 50464299 -delete

[root@localhost home]# ls
??fd.txt l l0 l8 l80 l800 l9 l90 li li1 liu3 ly ly1 ly2 ly3
[root@localhost home]# rm -rf ??fd.txt
[root@localhost home]# ls
??fd.txt l l0 l8 l80 l800 l9 l90 li li1 liu3 ly ly1 ly2 ly3
[root@localhost home]# ls -i
101029976 ??fd.txt 67144280 l80 67332567 li 67332553 ly167332581 l 67144265 l800 67332571 li1 67332557 ly267142740 l0 67142744 l9 67332575 liu3 67332561 ly367332589 l8 67142753 l90 101990779 ly
[root@localhost home]# rm -rf 101029976
[root@localhost home]# ls -i
101029976 ??fd.txt 67144280 l80 67332567 li 67332553 ly167332581 l 67144265 l800 67332571 li1 67332557 ly267142740 l0 67142744 l9 67332575 liu3 67332561 ly367332589 l8 67142753 l90 101990779 ly
[root@localhost home]# find /home/ -inum 101029976 -exec rm -i {} \;
rm:是否删除普通空文件 "/home/\243\244fd.txt"?y
[root@localhost home]# ls
l l0 l8 l80 l800 l9 l90 li li1 liu3 ly ly1 ly2 ly3

二、可能出现的inode故障

[root@localhost ~]# fdisk /dev/sdb #fdisk分区
[root@localhost ~]# mkfs.ext3 /dev/sdb1
[root@localhost ~]# mkdir /1
[root@localhost ~]# mount /dev/sdb1 /1
[root@localhost ~]# df -i #/1下可以有22518个inode
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/sda3 17300992 147260 17153732 1% /
devtmpfs 229708 422 229286 1% /dev
tmpfs 233381 1 233380 1% /dev/shm
tmpfs 233381 607 232774 1% /run
tmpfs 233381 16 233365 1% /sys/fs/cgroup
/dev/sda1 1048576 329 1048247 1% /boot
tmpfs 233381 17 233364 1% /run/user/0
/dev/sr0 0 0 0 - /run/media/root/CentOS 7 x86
_64/dev/sdb1 22528 10 22518 1% /1[root&#64;localhost ~]# for ((i&#61;1;i<&#61;22518;i&#61;i&#43;1)); #创建22518个文件
> do touch /1/file${i}
> done[root&#64;localhost ~]# df -i #inode耗尽
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/sda3 17300992 147260 17153732 1% /
devtmpfs 229708 422 229286 1% /dev
tmpfs 233381 1 233380 1% /dev/shm
tmpfs 233381 607 232774 1% /run
tmpfs 233381 16 233365 1% /sys/fs/cgroup
/dev/sda1 1048576 329 1048247 1% /boot
tmpfs 233381 17 233364 1% /run/user/0
/dev/sr0 0 0 0 - /run/media/root/CentOS 7 x86
_64/dev/sdb1 22528 22528 0 100% /1
[root&#64;localhost ~]# df -h #容量还有75M
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda3 33G 4.7G 29G 15% /
devtmpfs 898M 0 898M 0% /dev
tmpfs 912M 0 912M 0% /dev/shm
tmpfs 912M 9.1M 903M 1% /run
tmpfs 912M 0 912M 0% /sys/fs/cgroup
/dev/sda1 2.0G 174M 1.9G 9% /boot
tmpfs 183M 24K 183M 1% /run/user/0
/dev/sr0 4.3G 4.3G 0 100% /run/media/root/CentOS 7 x86_64
/dev/sdb1 82M 2.2M 75M 3% /1
[root&#64;localhost ~]# touch /1/1.txt #无法创建文件
touch: 无法创建"1.txt": 设备上没有空间

三、硬链接和软链接&#xff08;符号链接&#xff09;

链接文件分类

软链接又称符号链接——删除原始文件后链接失效&#xff0c;适用于文件或目录&#xff0c;保存位置与原始文件可以位于不同的文件系统中

格式&#xff1a;ln -s 源文件或目录   目标位置

硬链接——删除原始文件后链接可以使用&#xff0c;只可用于文件&#xff0c;保存位置必须与原始文件在同一个文件系统

格式&#xff1a;ln  源文件  目标位置

四、恢复删除的文件

1、恢复误删除的文件ext3

[root&#64;localhost ~]# fdisk /dev/sdb
[root&#64;localhost ~]# mkfs.ext3 /dev/sdc1 #使用fdisk创建分区/dev/sdc1&#xff0c; 格式化ext3文件系统
[root&#64;localhost ~]# mkdir /1
[root&#64;localhost ~]# mount /dev/sdb1 /1[root&#64;localhost ~]# yum -y install e2fsprogs-devel e2fsprogs-libs gcc gcc-c&#43;&#43; #安装依赖包[root&#64;localhost ~]# cd /1 #编译安装extundelete
[root&#64;localhost 1]# wgethttp://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
[root&#64;localhost 1]# tar jxvf extundelete-0.2.4.tar.bz2
[root&#64;localhost 1]# cd extundelete-0.2.4/
[root&#64;localhost extundelete-0.2.4]# ./configure --prefix&#61;/usr/local/extundelete && make && make install
[root&#64;localhost extundelete-0.2.4]# ln -s /usr/local/extundelete/bin/* /usr/bin/[root&#64;localhost extundelete-0.2.4]# cd /1
[root&#64;localhost 1]# echo 1>a
[root&#64;localhost 1]# echo 1>b
[root&#64;localhost 1]# echo 1>c
[root&#64;localhost 1]# echo 1>d[root&#64;localhost 1]# rm -rf a b #模拟删除并执行恢复操作
[root&#64;localhost 1]# extundelete /dev/sdc1 --inode 2
#查看文件系统/dev/sdc1下存在哪些文件&#xff0c;i节点是从2开始的&#xff0c;2代表该文件系统最开始的目录。
[root&#64;localhost 1]# cd ~
[root&#64;localhost ~]# umount /test
[root&#64;localhost ~]# extundelete /dev/sdc1 --restore-all #恢复/dev/sdb1 文件系统下的所有内容
[root&#64;localhost ~]# ls RECOVERED_FILES/
c d
#在当前目录下会出现一个RECOVERED_FILES/目录&#xff0c;里面保存了已经恢复的文件

2、恢复误删除的文件XFS


xfsdump的命令格式

xfsdump -f  备份存放位置      要备份的路径或设备文件

xfsdump 的备份级别

0表示完全备份&#xff0c;1-9表示增量备份

xfsdump命令常用的选项

-f: 指定备份文件目录
-L: 指定标签session label
-M: 指定设备标签media labe........ 
-s:备份单个文件&#xff0c;-s后面不能直接跟路径

xfsrestore 命令格式

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

xfsdump使用限制

只能备份已挂载的文件系统
必须使用root的权限才能操作
只能备份XFS文件系统
备份后的数据只能让xfsrestore解析
不能备份两个具有相同UUID的文件系统(可用blkid命令查看)

操作步骤

[root&#64;localhost ~]# fdisk /dev/sdc
[root&#64;localhost ~]# mkfs.xfs /dev/sdc1
[root&#64;localhost ~]# mkdir /2
[root&#64;localhost ~]# mount /dev/sdc1 /2
[root&#64;localhost ~]# cd /2
[root&#64;localhost 2]# cp /etc/passwd /2
[root&#64;localhost 2]# ls
passwd
[root&#64;localhost 2]# ls /opt
rh
[root&#64;localhost 2]# rpm -qa | grep xfsdump
xfsdump-3.1.4-1.el7.x86_64
[root&#64;localhost 2]# yum install -y xfsdump
[root&#64;localhost 2]# xfsdump -f /opt/dump_sdc1 /dev/sdc1 #使用xfsdump命令备份整个分区please enter label for this dump session (timeout in 300 sec)-> dump_sdc1please enter label for media in drive 0 (timeout in 300 sec)-> sdc1
[root&#64;localhost 2]# rm -rf /2/* #模拟数据丢失并使用xfsrestore 命令恢复文件
[root&#64;localhost 2]# ls
[root&#64;localhost 2]# xfsrestore -f /opt/dump_sdc1 /2
[root&#64;localhost 2]# ls
passwd

五、分析日志文件

1、日志的功能

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

通过阅读日志&#xff0c;有助于诊断和解决系统故障

2、日志文件的分类

内核及系统日志——由系统服务rsyslog统一进行管理&#xff0c;日志格式基本相似

用户日志——记录系统用户登录及退出系统的相关信息

程序日志——由各种应用程序独立管理的日志文件&#xff0c;记录格式不统一

3、日志保存位置

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

4、常见的一些日志文件


内核及公共消息日志

/var/log/messages: 记录Linux内核消息及各种应用程序的公共日志信息&#xff0c;包括启动、IO错误、网络错误、程序故障等
对于未使用独立日志文件的应用程序或服务&#xff0c;一般都可以从该日志文件中获得相关的事件记录信息。

计划任务日志

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

系统引导日志

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

邮件系统日志

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

用户登录日志

/var/log/secure: 记录用户认证相关的安全事件信息
/var/log/lastlog: 记录每个用户最近的登录事件&#xff0c;二进制格式
/var/1og/wtmp: 记录每个用户登录、注销及系统启动和停机事件&#xff0c;二进制格式
/var/run/btmp: 记录失败的、错误的登录尝试及验证事件&#xff0c;二进制格式

也并不是所有安装的程序的日志都会在/var/log下&#xff0c;只有rpm包安装的才会&#xff0c;源码装的在自己指定的目录中
例如httpd&#xff0c;源码安装的日志目录在/usr/local/httpd/logs/


5、内核及系统日志由系统服务rsyslog 统一管理


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

*.info;mail.none;authpriv.none;cron.none /var/1og/messages*.info #表示info等级及以&#xff0c;上的所有等级的信息都写到对应的日志文件里
mail.none #表示某事件的信息不写到日志文件里( 这里比如是邮件)

主要程序&#xff1a;/sbin/rsyslogd


6、Linux系统内核日志消息的优先级别(数字等级越小&#xff0c;优先级越高&#xff0c;消息越重要) 

0  EMERG(紧急):会导致主机系统不可用的情况
1  ALERT(警告):必须马上采取措施解决的问题
2  CRIT(严重):比较严重的情况
3  ERR (错误) :运行出现错误
4  WARNING(提醒):可能影响系统功能&#xff0c;需要提醒用户的重要事件
5  NOTICE (注意) :不会影响正常功能&#xff0c;但是需要注意的事件
6  INFO(信息):一般信息
7  DEBUG(调试):程序或系统调试信息等

7、公共日志/var/log/messages文件的记录格式

时间标签:消息发出的日期和时间
主机名:生成消息的计算机的名称
子系统名称:发出消息的应用程序的名称
消息:消息的具体内容

程序自己维护日志记录&#xff0c;httpd 网站服务程序使用两个日志文件
access_log :  #记录客户访问事件
error_log  #记录错误事件

8、详细日志分析命令

users&#xff1a;命令只是简单地输出当前登录的用户名称&#xff0c;每个显示的用户名对应一个登录会话。如果一个用户有不止一个登录会话&#xff0c;那他的用户名将显示与其相同的次数

who&#xff1a;命令用于报告当前登录到系统中的每个用户的信息。使用该命令&#xff0c;系统管理员可以查看当前系统存在哪些不合法用户&#xff0c;从而对其进行审计和处理。who 的默认输出包括用户名、终端类型、登录日期及远程主机

w&#xff1a;命令用于显示当前系统中的每个用户及其所运行的进程信息&#xff0c;比 users、who 命令的输出内容要丰富一些

last:命令用于查询成功登录到系统的用户记录&#xff0c;最近的登录情况将显示在最前面。通过last 命令可以及时掌握 Linux 主机的登录情况&#xff0c;若发现未经授权的用户登录过&#xff0c;则表示当前主机可能已被入侵

lastb:命令用于查询登录失败的用户记录&#xff0c;如登录的用户名错误、密码不正确等情况都将记录在案。登录失败的情况属于安全事件&#xff0c;因为这表示可能有人在尝试猜解你的密码。除了使用 lastb 命令查看以外&#xff0c;也可以直接从安全日志文件/var/log/secure 中获得相关信息
 

 9、日志管理策略


及时作好备份和归档


延长日志保存期限


控制日志访问权限

日志中可能会包含各类敏感信息&#xff0c;如账户、口令等

集中管理日志

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

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

杜绝日志信息的意外丢失、恶意篡改或删除

10、程序日志分析


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

Web服务:/arlog/httpd/      access_log、error_log

代理服务:lvar/log/squid/     access.log、cache.log

FTP服务:var/log/xferlog

分析工具

文本查看、grep过滤检索、Webmin管理套件中查看

awk、sed等文本过滤、格式化编辑工具

Webalizer、Awstats等专用日志分析工具

总结

今天分享的内容其实不是特别多&#xff0c;简单总结就是block和inode&#xff0c;还有软硬链接&#xff0c;再到如何恢复我们误删的文件&#xff0c;最多的就是关于认识和管理日志文件的&#xff0c;这也是我们日常工作中非常重要的一部分&#xff0c;最后共享新手小伙伴成功入门linux工程师


推荐阅读
author-avatar
钱靖均秀蓉怡慧
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有