RHEL8_Linux文件系统

本章主要介绍文件系统的管理

  • 了解什么是文件系统
  • 对分区进行格式化操作
  • 挂载分区
  • 设置永久挂载
  • 查找文件
        在Windows系统中,买了一块新的硬盘加到电脑之后,需要对分区进行格式化才能使用,Linux系统中也是一样,首先我们要了解一下什么是文件系统。        

1.了解文件系统

    1)    分区很复杂,但是为了好理解不妨先简化介绍。首先来看图 ,记住这是一个分区。
        了解文件系统
2)当对一个分区格式化时,分区被分成两部分。
  1. 右侧部分被划分成很多小格子,每个小格子称为block,默认大小为4kb
  2. 左侧部分为inode,用于记录文件的属性,每个文件都会占用一个 inode。
        每个block中只能存储一个文件,假设一个文件aa只有 1KB存放在2号block中,则2号block还剩余3KB的空间,但是这3KB的空间也不会存储其他数据了。所以,此文件大小为1KB,占用空间为4KB,在Windows中s所示的情况。
        如果一个文件的值大于4KB,一个block存放不下,则会占用多个 block。例如,某文件大小为9KB,则需要占用3个block。
        当要读取某个文件时,如果系统不知道此文件在哪个block中,则要读取所有的 block(这个过程称为“遍历”),这样效率是极其低下的。所以,每个文件的属性都有对应的inode条目来记录,例如,图中的aa文件由10号inode记录,在inode中记录了aa文件的属性,如大小、权限等以及此文件占用了哪些block,inode相当于书的目录。当需要读取文件时。在inode中可以快速找到此文件,从而快速定位此文件所在的block。
        总之,创建文件系统的过程就理解为创建图14-1中小格子的过程。不同的内核所使用的文件系统不一样,例如,Windows 中常见的文件系统包括FAT、NTFS等,Linux中常见的文件系统包括EXT3、EXT4、XFS等。这些不同的文件系统具有不同的功能,包括所支持的单个文件最大能有大,整个文件系统最大能有多大,RHEL8/CentOS8中默认的文件系统是XFS。

2.了解硬链接

        前面讲了inode记录的是某文件的属性信息,如图所示。                
了解硬链接
        10号 inode记录了aa文件的属性,包括aa文件的名称、大小、权限等,及其所在的 block,可以在10号inode中给aa文件再起一个名称bb,如图所示。
        此时对10号inode来说,用两个名称aa和 bb来记录2号block中的文件,所以 aa和 bb对应的是同一个文件,那么aa和 bb就是硬链接关系。
实战:
1)先拷贝一个测试文件,命令如下
[root@node01 ~]# cp /etc/hosts aa
2)查看aa的属性
[root@node01 ~]# ls -lh aa
-rw-r--r--. 1 root root 158 12月  5 10:54 aa
3)此处的加粗字1,指的是aa文件只有一个硬链接,即存储在 block中的文件只有一个名称aa。下面对aa做硬链接,命令如下。
[root@node01 ~]# ln aa bb
4)查看aa和bb的属性,命令如下
[root@node01 ~]# ls -lh aa bb
-rw-r--r--. 2 root root 158 12月  5 10:54 aa
-rw-r--r--. 2 root root 158 12月  5 10:54 bb
5)硬链接数显示为2,说明存储在 block中的那个文件有两个名称aa和 bb。aa和 bb是在同一个inode上记录的两个名称,通过ls -i可以查看aa和 bb分别是在哪个inode上记录的,命令如下。
[root@node01 ~]# ls -i aa ; ls -i bb
69535905 aa
69535905 bb
        可以看到, inode值是--样的。即在同-个inode上用两个名称来记录 block中的那个文件。换言之就是aa和bb对应的是同一个文件,修改aa之后会发现.bb的内容也做了相同的修改,修改协之后会发现aa也做了相应的修改。
        因为block中的文件现在有两个名称,所以删除任意一个之后,block中的数据是不会跟着删除的。所以,删除aa是不会影响bb的,或者删除bb也不会影响aa。但是aa和bb两个同时删除,则block中的文件就没有名称了,则此文件会从 block中删除。
        block中的文件只要还有一个名称,那么数据就不会删除。如果所有名称都没有了,则此数据会从 block中删除。
        同一个分区的inode只能记录同一个分区 block中的数据,不能在第二个分区中产生一个inode来记录第一个分区中的文件,所以硬链接不能跨分区。

