当前位置: 首页 > news >正文

5. Linux 文件系统基本管理

文章目录

  • 5. Linux 文件系统基本管理
    • 识别文件系统和设备
      • Linux 中设备
      • Linux 文件系统
      • 查看设备和文件系统
        • lsblk 命令
        • df 命令
        • du 命令
        • 案例
    • 挂载和卸载文件系统
      • 环境准备
      • 挂载文件系统
      • 卸载文件系统
      • 卸载失败处理
        • lsof 命令
        • fuser 命令
      • 案例:Linux 挂载 NTFS 格式U盘
      • 案例:Linux 挂载 exfat 格式U盘
      • 案例:构建基于 ISO 文件的 yum 仓库
    • 查找系统中文件
      • locate
      • find
        • 根据文件 name 查找
        • 根据文件 type 查找
        • 根据文件 owner 查找
        • 根据文件 perm 查找
        • 根据文件 size 查找
        • 根据文件 time 查找
  • 大小大于10G
  • 大小小于10k
  • 大小等于1M
  • 注意:size会取整为1个单位,所以find -size 1M结果包含小于1M的文件。
  • 可以使用1024k取代1M

5. Linux 文件系统基本管理

识别文件系统和设备

Linux 中设备

在Linux中,对存储设备的访问由特殊类型文件-块设备(block)提供。挂载块设备前,必须先使用文件系统对其进行格式化。

块设备文件与其他的设备文件一起存储在/dev目录中。设备文件是由操作系统自动创建的。

常见的不同类型接口块设备:

  • 接口:SATA/SAS/USB/SCSI,名称:/dev/sda、/dev/sdb …
  • 接口:virtio-blk,虚拟机磁盘,名称:/dev/vda、/dev/vdb …
  • 接口:NVMe SSD,名称:/dev/nvme0n1、/dev/nvme1n1…
  • 接口:SD/MMC/eMMC,名称:/dev/mmcblk0,/dev/mmcblk1 …

通常,不会将整个存储设备格式化为一个文件系统中,而是将硬盘驱动器划分为多个逻辑存储单元, 这些单元称为分区。各种分区使用不同的文件系统进行格式化或用于不同的用途。 例如,一个分区可以包含用户目录,而另一个分区可以包含系统数据和日志。 如果用户用数据填充主目录分区,则系统分区可能仍然有可用空间。

  • /dev/sda第一个分区为/dev/sda1,第二个分区为/dev/sda2,以此类推。
  • /dev/nvme0n1p1,/dev/nvme0n1p2
  • /dev/vda1,/dev/vda2
  • /dev/xvda1,/dev/xvda2

Linux 文件系统

文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构,即在存储设备上组织文件的方法。

Linux服务器上的文件是按文件系统层次结构访问的。

在这里插入图片描述

管理文件系统需要:

  • 确定存储设备的空间使用情况以及文件系统层次结构中受影响的目录。
  • 存储设备发生故障,而您需要知道哪些文件系统存在风险。

要让文件系统的内容在文件系统层次结构中可用,必须将它挂载到一个空目录上,该目录被称为挂载点

参考学习:这里

查看设备和文件系统

lsblk 命令

查看块设备使用情况。

[root@server ~ 17:50:37]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0  100G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   99G  0 part ├─centos-root 253:0    0   50G  0 lvm  /├─centos-swap 253:1    0  3.9G  0 lvm  [SWAP]└─centos-home 253:2    0 45.1G  0 lvm  /home
sdb               8:16   0   20G  0 disk 
sr0              11:0    1  4.4G  0 rom  

结果说明:

  • NAME :块设备名。
  • MAJ:MIN :主要(MAJ)和次要(MIN)设备号。
  • RM :指明设备是否是可移动设备。注意,在本例中设备sdb和sr0的RM值等于1,这说明他们是可移动设备。
  • SIZE :本栏列出设备的容量大小信息。例如298.1G表明该设备大小为298.1GB,而1K表明该设备大小为1KB。
  • RO :该项表明设备是否为只读。在本案例中,所有设备的RO值为0,表明他们不是只读的。
  • TYPE :本栏显示块设备是否是磁盘或磁盘上的一个分区。在本例中,sda和sdb是磁盘,而sr0是只读存储(rom)。
  • MOUNTPOINT :本栏指出设备挂载的挂载点。
