每个文件的属性信息,比如:文件的大小,时间,类型,权限等,称为文件的元数据(meta data 元信息 )。
元数据是存放在inode(index node)表中。inode 表中有很多条记录组成,第一条记录对应的存放了一个文件数据包括 元信息 与 实际数据。
元信息: 文件的属性、文件大小、权限、时间戳
实际数据: 文件的内容
文件存储在硬盘上,硬盘最小存储单位是“扇区”,每个扇区存储512字节
block(块)
inode(索引节点)
每一个inode表记录对应的保存了以下信息
inode number 节点号
文件类型
权限
UID
GID
链接数(指向这个文件名路径名称个数)
该文件的大小和不同的时间戳
指向磁盘上文件的数据块指针
有关文件的其他数据
ls -i
ll -i
stat
1.表面上,用户通过文件名,打开文件
2. 实际上,系统内部这个过程分成三步:
系统找到这个文件名对应的inode号码
通过inode号码 ,获取inode信息
根据inode信息,找到文件数据所在的block
有3个时间:
最近访问atime:查看文件的时间
最近更改mtime:最近更改文件内容的时间,注意:更改完内容之后,ctime也会改变
最近改动ctime:最近更改文件元信息的时间,比如改变权限等
atime:时间是只有打开过以后才会变
mtime:最近更改时间
ctime:最近改动时间。属性、元信息改变
注意:磁盘空间还剩余很多,但是无法继续建立文件
原因:inode号用完了
解决:普通分区 删除没有用的空文件
lvm 扩容
由于inode 号码与文件名分离,导致Linux系统具备以下几种特有的现象:
文件名包含特殊字符,可能无法正常删除,这是直接删除inode,能够起到删除文件的作用
移动文件或重命名文件,只是改变文件名,不影响inode号码
打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名
文件数据被修改保存后,会生成一个新的inode号
删除 inode 号的方法:
(1): find 文件位置 -inum inode号码 -exec rm -i {} \;
(2): find 文件位置 -inum inode号码 -delete
分配一个空闲的inode号,在inode表中生成新条目
在目录中创建一个目录项,将名称与inode编号关联
拷贝数据生成新的文件
硬链接数递减,从而释放的inode号可以被重用
把数据块放在空闲列表中
删除目录项
数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖
不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动!
删除旧的目录对应关系新建目录对应关系
对比项 | 硬连接 | 软连接 |
---|---|---|
本质 | 本质是同一个文件 | 本质不是同一个文件 |
inode | 相同 | 不同 |
连接数 | 创建新的硬链接,链接数会增加,删除硬链接,链接数减少 | 删除新建不会改变 |
文件夹 | 不支持 | 支持 |
删除源文件 | 只是链接数减一,但链接文件的访问不受影响 | 无法访问连接文件 |
文件类型 | 和源文件相同 | 链接文件,和源文件无关 |
文件大小 | 和源文件相同 | 源文件的路径的长度 |
用于记录系统、程序运行中发生的各种事件
通过阅读日志,有助于诊断和解决系统故障
日志保存位置默认位于:/var/log目录下
分为三类:
/var/log/messages:系统中的大部分信息日志
/var/log/secure:系统安全日志(用户登录)
/var/log/boot.log:系统服务启动的相关信息,文本格式
/var/log/anaconda : anaconda的日志操作系统安装时安装的软件信息
/var/log/btmp:当前系统用户登录失败的信息,使用lastb命令查看,因为btmp是一个二进制文件
/var/log/wtmp:用户正常登录信息,使用last命令查看
/var/log/lastalog:每一个用户最近一次的登录信息,二进制格式,lastlog命令可以查看
和程序有关,有的程序有独立日志,有的没有独立日志
比如sshd,这是一个远程登录的程序,它的日志文件就放在/var/log/secure文件下
日志文件的格式包含以下 4 列:
事件产生的时间。
产生事件的服务器的主机名。
产生事件的服务名或程序名。
事件的具体信息。
rsyslog是CentOS 6以后版本的系统管理服务:它提供了高性能,出色的安全性和模块化设计。尽管rsyslog最初是常规的syslogd,但发展成为一种瑞士军刀式的记录工具,能够接受来自各种来源的输入,并将其转换,然后输出到不同的目的地。
当应用有限的处理时,RSYSLOG每秒可以将超过一百万的消息传递到本地目的地。即使在远程的目的地和更精细的处理中,性能通常也被认为是惊人的”。
rsyslog 特性:
多线程
UDP, TCP, SSL, TLS, RELP
MySQL, PGSQL, Oracle实现日志存储
强大的过滤器,可实现过滤记录日志信息中任意部分
自定义输出格式 可以日志
适用于企业级
日志内的信息等级越高(数值越小等级越高),说明此信息越重要,要优先处理。按0-7分为8级
实验:通过 rsyslog 软件将 sshd 程序的日志独立出来
sshd软件的日志是放在 /var/log/secure 日志中,和很多其他软件放在一起
这个软件比较重要,所以我们要把sshd软件的日志单独存放
修改 rsyslog 软件的配置文件
修改 sshd 里面配置文件
重新启动服务,并实时查看
journalctl的命令格式:
journalctl [OPTIONS...] [MATCHES...]
日志的配置文件:
/etc/systemd/journald.conf
选项:
选项 | 说明 |
---|---|
-e | 在分页工具内立即跳转到日志的尾部。 |
-x | 在日志的输出中增加一些解释性的短文本, 以帮助进一步说明日志的含义 |
-a | 完整显示所有字段内容 |
-f | 只显示最新的日志项,并且不断显示新生成的日志项。 |
-r | 反转日志行的输出顺序, 也就是最先显示最新的日志 |
-o | 控制日志的输出格式 |
-q | 当以普通用户身份运行时, 不显示任何警告信息与提示信息 |
-m | 混合显示包括远程日志在内的所有可见日志 |
-b | 显示特定于某次启动的日志 |
-k | 仅显示内核日志 |
-t | 仅显示 syslog[1] 识别符为 SYSLOG_IDENTIFIER 的日志项 |
-u | 仅显示属于特定单元的日志 |
-p | 根据日志等级(包括等级范围)过滤输出结果。 |
-c | 从指定的游标(cursor)开始显示日志。 |
-S | 显示晚于指定时间(--since=)的日志、显示早于指定时间(--until=)的日志 |
--no-full | 如果字段内容超长则以省略号(...)截断以适应列宽 |
--no-tail | 显示所有日志行 |
--utc | 以世界统一时间(UTC)表示时间 |
--no-hostname | 不显示来源于本机的日志消息的主机名字段 |
--no-pager | 不将程序的输出内容管道(pipe)给分页程序 |
--rotate | 要求日志守护进程滚动日志文件 |
--flush | 要求日志守护进程 |
--verify | 检查日志文件的内在一致性 |
查看几点几分到几点几分之间的日志?
logrotate 程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件,称为日志转储或滚动。可以根据日志文件的大小,也可以根据其天数来转储,这个过程一般通过 cron 程序来执行。
相关文件
计划任务:/etc/cron.daily/logrotate
程序文件:/usr/sbin/logrotate
配置文件: /etc/logrotate.conf
日志文件:/var/lib/logrotate/logrotate.status
在/etc/logrotate.conf下配置
配置参数 | 说明 |
---|---|
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 | 如果日志不存在,提示错误,此为默认值 |
配置主要的参数如下:
[root@localhost ~]#vim /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly
#一周生成一个新的日志文件
# keep 4 weeks worth of backlogs
rotate 4
#只保留最近的4个文件
# use date as a suffix of the rotated file
dateext
# 添加一个日期后缀