3.创建文件系统

1)再看看前面已经再/dev/sdb上创建过的的分区
[root@node01 ~]# fdisk -l /dev/sdb
Disk /dev/sdb:30 GiB,32212254720 字节,62914560 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xb325ecbe

设备       启动     起点     末尾     扇区 大小 Id 类型
/dev/sdb1           2048  4196351  4194304   2G 83 Linux
/dev/sdb2        4196352  8390655  4194304   2G 83 Linux
/dev/sdb4        8390656 62914559 54523904  26G  5 扩展
/dev/sdb5        8392704 20975615 12582912   6G 83 Linux
/dev/sdb6       20977664 31463423 10485760   5G 83 Linux
/dev/sdb7       31465472 41951231 10485760   5G 83 Linux
[root@node01 ~]# 
2)下面对分区进行格式化,语法如下
mkfs -f 文件系统 -选项 /dev/分区
或
mkfs.文件系统 -选项 /dev/分区
3)把/dev/sdb1格式化为XFS文件系统
[root@node01 ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=131072 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=524288, 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@node01 ~]#
4)从上面的 bsize=4096可以看到,block的大小默认设置为了4KB,如果指定为1KB,需要加上-b size=1024选项,命令如下。
[root@node01 ~]# mkfs.xfs -b size=1024 /dev/sdb1
mkfs.xfs: /dev/sdb1 appears to contain an existing filesystem (xfs).
mkfs.xfs: Use the -f option to force overwrite.
[root@node01 ~]# 
5)格式化时,因为/dev/sdbl已经存在文件系统了,所以再次格式化失败,需要加上-f 选项表示强制格式化,命令如下。
[root@node01 ~]# mkfs.xfs -f -b size=1024 /dev/sdb1
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=524288 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=1024   blocks=2097152, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=1024   blocks=10240, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@node01 ~]# 
6)可以看到,现在bsize即 block size的大小已经是1024了。这里输出的属性是刚格式化后输出的,如果过了一段时间之后想再次查看/dev/sdb1文件系统的属性,可以通过xfs_info 来查看,命令如下。
[root@node01 ~]# mkfs.xfs -f -b size=1024 /dev/sdb1
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=524288 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=1024   blocks=2097152, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=1024   blocks=10240, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@node01 ~]# xfs_info /dev/sdb1
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=524288 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=1024   blocks=2097152, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=1024   blocks=10240, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@node01 ~]#

注意:block size的大小只能在格式化时指定,不可以后期修改。