df 命令

查看文件系统使用情况。

[root@server ~ 18:02:41]# df
文件系统                   1K-块    已用     可用 已用% 挂载点
devtmpfs                 1995932       0  1995932    0% /dev
tmpfs                    2013056       0  2013056    0% /dev/shm
tmpfs                    2013056    4380  2008676    1% /run
tmpfs                    2013056       0  2013056    0% /sys/fs/cgroup
/dev/mapper/centos-root 52403200 5330584 47072616   11% /
/dev/sda1                1038336  188428   849908   19% /boot
/dev/mapper/centos-home 47285700   62292 47223408    1% /home
tmpfs                     402612      12   402600    1% /run/user/42
tmpfs                     402612       0   402612    0% /run/user/0# -h选项,友好显示单位,单位进制是1024。
# -T选项,显示文件系统类型。
[root@server ~ 18:04:00]# df -hT
文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs  2.0G     0  2.0G    0% /dev
tmpfs                   tmpfs     2.0G     0  2.0G    0% /dev/shm
tmpfs                   tmpfs     2.0G  4.3M  2.0G    1% /run
tmpfs                   tmpfs     2.0G     0  2.0G    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        50G  5.1G   45G   11% /
/dev/sda1               xfs      1014M  185M  830M   19% /boot
/dev/mapper/centos-home xfs        46G   61M   46G    1% /home
tmpfs                   tmpfs     394M   12K  394M    1% /run/user/42
tmpfs                   tmpfs     394M     0  394M    0% /run/user/0# -H选项,单位进制是1000。
[root@server ~ 18:04:40]# df -H
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 2.1G     0  2.1G    0% /dev
tmpfs                    2.1G     0  2.1G    0% /dev/shm
tmpfs                    2.1G  4.5M  2.1G    1% /run
tmpfs                    2.1G     0  2.1G    0% /sys/fs/cgroup
/dev/mapper/centos-root   54G  5.5G   49G   11% /
/dev/sda1                1.1G  193M  871M   19% /boot
/dev/mapper/centos-home   49G   64M   49G    1% /home
tmpfs                    413M   13k  413M    1% /run/user/42
tmpfs                    413M     0  413M    0% /run/user/0# 查看单个文件系统
[root@server ~ 18:05:14]# df -hT /boot
文件系统       类型  容量  已用  可用 已用% 挂载点
/dev/sda1      xfs  1014M  185M  830M   19% /boot# 查看文件或目录存储在哪个设备
[root@server ~ 18:05:47]# df /tmp
文件系统                   1K-块    已用     可用 已用% 挂载点
/dev/mapper/centos-root 52403200 5330584 47072616   11% /
du 命令

查看目录和文件占用磁盘空间大小。

# 查看/boot目录及其子目录占用空间
[root@server ~ 18:05:53]# du /boot
0	/boot/efi/EFI/centos/fw
6060	/boot/efi/EFI/centos
1928	/boot/efi/EFI/BOOT
7988	/boot/efi/EFI
7988	/boot/efi
2400	/boot/grub2/i386-pc
3176	/boot/grub2/locale
2504	/boot/grub2/fonts
8096	/boot/grub2
4	/boot/grub
155212	/boot# 只查看/boot目录占用空间
[root@server ~ 18:06:34]# du -s /boot
155212	/boot# -h 选项human方式显示size
[root@server ~ 18:07:24]# du -sh /boot
152M	/boot
案例

查找根文件系统中哪个文件占用了大量空间。

