Linux文件系统和日志分析

目录

一、linux文件系统

1、inode表结构

查看inode号的命令

2、复制(cp),删除(rm),移动文件(mv),inode号的变化

cp(复制)

rm(删除)

mv(移动)

3、三种时间戳

Modify  Time

Access  Time

Change   Time

4、问题:删除文件空间不释放

二、日志文件

1、常见的日志文件

2、日志文件的格式

3、内核日志、公共日志和用户日志

三、修改日志存放位置操作

1、将ssh服务的日志文件独立保存

2、多台服务器与一个日志服务器,实现远程日志功能

四、日志管理工具 journalctl 


一、linux文件系统

1、inode表结构

inode表记录得信息如下:

  • node number 节点号

  • 文件类型

  • 权限

  • UID

  • GID

  • 链接数(指向这个文件名路径名称个数)

  • 该文件的大小和不同的时间戳

  • 指向磁盘上文件的数据块指针

  • 有关文件的其他数据

查看inode号的命令

ls   -i    文件名    或者     stat      文件名

  •  文件是存储在硬盘上的,硬盘的最小存储单位叫做“扇区”(sector),每个扇区存储512字节。
  • 一般连续八个扇区组成一个"块”(block),一个块是4K大小,是文件存取的最小单位。操作系统读取硬盘的时候,是一次性连续读取多个扇区,即一个块一个块的读取的。4k一读,8个扇区一读
  • 文件数据包括实际数据与元信息(类似文件属性)。 一个文件必须占用一个inode 并且至少占用一个block。可以使用du 显示
  • inode不包含文件名。
  • 每个inode都有一个号码,操作系统用inode号码来识别不同的文件。
  • 当用户在Linux系统中试图访问一个文件时,系统会先根据文件名去查找它对应的inode号码:通过inode号码,获取inode信息;根据inode信息,看该用户是否具有访问这个文件的权限;如果有,就指向相对应的数据block,并读取数据。

硬盘上最小的存储单位为扇区(512字节)

文件存储的最小单位为块8个扇区组成为4k

2、复制(cp),删除(rm),移动文件(mv),inode号的变化

cp(复制)

  • 分配一个空闲的inode号,在inode表中生成新条目

  • 在目录中创建一个目录项,将名称与inode编号关联

  • 拷贝数据生成新的文件

rm(删除)

  • 硬链接数递减,从而释放的inode号可以被重用

  • 把数据块放在空闲列表中

  • 删除目录项

  • 数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖

mv(移动)

  • 如果mv命令的目标和源在同一设备,不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动!
  • 删除旧的目录对应关系新建目录对应关系

3、三种时间戳

Modify  Time

文件最近一次修改的时间

Access  Time

文件最后被查看的时间

Change   Time

文件权限最后变动的时间

4、问题:删除文件空间不释放

原因:文件正在被使用

解决办法:1)使用 lsof 命令,找到已被删除却被进程占用的文件,将其关闭。

                  2)在同一目录下创建一个同名的空文件夹。

二、日志文件

Linux 操作系统本身和大部分服务器程序的日志文件都默认放在目录/var/log/下

1、常见的日志文件

日志文件位置日志文件说明
/var/log/messages内核和公共日志它是核心系统日志文件,其中包含了系统启动时的引导信息,以及系统运行时的其他状态消息。I/O 错误、网络错误和其他系统错误都会记录到此文件中。其他信息,比如某个人的身份切换为 root,已及用户自定义安装软件的日志,也会在这里列出。
/var/log/cron 计划任务日志记录与系统定时任务相关的曰志
/var/log/dmesg 系统引导日志记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息
/var/log/maillog 邮件日志记录邮件信息的曰志
用户日志
/var/log/lastlog记录系统中所有用户最后一次的登录时间的曰志。这个文件也是二进制文件.不能直接用Vi 查看。而要使用lastlog命令查看
/var/log/secure记录验证和授权方面的倍息,只要涉及账户和密码的程序都会记录,比如系统的登录、ssh的登录、su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中
/var/log/wtmp永久记录所有用户的登陆、注销信息,同时记录系统的启动、重启、关机事件。同样,这个文件也是二进制文件.不能直接用Vi查看,而要使用last命令查看
/var/tun/ulmp记录当前已经登录的用户的信息。这个文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息。同样,这个文件不能直接用Vi查看,而要使用w、who、users等命令查看

2、日志文件的格式

日志文件的格式包含以下 4 列:

  • 事件产生的时间。

  • 产生事件的服务器的主机名。

  • 产生事件的服务名或程序名。

  • 事件的具体信息。

 

3、内核日志、公共日志和用户日志

内核日志优先级(数字等级越小,优先级越高,消息越重要)

级别解释
0 EMERG(紧急)会导致主机系统不可用的情况
1 ALERT(警告)必须马上采取措施解决的问题
2 CRIT(严重)比较严重的情况
3 ERR(错误)运行出现错误
4 WARNING(提醒)可能影响系统功能,需要提醒用户的重要事件
5 NOTICE(注意)不会影响正常功能,但是需要注意的事件
6 INFO(信息)一般信息
7 DEBUG(调试)程序或系统调试信息等

公共日志存放位置:/var/log/messages