7)每个文件系统都会有唯一的一个UUID来记录,查看系统中所有的UUID,可以通过如下命今.
[root@node01 ~]# blkid
/dev/nvme0n1p1: UUID="6d6e6378-213a-4e85-ac6f-4bbe2bc5a32c" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="3cd4603b-01"
/dev/nvme0n1p2: UUID="SDgNKG-rIkq-sxg0-uBWW-mWgS-mjJt-XlB24Z" TYPE="LVM2_member" PARTUUID="3cd4603b-02"
/dev/sr0: BLOCK_SIZE="2048" UUID="2021-10-13-03-57-25-00" LABEL="RHEL-8-5-0-BaseOS-x86_64" TYPE="iso9660" PTUUID="4d694e6c" PTTYPE="dos"
/dev/mapper/rhel-root: UUID="0d51eac1-9076-4a73-8e3f-96cd9c65039c" BLOCK_SIZE="512" TYPE="xfs"
/dev/mapper/rhel-swap: UUID="8a31015e-38dd-40db-8d15-c11e641ab1dc" TYPE="swap"
/dev/sdb1: UUID="89f086e6-651e-4d9b-bb1b-c87fce3d8252" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="b325ecbe-01"
/dev/nvme0n1: PTUUID="3cd4603b" PTTYPE="dos"
/dev/sdb2: PARTUUID="b325ecbe-02"
/dev/sdb5: PARTUUID="b325ecbe-05"
/dev/sdb6: PARTUUID="b325ecbe-06"
/dev/sdb7: PARTUUID="b325ecbe-07"
[root@node01 ~]# 
8)如果想单独查看某个XFS格式的文件系统的UUID,可以通过“xfs admin -u分区名”来查看,命令如下。
[root@node01 ~]# xfs_admin -u /dev/sdb1
UUID = 89f086e6-651e-4d9b-bb1b-c87fce3d8252
可以看到,/dev/sdb1文件系统的UUID是89f086e6-651e-4d9b-bb1b-c87fce3d8252 。 这个UUID也是可以切换成其他值的。
9)通过uuidgen命令手动生成一个新的UUID,命令如下。
[root@node01 ~]# uuidgen 
404b2c16-ad66-4897-aca6-ff4a067c024d
10)把/dev/sdb1的UUID切换成新生成的UUID,命令如下
##把新生成的uuid绑定到/dev/sdb1上成为sdb1的新uuid
[root@node01 ~]# xfs_admin -U 404b2c16-ad66-4897-aca6-ff4a067c024d /dev/sdb1    
Clearing log and setting UUID
writing all SBs
new UUID = 404b2c16-ad66-4897-aca6-ff4a067c024d
[root@node01 ~]#
11)再次查看/dev/sdb1的UUID,命令如下。
[root@node01 ~]# xfs_admin -u /dev/sdb1
UUID = 404b2c16-ad66-4897-aca6-ff4a067c024d
[root@node01 ~]#

可以看到,现在已经是新的UUID了。

4.挂载文件系统

        分区格式化好了之后是不可以直接访问的,要想访问此分区,必须把它挂载到某个目录上才行,如同在 Windows中创建一个分区,必须给它一个盘符或装在某个NTFS文件夹中。
1)要查看哪些分区已经挂载及分区的使用情况,可以使用df命令,命令如下。
[root@node01 ~]# df
文件系统                 1K-块    已用     可用 已用% 挂载点
devtmpfs               4032560       0  4032560    0% /dev
tmpfs                  4062116       0  4062116    0% /dev/shm
tmpfs                  4062116    9856  4052260    1% /run
tmpfs                  4062116       0  4062116    0% /sys/fs/cgroup
/dev/mapper/rhel-root 46110724 5603208 40507516   13% /
/dev/nvme0n1p1         1038336  232224   806112   23% /boot
tmpfs                   812420      12   812408    1% /run/user/42
tmpfs                   812420       0   812420    0% /run/user/0
[root@node01 ~]#
2)这里文件系统为tmpfs的是临时文件系统,可以忽略不管,上面结果中的分区大小都是以 K为单位,看起来不方便,可以加上-hT选项,-h会以合适的单位显示,-T会显示文件系统,命令如下。
[root@node01 ~]# df -Th | grep -v tmpfs
文件系统              类型      容量  已用  可用 已用% 挂载点
/dev/mapper/rhel-root xfs        44G  5.4G   39G   13% /
/dev/nvme0n1p1        xfs      1014M  227M  788M   23% /boot
[root@node01 ~]# 
3)挂载语法的命令如下。
mount -o opt1,opt2,..... /dev/设备/目录
4)首先创建一个目录/xx,并拷贝进去几个测试文件,命令如下。
[root@node01 ~]# mkdir /xx        //创建文件夹
[root@node01 ~]# cp /etc/hosts /etc/services /xx/        //拷贝文件到目录
[root@node01 ~]# ls /xx        //列出目录内容
hosts  services
[root@node01 ~]# 
5)下面把/dev/sdb1挂载到/xx 上,注意/xx中内容的变化,命令如下。
[root@node01 ~]# mount /dev/sdb1 /xx/
6)以后访问/xx就是访问/dev/sdb1中的内容了,现在查看/xx中的内容,命令如下。
[root@node01 ~]# ls /xx
[root@node01 ~]# 
        此时发现/xx中的内容看不到了,原因是如果某个目录挂载了一个分区,则这个目录中原有的内容就会被隐藏。为了更好地理解,可以参考图
        此时是没有挂载的情况,/xx中有自己的文件,然后把/dev/sdb1挂载到/xx 上,如图所示
