我的世界做壁纸的网站,wordpress博客翻译,专做杰伦头像的网站,修改wordpress 字体目录
一、Linux文件系统
1、inode 与 block 详解
1.1 inode 和 block 概述
1.2 inode表的内容
1.3 查看文件的inode号码
1.4 模拟innode号耗尽故障处理
2、访问文件的流程
3、文件恢复
3.1 恢复误删除的ext3格式文件
3.2 恢复误删除的 xfs 格式文件
二、Linux日志…目录
一、Linux文件系统
1、inode 与 block 详解
1.1 inode 和 block 概述
1.2 inode表的内容
1.3 查看文件的inode号码
1.4 模拟innode号耗尽故障处理
2、访问文件的流程
3、文件恢复
3.1 恢复误删除的ext3格式文件
3.2 恢复误删除的 xfs 格式文件
二、Linux日志文件管理
1、日志的功能
2、日志文件种类
3、日志消息级别
4、rsyslog工具管理日志
4.1 rsyslog 相关文件
4.2 /etc/rsyslog.conf 配置文件格式
4.3 通过rsyslog软件将sshd程序的日志独立
4.4 网络日志远程日志功能
5、journalctl工具管理日志
6、logrotate工具日志转储 一、Linux文件系统
Linux文件系统是用于组织和存储数据的一种结构化的方法它定义了文件和目录的存储方式以及对它们进行访问和管理的规则Linux支持多种文件系统类型如Ext4、XFS、Btrfs等。文件系统类型影响文件系统的性能、稳定性和支持的特性
1、inode 与 block 详解
1.1 inode 和 block 概述
inode索引节点 inode 是文件系统中的一种数据结构用于存储文件或目录的元数据信息如文件大小、权限、所有者、时间戳等。每个文件和目录都与一个唯一的 inode 相关联它们可以通过 inode 而不是文件名来标识和访问
block块文件是存储在硬盘上的硬盘的最小存储单位叫做 “扇区” (sector)每个扇区存储 512 字节。一般连续八个扇区组成一个 “块” (block)一个块是 4K 大小是文件系统中存储数据的最小单位。当文件系统需要存储文件时它将文件分割成块并将这些块分配给存储介质上的不同位置。文件系统使用块来管理存储空间并存储文件数据
1.2 inode表的内容
元数据每个文件的属性信息比如文件的大小时间类型权限等。而元数据是存放在inodeindex node表中
每一个inode表记录对应的保存了以下信息
文件的字节数文件拥有者的 User ID文件的 Group ID文件的读、写、执行权限文件的时间戳共有三个
简写全名中文名含义atimeaccess time访问时间文件内容最后被访问的时间mtimemodify time修改时间文件内容最后被修改的时间ctimechange time变化时间文件的元数据发生变化的时间比如权限所有者等
链接数即有多少文件名指向这个 inode文件数据 block 的位置 1.3 查看文件的inode号码
命令一ls -i 文件名
命令二stat 文件名 注 innode不包含文件名。文件名是存放在目录文件夹当中的。Linux 系统中一切皆文件因此目录也是一种文件 操作系统用inode号码来识别不同的文件。Linux系统内部不使用文件名而使用inode号码来识别文件。对于系统来说文件名只是inode号码便于识别的别称文件名和inode号码是一一对应关系每个inode号码对应一个或多个文件名 1.4 模拟innode号耗尽故障处理
df -i #查看设备的inode号数量
touch {1..51300}|xargs -n1 touch #到磁盘设备的挂载目录中创建大量的空文件
ls |wc -l #统计创建文件的个数即总inode号数
****************************************************
解决方法
rm -rf 无用文件名 #删除无用的文件释放inode号
如果设备是逻辑卷可通过扩容来增加空间容量从而增加inode号数量 注 inode号是有限资源它的多少与磁盘大小有关inode号在同一设备上是唯一的在不同设备上可能不唯一 2、访问文件的流程 总结根据文件夹的文件名和indoe号的关系找到对应的inode表再根据inode表当中的指针找到磁盘上的真实数据
3、文件恢复
3.1 恢复误删除的ext3格式文件
使用extundelete工具是一个开源的 Linux 数据恢复工具支持 ext3 文件系统
#安装extundelete软件
yum -y install e2fsprogs-devel e2fsprogs-libs #安装依赖软件
tar -jxvf extundelete-0.2.4.tar.bz2 -C /opt #解压软件包软件包从官网下载
cd /opt/extundelete-0.2.4 #切换到安装目录下
./configure #编译安装
make
make install
ls /usr/local/bin/ #查看extundelete软件************************************************************************
目前使用版本只对ext3有效设置磁盘分区略
mkfs.ext3 /dev/sdb1 #文件系统格式化
mount /dev/sdb1 /mnt #挂载磁盘分区
cd /mnt #切换到挂载点目录
echo 111a #创建文件
echo 222b
echo 333c
echo 444d************************************************************************
#模拟删除文件并恢复
rm -rf a b c d #模拟删除
umount /mnt #解挂载
extundelete /dev/sdb1 --inode 2 #查看该分区下的存在哪些文件
extundelete /dev/sdb1 --restore-all #恢复被删除的文件************************************************************************
#验证查看恢复的文件
cd ~ #切换到当前家目录
ls RECOVERED_FILES/ #在该目录下有恢复文件 3.2 恢复误删除的 xfs 格式文件
使用 xfsdump 与 xfsrestore 工具对xfs 类型的文件进行备份恢复
xfsdump 的备份级别有两种0备份默认级别表示完全备份1-9表示增量备份
通式xfsrestore -f 恢复文件的位置 存放恢复后文件的位置
选项说明-f指定备份文件目录-L指定标签 session label-M指定设备标签 media label-s备份单个文件-s 后面不能直接跟路径 使用 xfsdump 时需要注意以下的几个限制 使用 xfsdump限制较多还是最好提前备份重要数据以防数据丢失 不支持没有挂载的文件系统备份所以只能备份已挂载的 必须使用 root 的权限才能操作 只能备份 XFS 文件系统 备份下来的数据只能让 xfsrestore 解析 不能备份两个具有相同 UUID 的文件系统可使用blkid查看 #安装xfsdump工具
yum install -y xfsdump命令安装**************************************************
#目前使用版本只对xfs有效设置磁盘分区略
mkfs.xfs /dev/sdb1 #文件系统格式化
mount /dev/sdb1 /mnt #挂载磁盘分区
cd /mnt #切换到挂载点目录
echo 111a #创建文件**************************************************
#使用 xfsdump 命令备份整个分区到指定目录
xfsdump -f /opt/bak_sdb1 /dev/sdb1**************************************************
#模拟删除文件并恢复
rm -rf /mnt/* #删除/mnt目录下的所有文件
ls /mnt #查看还有无文件
xfsrestore -f /opt/bak_sdb1 /data/
#使用bak文件将数据恢复到/data下**************************************************
#验证查看恢复的文件
cd /data #切换目录
ls /data #在该目录下有恢复文件
二、Linux日志文件管理
1、日志的功能
记录日志可以记录特定事件、活动或数据以便将来进行查看和分析
故障排除在软件开发和系统管理中日志通常用于跟踪问题和故障帮助识别和解决错误
监控日志记录可以用于监视应用程序、系统或网络的性能和行为从而及时发现异常并采取必要的措施
合规性在许多行业中日志记录是确保合规性和安全性的重要手段例如在金融和医疗领域
分析通过分析日志数据可以获取有关系统使用情况、用户行为和趋势的宝贵信息从而支持决策制定和优化流程
安全日志记录对于安全审计和追踪潜在的安全威胁至关重要能够帮助发现入侵和未经授权的访问
2、日志文件种类
①内核及系统日志 记录 Linux 内核消息及各种应用程序的公共日志信息包括启动、IO错误、网络错误、程序故障等。对于未使用独立日志文件的应用程序或服务一般都可以从该日志文件中获得相关的事件记录信息
/var/log/messages 系统中大部分的信息/var/log/anacondaanaconda的日志操作系统安装时安装的软件信息/var/log/boot.log系统服务启动的相关信息文本格式
②用户日志 记录系统用户登录及退出系统的相关信息
/var/log/secure系统安全日志用户登录文本格式应周期性分析/var/log/btmp当前系统上用户的失败尝试登录相关的日志信息二进制格式文件lastb命令进行查看 /var/log/wtmp当前系统上用户正常登录系统的相关日志信息二进制格式文件last命令可以查看 /var/log/lastlog每一个用户最近一次的登录信息二进制格式文件lastlog命令可以查看
③程序日志 由各种应用程序独立管理的日志文件记录格式不统一
3、日志消息级别
级号消息级别说明0EMERG紧急会导致主机系统不可用的情况1ALERT警告必须马上采取措施解决的问题2CRIT严重比较严重的情况3ERR错误运行出现错误4WARNING提醒可能会影响系统功能的事件5NOTICE注意不会影响系统但值得注意6INFO信息一般信息7DEBUG调试程序或系统调试信息等
4、rsyslog工具管理日志
4.1 rsyslog 相关文件 程序包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
4.2 /etc/rsyslog.conf 配置文件格式
由三部分组成 MODULES相关模块配置 GLOBAL DIRECTIVES全局配置 RULES日志记录相关的规则配置 程序类型mail 邮箱、corn 计划任务、auth 用户认证
自定义类型local0~local67个类型 注rsyslog软件管理日志需要rsyslog软件和其他服务程序之间要相互支持 4.3 通过rsyslog软件将sshd程序的日志独立
原本sshd软件的日志放在/var/log/secure日志中与很多软件放在一起因为这个软件比较重要所以把sshd软件的日志单独存放
#在rsyslog配置文件里添加sshd的程序日志
vim /etc/rsyslog.conf
local6.* /opt/sshd.log *************************************************************************
#修改sshd配置文件
vim /etc/ssh/sshd_config
#SyslogFacility AUTHPRIV #注释掉这行
SyslogFacility local6 #在sshd配置文件里将日志存放在local6类型中**************************************************************************
#验证
systemctl restart rsyslog.service sshd #重启rsyslog软件和sshd软件服务
ssh 172.16.12.12 #远程连接
cat /opt/sshd.log #查看sshd程序日志
①在rsyslog配置文件里添加sshd的程序日志 ②在sshd配置文件里将日志存放在local6类型中 ③验证重启rsyslog软件和sshd软件服务查看指定目录下的日志 4.4 网络日志远程日志功能
允许将来自多个源头如服务器、应用程序、网络设备的日志数据传输到远程位置通常是集中式的日志服务器或云端存储
要求开启日志的远程传输功能在172.16.12.12
#客户端和日志服务器都要关闭防火墙和临时防护
systemctl stop firewalld
setenforce 0
**************************************************
#开启客户端和日志服务器tcp的514端口
vim /etc/rsyslog.conf
$ModLoad imtcp
$InputTCPServerRun 514
或开启客户端和日志服务器udp的514端口
$ModLoad imudp
$UDPServerRun 514**************************************************
systemctl restart rsyslog #重启rsyslog服务
ss -ntap |grep 514 #查看514端口是否打开**************************************************
#在172.16.12.10上设置发送日志到172.16.12.12主机去
vim /etc/rsyslog.conf #修改rsyslog文件配置文件
*.info;mail.none;authpriv.none;cron.none 172.16.12.12
#代表使用tcp代表udp**************************************************
#测试在客户端把写日志进日志服务端
logger this is test log from 172.16.12.10
cat /var/log/messages #在日志服务端查看客户端发来的日志信息
①客户端和日志服务器都要关闭防火墙和临时防护 ②开启客户端和日志服务器tcp的514端口 ③重启rsyslog服务并查看514端口是否打开 ④ 在172.16.12.10上设置发送日志到172.16.12.12主机去 ⑤ 测试在客户端把写日志进日志服务端 5、journalctl工具管理日志
日志的配置文件
/etc/systemd/journald.conf
通式journalctl [OPTIONS...] [MATCHES...]
选项说明--no-full--full -l默认显示完整的字段内容超长的部分换行显示或者被分页工具截断-a--all完整显示所有字段内容 即使其中包含不可打印字符或者字段内容超长-f--follow只显示最新的日志项并且不断显示新生成的日志项-e--pager-end在分页工具内立即跳转到日志的尾部-n--lines限制显示最新的日志行数若不设参数则表示默认值10行--no-tail显示所有日志行-r--reverse反转日志行的输出顺序 也就是最先显示最新的日志-o--output控制日志的输出格式--no-hostname不显示来源于本机的日志消息的主机名字段-x--catalog在日志的输出中增加一些解释性的短文本 以帮助进一步说明日志的含义-q--quiet当以普通用户身份运行时 不显示任何警告信息与提示信息-m--merge混合显示包括远程日志在内的所有可见日志-b显示特定于某次启动的日志-b 1表示按时间顺序排列最早的那次启动 -b 2则表示在时间上第二早的那次启动 -b -0表示最后一次启动 -b -1表示在时间上第二近的那次启动--directory指定了另外一台主机上的日志目录--list-boots列出每次启动的 序号(也就是相对于本次启动的偏移量)、32字符的ID、第一条日志的时间戳、最后一条日志的时间戳-k--dmesg仅显示内核日志-u, --unit仅显示属于特定单元的日志-p, --priority 根据日志等级(包括等级范围)过滤输出结果 -c, --cursor从指定的游标(cursor)开始显示日志--after-cursor从指定的游标(cursor)之后开始显示日志--show-cursor在最后一条日志之后显示游标-S, --since, -U, --until显示晚于指定时间(--since)的日志、显示早于指定时间(--until)的日志-F, --field显示所有日志中某个字段的所有可能值-N, --fields输出所有日志字段的名称--system, --user仅显示系统服务与内核的日志(--system)、 仅显示当前用户的日志(--user)-M, --machine显示来自于正在运行的、特定名称的本地容器的日志-D DIR, --directoryDIR仅显示来自于特定目录中的日志 而不是默认的运行时和系统日志目录中的日志
案例
#查看所有日志默认情况下 只保存本次启动的日志journalctl#查看内核日志不显示应用日志journalctl -k#查看系统本次启动的日志journalctl -bjournalctl -b -0#查看上一次启动的日志需更改设置journalctl -b -1#查看指定时间的日志 -Ssince -Uunitjournalctl --since2024-1-8 19:00:00 #查看2024-1-8 19:00:00的日志journalctl --since 20 min ago #查看20分钟前的日志journalctl --since yesterday #查看昨天的日志journalctl -S 2023-12-31 19:00 -U 2024-1-8 19:00:00
#查看2023-12-31 19:00到2024-1-8 19:00:00的日志journalctl --since 09:00 --until 1 hour ago
#从今天09:00 开始直至一小时前的systemd日志#显示尾部的最新10行日志journalctl -n#显示尾部指定行数的日志journalctl -n 20#实时滚动显示最新日志journalctl -f#查看指定服务的日志journalctl /usr/lib/systemd/systemd#查看指定进程的日志journalctl _PID1 #查看某个路径的脚本的日志journalctl /usr/bin/bash#查看指定用户的日志journalctl _UID33 --since today#查看某个 Unit 的日志journalctl -u nginx.servicejournalctl -u nginx.service --since today#实时滚动显示某个 Unit 的最新日志journalctl -u nginx.service -f#合并显示多个 Unit 的日志journalctl -u nginx.service -u php-fpm.service --since today#查看指定优先级及其以上级别的日志共有8级 0: emerg
1: alert
2: crit
3: err
4: warning
5: notice
6: info
7: debugjournalctl -p err -b#日志默认分页输出--no-pager 改为正常的标准输出journalctl --no-pager#日志管理journalctl
#以 JSON 格式单行输出journalctl -b -u nginx.service -o json#以 JSON 格式多行输出可读性更好journalctl -b -u nginx.serviceqq -o json-pretty#显示日志占据的硬盘空间journalctl --disk-usage#指定日志文件占据的最大空间journalctl --vacuum-size1G#指定日志文件保存多久journalctl --vacuum-time1years
6、logrotate工具日志转储
logrotate工具相关文件 计划任务/etc/cron.daily/logrotate 程序文件/usr/sbin/logrotate 配置文件 /etc/logrotate.conf 日志文件/var/lib/logrotate/logrotate.status 程序独立的配置文件/etc/logrotate.d/*
以bootlog程序为例查看独立的程序bootlog的配置文件格式 配置文件的配置参数说明compress通过gzip压缩转储以后的日志nocompress不压缩copytruncate用于还在打开中的日志文件把当前日志备份并截断nocopytruncate备份日志文件但是不截断create mode ownergroup转储文件使用指定的权限所有者所属组创建新的日志文件nocreate不建立新的日志文件delaycompress和 compress 一起使用时转储的日志文件到下一次转储时才压缩nodelaycompress覆盖 delaycompress 选项转储同时压缩errors address专储时的错误信息发送到指定的Email地址ifempty即使是空文件也转储此为默认选项notifempty如果是空文件的话不转储mail address把转储的日志文件发送到指定的E-mail 地址nomail转储时不发送日志文件olddir directory转储后的日志文件放入指定目录必须和当前日志文件在同一个文件系统noolddir转储后的日志文件和当前日志文件放在同一个目录下prerotate/endscript在转储以前需要执行的命令这两个关键字必须单独成行postrotate/endscript在转储以后需要执行的命令这两个关键字必须单独成行daily指定转储周期为每天weekly指定转储周期为每周monthly指定转储周期为每月rotate count指定日志文件删除之前转储的次数0指没有备份5指保留5个备份tabooext [] list让logrotate*不转储指定扩展名的文件缺省的扩展名是.rpm-orig,.rpmsave, v, 和~size size当日志文件到达指定的大小时才转储bytes(缺省)及KB或MBsharedscripts默认对每个转储日志运行prerotate和postrotate脚本日志文件的绝对路径作为第一个参数传递给脚本。 这意味着单个脚本可以针对与多个文件匹配的日志文件条目多次运行例如/ var / log / news /.example。 如果指定此项sharedscripts则无论有多少个日志*与通配符模式匹配脚本都只会运行一次nosharedscripts针对每一个转储的日志文件都执行一次prerotate和 postrotate脚本此为默认值missingok如果日志不存在不提示错误继续处理下一个nomissingok如果日志不存在提示错误此为默认值
以nginx软件的独立配置文件为模板
cat /etc/logrotate.d/nginx /var/log/nginx/*.log {daily #一天生成一个新的日志rotate 5 #保留5天日志missingok #无所谓有无日志compress #通过gzip压缩转储以后得日志delaycompress #转储的日志文件到下一次转储时才压缩notifempty #空文件不转存create 644 ngnix nginx #转存文件的属性postrotateif [ -f /app/nginx/logs/nginx.pid ]; thenkill -USR1 cat /app/nginx/logs/nginx.pid#日志分割后告诉nginx软件需重新生成新的日志文件fiendscript
} 案例分割日志 ①首先在/var/log/httpd的目录下能看到两个文件这是httpd服务的日志信息 ② 如果把access_log文件移动成一个新的文件加载后又会生成新的文件 因为在httpd的配置文件中规定访问httpd服务通过的日志文件只能存放在/var/log/httpd/access_log中 因为logrotate的子配置文件中规定重新加载httpd服务会在/var/log/httpd/下重新产生新的access_log文件