LiangGaRy-学习笔记-Day19

1、回顾知识

1.1、文件系统说明

xfs与ext4文件系统

  • CentOS7以上:默认的就是XFS文件系统
    • xfs 使用的就是restore、dump等工具
  • CentOS6默认的就是ext4文件系统
    • extundelete工具就是用于ext4系统

1.2、回顾Linux文件系统

Linux文件系统是由三个部分组成

  • inode
  • 文件名
  • block块

Linux:文件系统类型

  • ext2/ext3/ext4
  • xfs

最小的存储单位就是扇区,每个扇区就是512字节–>就是0.5KB

多个扇区组成一个block–>4Kb

Inode包含的信息

  • stat+ 文件可以查看
  • 1个inode节点–>128字节
  • 查看inode :
    • ls -i
  • 查看inode总数:
    • df -i
  • 查找文件大小为0 的文件
    • find / -type f -size 0 -exec rm {} ;
[root@Node1 ~]# stat install.log
  File: `install.log'
  Size: 26505     	Blocks: 64         IO Block: 4096   regular file
Device: 803h/2051d	Inode: 784899      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2023-05-30 06:32:19.370999940 +0800
Modify: 2023-05-30 06:35:25.849999847 +0800
Change: 2023-05-30 06:35:29.599999845 +0800

#查看文件的inode号
[root@Node1 ~]# ls -i  install.log
784899 install.log

#查看系统的inode情况
[root@Node1 ~]# df -i
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda3            1160992   52142 1108850    5% /
tmpfs                 238344       1  238343    1% /dev/shm
/dev/sda1              76912      39   76873    1% /boot

2、文件的硬链接和软链接

2.1、硬链接说明

硬链接:

  • 硬链接指通过索引节点来进行链接
  • inode是可以对应多个文件名的
  • 多个文件名指向同一个inode号就是硬链接
  • 允许一个文件拥有多个有效的路径,有防止误操作删除的作用
  • 多个文件名共用一个inode号;删除只是修改链接数;
  • 如果inode号为0了,就是释放了inode号
  • 硬链接是不知作用于目录
  • 硬链接也不能跨分区进行创建

硬链接总结:

  • 相当于复制,功能强大点,可以同步更新文件
  • 语法:ln + 源文件 + 链接文件
  • 不支持跨分区链接
  • 不通的文件名执行同一个inode号
  • 删除文件等于删除inode的链接数
  • 只能对文件操作,不能对目录操作

问题:刚创建的一个目录,链接数就是2,原因是什么?

  • 刚创建的目录,里面隐藏了两个目录;一个是.另外一个就是…
#创建一个目录
[root@Node1 ~]# mkdir  /test/
[root@Node1 ~]# cd /test/
[root@Node1 test]# ls

#创建一个文件aa.txt
[root@Node1 test]# echo aaaaaaaaaaaaa >> aa.txt

#然后直接创建一个硬链接
[root@Node1 test]# ln aa.txt  aa.txt.hard

#查看两个文件的信息
[root@Node1 test]# ll aa.txt aa.txt.hard 
-rw-r--r--. 2 root root 14 Jun  3 09:54 aa.txt
-rw-r--r--. 2 root root 14 Jun  3 09:54 aa.txt.hard

#使用diff命令来对比两个文件也没问题
[root@Node1 test]# diff aa.txt aa.txt.hard 
	#使用md5sum命令对比两个文件也没有问题
[root@Node1 test]# md5sum aa.txt aa.txt.hard 
a628dac4de20bc12b5eef5ad614cfccb  aa.txt
a628dac4de20bc12b5eef5ad614cfccb  aa.txt.hard

#随便向一个文件取追加内容,两个文件都同事增加
[root@Node1 test]# echo "123456" >> aa.txt.hard 
[root@Node1 test]# 
[root@Node1 test]# cat aa.txt
aaaaaaaaaaaaa
123456

#修改权限,文件也会同时修改
[root@Node1 test]# chmod 7777 aa.txt
[root@Node1 test]# ll aa.txt aa.txt.hard 
-rwsrwsrwt. 2 root root 21 Jun  3 09:58 aa.txt
-rwsrwsrwt. 2 root root 21 Jun  3 09:58 aa.txt.hard

#新创建的目录中,里面就隐藏了两个目录
[root@Node1 ~]# mkdir aa
[root@Node1 ~]# cd aa
[root@Node1 aa]# ls -a
.  ..

2.2、软链接说明

软链接说明:

  • 软链接:相当于windows的快捷方式;
  • 另外一种称之为符号链接(Symbolic Link)–>这种也叫软链接
  • 语法:ln + s 源文件 + 链接文件
  • 源文件删除了,链接文件就失效
  • 可以对目录进行链接,也可以跨分区链接
    • 注意:软链接跨分区一定写上绝对路径
#准备素材
[root@Node1 ~]# cp -a /etc/passwd .
[root@Node1 ~]# ls
passwd

#创建软链接
[root@Node1 ~]# ln -s passwd  passwd.soft
[root@Node1 ~]# ll
total 4
-rw-r--r-- 1 root root 1019 Jun 26 11:49 passwd
lrwxrwxrwx 1 root root    6 Jul  5 11:09 passwd.soft -> passwd

#如果删除源文件,链接文件失效
[root@Node1 ~]# rm -rf passwd
	#链接文件显示红色文件闪烁
[root@Node1 ~]# ll 
total 0
lrwxrwxrwx 1 root root 6 Jul  5 11:09 passwd.soft -> passwd

#软链接文件可以跨分区链接-->但是跨分区需要协商绝对路径
[root@Node1 ~]# cd /boot/
[root@Node1 boot]# ln -s /boot/grub /root/grub
[root@Node1 boot]# ll /root/grub/

3、Inode说明

3.1、Inode的特殊作用

inode号和文件名是分开的

  • 假设文件名含有特殊符号;无法正常删除?
    • 可以直接删除inode号;就等于删除文件
  • 移动文件或者重命名的时候,只需要改变文件名,不会影响到inode
  • 系统无法从inode号码来得知文件名

为何每次修改完服务器配置文件后,都需要重新加载一下配置文件?

  • 修改了配置文件的内容,inode号就会改变,因此要重新读取一下文件的inode就可以;
#有些文件是特殊字符,如果要删除比较麻烦,可以通过inode号删除
[root@Node1 ~]# find /root  inum 33574987 -exec rm -i {} \;

#修改文件名并不会影响inode
[root@Node1 ~]# echo 111 >> aa.txt
[root@Node1 ~]# ls -i
33574978 aa.txt
[root@Node1 ~]# mv aa.txt bb.txt
[root@Node1 ~]# ls -i
33574978 bb.txt

4、关于文件系统的实战

4.1、实战:磁盘有空间,但无法创建文件?

实战:解决磁盘有空间,但是没法创建文件–>修复服务器的文件系统;

  • 面试:在公司中,遇到过棘手的文件是什么?

实战场景:

  • 在⼀台配置较低的Linux服务器(内存、硬盘⽐较⼩)的/data分区内创建⽂件时,系统提示磁盘空间不⾜,⽤df -h命令查看了⼀下磁盘使⽤情况,发现/data分区只使⽤了80%,还有1.9G的剩余空间,但是⽆法创建新的⽂件。当时使⽤的是root⽤户。服务器没有被⿊。
#首先查看一下分区状态
[root@Node1 ~]# df -h 
..............

#再查看一下inode情况
[root@Node1 ~]# df -i
Filesystem               Inodes IUsed   IFree IUse% Mounted on
/dev/mapper/centos-root 9703424 32301 9671123    1% /
............

#问题分析:
	-	如果一个目录中存在数量非常多的小字节缓存文件,占用的Block 不多,但是占用了很多的inode节点
	-	可以创建一个文件夹/bak/用于备份-->然后在删除文件,释放一些inode号
	-	可以再创建一个分区,把这些文件都存放在这个里边
	-	释放inode就可以了;

4.2、实战:修复文件系统

系统启动出现了control-D报错;如下图

通常的修复手段:

  • fsck -f -y /dev/sda1 #引导分区文件系统修复
    • -f:代表强制检查
    • -y:对于所有的交互式提问都是yes的回答
  • fsck -f -y /dev/sda3
  • reboot重启
#尝试强制修复分区
[root@Node1 ~]# fsck -f -y /dev/sda2

#然后重启
[root@Node1 ~]# reboot 

4.3、实战:xfs系统文件误删除修复

extundelete工具:是用于修复ext4文件类型的文件;需要提前备份

而xfs类型的文件就可以使用xfsdump(备份)与xfsrestore工具进行恢复

#安装xfsdump工具
[root@Node1 ~]# yum -y install xfsdump

xfsdump工具:

  • 作用:用于备份xfs文件系统的文件
  • 原理:
    • xfsdump按照inode顺序备份一个xfs文件系统
    • xfsdump的备份级别有两种:
      • 0:表示完全备份–>默认选项
      • 1-9:表示增量备份;
  • 选项:
    • -f:指定备⽂件⽬录 ;这里指定的就是恢复文件的位置,存放恢复后文件的路径
    • -L:设定标签
    • -M:设备标签
    • -s:备份单个⽂件 -s 不能直接跟路径
  • 注意事项:
    • 不支持没有挂载的文件系统,只能备份已经挂载
    • 需要使用root权限
    • 只能对xfs
    • 备份好的数据只能通过xfsrestore解析

实验思路:

  • 创建磁盘
#虚拟机-->设置-->添加硬盘-->一直下一步下一步-->然后下一步
  • 分区
#对sdb进行分区
[root@Node1 ~]# fdisk  /dev/sdb

#创建新分区
Command (m for help): n
Partition number (4-128, default 4): 
First sector (34-41943006, default 10487808): 
Last sector, +sectors or +size{
    
    K,M,G,T,P} (10487808-41943006, default 41943006): 
Created partition 4

#保存退出
Command (m for help): w
  • 格式化
  • 挂载使用
[root@Node1 ~]# mkfs.xfs  -f /dev/sdb4
meta-data=/dev/sdb4              isize=512    agcount=4, agsize=982975 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=3931899, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

#创建目录-->然后挂在使用
[root@Node1 ~]# mkdir /test
[root@Node1 ~]# mount /dev/sdb4  /test/
  • 创建数据
[root@Node1 ~]# cd /test/
[root@Node1 test]# echo 11111111 >> aa.txt
  • xfsdump备份
#备份数据-->-f指定备份的名字
[root@Node1 test]# xfsdump  -f /test/dump_sdb4 /dev/sdb4
.............
	#指定标签名字
please enter label for this dump session (timeout in 300 sec)
 -> dump_sdb4  
.............
	#指定备份名
please enter label for media in drive 0 (timeout in 300 sec)
 -> sdb4
..........
	#看到以下代表备份成功
xfsdump:   stream 0 /test/dump_sdb4 OK (success)
xfsdump: Dump Status: SUCCESS

#查看一下备份好的数据
[root@Node1 test]# ls 
aa.txt  dump_sdb4
[root@Node1 test]# ls -l dump_sdb4 
-rw-r--r-- 1 root root 22200 Jul  5 14:28 dump_sdb4
  • 模拟删除数据
[root@Node1 test]# rm -rf aa.txt 
  • xfsrestore工具恢复
[root@Node1 test]# xfsrestore -f /test/dump_sdb4  /root/
xfsrestore:   stream 0 /test/dump_sdb4 OK (success)
xfsrestore: Restore Status: SUCCESS

#再查看数据是否存在即可
[root@Node1 test]# cat /root/aa.txt 
11111111

4.4、系统禁ping操作

简单地理解就是:你去ping一个IP;然后没有任何的返回记录;

  • 云主机:无法ping它的IP
  • 这个操作有临时的,和永久的操作
#正常情况下我们是可以ping通本机的
[root@Node1 ~]# ping -c2 -w2 192.168.75.131 
PING 192.168.75.131 (192.168.75.131) 56(84) bytes of data.
64 bytes from 192.168.75.131: icmp_seq=1 ttl=64 time=0.031 ms
64 bytes from 192.168.75.131: icmp_seq=2 ttl=64 time=0.021 ms
.......

#临时进制ping通本机
[root@Node1 ~]# echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

#然后再ping发现就没法ping通
[root@Node1 ~]# echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all 
[root@Node1 ~]# ping  127.0.0.1


#把这个规则写入配置文件可以达到永久禁ping操作
[root@Node1 ~]# vim /etc/sysctl.conf 

...........
	#添加这一行
net.ipv4.icmp_echo_ignore_all=1

[root@Node1 ~]# sysctl -p
fs.file-max = 51200
net.ipv4.icmp_echo_ignore_all = 1
[root@Node1 ~]# ping  127.0.0.1

#结合防火墙iptables也能实现
[root@Node1 ~]# iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP

5、ACL权限说明

一个需求:

  • 一个项目不同部门;共同操作一个目录
    • liangjiawei:开发有开发的权限
    • zhangsan:又有不同的权限
    • lisi:也有对应的权限
#进入一个目录
[root@Node1 ~]# cd /test/
	#查看目录的权限
[root@Node1 test]# ls -ld /test/
drwxr-xr-x 2 root root 23 Jul  5 14:32 /test/

#创建一个测试用户组,然后把三个用户都丢入这个组里边
[root@Node1 test]# groupadd  test
[root@Node1 test]# useradd  -G test liangjiawei
[root@Node1 test]# useradd  -G test zhangsan
[root@Node1 test]# useradd  -G test lisi

#把测试目录也归纳到test组里边
[root@Node1 test]# chgrp  test /test/

#然后设置一个gid
[root@Node1 test]# chmod 2770 /test/
[root@Node1 test]# ll -d /test/
drwxrws--- 2 root test 23 Jul  5 14:32 /test/

这里就引入一个概念:

  • zhangsan可以读取内容,但是不能修改内容
  • 如果想要实现这个权限就可以引入一个acl的权限概念
    • zhangsan 加⼊组,删除权限
    • 2775 进去看⽂件,但是别的⽤户也能进去
    • 这里足以说明正常的权限是没法满足的;因此需要引入一个ACL权限的概念
  • ACL可以针对几个用法
    • 使⽤者 (user):可以针对使⽤者来设置权限;
    • 群组 (group):针对群组为对象来设置其权限;
    • 默认属性 (mask):还可以针对在该⽬录下在创建新⽂件/目录时,规范新数据的默认权限;

setfacl命令

  • 作用:设置某个目录/文件的ACL权限
  • 语法:setfacl + 选项 user:用户名:权限(rwx) 文件/目录
  • 选项:
    • -m:设置后续的acl参数给文件使用
    • -x:删除acl参数
    • -b:移除所有的参数
    • -k:移除默认的
    • -R:递归ACL权限
    • -d:设置默认的参数,只有对目录有效

getfacl命令

  • 作用:查看目录的规定

    语法:getfacl + 文件名/目录名

#接上面的实验
	#给zhangsan设置acl权限
[root@Node1 test]# setfacl  -m user:zhangsan:r-- /test/
	#查看一下acl权限
[root@Node1 test]# getfacl  /test/
getfacl: Removing leading '/' from absolute path names
# file: test/
# owner: root
# group: test
# flags: -s-
user::rwx
user:zhangsan:r--
group::rwx
mask::rwx
other::---

#给组设置acl权限
[root@Node1 test]# setfacl -m group:test:rwx /test/
[root@Node1 test]# getfacl /test/
getfacl: Removing leading '/' from absolute path names
# file: test/
# owner: root
# group: test
# flags: -s-
user::rwx
user:zhangsan:r--
group::rwx
group:test:rwx
mask::rwx
other::---

#给liangjiawei用户设置rw权限
[root@Node1 test]# setfacl  -m user:liangjiawei:rw- /test/

#清除test组的acl权限
[root@Node1 test]# setfacl -x group:test:rwx /test/

猜你喜欢

转载自blog.csdn.net/Liang_GaRy/article/details/131048926
今日推荐