7)例如,有一个碗把/xx中原有的内容盖住了,现在看到的是上层碗中的内容,即/ldev/sdbl中的内容。只有卸载掉才能再次看到,卸载的命令是umount,用法如下。
umount /挂载点
或
umount /dev/设备
8)现在把/dev/sdb1卸载掉,然后查看/xx中的内容,命令如下。
[root@node01 ~]# umount /dev/sdb1        //卸载挂载点
[root@node01 ~]# ls /xx        //查看文件
hosts  services
[root@node01 ~]# 
        卸载后又能看到/xx中的内容了,就相当于又把盖在/xx上面的那个“碗”拿掉了,所以能看到/xx中的内容了。
        这里需要注意两个问题,第一个问题是假设在/xx没有挂载之前,往里面写了一个200GB的文件file,然后又把/dev/sdb1挂载到/xx上,这时的file会被隐藏。有一天发现少了200GB的空间,然后到每个目录中找/xx,怎么都找不到这200GB。此时要想到哪些目录是挂载点,这些目录在挂载分区之前,里面是不是存在文件。
9)第二个问题是有时卸载时可能无法正常卸载,类似于在 Windows中卸载U盘时,提示进程正在占用。先模拟一下这个文件,再次把/dev/sdb1挂载到/xx上,命令如下。
[root@node01 ~]# mount /dev/sdb1 /xx
10)打开第二个终端执行如下命令。
[root@node01 ~]# cd /xx
[root@node01 xx]# 
这样cd /xx之后,bash进程会一直占用/xx。
11)再回到第一个终端,卸载/xx,命令如下。
[root@node01 ~]# umount /dev/sdb1
umount: /xx: target is busy.
[root@node01 ~]# umount /xx
umount: /xx: target is busy.
[root@node01 ~]# 
12)发现根本卸载不了,说明/xx现在正在被某个进程占用。那如何查看是哪个进程占用的呢? 可以使用fuser命令,命令如下。
[root@node01 ~]# fuser -mv /xx
                     用户     进程号 权限   命令
/xx:                 root     kernel mount /xx
                     root       3240 ..c.. bash
[root@node01 ~]#
13)可以看到,有一个进程号为2322的进程正在占用,就是第二个终端中运行的cd命令。 利用kill命令杀死进程号为2322的进程,然后再次卸载,命令如下。
[root@node01 ~]# kill -9 3240    //杀死进程
[root@node01 ~]# umount /dev/sdb1    //卸载挂载点
[root@node01 ~]# 
        此时可以正常卸载了。这里kill -9 2322的意思是强制杀死进程号为3240的进程,-9表示强制的意思。
14)挂载时还可以指定一些选项,先看一下默认的选项,命令如下。
[root@node01 ~]# mount /dev/sdb1 /xx
[root@node01 ~]# mount | grep /xx
/dev/sdb1 on /xx type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
[root@node01 ~]# 
15)通过执行mount命今可以看到所有已经挂裁了的设备,可以看到/dev/edh1的默认挂载选项。其中rw的意思是可读可写,测试往/xx中写入内容,命令如下
[root@node01 ~]# ls /xx
[root@node01 ~]# cp /etc/services /xx
[root@node01 ~]# ls /xx
services
[root@node01 ~]# 
16)现在是可以正常写进去的,然后卸载并重新以ro的方式挂载,命令如下。
[root@node01 ~]# umount /dev/sdb1
[root@node01 ~]# mount -o ro /dev/sdb1 /xx/
17)查看挂载选项,可以看到已经是只读权限了。
18)现在是以ro的方式挂载的,测试往/xx中写入内容,命令如下。
[root@node01 ~]# cp /etc/issue /xx/
cp: 无法创建普通文件'/xx/issue': 只读文件系统
[root@node01 ~]#
可以看到此时就写不进去了。
19)如果想换选项也不用每次都卸载然后再挂载,可以用如下语法。
mount -o remount,新选项/挂载点
20)现在把/dev/sdb1 以 rw的方式挂载,命令如下。
[root@node01 ~]# mount -o remount,rw /xx/
[root@node01 ~]# mount | grep /xx
/dev/sdb1 on /xx type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
[root@node01 ~]# 

