目录
1.2.目录、cp(复制)、rm(删除)、mv(移动文件)与inode号
一.深入理解Linux文件系统
1.1.inode表结构
每一个inode表记录对应的保存了以下信息:
inode number 节点号
文件类型
权限
UID
GID
链接数(指向这个文件名路径名称个数)
该文件的大小和不同的时间戳
指向磁盘上文件的数据块指针
有关文件的其他数据
如何查看inode号?
ls -i 文件名:
stat 文件名 :
文件是存储在硬盘上的,硬盘的最小存储单位叫做“扇区”(sector),每个扇区存储512字节。
一般连续八个扇区组成一个"块”(block),一个块是4K大小,是文件存取的最小单位。操作系统读取硬盘的时候,是一次性连续读取多个扇区,即一个块一个块的读取的。4k一读,8个扇区一读
文件数据包括实际数据与元信息(类似文件属性)。文件数据存储在“块"中,存储文件元信息(比如文件的创建者、创建日期、文件大小、文件权限等)的区域就叫做inode表。 因此,一个文件必须占用一个inode,并且至少占用一个block。du 显示
inode不包含文件名。文件名是存放在目录文件夹当中的。Linux 系统中一切皆文件,因此目录也是一种文件。
每个inode都有一个号码,操作系统用inode号码来识别不同的文件。Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称,文件名和inode号码是一一对应关系,每个inode号码对应一个或多个文件名。
唯一 同一文件系统() 不同的文件
所以,当用户在Linux系统中试图访问一个文件时,系统会先根据文件名去查找它对应的inode号码:通过inode号码,获取inode信息;根据inode信息,看该用户是否具有访问这个文件的权限;如果有,就指向相对应的数据block,并读取数据。
硬盘上最小的存储单位为扇区(512字节)文件存储的最小单位为块8个扇区组成为4k
1.2.目录、cp(复制)、rm(删除)、mv(移动文件)与inode号
目录与inode号:
1.目录是个特殊文件,目录文件的内容保存了此目录中文件的列表及inode number对应关系
2.文件引用一个是 inode号,是通过文件名来引用一个文件
3.一个目录是目录下的文件名和文件inode号之间的映射
4.文件是如何找到实际数据的,linux 通过文件夹中会有一张 文件名和inode一一对应关系的表 (名字) 去找inode号 inode指向对应的实际数据
cp 和 inode:
cp 命令:
分配一个空闲的inode号,在inode表中生成新条目
在目录中创建一个目录项,将名称与inode编号关联
拷贝数据生成新的文件
rm 和 inode:
硬链接数递减,从而释放的inode号可以被重用
把数据块放在空闲列表中
删除目录项
数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖
mv 和 inode :
如果mv命令的目标和源在同一设备
不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动!
删除旧的目录对应关系新建目录对应关系
1.3.三种时间戳
这个文件最近一次被修改时间 - Modify Time
这个文件最后被查看的时间 - Access Time
这个文件权限最后变动的时间 - Change Time
1.4.删除文件空间不释放
原因:文件正在被使用
解决办法:1)使用 lsof 命令,找到已被删除却被进程占用的文件,将其关闭。
2)在同一目录下创建一个同名的空文件夹。
1.5.硬链接与软连接
硬连接 同一个文件取不同的名或者叫多个名字(比如 苏轼 字子瞻 号东坡居士 苏二 谥号文忠 )不支持文件夹,创建一个连接数加一,多路径访问。
软连接 类似于windows里快捷方式,软连接,符号连接
ln(link)
ln [-s] 源文件或目录… 链接文件或目标位置
加s是软连接 符号连接
对比项 | 硬连接 | 软连接 |
---|---|---|
本质 | 本质是同一个文件 | 本质不是同一个文件 |
inode | 相同 | 不同 |
连接数 | 创建新的硬链接,链接数会增加,删除硬链接,链接数减少 | 删除新建不会改变 |
文件夹 | 不支持 | 支持 |
删除源文件 | 只是链接数减一,但链接文件的访问不受影响 | 无法访问连接文件 |
文件类型 | 和源文件相同 | 链接文件,和源文件无关 |
文件大小 | 和源文件相同 | 源文件的路径的长度 |
二.日志
内核及系统日志由系统服务 rsyslog 统一管理,根据其主配置文件 /etc/rsyslog.conf
Linux 操作系统本身和大部分服务器程序的日志文件都默认放在目录/var/log/下
2.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等命令查看 |
日志文件的格式:
日志文件的格式包含以下 4 列:
事件产生的时间。
产生事件的服务器的主机名。
产生事件的服务名或程序名。
事件的具体信息。
2.2.内核和公共日志、用户日志
内核日志优先级(数字等级越小,优先级越高,消息越重要)
0 EMERG(紧急):会导致主机系统不可用的情况。
1 ALERT(警告):必须马上采取措施解决的问题。
2 CRIT(严重):比较严重的情况。
3 ERR(错误):运行出现错误。
4 WARNING(提醒):可能影响系统功能,需要提醒用户的重要事件。
5 NOTICE(注意):不会影响正常功能,但是需要注意的事件。
6 INFO(信息):一般信息。
7 DEBUG(调试):程序或系统调试信息等
内核和公共消息日志存储位置:
1.内核及大多数系统消息被记录到公共日志文件/var/log/messages 中,公共日志存放位置:/var/log/messages。
2./etc/rsyslog.conf文件是日志存放位置的配置文件
3.通过修改/etc/rsyslog.conf文件内容,可以更改日志存放位置
用户日志:
在 wtmp、btmp、lastlog 等日志文件中,保存了系统用户登录、退出等相关的事件消息。
需要使用 who、w、users、last 和 lastb 等用户查询命令来获取日志信息。
命令:
who:用于报告当前登录到系统中的每个用户的信息。使用该命令,系统管理员可以查看当前系统存在哪些不合法用户,从而对其进行审计和处理。who 的默认输出包括用户名、终端类型、登录日期及远程主机。
w:用于显示当前系统中的每个用户及其所运行的进程信息,比 users、who 命令的 输出内容要丰富一些。
users:只是简单地输出当前登录的用户名称,每个显示的用户名对应一个登录会话。 如果一个用户有不止一个登录会话,那他的用户名将显示与其相同的次数
last:用于查询成功登录到系统的用户记录,最近的登录情况将显示在最前面。通过 last 命令可以及时掌握 Linux 主机的登录情况,若发现未经授权的用户登录过,则表示当前 主机可能已被入侵。
lastb:
用于查询登录失败的用户记录,如登录的用户名错误、密码不正确等情况都 将记录在案。登录失败的情况属于安全事件,因为这表示可能有人在尝试猜解你的密码。除 了使用 lastb 命令查看以外,也可以直接从安全日志文件/var/log/secure 中获得相关信息。
who:
w:
users:
last:
lastb:
三.修改日志存放位置操作
3.1.将ssh服务的日志文件独立保存
(1)修改/etc/rsyslog.conf文件
vim /etc/rsyslog.conf,输入set nu显示行数,仅需修改下图中74行内容即可
(2)修改ssh服务的配置
vim /etc/ssh/sshd_config
(3)重启rsyslog服务和sshd服务
(4)使用另一台主机远程登陆此电脑,此电脑运行查看日志命令
tail -f /var/log/ssh.log # 查看日志
ssh 192.168.3.100 # 使用另一台主机远程登录
3.2.多台服务器与一个日志服务器,实现远程日志功能
使用两台虚拟机进行模拟,将虚拟机1 的日志存放在虚拟机2 上,虚拟机2充当日志服务器:
(1)编辑日志服务器(虚拟机2)的配置
vim /etc/rsyslog.conf
(2)重启服务,并查看端口是否打开
systemctl restart rsyslog # 重启rsyslog服务
netstat -ntap |grep 514 # 查看514端口是否开启
(3)客户端(虚拟机1)配置,修改日志文件配置
vim /etc/rsyslog.conf
(4) 重启rsyslog服务,并查看514端口是否打开
systemctl restart rsyslog # 重启rsyslog服务
netstat -ntap |grep 514 # 查看514端口是否开启
(5)实时查看日志服务器的/var/log/secure日志文件
tail -f /var/log/secure
(6)在客户端做些操作,然后去服务端查看日志信息
logger "this is test log from 192.168.91.101 2"
#测试,写日志进去
四.日志管理工具 journalctl
CentOS 7 以后版,利用Systemd 统一管理所有 Unit 的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核日志和应用日志)。
工具配置位置:/etc/systemd/journald.conf
使用journalctl --help查看关于journalctl工具的使用:
简单列举一部分,详细自己去查
|
#查看所有日志(默认情况下 ,只保存本次启动的日志)
journalctl
#查看内核日志(不显示应用日志)
journalctl -k
#查看指定时间的日志
journalctl --since "20 min ago"
#日志默认分页输出,--no-pager 改为正常的标准输出
journalctl --no-pager