# 环境准备,创建一个大小为4GB的文件:使用 0 填充该文件
[root@server ~ 18:08:28]#  dd if=/dev/zero of=/usr/share/doc/dhclient-4.2.5/bigfile-4G  bs=1M count=4096
记录了4096+0 的读入
记录了4096+0 的写出
4294967296字节(4.3 GB)已复制,10.4211 秒,412 MB/秒# 查看过程如下:
[root@server ~ 18:09:53]# du -sk /* |sort -n
.......
44660	/etc
146944	/root
155212	/boot
624184	/var
8596600	/usr[root@server ~ 18:10:09]# du -sk /usr/* |sort -n
0	/usr/etc
0	/usr/games
0	/usr/src
0	/usr/tmp
18736	/usr/include
42704	/usr/local
66736	/usr/sbin
100920	/usr/libexec
297416	/usr/bin
1074904	/usr/lib
1250112	/usr/lib64
5745072	/usr/share[root@server ~ 18:11:17]# du -sk /usr/share/* |sort -n
0	/usr/share/egl
0	/usr/share/empty
0	/usr/share/file
0	/usr/share/games
0	/usr/share/gcc-4.8.5
0	/usr/share/grilo-0.3
0	/usr/share/gssdp
......
67764	/usr/share/man
83904	/usr/share/icons
122840	/usr/share/fonts
213252	/usr/share/help
454052	/usr/share/locale
4309568	/usr/share/doc[root@server ~ 18:12:26]# du -sk /usr/share/doc/* |sort -n
........
3656	/usr/share/doc/lorax-19.7.28
4376	/usr/share/doc/gcc-4.8.5
4772	/usr/share/doc/lorax-composer-19.7.43
4194316	/usr/share/doc/dhclient-4.2.5[root@server ~ 18:12:26]# du -sk /usr/share/doc/dhclient-4.2.5/* |sort -n
4	/usr/share/doc/dhclient-4.2.5/dhclient6.conf.example
4	/usr/share/doc/dhclient-4.2.5/dhclient.conf.example
4	/usr/share/doc/dhclient-4.2.5/README.dhclient.d
4194304	/usr/share/doc/dhclient-4.2.5/bigfile-4G# 方法二:
[root@server ~ 18:14:10]# find / -size +100M 2>/dev/null 
/proc/kcore
/sys/devices/pci0000:00/0000:00:0f.0/resource1_wc
/sys/devices/pci0000:00/0000:00:0f.0/resource1
/var/lib/rpm/Packages
/var/cache/yum/x86_64/7/updates/gen/primary_db.sqlite
/usr/lib/locale/locale-archive
/usr/lib64/firefox/libxul.so
/usr/share/doc/dhclient-4.2.5/bigfile-4G

Linux 思想:尽可能使用各种小工具完成一个复杂任务。每个小工具专注于特定的功能,keep simple。

挂载和卸载文件系统

环境准备

# 虚拟机添加一块硬盘/dev/sdb
[root@server ~ 18:15:13]# lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb    8:16   0  20G  0 disk # 格式化文件系统
[root@server ~ 18:16:32]# mkfs.xfs  -f /dev/sdb
meta-data=/dev/sdb               isize=512    agcount=4, agsize=1310720 blks=                       sectsz=512   attr=2, projid32bit=1=                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=5242880, 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

挂载文件系统

当需要适用文件系统的时候,通过mount命令挂载。

mount 命令语法:

mount [-fnrsvw] [-t vfstype] [-o options] device mountpoint

选项说明:

  • -t vfstype,指明文件系统类型。
  • -o options,指明挂载选项。
  • device,指明要挂载的具有文件系统的设备,可以通过UUID=<uuid>、<device>、LABEL=<label>、PARTLABEL=<label>、PARTUUID=<uuid>等方式指明。例如,/dev/sdb,UUID=“f20547b2-df53-46e5-b526-a8744be26231” 。
  • mountpoint,指明挂载点位置。