可以看到已经修改成读写权限了

21)然后再次拷贝测试文件进去,命令如下
[root@node01 ~]# cp /etc/issue /xx/
[root@node01 ~]# ls /xx/
issue  services
[root@node01 ~]# 

可以看到,已经可以正常拷贝进去了

5.设置永久挂载

1)前面使用mount挂载设备也只是临时生效,重启系统之后此设备不会自动挂载。如果希望重启之后能自动挂载,需要写入/etc/fstab中,格式如下。
设备 挂载点 文件系统 挂载选项 dump值 fsck值
或
设备UUID 挂载点 文件系统 挂载选项 dump值 fsck值

最好两行意义如下:

  1. dump值:意思是能否被dump备份命令作用,dump是一个用来作为备份的命令,通
    常这个参数的值为0或1。
  2. fsck值:是否检验扇区,开机的过程中,系统默认会以fsck检验系统是否完整(clean)。
    这两列值建议写0,不要写其他值。
2)现在希望/dev/sdb1在重启之后能自动挂载到/xx 上,/etc/fstab的写法如下
[root@node01 ~]# grep xx /etc/fstab 
/dev/sdb1				 /xx     xfs    defaults        0 0
3)这样开机就会自动挂载,当然这里也可以写/dev/sdb1的 UUID。先获取/dev/sdb1的UUID,命令如下。
[root@node01 ~]# xfs_admin -u /dev/sdb1
UUID = 404b2c16-ad66-4897-aca6-ff4a067c024d
4)修改/etc/fstab的内容,命令如下。
[root@node01 ~]# grep xx /etc/fstab 
/dev/sdb1				 /xx     xfs    defaults        0 0
UUID=404b2c16-ad66-4897-aca6-ff4a067c024d /xx    xfs    defaults        0 0
[root@node01 ~]# 
5)需要注意的是,UUID后面的“=”两边不要有空格,挂载选项使用默认选项,所以关键字defaults,记住是defaults而不是default。如果要加上其他选项就用逗号隔开,例如,以 ro 的方式挂载,修改如下。
[root@node01 ~]# grep xx /etc/fstab 
/dev/sdb1				 /xx     xfs    defaults        0 0
UUID=404b2c16-ad66-4897-aca6-ff4a067c024d /xx    xfs    defaults,or        0 0
[root@node01 ~]#

        选项分隔符逗号两边不要有空格。

        在写人/etc/fstab之后,如果/dev/sdb1当前没有挂载,执行mouont -a命令可以自动挂载。

6.查找文件find的用法

        find是一款功能强大的工具,可以基于文件名、创建及修改时间、所有者、大小、权限等进行查询,语法如下。
find 目录 -属性 值
  1. 目录:指的是限定在哪个目录下查询,如果不指定则是在当前目录下查询。
  2. 属性:指的是基于什么查询,可以根据name、size、user、perm 等进行查询。
  3. 值:依赖于前面的属性,例如,-name lduanxx,这里根据名称进行查询,查询名称
    为1duanxx的文件。

也可以表示否定的意思,在属性前面加上叹号“!”,语法如下。

find 目录 ! -属性 值

这里的意思是查找属性不是这个值的文件。例如,!-name lduanxx,这里根据名称进行查询,查询名称不是 lduanxx的文件。

