文件数据包括 元信息 与 实际数据
元信息: 文件的属性、文件大小、权限、时间戳
实际数据: 文件的内容
文件存储在硬盘上,硬盘最小存储单位是“扇区”,每个扇区存储512字节
block(块)
inode(索引节点)
文件的时间戳
文件类型
链接数
有关文件的其他数据
注意:inode不包含文件名
用stat命令,查看某个文件的 inode 信息
ctime(change time):最后一次改变文件或目录(属性)的时间,
atime(access time):是最近一次访问文件或目录的时间
mtime(modify time):是最后一次修改文件或目录(内容)的时间
atime:
mtime 和 ctime
ctime:
inode不包含文件名,文件名是存放在目录当中的,Linux系统中一切皆文件,因此目录也是一种文件。
每个inode都有一个号码,操作系统用inode号码识别不同的文件
Linux系统内部不使用文件名,而使用inode号码来识别文件
对于用户,文件名只是inode号码便于识别的别称
1. 表面上,用户通过文件名,打开文件
2. 实际上,系统内部这个过程分成三步:
系统找到这个文件名对应的inode号码
通过inode号码 ,获取inode信息
根据inode信息,找到文件数据所在的block
3. 读出数据使用Is -i命令,可以看到文件名对应的inode号码:
4. 使用stat命令,查看文件inode信息中的inode号码:
- 访问文件的简单流程:
当一个用户在Linux系统中试图访问一个文件时,系统会先根据文件名去查找它的 inode ,看该用户是否具有访问这个文件的权限
如果有,就指向相对应的数据block
如果没有,就返回Permission denied
inode也会消耗硬盘空间,每个inode的大小,一般是128字节或256字节
inode的总数,在格式化时就确定
查看每个硬盘分区的inode总数和已经使用的数量,可以使用命令: df -i
注意:
inode 号 在同一个设备上是唯一的
小问题:
磁盘空间还剩余很多,但是无法继续建立文件
原因:inode号用完了
解决:普通分区 删除没有用的空文件
lvm 扩容
由于inode 号码与文件名分离,导致Linux系统具备以下几种特有的现象:
1.删除inode ,能够起到删除文件的作用
删除 inode 号的方法:
法一: find 文件位置 -inum inode号码 -exec rm -i {} \;
法二: find 文件位置 -inum inode号码 -delete
2. mv移动文件或重命名文件,只是改变文件名,不影响inode 号(这里指的是非挂载磁盘)
打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名
3. 文件数据被修改保存后,会生成一个新的 inode 号码
4. cp命令与inode:
分配一个空闲的inode号
在inode表中生成新条目在目录中创建一个目录项
将名称与inode编号关联拷贝数据生成新的文件
5. rm命令与inode
链接数递减,从而释放的inode号可以被重用把数据块放在空闲列表中
删除目录项
数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖
6. mv命令和inode
如果mv命令的目标和源在同一设备,不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动!
删除旧的目录对应关系新建目录对应关系
文件存储小结:
linux中使用文件:
根据文件夹的文件名和inode号的关系 找到对应的inode表,再根据inode表当中的指针找到磁盘上的真实数据。
创建格式:
ln [-s] 源文件或目录...链接文件或目标位置(加-s为软连接,不加为硬链接)
对比项 | 硬连接 | 软连接 |
---|---|---|
本质 | 本质是同一个文件 | 本质不是同一个文件 |
inode | 相同 | 不同 |
连接数 | 创建新的硬链接,链接数会增加,删除硬链接,链接数减少 | 删除新建不会改变 |
文件夹 | 不支持 | 支持 |
删除源文件 | 只是链接数减一,但链接文件的访问不受影响 | 无法访问连接文件 |
文件类型 | 和源文件相同 | 链接文件,和源文件无关 |
文件大小 | 和源文件相同 | 源文件的路径的长度 |
用于记录系统、程序运行中发生的各种事件
通过阅读日志,有助于诊断和解决系统故障
日志保存位置默认位于:/var/log目录下
内核及系统日志:这种日志数据由系统服务rsyslog统一管理,根据其主配置文件/etc/rsyslog.conf中的设置决定将内核消息及各种系统程序消息记录到什么位置
用户日志:这种日志数据用于记录Linux系统用户登录及退出系统的相关信息,包括用户名、登 录的终端、登录时间、来源主机、正在使用的进程操作等
程序日志:有些应用程序会选择由自己独立管理一份日志文件(而不是交给rsyslog服务管理),用于记录本程序运行过程中的各种事件信息
事件产生的时间。
产生事件的服务器的主机名。
产生事件的服务名或程序名。
事件的具体信息。
记录Linux内核消息及各种应用程序的公共日志信息,包括启动、I0错误、网络错误、程序故障等。 对于未使用独立日志文件的应用程序或服务,一般都可以从该日志文件中获得相关的事件记录信息。
记录crond计划任务产生的事件信息。
记录Linux系统在引导过程中的各种事件信息。
记录进入或发出系统的电子邮件活动。
/var/log/secure: 记录用户认证相关的安全事件信息。
/var/log/lastlog: 记录每个用户最近的登录事件。二进制格式 lastlog查看
/var/log/wtmp: 记录每个用户登录、注销及系统启动和停机事件。二进制格式 last查看
/var/run/btmp: 记录失败的、错误的登录尝试及验证事件。二进制格式 lastb查看
是一个软件,帮助管理日志
rsyslog是CentOS 6以后版本的系统管理服务:它提供了高性能,出色的安全性和模块化设计。尽管rsyslog最初是常规的syslogd,但发展成为一种瑞士军刀式的记录工具,能够接受来自各种来源的输入,并将其转换,然后输出到不同的目的地。
当应用有限的处理时,RSYSLOG每秒可以将超过一百万的消息传递到本地目的地。即使在远程的目的地和更精细的处理中,性能通常也被认为是惊人的。
rsyslog 特性
多线程
UDP, TCP, SSL, TLS, RELP
MySQL, PGSQL, Oracle实现日志存储
强大的过滤器,可实现过滤记录日志信息中任意部分
自定义输出格式 可以日志
适用于企业级
ELK:由Elasticsearch, Logstash, Kibana三个软件组成
非关系型分布式数据库基于apache软件基金会jakarta项目组的项目lucene
Elasticsearch是个开源分布式搜索引擎,可以处理大规模日志数据,比如:Nginx、Tomcat、系统日志等功能
Logstash对日志进行收集、分析,过滤,并将其存储供以后使用
Kibana 可以提供的日志分析友好的 Web 界面
kafka消息队列
sshd软件的日志是放在 /var/log/secure 日志中,和很多其他软件放在一起
这个软件比较重要,所以我们要把sshd软件的日志单独存放
步骤:
① 修改 rsyslog 软件的配置文件
② 修改 sshd 里面配置文件
③ 重启服务
192.168.44.20 --> 192.168.44.30
步骤:
① 关闭两边的防火墙和防护
② 192.168.44.20上的操作
③ 192.168.44.30 上的操作
[root@localhost mnt]# cat /etc/rsyslog.conf
查看/etc/rsyslog.conf配置文件
* . info;mail.none;authpriv.none;cron.none /var/log/messages
*.info #表示info等级及以上的所有等级的信息都写到对应的日志文件里
mail.none #表示某事件的信息不写到日志文件里(这里比如是邮件)
(数字等级越小,优先级越高,消息越重要)
在wtmp、btmp、 lastlog等日志文件中 ,保存了系统用户登录、 退出等相关的事件消息。 但是这些文件都是二进制的数据文件,不能直接使用tail、less等文本查看工具进行浏览,需要使用who、w、users、 last和lastb等用户查询命令来获取日志信息。
(若发现未授权的用户登录,可能当前主机已被入侵)
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等专用日志分析工具
及时做好备份和归档
延长日志保存期限
控制日志访问权限
日志中可能会包含各类敏感信息,如账户和口令等
集中管理日志
将服务器的日志文件发到统一-的日志文件服务器
便于日志信息的统- -收集、 整理和分析
杜绝日志信息的意外丢失、恶意篡改或删除
/var/log/secure:系统安全日志(用户登录),文本格式,应周期性分析
/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的日志操作系统安装时安装的软件信息
日志配置文件:
/etc/systemd/journald.conf
journalctl命令格式:
journalctl [OPTIONS...] [MATCHES...]
选项:
选项 | 说明 |
-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 | 检查日志文件的内在一致性 |
小问题:
想看到几点几分到几点几分之间的日志?
内存中:
日志文件:
sed
awk 查看
logrotate 程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件,称为日志转储或滚动。可以根据日志文件的大小,也可以根据其天数来转储,这个过程一般通过 cron 程序来执行
相关文件:
计划任务:/etc/cron.daily/logrotate
程序文件:/usr/sbin/logrotate
配置文件: /etc/logrotate.conf
日志文件:/var/lib/logrotate/logrotate.status
配置参数 | 说明 |
---|---|
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 | 如果日志不存在,提示错误,此为默认值 |