# 创建挂载点
[root@server ~ 18:17:24]# mkdir /data# 显示系统中所有文件系统
[root@server ~ 18:18:27]# blkid
/dev/sr0: UUID="2022-07-26-15-09-17-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos" 
/dev/sda1: UUID="1a4ee11b-6ca4-48d7-915b-0454373ae4c8" TYPE="xfs" 
/dev/sda2: UUID="0r87Oj-pcAP-bthr-UsJH-FyrA-ArN5-tqtjtT" TYPE="LVM2_member" 
/dev/mapper/centos-root: UUID="3996b270-1e39-4e04-80b8-b0f658d1bfc9" TYPE="xfs" 
/dev/mapper/centos-swap: UUID="9eea2eda-07ea-48c1-8d37-5a03334a80a9" TYPE="swap" 
/dev/mapper/centos-home: UUID="ccd7eaa8-206f-44a4-8d4e-e52f12d95f61" TYPE="xfs" 
/dev/sdb: UUID="2264b6c5-095b-44e6-8261-954dda174d01" TYPE="xfs"# 显示系统中特定文件系统
[root@server ~ 18:18:51]# blkid /dev/sdb
/dev/sdb: UUID="2264b6c5-095b-44e6-8261-954dda174d01" TYPE="xfs" # 挂载设备并验证
[root@server ~ 18:19:23]# mount /dev/sdb /data
#或者
[root@server ~ 18:19:37]# mount UUID="2264b6c5-095b-44e6-8261-954dda174d01" /data# 验证
[root@server ~ 18:20:45]# df -h /data
文件系统        容量  已用  可用 已用% 挂载点
/dev/sdb         20G   33M   20G    1% /data# 创建文件测试
[root@server ~ 18:21:34]# touch /data/file-{00..09}
[root@server ~ 18:22:00]# ls /data
file-00  file-02  file-04  file-06  file-08
file-01  file-03  file-05  file-07  file-09

查看系统当前所有挂载,可以看到挂载的详细信息。

[root@server ~ 18:22:29]# mount
.....
/dev/mapper/centos-home on /home type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime)
tmpfs on /run/user/42 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=402612k,mode=700,uid=42,gid=42)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=402612k,mode=700)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,relatime)
/dev/sdb on /data type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
# 括号中属性,是文件系统当前支持的功能。[root@server ~ 18:23:24]# mount |grep ^/dev
/dev/mapper/centos-root on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
/dev/mapper/centos-home on /home type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
/dev/sdb on /data type xfs (rw,relatime,seclabel,attr2,inode64,noquota)

卸载文件系统

当文件系统不使用的时候,通过 umount 命令卸载。

umount命令语法:

umount device | dir

可以通过指定设备或者挂载点,卸载文件系统。

示例:

[root@server ~ 18:24:10]# umount /dev/sdb
# 或者
[root@server ~ 18:24:33]# umount /data
umount: /data:未挂载
[root@server ~ 18:24:43]# df -h /data
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   50G  9.1G   41G   19% /

卸载失败处理

[root@server ~ 18:25:30]# mount /dev/sdb /data
[root@server ~ 18:26:08]# cd /data
[root@server data 18:26:15]# ls
file-00  file-02  file-04  file-06  file-08
file-01  file-03  file-05  file-07  file-09# 提示挂载点正在忙碌
[root@server data 18:26:37]# umount /dev/sdb
umount: /data:目标忙。(有些情况下通过 lsof(8) 或 fuser(1) 可以找到有关使用该设备的进程的有用信息)
lsof 命令

lsof,list open files,用于查看系统打开的文件。

lsof 命令语法:

lsof [options] [names]

常用选项:

  • -i,查看打开的 Internet 文件。例如 -i @10.1.8.20:22-i :80
  • -p pid,根据进程PID查找特定进程打开的文件。
  • -u uid,根据用户 uid查找特定用户打开的文件。
  • names,是文件或者文件系统设备。
# 新开窗口查看哪个进程在使用挂载点
[root@server data 18:27:33]# lsof /data
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
bash    2099 root  cwd    DIR   8,16      156   64 /data
fuser 命令

fuser,用于识别进程打开的文件。

fuser 命令语法:

fuser [-fMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE] [-k [-i] [-SIGNAL]] NAME...