1)下面的演示都在新创建的目录11下进行查询,命令如下
[root@node01 ~]# mkdir 11 ; cd 11
[root@node01 11]# 
2)在此目录下创建几个测试文件,命令如下
[root@node01 11]# touch Aaa001 aaa001
[root@node01 11]# dd if=/dev/zero of=file1 bs=1M count=1
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.000674381 s, 1.6 GB/s
[root@node01 11]# dd if=/dev/zero of=file2 bs=1M count=2
2097152 bytes (2.1 MB, 2.0 MiB) copied, 0.00079449 s, 2.6 GB/s
[root@node01 11]# dd if=/dev/zero of=file3 bs=1M count=3
3145728 bytes (3.1 MB, 3.0 MiB) copied, 0.00104039 s, 3.0 GB/s
[root@node01 11]# dd if=/dev/zero of=file4 bs=1M count=4
4194304 bytes (4.2 MB, 4.0 MiB) copied, 0.00133403 s, 3.1 GB/s
[root@node01 11]# dd if=/dev/zero of=file5 bs=1M count=5
5242880 bytes (5.2 MB, 5.0 MiB) copied, 0.00153479 s, 3.4 GB/s
[root@node01 11]# 
3)这里file1到file5的大小如下。
[root@node01 11]# du -sh file*
1.0M	file1
2.0M	file2
3.0M	file3
4.0M	file4
5.0M	file5
[root@node01 11]# 
4)为了测试方便,按下面的命令修改文件的权限、所有者和所属组,注意文件名的大小写, 命令如下。
[root@node01 11]# chown aaa:aaa Aaa001 ; chgrp aaa aaa001 
[root@node01 11]# chown 888 file1 ; chgrp 888 file2 ; chown 888.888 file3
[root@node01 11]# chmod 326 file1 ; chmod 226 file2 ; chmod 327 file3
[root@node01 11]# chmod 441 file4
5)下面查看所有文件,命令如下
[root@node01 11]# ls -lh
总用量 15M
-rw-r--r--. 1 root aaa     0 12月  5 12:16 aaa001
-rw-r--r--. 1 aaa  aaa     0 12月  5 12:16 Aaa001
--wx-w-rw-. 1  888 root 1.0M 12月  5 12:18 file1
--w--w-rw-. 1 root  888 2.0M 12月  5 12:18 file2
--wx-w-rwx. 1  888  888 3.0M 12月  5 12:18 file3
-r--r----x. 1 root root 4.0M 12月  5 12:18 file4
-rw-r--r--. 1 root root 5.0M 12月  5 12:18 file5
[root@node01 11]# 

1.基于名称的查询

1)根据名称进行查询,命令如下。
[root@node01 11]# find -name aaa001 
./aaa001
[root@node01 11]#
        这里只显示了blab001,并没有显示blab001,因为 Linux中是严格区分大小写的。
2)要忽略大小写,可以使用-iname选项,命令如下。
[root@node01 11]# find -iname aaa001 
./Aaa001
./aaa001
[root@node01 11]#

这样不管大小写都能查询出来。

3)在使用find命令时,还是可以使用通配符的,记得要用双引号引起来,命令如下。
[root@node01 11]# find -name "file*"
./file1
./file2
./file3
./file4
./file5
[root@node01 11]# 

这里查询的是文件名以file开头的那些文件。

2.基于文件所有者和所属组的查询

1)根据文件的所有者进行查询,用-user选项,命令如下。
[root@node01 11]# find -user aaa
./Aaa001
[root@node01 11]# 
这里查询的是所有者为Iduan的那些文件。
在查询时,还可以用连接符连接多个查询条件,
  1. -a:表示“和”的关系,两边的条件都要满足
  2. -o:表示 “或” 的关系,两边的条件满足一个即可
