文件系统和日志
目录
一、inode号和black
(一)inode号概述
inode(Index Node,索引节点)是文件系统中用于组织和管理文件数据的一种数据结构。在Linux和其他类Unix操作系统中,每个文件和目录都有一个与之关联的inode,它包含了文件的所有元数据,如:文件权限(读、写、执行权限)、所有者信息、所属组信息、文件大小、创建时间、修改时间、访问时间、指向文件内容的数据块指针列表
1.文件是存储在硬盘上的,硬盘的最小存储单位叫做“扇区”(sector),每个扇区存储512字节。
2.一般连续八个扇区组成一个"块”(block),一个块是4K大小,是文件存取的最小单位。操作系统读取硬盘的时候,是一次性连续读取多个扇区,即一个块一个块的读取的。4k一读,8个扇区一读
3.文件数据包括实际数据与元信息(类似文件属性)。文件数据存储在“块"中,存储文件元信息(比如文件的创建者、创建日期、文件大小、文件权限等)的区域就叫做inode表。 因此,一个文件必须占用一个inode,并且至少占用一个block
4.由于inode不包含文件名,文件名实际上是存储在目录条目中的,而目录条目则包含指向相应inode的链接。当您删除一个文件时,如果该文件的硬链接数为0,则其占用的inode将被回收并可以被重新分配给新的文件。
5.在一个文件系统中,inode数量是在格式化时固定的,它的资源与磁盘的大小有关,磁盘越大,可分配inode号越多,并且每个inode都拥有一个唯一的数字标识符——inode编号。通过inode编号,系统可以在不依赖文件名的情况下定位到文件内容。这对于找回误删除但inode还未被覆盖的情况下的文件特别有用。
6.如何查看indoe号
可以使用ls -i或者ll? -i查看indoe号
stat命令也可以查看文件的详细信息
stat? ?文件/目录名
可以看到使用stat命令查看时可以发现三种时间段
atime:最近访问
mtime:最近更改
ctime:最近改动
比如新建一个文件,三种时间时完全一样的
我们使用cat 命令去查看一下,访问时间就会发生改变
如果在文件里添加内容,或文件内容发生更改就会,最近更改时间就会发生变化
如果我们只是更改该文件权限,那么就只有改动时间会发生改变
(二)硬链接和软链接
使用ln命令创建链接文件
ln? ?原文件名? ? 目标位置? ?:创建硬链接文件
ln? ? -s? ?原文件名? ? 目标位置? :创建软链接文件
对比项 | 硬连接 | 软连接 |
---|---|---|
本质 | 本质是同一个文件 | 本质不是同一个文件 |
inode | 相同 | 不同 |
连接数 | 创建新的硬链接,链接数会增加,删除硬链接,链接数减少 | 删除新建不会改变 |
文件夹 | 不支持 | 支持 |
删除源文件 | 只是链接数减一,但链接文件的访问不受影响 | 无法访问连接文件 |
文件类型 | 和源文件相同 | 链接文件,和源文件无关 |
文件大小 | 和源文件相同 | 源文件的路径的长度 |
(三)inode值
在一块硬盘或分区中,如果inode值使用完,即便磁盘还有空间,也无法继续创建文件
我们使用一块磁盘分区做个实,给分区100M的内存,可以看到它的 inode号是有限的,即使还有内存,还是无法创建文件。
在实际工作中出现这种情况,需要删除一些不需要的文件去释放相应的inode号
当系统磁盘资源不足时,无法通过删除文件名删除数据时,我们可以通过删除inode值来进行删除
二、日志
Linux日志在系统管理、故障排查和安全审计等方面发挥着至关重要的作用
1.监控系统运行状态: 日志记录了系统启动、服务运行、用户活动等信息,帮助管理员实时了解系统的运行状况。例如,通过查看内核日志(如/var/log/kern.log
或使用dmesg
命令)可以检查硬件驱动加载、系统启动过程中的错误。
2.故障排查与调试: 当应用程序崩溃、服务无法正常启动或系统出现异常时,日志文件是查找问题原因的关键途径。比如Web服务器(如Apache或Nginx)的访问日志可以帮助定位网站问题,系统服务日志则能揭示服务失败的具体原因。
3.安全分析: 安全相关的日志,如认证日志(如/var/log/auth.log
或/var/log/secure
)记录了用户的登录尝试,包括成功的登录和失败的登录尝试,这对于检测潜在的安全威胁和入侵行为至关重要。
4.性能优化: 一些应用程序和服务的日志会记录资源使用情况,如CPU、内存、磁盘I/O等,这些数据有助于进行性能分析和调优。
5.合规性要求: 在某些行业和法规要求下,系统必须保存详细的日志以满足审计需求。例如,金融行业的交易记录需要详细而准确地保存以便事后审查。
6.长期存档与历史数据分析: 日志也可以作为长期数据保留的一部分,用于分析历史趋势和预测未来可能的问题。
总之,Linux日志提供了宝贵的洞察力,使得系统管理员能够更好地管理和维护系统,并在出现问题时迅速找到解决方案。
(一)日志的分类
日志一般存放在/var/log目录下,大概分为三类
1.系统日志
/var/log/messages:系统中的大部分信息日志
/var/log/secure:系统安全日志(用户登录)
/var/log/boot.log:系统服务启动的相关信息,文本格式
/var/log/anaconda : anaconda的日志操作系统安装时安装的软件信息
.......................
2.用户日志
/var/log/btmp:当前系统用户登录失败的信息,使用lastb命令查看,因为btmp是一个二进制文件
/var/log/wtmp:用户正常登录信息,使用last命令查看
/var/log/lastalog:每一个用户最近一次的登录信息,二进制格式,lastlog命令可以查看
还有一些其它的用户日志,也都是可以查看用户信息
3.程序日志
和程序有关,有的程序有独立日志,有的没有独立日志
比如sshd,这是一个远程登录的程序,它的日志文件就放在/var/log/secure文件下
(二)日志文件分析
日志文件分析是系统管理、故障排查、性能优化以及安全审计等众多领域中的关键任务
1.日志结构
系统日志一般分为四段,以messages日志为例
2.日志等级
日志内的信息等级越高(数值越小等级越高),说明此信息越重要,要优先处理。按0-7分为8级
0 | EMERG(紧急):会导致主机系统不可用的情况 |
1 | ALERT(警告):必须马上采取措施解决的问题 |
2 | CRIT(严重):比较严重的情况 |
3 | ERR(错误):运行出现错误 |
4 | WARNING(提醒):可能影响系统功能,需要提醒用户的重要事件。 |
5 | NOTICE(注意):不会影响正常功能,但是需要注意的事件 |
6 | INFO(信息):一般信息 |
7 | DEBUG(调试):程序或系统i调试信息等 |
3.日志内容
就以上面的sshd日志为例
Jan ?8 15:38:30? :时间
localhost? ?:主机名
sshd[54799]:? 子系统名[进程号]
Failed password for root from 192.168.83.40 port 39072 ssh2? :信息
大概意思是在1月8日15时38分30秒的时候,IP地址为192.168.83.40,主机名为localhost的机器通过sshd服务(进程号为54799),连接时,验证密码错误,导致登录失败。
(三)rsyslog管理
rsyslog是一个开源的系统日志收集工具,广泛应用于各种Linux和Unix-like操作系统中。它用于替换传统的syslogd服务,提供更强大的功能和更高的性能
它的配置文件放/etc/rsyslog.conf在中,我们可以通过修改配置文件,来实现日志的管理
比如sshd的日志文件,它的日志文件是放在公共日志文件/var/log/srcure中
它是一个远程连接文件,比较重要,我们把它单独存放一个文件
首先vim? /etc/rsyslog.conf? 打开配置文件
local6:自定义规则? 范围:local0-local7? 7已经被使用,我们可以设置除7外的数值
.*:所有级别的信息(0-7)
/data/sshd.log:/data表示路径? sshd.log自定义文件名
vim 打开/etc/ssh/sshd_config文件
在配置文件中添加以下内容
保存退出后,重新启动一下这两个程序
这样sshd的日志信息就会存到自定义的文件中
(四)设置网络日志服务器
通过网络日志服务器,可以将多台机器的日志放到一台机器上,从而实现日志的统一管理
两台机器的传输,需要通过协议和端口号,所以,我们要先启用两台机器的端口
下面有两种协议,你想开启什么协议,就将前面的#删除开启,这里开启TCP协议
在客户端的/etc/rsyslog.conf配置文件中添加下面的内容
默认就是在服务端的messages文件中,改完配置文件后,还是一样重启以下rsyslog服务
查看一下两边的端口号是否启用
下面我们来进行测试,在客户机上重新加载一下sshd服务
在服务端上就会显示出来
(五)日志管理工具 journactl
此命令基本包含了所有程序的日志信息,执行journactl命令,可以看到信息内容
如果我们只想看一个程序的内容,可以输入journactl? -u? 程序名
比如我们指向看到sshd服务的信息
journactl? -xe? 可以看到后面一些内容,加上? --no-pager可以将隐藏内容补全
想查看一个时间段的日志输入journactl ?-S”开始时间”???-U”结束时间”
(六)日志转储
使用logrotate命令。logrotate 程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件,称为日志转储或滚动。可以根据日志文件的大小,也可以根据其天数来转储,这个过程一般通过 cron 程序来执行
首先,我们在/var/log/httpd的目录下看到两个文件,这是httpd服务的日志信息
如果我们现在把access_log文件移动成一个新的文件,加载后又会生成新的文件
这是因为在httpd的配置文件中规定了
我们查看一下logrotate的配置文件
下面是有关的详细信息
配置参数 | 说明 |
---|---|
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或MB |
sharedscripts | 默认,对每个转储日志运行prerotate和postrotate脚本,日志文件的绝对路径作为第一个参数传递给脚本。 这意味着单个脚本可以针对与多个文件匹配的日志文件条目多次运行(例如/ var / log / news /.example)。 如果指定此项sharedscripts,则无论有多少个日志*与通配符模式匹配,脚本都只会运行一次 |
nosharedscripts | 针对每一个转储的日志文件,都执行一次prerotate和 postrotate脚本,此为默认值 |
missingok | 如果日志不存在,不提示错误,继续处理下一个 |
nomissingok | 如果日志不存在,提示错误,此为默认值 |
总结:Linux日志提供了宝贵的洞察力,使得系统管理员能够更好地管理和维护系统,并在出现问题时迅速找到解决方案。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!