常用选项:

  • -k,杀死这些正在访问这些文件的进程。除非使用-signal修改信号,否则将发送SIGKILL信号。
  • -signal,指定发送的信号(signal 使用特定信号替换),缺省信号SIGKILL。
  • -i,交互模式杀死进程。
  • -l,列出所有已知的信号名称。
  • -m,列出文件系统被哪些程序使用。
  • -n,空间,选择不同的名字空间,可是file,udp,tcp。默认是file,也就是文件。
  • -4,仅查询IPV4套接字
  • -6,仅查询IPV6套接字。
  • -u,指定用户名。
# 新开窗口查看哪个进程在使用挂载点
[root@server data 18:29:08]# fuser -m /data
/data:                2099c  4077c

终止进程,再次卸载

[root@server data 18:27:40]# cd 
[root@server ~ 18:30:03]# umount /data

案例:Linux 挂载 NTFS 格式U盘

思路:默认情况下 Linux不识别NTFS格式文件系统,需要安装相应的模块进行识别。

  1. 安装 epel 仓库
  2. 安装 ntfs-3g (该软件包由epel仓库提供)
  3. 挂载

案例:Linux 挂载 exfat 格式U盘

思路:默认情况下 Linux 不识别 exfat 格式文件系统,需要安装相应的模块进行识别。

[root@server ~ 18:31:39]# yum install -y gcc fuse-devel make pkg-config[root@server ~ 18:34:13]# wget https://github.com/relan/exfat/releases/download/v1.2.0/fuse-exfat-1.2.0.tar.gz[root@server ~ 18:37:42]# tar -xf fuse-exfat-1.2.0.tar.gz 
[root@server ~ 18:37:57]# cd fuse-exfat-1.2.0/
[root@server fuse-exfat-1.2.0 18:38:06]# ./configure 
[root@server fuse-exfat-1.2.0 18:38:43]# make && make install# 挂载exFAT格式的U盘(假设U盘设备为/dev/sdb1)
[root@server fuse-exfat-1.2.0 18:38:43]# mount.exfat /dev/sdb1 /mnt

案例:构建基于 ISO 文件的 yum 仓库

思路:

  1. 挂载 ISO 文件
  2. 创建仓库指向 ISO 文件中仓库
  3. 测试
# 1. 挂载 ISO 文件
[root@server ~ 18:41:05]# mkdir /dvd
[root@server ~ 18:43:26]# mount /dev/sr0 /dvd
mount: /dev/sr0 写保护,将以只读方式挂载# 2. 创建仓库指向 ISO 文件中仓库
#  备份
[root@server ~ 18:45:31]# mkdir /etc/yum.repos.d/old
[root@server ~ 18:45:49]# mv /etc/yum.repos.d/*repo /etc/yum.repos.d/old[root@server ~ 18:48:20]# cat << 'EOF' >  /etc/yum.repos.d/dvd.repo
> [dvd]
> name=CentOS 7 from dvd
> baseurl=file:///dvd
> enable=1
> gpgcheck=0
> EOF# 3. 测试
[root@server ~ 18:49:39]# yum repolist 
[root@server ~ 18:49:48]# yum clean all
[root@server ~ 18:52:39]# yum makecache 
已加载插件:fastestmirror, langpacks, product-id, search-disabled-repos,: subscription-managerThis system is not registered with an entitlement server. You can use subscription-manager to register.Determining fastest mirrors
dvd                                          | 3.6 kB     00:00     
(1/4): dvd/group_gz                            | 153 kB   00:00     
(2/4): dvd/primary_db                          | 3.3 MB   00:00     
(3/4): dvd/other_db                            | 1.3 MB   00:00     
(4/4): dvd/filelists_db                        | 3.3 MB   00:00     
元数据缓存已建立# 安装软件包
[root@server ~ 18:53:14]# yum install -y httpd

查找系统中文件

locate

locate 命令根据文件名及其路径,在 mlocate 数据库中查找文件,并返回结果。数据库中存放文件和文件路径信息。

常规用户查找时,返回的结果仅包含用户有读取权限的目录树中匹配项。