2)下面查询所有者为aaa且所属组也为aaa的文件,命令如下。
[root@node01 ~]# find -user aaa -o -group aaa
./11/Aaa001
./11/aaa001
[root@node01 ~]#
3)还可以根据uid进行查询,用-uid选项。下面查询文件所有者的uid为1000的那些文件,命令如下。
[root@node01 ~]# tail -1 /etc/passwd
aaa:x:1001:1001::/home/aaa:/bin/bash
[root@node01 ~]# find -uid 1001
./11/Aaa001
[root@node01 ~]# 
        因为lduan用户的uid是1001,所以本质上这里查询的就是所有者为lduan的那些文件。 如果文件的所有者或所属组是数字,可以根据-nouser 或-nogroup进行查询。
4)下面查询没有所有者和所属组的文件,命令如下。
[root@node01 ~]# find -nouser 
./11/file1
./11/file3
[root@node01 ~]# 

3.基于文件大小的查询

1)根据文件的大小进行查询,用-size选项。查询文件大小等于2M的文件,命令如下
[root@node01 ~]# find -size 2M
./11/file2
[root@node01 ~]# 
2)查询文件大小大于3M的文件,命令如下。
[root@node01 ~]# find -size +3M
./11/file4
./11/file5
[root@node01 ~]#
如果大小前面加上加号“+”,表示大于:如果大小前面加上减号“-”,表示小于.

4.基于文件时间的查询

根据文件的时间进行查询,用-mtime选项,单位是天,这里天的表示如下。
  1. 24小时内,即一天以内,用-1表示
  2. 24~48小时算一天,用1表示
  3. 超过48小时,算超过1天,用+1表示
1)查询创建时间为1天的文件,命令如下。
[root@node01 ~]# find -mtime 1
./anaconda-ks.cfg
./.cache
./.cache/dconf
./.cache/dconf/user
./.dbus
./.dbus/session-bus
./.dbus/session-bus/c9222617a072429aafff4c3ee5174f94-9
./initial-setup-ks.cfg
[root@node01 ~]#
2)查询创建时间超过1天的文件,命令如下。
[root@node01 ~]# find -mtime 1
./anaconda-ks.cfg
./.cache
./.cache/dconf
./.cache/dconf/user
./.dbus
./.dbus/session-bus
./.dbus/session-bus/c9222617a072429aafff4c3ee5174f94-9
./initial-setup-ks.cfg
[root@node01 ~]# find -mtime +1
./.bash_logout
./.bash_profile
./.bashrc
./.cshrc
./.tcshrc
[root@node01 ~]# 
3)查询创建时间低于1天的文件,命令如下。
[root@node01 ~]# find -mtime -1
.
./.bash_history
./aa
./bb
./xx
./.viminfo
./11
./11/Aaa001
./11/aaa001
./11/file1
./11/file2
./11/file3
./11/file4
./11/file5
./.Xauthority
[root@node01 ~]# 
4)还可以用-mmin选项,单位是分钟。查找创建时间低于120分钟的文件,命令如下。
[root@node01 ~]# find -mmin -120
.
./11
./11/file2
./11/file3
./11/file4
./11/file5
./.Xauthority
[root@node01 ~]# 
这里查询多少分钟,大家可以根据自己的实际情况进行替换。

5.基于文件类型的查询

根据文件的类型进行查询,用-type选项。常见的文件类型包括以下4种:
  1. d:表示目录(文件夹)
  2. f:表示普通文件
  3. l:表示软链接
  4. b:可用于存储数据的设备文件,如硬盘,光盘等。
1)在当前目录中找出所有的文件夹,命令如下。
[root@node01 ~]# find -type d
.
./.cache
./.cache/dconf
./.dbus
./.dbus/session-bus
./xx
./11
[root@node01 ~]# 
这里只找到表示当前目录的点“.”。
2)在当前目录中找出所有的普通文件,命令如下
[root@node01 ~]# find -type f
./.bash_history
./aa
./bb
./.viminfo
./11/Aaa001
./11/aaa001
./11/file1
./11/file2
./11/file3
./11/file4
./11/file5
./.Xauthority
[root@node01 ~]#

  • 26
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值