文件数据包括元信息与实际数据
文件存储在硬盘上,硬盘最小存储单位是“扇区”,每个扇区存储512字节
元数据是存放在inode(index node)表中。inode 表中有很多条记录组成,第一条记录对应的存放了一个文件的元数据信息。
block(块)
inode(索引节点)
? ? ? 一个文件必须占用一个inode,并且至少占用一个block。
inode不包含文件名。文件名是存放在目录文件夹当中的。Linux 系统中一切皆文件,因此目录也是一种文件。
每个inode都有一个号码,操作系统用inode号码来识别不同的文件。Linux系统内部不使用文件名,而使用inode号码来识别文件。
查看inode
- ls -i 命令:查看文件名对应的inode号码
- stat 命令:查看文件的inode信息
- inode号在同一个文件系统内唯一,在不同的文件系统中可以重复。inode号是有限的资源,它的多少和磁盘大小有关。
访问文件流程:
根据文件夹中的文件名和inode号的关系,找到对应的inode表,再根据inode表中的指针,找到磁盘真实数据
- 查看每个硬盘分区的inode总数和已经使用的数量,可以使用命令:?df -i
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
面试题1:
我磁盘空间还剩余很多,但是无法建立文件?
inode? 号用完了
lvm 扩容
普通分区,删除没有用的空文件
面试题2:
我想看到几点几分到几点几分之间的日志
内存中
journalctl -S “2024-01-01 8:00” -U “2024 -02-02 8:00”
删除一个文件,实际上并不清除 inode 节点和 block 的数据,只是在这个文件的父目录 里面的 block 中,删除这个文件的名字。Linux 是通过 Link 的数量来控制文件删除的,只有 当一个文件不存在任何 Link 的时候,这个文件才会被删除。在 Linux 系统运维工作中,经常会遇到因操作不慎、操作错误等导致文件数据丢失的情 况,尤其对于客户企业中一些新手。当然,这里所指的是彻底删除,即已经不能通过“回收 站”找回的情况,比如使用“rm -rf”来删除数据。针对 Linux 下的 EXT 文件系统,可用的恢复 工具有 debugfs、ext3grep、extundelete 等。 其中 extundelete 是一个开源的 Linux 数据 恢复工具,支持 ext3 文件系统。
? ? ? 在现实生活中,记录日志也非常重要,比如银行的转账记录,飞机上的黑盒子,那么将系统和应用发生的事件记录至日志中,以助于排错和分析使用日志记录的内容包括:
历史事件:时间,地点,人物,事件
日志级别:事件的关键性程度,Loglevel
内核及系统日志由系统服务 rsyslog 统一管理,根据其主配置文件 /etc/rsyslog.conf
Linux 操作系统本身和大部分服务器程序的日志文件都默认放在目录/var/log/下
rsyslog是CentOS 6以后版本的系统管理服务:它提供了高性能,出色的安全性和模块化设计。
当应用有限的处理时,RSYSLOG每秒可以将超过一百万的消息传递到本地目的地。即使在远程的目的地和更精细的处理中,性能通常也被认为是惊人的”。
- 多线程
- UDP, TCP, SSL, TLS, RELP
- MySQL, PGSQL, Oracle实现日志存储
- 强大的过滤器,可实现过滤记录日志信息中任意部分?
- 自定义输出格式 ? ?可以日志
- 适用于企业级
日志 ?系统日志? ? ?
?软件日志 ?自己的日志 ??
程序包:rsyslog
主程序:/usr/sbin/rsyslogd
CentOS 6:/etc/rc.d/init.d/rsyslog {start|stop|restart|status}
CentOS 7,8:/usr/lib/systemd/system/rsyslog.service
配置文件:/etc/rsyslog.conf,/etc/rsyslog.d/*.conf
库文件: /lib64/rsyslog/*.so
系统日志:
?/var/log/secure:系统安全日志(用户登录),文本格式,应周期性分析
/var/log/messages :系统中大部分的信息
用户登录日志:
/var/log/btmp:当前系统上,用户的失败尝试登录相关的日志信息,二进制格式,lastb命令进行查看
/var/log/wtmp:当前系统上,用户正常登录系统的相关日志信息,二进制格式,last命令可以查看/var/log/lastlog:每一个用户最近一次的登录信息,二进制格式,lastlog命令可以查看
程序日志:是和程序本身有关,有的有独立日志,有的没有独立日志
/var/log/dmesg:CentOS7 之前版本系统引导过程中的日志信息,文本格式,开机后的硬件变化将不再记录专用命令dmesg查看,可持续记录硬件变化的情况
/var/log/boot.log 系统服务启动的相关信息,文本格式
/var/log/messages :系统中大部分的信息
/var/log/anaconda : anaconda的日志操作系统安装时安装的软件信息
CentOS 7 以后版,利用Systemd 统一管理所有 Unit 的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核日志和应用日志)。
日志的配置文件:/etc/systemd/journald.conf
journalctl? ?命令格式? ? ?journalctl [OPTIONS...] [MATCHES...]
面试题2:
我想看到几点几分到几点几分之间的日志
内存中
journalctl -S “2024-01-01 8:00” -U “2024 -02-02 8:00”
-S, --since=, -U, --until=
? 显示晚于指定时间(--since=)的日志、显示早于指定时间(--until=)的日志。
? 参数的格式类似 "2012-10-30 18:17:16" 这样。 如果省略了"时:分:秒"部分,
? 则相当于设为 "00:00:00" 。 如果仅省略了"秒"的部分则相当于设为 ":00" 。
? 如果省略了"年-月-日"部分, 则相当于设为当前日期。 除了"年-月-日 时:分:秒"格式,
? 参数还可以进行如下设置: (1)设为 "yesterday", "today", "tomorrow"
? 以表示那一天的零点(00:00:00)。 (2)设为 "now" 以表示当前时间。
? (3)可以在"年-月-日 时:分:秒"前加上 "-"(前移) 或 "+"(后移)
? 前缀以表示相对于当前时间的偏移。 关于时间与日期的详细规范, 参见
? systemd.time(7)
-e, --pager-end
? 在分页工具内立即跳转到日志的尾部。 此选项隐含了 -n1000
? 以确保分页工具不必缓存太多的日志行。 不过这个隐含的行数可以被明确设置的 -n
? 选项覆盖。 注意,此选项仅可用于 less(1) 分页器。
-u, --unit=UNIT|PATTERN
? 仅显示属于特定单元的日志。 也就是单元名称正好等于 UNIT 或者符合 PATTERN
? 模式的单元。 这相当于添加了一个 "_SYSTEMD_UNIT=UNIT" 匹配项(对于 UNIT 来说),
? 或一组匹配项(对于 PATTERN 来说)。
? 可以多次使用此选项以添加多个并列的匹配条件(相当于用"OR"逻辑连接)。
-x, --catalog
? 在日志的输出中增加一些解释性的短文本, 以帮助进一步说明日志的含义、
? 问题的解决方案、支持论坛、 开发文档、以及其他任何内容。
? 并非所有日志都有这些额外的帮助文本, 详见 Message Catalog Developer
? Documentation[5] 文档。
? 注意,如果要将日志输出用于bug报告, 请不要使用此选项。
logrotate 程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件,称为日志转储或滚动。可以根据日志文件的大小,也可以根据其天数来转储,这个过程一般通过 cron 程序来执行
logrotate 配置
软件包:logrotate
相关文件
计划任务:/etc/cron.daily/logrotate
程序文件:/usr/sbin/logrotate
配置文件: /etc/logrotate.conf
日志文件:/var/lib/logrotate/logrotate.status
1.使用Rsyslog创建日志优点
在运维过程中某些服务是自带错误日志和运行日志的,但是有一些服务安装完成后是没有日志的。下面我们以sshd(让你远程登录)服务为例创建一个日志,例如sshd本身是有日志的,但是与其他安全服务一样都存放在/var/log/secure/messages文件中不方便我们查看sshd的日志,如果我们将sshd服务的日志单独生成一个日志文件便于我们查看,注意使用Rsyslog创建日志的服务必须支持Rsyslog。
2.rsyslog配置文件
/etc/rsyslog.conf 配置文件格式:由三部分组成
MODULES:相关模块配置
GLOBAL DIRECTIVES:全局配置
RULES:日志记录相关的规则配置
比如sshd的日志文件,它的日志文件是放在公共日志文件/var/log/srcure中
它是一个远程连接文件,比较重要,我们把它单独存放一个文件
local6:自定义规则? 范围:local0-local7? 7已经被使用,我们可以设置除7外的数值
原来ssh 日志 在/var/log/secure
将 ssh服务的日志 文件 独立出来
[root@localhost ~]#tail -f /var/log/secure
#查看ssh服务的日志位置
[root@localhost ~]#vim /etc/ssh/sshd_config
#修改ssh配置文件,32下一行添加自己的自定义
32 #SyslogFacility AUTHPRIV
33 SyslogFacility LOCAL6
[root@localhost ~]#vim /etc/rsyslog.conf
#76 行添加自己的文件位置
local6.* /opt/ssh.log
[root@localhost log]#systemctl restart rsyslog.service sshd
#重启服务
ssh 自己的ip地址
rsyslog 统一收集日志
日志服务器更方便管理企业内部日志,将业务服务器的日志都放到日志服务器上更便于运维和管理。
通过网络日志服务器,可以将多台机器的日志放到一台机器上,从而实现日志的统一管理
两台机器的传输,需要通过协议和端口号,所以,我们要先启用两台机器的端口
在/etc/rsyslog.conf配置文件中,打开tcp的514端口,查看是否打开,并重新加载服务