查找文件前,需要root用户手动执行updatedb命令更新mlocate数据库。

[root@server ~ 18:53:27]# updatedb

locate命令语法:

locate [OPTION]... [PATTERN]...

常用选项:

  • -b, --basename
  • -i, --ignore-case
  • -c, --count
  • -r, --regexp

示例:

[root@server ~ 18:55:08]# yum install -y httpd
# 安装后,未跟新数据库,所以检索不到
[root@server ~ 18:55:23]# locate httpd.conf# 更新后查找
[root@server ~ 18:56:18]# updatedb
[root@server ~ 18:56:29]# locate httpd.conf
/etc/httpd/conf/httpd.conf
/root/etc/httpd/conf/httpd.conf
/root/httpd-2.4.60/docs/conf/httpd.conf
/root/httpd-2.4.60/docs/conf/httpd.conf.in
/root/httpd-2.4.60/modules/lua/test/test_httpd.conf
/root/httpd-2.4.60/test/pyhttpd/conf/httpd.conf.template
/root/usr/lib/tmpfiles.d/httpd.conf
/usr/lib/tmpfiles.d/httpd.conf
/usr/local/apache2/conf/httpd.conf
/usr/local/apache2/conf/original/httpd.conf# -b选项 查找
[root@server ~ 18:57:09]# locate -b htppd# 扩展
[root@server ~ 18:57:34]# basename /usr/share/doc
doc
[root@server ~ 18:57:52]# dirname /usr/share/doc
/usr/share# -i选项 忽略大小写
[root@server ~ 18:58:23]# locate PASSWD
[root@server ~ 18:58:31]# locate -i PASSWD
/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
/etc/security/opasswd
/root/httpd-2.4.60/docs/man/htpasswd.1
/root/httpd-2.4.60/docs/man/tr/htpasswd.1
/root/httpd-2.4.60/docs/manual/programs/htpasswd.html
.....# -c选项 返回找到的数量
[root@server ~ 18:59:28]# locate -b -c PASSWD
0# -r选项 正则表达式匹配查找
[root@server ~ 18:59:59]# locate -r 'http.*conf'
/etc/httpd/conf
/etc/httpd/conf.d
/etc/httpd/conf.modules.d
/etc/httpd/conf/httpd.conf
....

find

find 命令在本地文件系统中执行实时查找文件。使用find命令的用户对文件夹必须有读取和执行权限。

语法:

find [path] [expression] [action]
  • path,是查询路径,如果没有指定文件夹,将会查找当前目录及子目录。
  • expression,是查询条件表达式。
  • action,是找到文件后采取的动作。
根据文件 name 查找
[root@server ~ 19:00:15]# touch /etc/PASSWD
[root@server ~ 19:01:13]# find /etc/ -name passwd
/etc/pam.d/passwd
/etc/passwd[root@server ~ 19:01:42]# find /etc/ -name '*passwd*'
/etc/pam.d/passwd
/etc/passwd
/etc/security/opasswd
/etc/passwd-[root@server ~ 19:02:01]# find /etc/ -iname '*passwd*'
/etc/pam.d/passwd
/etc/passwd
/etc/security/opasswd
/etc/passwd-
/etc/PASSWD
根据文件 type 查找

-type 根据文件类型查找,支持文件类型:

  • b,block (buffered) special。
  • c,character (unbuffered) special。
  • d,directory。
  • p,named pipe (FIFO)。
  • f,regular file。
  • l,symbolic link。
  • s,socket。
根据文件 owner 查找
  • -user、-uid,属于特定用户。
[root@server ~ 19:02:22]# id wangshaocong
uid=1000(wangshaocong) gid=1000(wangshaocong)=1000(wangshaocong),10(wheel)
[root@server ~ 19:03:13]# find / -user wangshaocong [root@server ~ 19:04:01]# find / -uid 1000
  • -group、-gid,属于特定组