内核及大多数系统消息被记录到公共日志文件/var/log/messages 中,/etc/rsyslog.conf文件是日志存放位置的配置文件,通过修改/etc/rsyslog.conf文件内容,可以更改日志存放位置

用户日志:在 wtmp、btmp、lastlog 等日志文件中,保存了系统用户登录、退出等相关的事件消息。需要使用 who、w、users、last lastb 等用户查询命令来获取日志信息

命令解释
who用于报告当前登录到系统中的每个用户的信息。使用该命令,系统管理员可以查看当前系统存在哪些不合法用户,从而对其进行审计和处理。who 的默认输出包括用户名、终端类型、登录日期及远程主机。
w用于显示当前系统中的每个用户及其所运行的进程信息,比 users、who 命令的 输出内容要丰富一些。
user只是简单地输出当前登录的用户名称,每个显示的用户名对应一个登录会话。 如果一个用户有不止一个登录会话,那他的用户名将显示与其相同的次数

who

w

user

 

last

last 命令用于查询成功登录到系统的用户记录,最近的登录情况将显示在最前面。

lastb 

lastb 命令用于查询登录失败的用户记录,如登录的用户名错误、密码不正确等情况都 将记录在案。

三、修改日志存放位置操作

1、将ssh服务的日志文件独立保存

1)修改/etc/rsyslog.conf文件

仅需修改下图中74行内容即可

[root@localhost ~]#vim /etc/rsyslog.conf

 2)修改ssh服务的配置

[root@localhost ~]#vim    /etc/ssh/sshd_config

 3)重启rsyslog服务和sshd服务

[root@localhost log]#systemctl restart rsyslog.service sshd

 4)使用另一台主机远程登陆此电脑,此电脑运行查看日志命令

[root@localhost ~]#tail -f /var/log/ssh.log                # 查看日志


[root@localhost ~]#ssh 192.168.3.100                # 使用另一台主机远程登录

 

2、多台服务器与一个日志服务器,实现远程日志功能

 使用两台虚拟机进行模拟,将虚拟机1 的日志存放在虚拟机2 上,虚拟机2充当日志服务器。

1)编辑日志服务器(虚拟机2)的配置

[root@Server ~]#vim /etc/rsyslog.conf 


 

 2)重启服务,并查看端口是否打开

[root@Server ~]# systemctl restart  rsyslog                    # 重启rsyslog服务


[root@Server ~]#netstat -ntap |grep 514                        # 查看514端口是否开启

 3)客户端(虚拟机1)配置,修改日志文件配置

[root@PC ~]# vim /etc/rsyslog.conf


 4)重启rsyslog服务,并查看514端口是否打开

[root@PC ~]# systemctl restart  rsyslog                    # 重启rsyslog服务


[root@PC ~]#netstat -ntap |grep 514                        # 查看514端口是否开启

 5)实时查看日志服务器的/var/log/secure日志文件

[root@Server ~]#tail -f /var/log/secure

 6)在客户端做些操作,然后去服务端查看日志信息

[root@PC ~]#

[root@PC ~]#logger "this is test log from 192.168.91.101 2"
#测试,写日志进去


 

四、日志管理工具 journalctl 

CentOS 7 以后版,利用Systemd 统一管理所有 Unit 的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核日志和应用日志)。

工具配置位置:/etc/systemd/journald.conf

使用journalctl  --help查看关于journalctl工具的使用:

简单列举一部分,详细自己去查


-b [ID][±offset], --boot=[ID][±offset]
   显示特定于某次启动的日志, 这相当于添加了一个 "_BOOT_ID=" 匹配条件。
   如果参数为空(也就是 ID 与 ±offset 都未指定), 则表示仅显示本次启动的日志。
   如果省略了 ID , 那么当 ±offset 是正数的时候, 将从日志头开始正向查找,
   否则(也就是为负数或零)将从日志尾开始反响查找。 举例来说, "-b
    1"表示按时间顺序排列最早的那次启动, "-b 2"则表示在时间上第二早的那次启动; "-b
    -0"表示最后一次启动, "-b -1"表示在时间上第二近的那次启动, 以此类推。 如果
   ±offset 也省略了, 那么相当于"-b -0", 除非本次启动不是最后一次启动(例如用
    --directory 指定了另外一台主机上的日志目录)。
   如果指定了32字符的 ID , 那么表示以此 ID 所代表的那次启动为基准
   计算偏移量(±offset), 计算方法同上。 换句话说, 省略 ID 表示以本次启动为基准
   计算偏移量(±offset)。
--list-boots
   列出每次启动的 序号(也就是相对于本次启动的偏移量)、32字符的ID、
   第一条日志的时间戳、最后一条日志的时间戳。
-k, --dmesg
   仅显示内核日志。隐含了 -b 选项以及 "_TRANSPORT=kernel" 匹配项。
--no-pager
   不将程序的输出内容管道(pipe)给分页程序

#查看所有日志(默认情况下 ,只保存本次启动的日志)
 journalctl

 #查看内核日志(不显示应用日志)
 journalctl -k

 #查看指定时间的日志
journalctl --since "20 min ago"

 #日志默认分页输出,--no-pager 改为正常的标准输出
 journalctl --no-pager

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值