一、文件与存储系统的inode与block
1.1、硬盘存储
- 最小存储单位:扇区(sector)
-
- 每个扇区大小:512字节
1.2、文件存取
- 最小存取单位:块(block)
- 连续八个扇区组成:块(block)
-
- 每个块大小:4K
- 文件数据:实际数据与元信息
- 操作系统读取硬盘的时候,是一次性连续读取多个扇区,即一个块一个块的读取的。
- 文件数据包括实际数据与元信息(类似文件属性),文件数据存储在“块"中
1.3、inode
- 定义:存储文件元信息的区域
- 包含:创建者、创建日期、文件大小、文件权限等的区域
- 特点:
-
- 一个文件必须占用一个inode
- 格式化文件系统时确定inode的总数
- 至少占用一个block
- 不包含文件名,文件名是存放在目录当中的。
元信息包括
- 文件的字节数
- 文件拥有者的userid
- 文件的groupid
- 文件的读,写,执行权限
- 文件的时间戳
1.4、文件名与inode
- 文件名存放位置:目录
- 译名为"索引节点",也叫i节点
- inode号码:操作系统识别文件的唯一标识,一个文件必须占用一个inode,并且至少占用一个block。
- 每个inode都有一个号码,操作系统用inode号码来识别不同的文件。Linux系统内部不使用文件名,而使用inode号码来识别文件。
- 访问文件流程:
- 根据文件名查找inode号码
- 通过inode号码获取inode信息
- 检查用户权限
- 指向数据block并读取数据
1.4.1、硬盘分区后的结构
文件夹的indoe号中包括当前文件夹中文件名字和文件的indoe号
先确定文件夹后再通过indoe找到block,如果一个block放不下数据,则可以占用多个block.
例如,有一个10kb的文件需要存储,
则会占用3个block(默认一个是4k),虽然最后一个block不能占满,
但也不能再放入其他文件的数据。
这3个block 有可能是连续的,也有可能是分散的,所以会有磁盘碎片。
1.4.2、访问文件的简单流程
1.5、Linux系统特点
- 一切皆文件
- 目录也是一种文件
1.6、查看文件名对应的inode 号码有两种方式
- ls -i 文件名
- stat 文件名
很显然stat看的更详细一些
1.7、linux系统文件三个主要的时间属性
- ctime(change time)
最后一次改变文件或目录 (属性)的时间
- atime(access time)
最后一次访问文件或目录的时间
- mtime(modify time)
最后一次修改文件或目录(内容)的时间
1.8、inode 占用
inode也会消耗硬盘空间,所以格式化的时候,操作系统自动将硬盘分成两个区域。
一个是数据区,存放文件数据,
另一个是inode区,存放inode所包含的信息。
每个inode的大小,一般是128字节或256字节。通常情况下不需要关注单个inode的大小,而是需要重点关注inode总数。inode的总数在格式化时就给定了,执行"df -i"命令即可查看每个硬盘分区对应的的inode总数和已经使用的inode数量。
inode节点的总数,在格式化时就给定了,一般是每1KB或每2KB就设置一个inode。假定在一块1GB的硬盘中,每个inode节点大小为128字节,每1KB就设置一个inode,那么inode table的大小就会达到128MB,占整块硬盘12.8%。
由于inode号码与文件名分离,导致Linux系统具备以下几种特有的现象:
1.文件名包含特殊字符,可能无法正常删除。可直接删除inode,能够起到删除文件的作用;
2.移动文件或重命名文件,只是改变文件名,不影响inode 号码;
3.打开一个文件以后,系统就以inode 号码来识别这个文件,不再考虑文件名。
4.文件数据被修改保存后,会生成一个新的inode 号码。
1.8.1、实验1
先创建大量空文件
for ((i=1; i<=8680; i++)); do touch /test/file$i
done
或者
touch {1..8680}.txt
i占用满
但是磁盘空间还有
当再创建其他的的时候
二、硬链接与软链接
为文件或目录建立链接文件
链接文件分类
硬链接
ln 源文件目标位置
软链接
ln - s 源文件或目录 链接文件或目标位置
详细内容看精讲第八段内容
云计算【第一阶段(12)】Linux常用命令精讲【二】_云计算怎么把目录改名-CSDN博客
三、恢复误删除的文件
3.1、恢复误删除的文件ext3
EXT类型文件恢复
extundelete 是一一个开源的Linux 数据恢复工具,支持ext3、 ext4文件系统。 ( ext4只能在centos6版本恢复,但是目前企业用centos6版本极少,略过)
3.1.1、实验1
安装位置:切勿将extundelete安装到你误删的文件所在硬盘上,以避免数据被覆盖的风险
需要挂载一个ext3的盘
1.安装依赖包
yum -y install e2fsprogs-devel e2fsprogs-libs gcc gcc-c++
2.编译安装extundelete
cd /test
wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
3.解压
tar jxvf extundelete-0.2.4.tar.bz2
4.切换目录
cd extundelete-0.2.4/
5.指定configure的配置路径 --prefix
./configure --prefix=/usr/local/extundelete && make && make install 或
./configure && make && make install
6.如果配置了指定的上面路径需要软链接
ln -s /usr/local/extundelete/bin/* /usr/bin/
模拟删除并执行恢复操作
cd /opt/yczj
切换到挂载点磁盘
添加数据
echo a>a
echo a>b
echo a>c
extundelete /dev/sdb2 --inode 2 #查看文件系统/dev/sdb2下存在哪些文件,i节点是从2开始的,2代表该文件系统最开始的目录。
rm -rf a b
extundelete /dev/sdb2 --inode 2
可以发现被删除了
cd ~
umount /test
extundelete /dev/sdc1 --restore-all #恢复/dev/sdc1 文件系统下的所有内容
#在当前目录下会出现一个RECOVERED_FILES/目录,里面保存了已经恢复的文件
ls RECOVERED FILES/
3.2、恢复误删除的文件XFS
xfsdump用于创建xfs文件系统的备份,而xfsrestore则用于将这些备份数据恢复到原始状态或指定位置,搭配使用。
xfsdump命令格式
xfsdump -f 备份存放位置 要备份的路径或设备文件
xfsdump备份级别 (默认为0)
- 0:完全备份
- 1-9:增量备份
xfsdump常用选项:-f,-L,-M,-s
-f: 指定备份文件目录
-L: 指定标签session label
-M: 指定设备标签media labe
-s:备份单个文件,-s后面不能直接跟路径
xfsrestore命令格式
xfsrestore 恢复文件的位置 存放恢复后文件的位置
xfsdump使用限制
- 只能备份已挂载的文件系统
- 必须使用root的权限才能操作
- 只能备份xfs文件系统
- 备份后的数据只能让xfsrestore解析
- 不能备份两个具有相同uuid的文件系统
实验
首先创建分区,格式化xfs,挂载
在挂载的地方创建一个文件
先查看rpm -qa | grep xfsdump如果未安装yum install -y xfsdump
备份
xfsdump -f /opt/dump_sdb /dev/sdb1
可以加 -L dump_sdb -M sdb1
模拟删除,在挂载目录删除
恢复
xfsrestore -f /opt/dump_sdb1 /opt/ycnh
四、分析日志文件
4.1、日志的功能
用于记录系统,程序运行中发生的各种事件
通过阅读日志,有助于诊断和解决系统故障
4.2、日志文件的分类
- 内核及系统日志
由系统服务rsyslog统一进行管理,日志格式基本相似
- 用户日志
记录系统用户登录及退出系统的相关信息
- 程序日志
由各种应用程序独立管理的日志文件,记录格式不统一。
4.3、日志保存位置
默认位于: /var/log/目录下
主要日志文件介绍
- 内核及公共消息日志 /var/log/messages
- 计划任务日志 /var/log/cron
- 系统引导日志 /var/log/dmesg
- 邮件系统日志 /var/log/maillog
-
用户登录日志 /var/log/lastlog /var/log/secure /var/log/wtmp /var/run/btmp
4.3.1、常见的一些日志文件介绍:
/var/log/messages: 记录Linux内核消息及各种应用程序的公共日志信息,包括启动、IO错误、网络错误、程序故障等。对于未使用独立日志文件的应用程序或服务,一般都可以从该日志文件中获得相关的事件记录信息。
/var/log/cron: 记录crond计划任务产生的事件信息。
/var/log/dmesg: 记录Linux系统在引导过程中的各种事件信息。
/var/log/maillog: 记录进入或发出系统的电子邮件活动。
/var/log/secure: 记录用户认证相关的安全事件信息。
/var/log/lastlog: 记录每个用户最近的登录事件。二进制格式
/var/1og/wtmp: 记录每个用户登录、注销及系统启动和停机事件。二进制格式
/var/run/btmp: 记录失败的、错误的登录尝试及验证事件。二进制格式
4.4、rsyslog
内核及系统日志由系统服务rsyslog 统一管理,主配置文件为/etc/rsyslog.conf
Linux操作系统本身和大部分服务器程序的日志文件都默认放在目录/var/1og/下。
软件包:rsyslog-7.4.7-16.el7.x86_64
主要程序:/sbin/rsyslogd
配置文件:/etc/rsyslog.conf
4.5、日志消息的级别
日志级别 | 级号 | 消息级别 | 说明 |
---|---|---|---|
EMERG | 0 | 紧急 | 会导致主机系统不可用的情况 |
ALERT | 1 | 警告 | 必须马上采取措施解决的问题 |
CRIT | 2 | 严重 | 比较严重的情况 |
ERR | 3 | 错误 | 运行出现错误 |
WARNING | 4 | 提醒 | 可能会影响系统功能的事件 |
NOTICE | 5 | 注意 | 不会影响系统但值得注意的信息 |
INFO | 6 | 信息 | 一般信息,程序或系统调试信息等 |
DEBUG | 7 | 调试 | 详细的调试信息,用于开发或故障排除 |
4.6、日志记录的一般格式
4.7、用户日志分析
保存了用户登录,退出系统等相关信息
- /var/log/lastlog: 最近的用户登录事件
- /var/log/wtmp: 用户登录,注销及系统开,关机事件
- /var/run/utmp: 当前登录的每个用户的详细信息
- /var/log/secure 与用户验证相关的安全性事件
分析工具
users,who,w, last, lastb
4.7.1、分析工具详细分析命令
users:命令只是简单地输出当前登录的用户名称,每个显示的用户名对应一个登录会话。如果一个用户有不止一个登录会话,那他的用户名将显示与其相同的次数。
who:命令用于报告当前登录到系统中的每个用户的信息。使用该命令,系统管理员可以查看当前系统存在哪些不合法用户,从而对其进行审计和处理。who 的默认输出包括用户名、终端类型、登录日期及远程主机
w:命令用于显示当前系统中的每个用户及其所运行的进程信息,比 users、who 命令的输出内容要丰富一些
last:命令用于查询成功登录到系统的用户记录,最近的登录情况将显示在最前面。通过last 命令可以及时掌握 Linux 主机的登录情况,若发现未经授权的用户登录过,则表示当前主机可能已被入侵
lastb:命令用于查询登录失败的用户记录,如登录的用户名错误、密码不正确等情况都将记录在案。登录失败的情况属于安全事件,因为这表示可能有人在尝试猜解你的密码。除了使用 lastb 命令查看以外,也可以直接从安全日志文件/var/log/secure 中获得相关信息
4.8、程序日志分析
由相应的应用程序独立进行管理
web服务:/var/log/httpd/
access_log,error_log
代理服务:/var/log/squid/
access.log,cache.log
FTP服务:/var/log/xferlog
分析工具
文本查看,grep过滤检索, webmin管理套件中查看
awk, sed等文本过滤,格式化编辑工具
webalizer Awstats等专用日志分析工具
4.9、日志管理策略
- 及时作好备份和归档
- 延长日志保存期限
- 控制日志访问权限
日志中可能会包含各类敏感信息,如账户,口令等
- 集中管理日志
将服务器的日志文件发到统一的日志文件服务器,便于日志信息的统一收集, 整理和分析
杜绝日志信息的意外丢失, 恶意篡改或删除。
4.10、日志管理工具
4.10.1、Logrotate
(轮转,日志切割) centos7 自带的一个
概念
Logrotate是一个在Linux系统中广泛使用的日志文件管理工具,主要用于日志文件的切割、压缩、删除和创建新日志文件等操作,以节省磁盘空间并方便日志管理
作用
1.如果没有日志轮转,日文件会越来越大
2.将丢弃系统中最旧的日志文件,以节省空间
3.logrotate本身不是系统守护进程,它是通过计划任务crond每天执行计划任务
Logrotate的常用参数
- -v, --verbose:显示详细的转储过程信息。
- -f, --force:强制进行日志转储,忽略配置文件中设置的时间间隔或大小限制。
- -d, --debug:测试配置文件是否有错误,但不实际执行转储操作。
- -m, --mail=command:压缩日志后,通过指定的命令发送日志到指定邮箱。
- -s, --state=statefile:使用指定的状态文件记录转储的日志信息。
Logrotate的定时执行
- Logrotate通常通过cron服务定时执行。在Linux系统中,
/etc/cron.daily/logrotate
脚本负责每天执行一次Logrotate。 - 用户也可以根据需要手动执行Logrotate,例如使用
logrotate -vf /etc/logrotate.conf
命令强制立即执行一次转储操作。
配置
- 计划任务:/etc/cron.daily/logrotate
- 程序文件:/usr/sbin/logrotate
- 配置文件: /etc/logrotate.conf
- 日志文件:/var/lib/logrotate/logrotate.status
也可以在这里配置系统特定日志
以下是一个简单的Logrotate配置示例,用于切割和压缩/var/log/myapp.log
日志文件:
/var/log/myapp.log {
daily # 每天切割一次
rotate 7 # 保留7个备份
compress # 压缩备份文件
missingok # 如果日志文件丢失,不报错继续滚动下一个日志
notifempty # 如果日志文件为空,不进行轮转
create 640 myuser mygroup # 切割后创建新文件,并设置权限和所有者
}
更多独立配置文件详解
配置参数 | 说明 |
---|---|
compress | 使用gzip压缩转储后的日志文件 |
nocompress | 不对转储后的日志文件进行压缩 |
copytruncate | 对于还在被打开中的日志文件,先备份当前日志并截断原文件 |
nocopytruncate | 备份日志文件但不截断原文件 |
create mode owner group | 使用指定的权限、所有者和所属组创建新的日志文件 |
nocreate | 不创建新的日志文件(仅保留备份) |
delaycompress | 与compress一起使用时,延迟到下一次转储时才压缩当前转储的日志文件 |
nodelaycompress | 覆盖delaycompress选项,转储时立即压缩日志文件 |
errors address | 将转储时的错误信息发送到指定的Email地址 |
ifempty | 即使是空文件也进行转储(默认行为) |
notifempty | 如果文件为空,则不进行转储 |
mail address | 将转储的日志文件发送到指定的E-mail地址 |
nomail | 转储时不发送日志文件到任何E-mail地址 |
olddir directory | 将转储后的日志文件放入指定的目录(需与当前日志文件在同一文件系统) |
noolddir | 转储后的日志文件和当前日志文件放在同一个目录下 |
prerotate/endscript | 在转储之前需要执行的命令(prerotate与endscript需单独成行) |
postrotate/endscript | 在转储之后需要执行的命令(postrotate与endscript需单独成行) |
daily | 指定转储周期为每天 |
weekly | 指定转储周期为每周 |
monthly | 指定转储周期为每月 |
rotate count | 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5个备份 |
tabooext [+] list | 让logrotate 不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig , .rpmsave , v , 和~ |
size size | 当日志文件到达指定的大小时才转储(单位可以是bytes、KB或MB) |
sharedscripts | 对每个匹配的日志文件条目,prerotate 和postrotate 脚本只运行一次,无论匹配了多少个日志文件 |
nosharedscripts | 对每个转储的日志文件,都执行一次prerotate 和postrotate 脚本(默认行为) |
missingok | 如果日志不存在,不提示错误,继续处理下一个日志文件 |
nomissingok | 如果日志不存在,提示错误(默认行为) |
4.10.2、webalizer日志分析工具
webalizer是一个高效的、免费的web服务器日志分析程序。其分析结果以HTML文件格式保存,从而可以很方便的通过web服务器进行浏览。Internet上的很多站点都使用webalizer进行web服务器日志分析。
Webalizer是用C写的程序,所以其具有很高的运行效率。在主频为200Mhz的机器上,webalizer每秒钟可以分析10000条记录,所以分析一个40M大小的日志文件只需要15秒。
webalizer支持标准的一般日志文件格式(Common Logfile Format);除此之外,也支持几种组合日志格式(Combined Logfile Format)的变种,从而可以统计客户情况以及客户操作系统类型。并且现在webalizer已经可以支持wu-ftpd xferlog日志格式以及squid日志文件格式了。webalizer支持命令行配置以及配置文件。可以支持多种语言,也可以自己进行本地化工作。webalizer支持多种平台,比如UNIX、linux、NT, OS/2 和 MacOS等。
软件:httpd 作为webalizer的页面服务器
4.10.3、journalctl命令
journalctl工具是CentOS-7才有的工具
Systemd 统一管理所有 Unit 的启动日志。带来的好处就是 ,可以只用journalctl一个命令,查看所有日志(内核日志和 应用日志)。日志的配置文件/etc/systemd/journald.conf
ps -ef | grep journald
journalctl -b //查看本次启动的日志
journalctl -k //查看内核日志
journalctl -xe 经常用来查看最近报错的日志
-e:从结尾开始看
-x:提供问题相关的网址
其他
日志工具可研究:Webmin、 Webalizer、Awstats等专用日志分析工具