[root@server ~ 19:04:01]# grep wheel /etc/group
wheel:x:10:wangshaocong
[root@server ~ 19:04:49]# find / -group wheel
find: ‘/proc/7265/task/7265/fd/5’: 没有那个文件或目录
find: ‘/proc/7265/task/7265/fdinfo/5’: 没有那个文件或目录
find: ‘/proc/7265/fd/6’: 没有那个文件或目录
find: ‘/proc/7265/fdinfo/6’: 没有那个文件或目录
/var/lib/cockpit
[root@server ~ 19:05:06]# find / -gid 10
find: ‘/proc/7275/task/7275/fd/5’: 没有那个文件或目录
find: ‘/proc/7275/task/7275/fdinfo/5’: 没有那个文件或目录
find: ‘/proc/7275/fd/6’: 没有那个文件或目录
find: ‘/proc/7275/fdinfo/6’: 没有那个文件或目录
/var/lib/cockpit
  • -nouser,不属于任何用户;-nogroup,不属于任何组
# 查找系统中不属于任何用户或者不属于任何组的文件
[root@server ~ 19:06:13]# find / -nouser -o -nogroup 
根据文件 perm 查找
# 准备文件
[root@server ~ 19:06:40]# mkdir lab
[root@server ~ 19:06:47]# cd lab
[root@server lab 19:06:51]# touch file-{1..3}
[root@server lab 19:07:09]# ls -l file*
-rw-r--r--. 1 root root 0 919 19:07 file-1
-rw-r--r--. 1 root root 0 919 19:07 file-2
-rw-r--r--. 1 root root 0 919 19:07 file-3
  • -perm mode,查找文件权限为mode的文件。
[root@server lab 19:07:16]# chmod 764 file-1
[root@server lab 19:07:58]# 
[root@server lab 19:08:00]# find -perm 764 | xargs ls -l
-rwxrw-r--. 1 root root 0 919 19:07 ./file-1

-perm -mode,例如:mode为764,则ugo必须同时满足的最小权限:user至少为7、group至少为6、other为4。

[root@server lab 19:08:55]# chmod 777 file-1
[root@server lab 19:09:34]# chmod 764 file-2
[root@server lab 19:09:44]# chmod 760 file-3
[root@server lab 19:09:52]# find . -perm -764 | xargs ls -l
-rwxrwxrwx. 1 root root 0 919 19:07 ./file-1
-rwxrw-r--. 1 root root 0 919 19:07 ./file-2# 0作为通配符,表示不匹配对应权限位。
# 查找系统中具有suid权限的文件
[root@server lab 19:10:50]# find / -perm -4000# 查找系统中同时具有特殊权限的文件:suid和sgid
[root@server lab 19:11:38]# find / -perm -4000
[root@server lab 19:14:10]# find / -perm -6000 2>/dev/null |xargs ls -l
-rwsr-sr-x. 1 abrt abrt 15344 102 2020 /usr/libexec/abrt-action-install-debuginfo-to-abrt-cache

-perm /mode,例如mode为764,则ugo只要有一个满足即可:user至少为7、group至少为6、other至少为4。

[root@server lab 19:14:12]# 
[root@server lab 19:14:12]# chmod a=- file-1
[root@server lab 19:17:00]# chmod uo=-,g=rwx file-2
[root@server lab 19:15:40]# chmod ug=-,o=r file-3[root@server lab 19:17:46]# find . -name 'file-*' -perm /764| xargs ls -l
----rwx---. 1 root root 0 919 19:07 ./file-2
-------r--. 1 root root 0 919 19:07 ./file-3# 查找系统中具有特殊权限的文件:suid、sgid、sticky
[root@server lab 19:18:29]# find / -perm /7000# 查找系统中具有特殊权限的文件:suid或者sgid
[root@server lab 19:18:58]# find / -perm /6000
  • -readable -writable -executable,文件具有可读、可写、可执行。
根据文件 size 查找

单位 c(字节)、k(KiB)、M(MiB)、G(GiB)

# 大小等于10M
[root@server lab 19:19:23]# find -size 10M# 大小大于10G
[root@server lab 19:19:38]# find -size +10G# 大小小于10k
[root@server lab 19:20:10]# find -size -10k
.
./file-1
./file-2
./file-3# 大小等于1M
[root@server ~ 19:23:05]# find -size 1M
....
./.Xauthority
./10.sersync2.5.4_64bit_binary_stable_final.tar.gz
./run
./run/httpd
./run/httpd/htcacheclean
./fuse-exfat-1.2.0.tar.gz# 注意:size会取整为1个单位,所以find -size 1M结果包含小于1M的文件。
# 可以使用1024k取代1M
[root@server ~ 19:22:30]# find -size 1024k
根据文件 time 查找
  • -amin, -cmin, -mmin 单位1分钟。
  • -atime, -ctime, -mtime 单位24小时。
  • -newer file,比file新的文件。
# 10分钟前(正好10分钟)
[root@server ~ 19:23:05]# find -amin 10# 10分钟以前(大于10分钟)
[root@server ~ 19:24:58]# find -amin +10# 10分钟以内(小于10分钟)
[root@server ~ 19:24:58]# find -amin -10

:19:23]# find -size 10M

大小大于10G

[root@server lab 19:19:38]# find -size +10G

大小小于10k

[root@server lab 19:20:10]# find -size -10k
.
./file-1
./file-2
./file-3

大小等于1M

[root@server ~ 19:23:05]# find -size 1M

./.Xauthority
./10.sersync2.5.4_64bit_binary_stable_final.tar.gz
./run
./run/httpd
./run/httpd/htcacheclean
./fuse-exfat-1.2.0.tar.gz

注意:size会取整为1个单位,所以find -size 1M结果包含小于1M的文件。

可以使用1024k取代1M

[root@server ~ 19:22:30]# find -size 1024k


#### 根据文件 time 查找- -amin,  -cmin, -mmin 单位1分钟。
- -atime,  -ctime, -mtime 单位24小时。
- -newer file,比file新的文件。```bash
# 10分钟前(正好10分钟)
[root@server ~ 19:23:05]# find -amin 10# 10分钟以前(大于10分钟)
[root@server ~ 19:24:58]# find -amin +10# 10分钟以内(小于10分钟)
[root@server ~ 19:24:58]# find -amin -10
http://www.dtcms.com/a/391720.html

相关文章:

  • 【MySQL】GROUP BY详解与优化
  • 深度学习:DenseNet 稠密连接​ -- 缓解梯度消失
  • Linux DNS 子域授权实践
  • 团体程序设计天梯赛-练习集 L1-041 寻找250
  • mellanox网卡(ConnectX-7)开启SACK
  • 相机镜头靶面
  • 【语法进阶】gevent的使用与总结
  • Java优选算法——前缀和
  • ARM不同层次开发
  • 【Python】高质量解析 PDF 文件框架和工具
  • RSS-2025 | 无地图具身导航新范式!CREStE:基于互联网规模先验与反事实引导的可扩展无地图导航
  • RNA-seq分析之共识聚类分析
  • Linux开发——ARM介绍
  • Force Dimension Sigma力反馈设备远程遥操作机械臂外科手术应用
  • 泛函驻点方程与边界条件的推导:含四阶导数与给定边界
  • C#开发USB报警灯服务,提供MES或者其它系统通过WebAPI调用控制报警灯
  • Docker基础篇08:Docker常规安装简介
  • 【软考-系统架构设计师】软件架构分析方法(SAAM)
  • 广西保安员考试题库及答案
  • 【Vue】Vue 项目中常见的埋点方案
  • 投稿之前去重还是投稿之后去重?
  • 【包教包会】CocosCreator3.x全局单例最优解
  • 为什么要使用dynamic_cast
  • 随机过程笔记
  • OpenHarmony:NDK开发
  • Dify 从入门到精通(第 87/100 篇):Dify 的多模态模型可观测性(高级篇)
  • 5种获取JavaScript时间戳函数的方法
  • Redis 三种集群模式
  • 初识kotlin协程
  • 多线程——内存可见性问题和指令重排序问题(volatile详解)