一、识别文件系统和设备
核心概念
Linux 中存储设备通过块设备文件 访问,存储在/dev目录,需格式化后挂载使用。硬盘通常划分为多个分区,不同接口设备有固定命名规则。
设备命名规则解析
| 接口类型 | 设备名称示例 | 说明 |
|---|---|---|
| SATA/SAS/USB/SCSI | /dev/sda、/dev/sdb |
多设备按字母排序,分区加数字 |
| virtio-blk(虚拟机) | /dev/vda、/dev/vdb |
虚拟机磁盘专用命名 |
| NVMe SSD | /dev/nvme0n1、/dev/nvme1n1 |
末尾n1表示命名空间,分区加p+ 数字(如nvme0n1p1) |
| SD/MMC/eMMC | /dev/mmcblk0、/dev/mmcblk1 |
嵌入式存储设备命名 |
分区命名规则
- 常规设备(如
sda):第一个分区/dev/sda1、第二个/dev/sda2,依次递增。 - NVMe 设备(如
nvme0n1):分区命名为/dev/nvme0n1p1、/dev/nvme0n1p2,p代表分区。
二、查看设备和文件系统
1. lsblk 命令:查看块设备信息
语法
bash
lsblk # 无选项默认显示所有块设备
代码解析(文档示例)
bash
[root@centos7 ~]# lsblk
# 输出字段说明
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
8:0 0 20G 0 disk # 磁盘设备(无挂载点)
11:0 1 13.2G 0 rom # 只读存储(如光盘)
nvme0n1 259:0 0 200G 0 disk # NVMe硬盘(200GB)
├─nvme0n1p1 259:1 0 1G 0 part /boot # 分区1(1GB,挂载到/boot)
└─nvme0n1p2 259:2 0 199G 0 part # 分区2(199GB,未直接挂载)
├─rl-root 253:0 0 70G 0 lvm / # LVM逻辑卷(根目录)
├─rl-swap 253:1 0 3.9G 0 lvm [SWAP] # 交换分区
└─rl-home 253:2 0 125.1G 0 lvm /home # 家目录分区
关键字段含义
-
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 :本栏指出设备挂载的挂载点。
2. df 命令:查看文件系统使用情况
语法
bash
df [选项] [目录/设备] # 无选项默认显示所有已挂载文件系统
常用选项
-h:以人类可读单位(1024 进制)显示(如 G、M)。-T:显示文件系统类型(如 xfs、devtmpfs)。-H:以 1000 进制单位显示(与-h区分)。
代码解析(文档示例)
示例 1:默认输出
bash
[root@centos7 ~]# df
# 输出字段:文件系统 总块数 已用 可用 已用% 挂载点
devtmpfs 1971384 0 1971384 0% /dev # 设备文件系统
tmpfs 1991520 0 1991520 0% /dev/shm # 临时共享内存
/dev/mapper/rl-root 73364480 6713888 66650592 10% / # 根目录(已用10%)
/dev/sr0 13880362 13880362 0 100% /dvd # 光盘(已用100%)
/dev/nvme0n1p1 1038336 206096 832240 20% /boot # /boot分区(已用20%)
示例 2:-hT选项(友好显示 + 文件系统类型)
bash
[root@centos7 ~]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
/dev/mapper/rl-root xfs 70G 6.5G 64G 10% / # 类型为xfs,容量70G
/dev/nvme0n1p1 xfs 1014M 202M 813M 20% /boot
/dev/sr0 iso9660 14G 14G 0 100% /dvd # 光盘文件系统类型iso9660
示例 3:查看单个文件系统
bash
[root@centos7 ~]# df -hT /boot # 仅查看/boot分区
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/nvme0n1p1 xfs 1014M 202M 813M 20% /boot
示例 4:查看文件 / 目录所在设备
bash
[root@centos7 ~]# df /tmp # 查看/tmp目录对应的存储设备
文件系统 块数 已用 可用 已用% 挂载点
/dev/mapper/rl-root 73364480 6713888 66650592 10% / # /tmp属于根目录设备
3. du 命令:查看目录 / 文件占用空间
语法
bash
du [选项] [目录/文件] # 无选项默认显示目录及子目录占用空间
常用选项
-s:仅显示总占用空间(不递归子目录)。-h:人类可读单位显示。-sh:组合选项(仅总大小 + 友好单位)。
代码解析(文档示例)
示例 1:递归查看 /boot 目录占用
bash
[root@centos7 ~]# du /boot
# 输出逐层显示子目录占用(单位:块,1块=4KB)
0 /boot/efi/EFI/rl/fw
6060 /boot/efi/EFI/rl
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
142368 /boot # /boot总占用(142368块 ≈ 560MB)
示例 2:仅显示 /boot 总占用(-s选项)
bash
[root@centos7 ~]# du -s /boot
142368 /boot # 仅总块数,无子目录详情
示例 3:友好显示总占用(-sh选项)
bash
[root@centos7 ~]# du -sh /boot
140M /boot # 直接显示为140MB,更易读
案例:查找根目录下大文件
bash
# 步骤1:创建4GB测试文件(填充0字节)
[root@centos7 ~]# dd if=/dev/zero of=/usr/share/doc/dhclient-4.2.5/bigfile-4G bs=1M count=4096
# 解析:if=输入文件(/dev/zero提供空字节),of=输出文件,bs=块大小(1M),count=块数(4096块=4GB)
4096+0 records in # 输入4096块
4096+0 records out # 输出4096块
4294967296 bytes (4.3 GB) copied, 38.6659 s, 111 MB/s # 复制完成(速度111MB/s)
# 步骤2:逐层查找大文件(按大小排序)
[root@centos7 ~]# du -sk /* | sort -n # 根目录下所有目录总大小(-sk),按数字排序(sort -n)
42988 /etc
142368 /boot
560424 /var
7917328 /usr # /usr目录占用最大(约7.9GB)
[root@centos7 ~]# du -sk /usr/* | sort -n # 查看/usr下子目录
866408 /usr/lib
1176764 /usr/lib64
5612684 /usr/share # /usr/share占用最大
[root@centos7 ~]# du -sk /usr/share/* | sort -n
213252 /usr/share/help
442228 /usr/share/locale
4279532 /usr/share/doc # /usr/share/doc占用最大
[root@centos7 ~]# du -sk /usr/share/doc/* | sort -n
1192 /usr/share/doc/python-kitchen-1.1.1
1216 /usr/share/doc/postfix-2.10.1
4194316 /usr/share/doc/dhclient-4.2.5 # 定位到目标目录
[root@centos7 ~]# du -sk /usr/share/doc/dhclient-4.2.5/* | sort -n
4 /usr/share/doc/dhclient-4.2.5/README.dhclient.d
4194304 /usr/share/doc/dhclient-4.2.5/bigfile-4G # 找到4GB大文件
# 方法二:直接查找大于100M的文件(忽略错误信息)
[root@centos7 ~]# find / -size +100M 2>/dev/null
/proc/kcore
/sys/devices/pci0000:00/0000:00:0f.0/resource1
/usr/share/doc/dhclient-4.2.5/bigfile-4G # 直接命中目标文件
三、挂载和卸载文件系统
核心概念
文件系统需挂载到空目录 (挂载点)才能访问,挂载用mount命令,卸载用umount命令。
1. 环境准备:格式化设备
语法
bash
mkfs.文件系统类型 设备名 # 常用文件系统:xfs、ext4、ext3
代码解析
bash
[root@centos7 ~]# mkfs.xfs /dev/sdb # 将/dev/sdb格式化为xfs文件系统
# 输出解析(格式化过程日志)
meta-data=/dev/sdb isize=512 agcount=4, agsize=1310656 blks
sectsz=512 attr=2, projid32bit=1
crc=1 finobt=0, sparse=0
data bsize=4096 blocks=5242624, 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
2. mount 命令:挂载文件系统
语法
bash
mount [-t 文件系统类型] [-o 挂载选项] 设备 挂载点
关键参数
-t 类型:指定文件系统类型(如 xfs、ext4、iso9660),可省略(自动识别)。-o 选项:挂载属性(如 rw = 可读写、ro = 只读)。- 设备标识:支持
/dev/设备名、UUID=xxx、LABEL=xxx。
代码解析(文档示例)
步骤 1:创建挂载点(空目录)
bash
[root@centos7 ~]# mkdir /data # 创建/data作为挂载点
步骤 2:查看设备 UUID(推荐用 UUID 挂载,避免设备名变动)
bash
[root@centos7 ~]# blkid /dev/sdb # 查看/dev/sdb的UUID
/dev/sdb: UUID="f20547b2-df53-46e5-b526-a8744be26231" TYPE="xfs"
# 输出:UUID唯一标识设备,TYPE确认文件系统类型
步骤 3:挂载设备
bash
# 方式1:通过设备名挂载
[root@centos7 ~]# mount /dev/sdb /data
# 方式2:通过UUID挂载(更稳定)
[root@centos7 ~]# mount UUID="f20547b2-df53-46e5-b526-a8744be26231" /data
步骤 4:验证挂载
bash
[root@centos7 ~]# df -h /data # 查看/data挂载情况
Filesystem Size Used Avail Use% Mounted on
/dev/sdb 20G 33M 20G 1% /data # 挂载成功,20GB容量,已用33M
步骤 5:测试写入(验证可读写)
bash
[root@centos7 ~]# touch /data/file-{00..09} # 创建10个测试文件
[root@centos7 ~]# ls /data # 查看文件
file-00 file-02 file-04 file-06 file-08
file-01 file-03 file-05 file-07 file-09 # 写入成功,说明挂载正常
步骤 6:查看所有挂载详情
bash
[root@centos7 ~]# mount # 显示所有已挂载文件系统
/dev/nvme0n1p1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
# 括号内为挂载属性:rw=可读写,relatime=相对时间戳,等
# 过滤显示/dev开头的设备挂载
[root@centos7 ~]# mount | grep ^/dev #在正则表达式中,^ 是行首锚定符,表示 "匹配以指定字符串开头的行"。
在 mount | grep ^/dev 中,^/dev 的作用是精确过滤出 "以 /dev 开头" 的挂载行,也就是系统中所有块设备(如硬盘分区、U 盘等,路径以 /dev 开头,如 /dev/sda1、/dev/sdb)的挂载信息。
为什么需要加 ^?
如果直接用 mount | grep /dev,会匹配所有包含 /dev 的行(比如挂载点路径中包含 /dev 的情况,虽然这种场景较少,但存在误匹配风险)。而加 ^ 后,仅会匹配设备路径以 /dev 开头的行,结果更精准,能确保只筛选出块设备的挂载记录。
举个例子:
正确的块设备挂载行:/dev/sda1 on /boot type ext4 (...)(以 /dev 开头,会被匹配)。
若有一行挂载点是 /mnt/dev-temp(路径包含 dev 但设备本身不是 /dev 开头),grep /dev 会误匹配它,而 grep ^/dev 则会过滤掉这行,保证结果准确。
/dev/mapper/rl-root on / type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
/dev/nvme0n1p1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
/dev/sdb on /data type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota) # 刚挂载的/dev/sdb
3. umount 命令:卸载文件系统
语法
bash
umount 设备名 | 挂载点 # 两种方式均可
代码解析(文档示例)
示例 1:正常卸载
bash
# 方式1:通过设备名卸载
[root@centos7 ~]# umount /dev/sdb
# 方式2:通过挂载点卸载
[root@centos7 ~]# umount /data
# 验证卸载
[root@centos7 ~]# df -h /data
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rl-root 50G 4.3G 46G 9% / # /data已不再是独立挂载点,回归根目录
示例 2:卸载失败处理(挂载点忙碌)
bash
# 场景:当前目录在挂载点/data下,执行卸载
[root@centos7 data]# umount /dev/sdb
umount: /data: target is busy. # 提示挂载点忙碌
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1)) # 提示用lsof或fuser查找占用进程
# 解决方法1:用lsof查找占用进程
[root@centos7 ~]# lsof /data # 查看哪个进程在使用/data
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 1508 root cwd DIR 8,17 156 64 /data # 进程1508(bash)占用
# 解决方法2:用fuser查找占用进程
[root@centos7 ~]# fuser -m /data # -m:按文件系统查找
/data: 1508c # 1508为进程ID,c表示进程当前目录在/data
# 解决:退出挂载点目录(或杀死进程)后卸载
[root@centos7 data]# cd ~ # 退出/data目录
[root@centos7 ~]# umount /data # 卸载成功
4. 特殊格式设备挂载案例
案例 1:挂载 NTFS 格式 U 盘(Linux 默认不支持)
bash
# 步骤1:安装epel仓库(提供ntfs-3g软件包)
yum install -y epel-release
# 步骤2:安装ntfs-3g模块
yum install -y ntfs-3g
# 步骤3:挂载NTFSU盘(假设设备为/dev/sdb1)
mount -t ntfs-3g /dev/sdb1 /mnt
案例 2:挂载 exFAT 格式 U 盘(Linux 默认不支持)
bash
# 步骤1:安装依赖包
yum install -y gcc fuse-devel make pkg-config
# 步骤2:下载并编译exFAT模块
wget https://github.com/relan/exfat/releases/download/v1.2.0/fuse-exfat-1.2.0.tar.gz
tar -xf fuse-exfat-1.2.0.tar.gz
cd fuse-exfat-1.2.0
./configure
make && make install
# 步骤3:挂载exFATU盘(设备为/dev/sdb1)
mount.exfat /dev/sdb1 /mnt
案例 3:构建基于 ISO 的本地 YUM 仓库(通过 Nginx 发布)
场景:客户端通过本地服务器安装图形化界面,提高速度
服务器端操作(server)
bash
# 步骤1:安装Nginx服务
[root@server ~]# yum install -y nginx
# 步骤2:配置Nginx允许目录浏览
[root@server ~]# vim /etc/nginx/nginx.conf
# 在http段添加:autoindex on; (允许查看目录文件清单)
# 步骤3:启动Nginx并设置开机自启
[root@server ~]# systemctl enable nginx.service --now
# 步骤4:准备测试页面(验证Nginx可用)
[root@server ~]# mv /usr/share/nginx/html/index.html{,.ori} # 备份默认页面
[root@server ~]# echo "welcome to Nginx website." > /usr/share/nginx/html/index.html
# 步骤5:挂载ISO文件到Nginx发布目录
[root@server ~]# mkdir /usr/share/nginx/html/dvd # 创建ISO挂载点
[root@server ~]# mount /dev/sr0 /usr/share/nginx/html/dvd # 挂载光盘(/dev/sr0为光盘设备)
mount: /dev/sr0 is write-protected, mounting read-only # 提示:光盘为只读,正常
客户端操作(client)
bash
# 步骤1:备份原有YUM仓库配置
[root@client ~]# mkdir /etc/yum.repos.d/old
[root@client ~]# mv /etc/yum.repos.d/*repo /etc/yum.repos.d/old
# 步骤2:创建本地YUM仓库配置文件
[root@client ~]# vim /etc/yum.repos.d/dvd.repo
[dvd] # 仓库ID(唯一)
name= dvd from local server # 仓库名称
baseurl=http://10.1.8.10/dvd # 服务器Nginx发布地址(10.1.8.10为服务器IP)
gpgcheck=0 # 关闭GPG校验(本地仓库无需校验)
# 步骤3:清理YUM缓存并测试
[root@client ~]# yum clean all # 清理缓存
[root@client ~]# yum grouplist # 列出可用软件组
[root@client ~]# yum groupinstall -y 'Server with GUI' # 安装图形化界面(成功则仓库可用)
四、查找系统中文件
1. locate 命令:快速查找文件(基于数据库)
核心特点
- 基于
mlocate数据库查找,速度快。 - 需先执行
updatedb更新数据库(root 权限)。 - 普通用户仅能查找有权限访问的文件。
语法
bash
locate [选项] 查找模式
常用选项
-b:仅匹配文件名(忽略路径)。-i:忽略大小写。-c:返回匹配文件数量。-r:支持正则表达式匹配。
代码解析(文档示例)
示例 1:安装软件后查找配置文件(需更新数据库)
bash
[root@centos7 ~]# yum install -y httpd # 安装httpd服务
[root@centos7 ~]# locate httpd.conf # 未更新数据库,查找失败(无结果)
[root@centos7 ~]# updatedb # 更新mlocate数据库(必须root执行)
[root@centos7 ~]# locate httpd.conf # 更新后查找成功
/etc/httpd/conf/httpd.conf # httpd主配置文件
/usr/lib/tmpfiles.d/httpd.conf # 临时文件配置
示例 2:-b选项(仅匹配文件名)
bash
[root@centos7 ~]# locate -b httpd # 仅查找文件名包含httpd的文件
示例 3:-i选项(忽略大小写)
bash
[root@centos7 ~]# locate PASSWD # 区分大小写,仅匹配PASSWD
/etc/PASSWD
[root@centos7 ~]# locate -i PASSWD # 忽略大小写,匹配passwd、PASSWD等
/etc/passwd
/etc/PASSWD
/etc/pam.d/passwd
示例 4:-c选项(统计数量)
bash
[root@centos7 ~]# locate -b -c PASSWD # 统计文件名包含PASSWD(忽略大小写)的文件数
34 # 共找到34个匹配文件
示例 5:-r选项(正则匹配)
bash
[root@centos7 ~]# locate -r 'http.*conf' # 匹配以http开头、以conf结尾的文件
/etc/httpd/conf/httpd.conf
/usr/lib/tmpfiles.d/httpd.conf
2. find 命令:实时查找文件(遍历文件系统)
核心特点
- 实时遍历文件系统,结果精准。
- 支持多条件组合查找(名称、类型、权限、大小等)。
- 查找用户需对目标目录有读和执行权限。
语法
bash
find [查找路径] [查找条件] [执行动作]
基础查找条件及代码解析
(1)按文件名查找(-name/-iname)
bash
# 准备测试文件
[root@centos7 ~]# touch /etc/PASSWD
# -name:区分大小写(匹配小写passwd)
[root@centos7 ~]# find /etc/ -name passwd
/etc/pam.d/passwd
/etc/passwd
# -name:通配符匹配(包含passwd的所有文件)
[root@centos7 ~]# find /etc/ -name '*passwd*'
/etc/security/opasswd
/etc/pam.d/passwd
/etc/passwd
/etc/passwd-
# -iname:忽略大小写(匹配passwd、PASSWD等)
[root@centos7 ~]# find /etc/ -iname passwd
/etc/pam.d/passwd
/etc/passwd
/etc/PASSWD
(2)按文件类型查找(-type)
支持类型:d(目录)、f(普通文件)、l(符号链接)、b(块设备)、c(字符设备)、s(socket)、p(管道)。
bash
# 查找/etc目录下所有目录
[root@centos7 ~]# find /etc/ -type d -name 'net*' # 目录名以net开头
# 查找/etc目录下所有普通文件(排除目录和链接)
[root@centos7 ~]# find /etc/ -type f -name '*.conf' # 后缀为.conf的普通文件
(3)按文件所有者 / 组查找(-user/-group/-uid/-gid)
bash
# 先查看用户ID(laoma用户)
[root@centos7 ~]# id laoma
uid=1000(laoma) gid=1000(laoma) groups=1000(laoma)
# -user:按用户名查找
[root@centos7 ~]# find / -user laoma # 查找laoma用户所有的文件
# -uid:按用户ID查找(与上一条等效)
[root@centos7 ~]# find / -uid 1000
# -group:按组名查找(wheel组)
[root@centos7 ~]# find / -group wheel
# -gid:按组ID查找(wheel组ID为10)
[root@centos7 ~]# grep wheel /etc/group # 查看wheel组ID
wheel:x:10:
[root@centos7 ~]# find / -gid 10
# 查找无所有者或无所属组的文件(-nouser/-nogroup)
[root@centos7 ~]# find / -nouser -o -nogroup # -o:逻辑或
(4)按文件权限查找(-perm)
权限格式:3 位数字(如 764,分别对应所有者、组、其他用户权限)。
bash
# 准备测试文件
[root@centos7 ~]# mkdir lab && cd lab
[root@centos7 lab]# touch file-{1..3}
[root@centos7 lab]# chmod 764 file-1 # 权限:rwxrw-r--
[root@centos7 lab]# chmod 777 file-2 # 权限:rwxrwxrwx
[root@centos7 lab]# chmod 760 file-3 # 权限:rwxrw----
# 1. -perm mode:精确匹配权限(必须完全一致)
[root@centos7 lab]# find -perm 764 | xargs ls -l
-rwxrw-r--. 1 root root 0 Dec 24 20:28 ./file-1 # 仅匹配file-1
# 2. -perm -mode:最小权限匹配(所有者、组、其他用户均满足至少该权限)
# 示例:-perm -764 要求所有者≥7(rwx)、组≥6(rw)、其他≥4(r)
[root@centos7 lab]# find . -perm -764 | xargs ls -l
-rwxrwxrwx. 1 root root 0 Dec 24 20:28 ./file-1
-rwxrw-r--. 1 root root 0 Dec 24 20:28 ./file-2 # file-3组权限6但其他0,不满足
# 3. -perm /mode:任意权限匹配(所有者、组、其他用户任一满足该权限)
# 示例:-perm /764 要求所有者≥7 或 组≥6 或 其他≥4
[root@centos7 lab]# chmod a=- file-1 # 取消所有权限
[root@centos7 lab]# chmod uo=-,g=rwx file-2 # 组权限rwx(7)
[root@centos7 lab]# chmod ug=-,o=r file-3 # 其他权限r(4)
[root@centos7 lab]# find . -name 'file-*' -perm /764 | xargs ls -l
----rwx---. 1 root root 0 Dec 24 20:28 ./file-2 # 组满足7
-------r--. 1 root root 0 Dec 24 20:28 ./file-3 # 其他满足4
# 4. 查找特殊权限文件(suid=4000、sgid=2000、sticky=1000)
[root@centos7 lab]# find / -perm -4000 2>/dev/null # 查找suid权限文件
[root@centos7 lab]# find / -perm /6000 2>/dev/null # 查找suid或sgid权限文件(4000+2000=6000)
[root@centos7 lab]# find / -perm /7000 2>/dev/null # 查找suid、sgid或sticky权限文件
(5)按文件大小查找(-size)
单位:c(字节)、k(KiB)、M(MiB)、G(GiB);+表示大于,-表示小于,无符号表示等于。
bash
# 查找当前目录下大小等于10M的文件
[root@centos7 ~]# find -size 10M
# 查找当前目录下大小大于10G的文件
[root@centos7 ~]# find -size +10G
# 查找当前目录下大小小于10K的文件
[root@centos7 ~]# find -size -10K
# 注意:-size 1M 会包含小于1M的文件(取整),精确匹配用1024k
[root@centos7 ~]# find -size 1024k # 精确查找1024KiB(1M)的文件
(6)按文件时间查找(-amin/-cmin/-mmin/-atime/-ctime/-mtime)
- 时间单位:
-amin/-cmin/-mmin(分钟),-atime/-ctime/-mtime(24 小时)。 - 时间含义:
a(访问时间)、c(属性修改时间)、m(内容修改时间)。
bash
# 查找10分钟前(正好10分钟)访问过的文件
[root@centos7 ~]# find -amin 10
# 查找10分钟以前(超过10分钟)修改过内容的文件
[root@centos7 ~]# find -mmin +10
# 查找10分钟以内(不到10分钟)属性变更的文件
[root@centos7 ~]# find -cmin -10
# 查找比/etc/fstab更新的文件(-newer)
[root@centos7 ~]# find /etc/ -newer /etc/fstab
(7)按硬链接数和 inode 查找(-links/-inum)
bash
# 查找硬链接数等于3的文件
[root@centos7 ~]# find -links 3
# 查找硬链接数大于3的文件
[root@centos7 ~]# find -links +3
# 查找inode为67160130的文件(inode唯一标识文件)
[root@centos7 ~]# ls -i /etc/fstab # 查看/etc/fstab的inode
67160130 /etc/fstab
[root@centos7 ~]# find / -inum 67160130 | xargs ls -i # 按inode查找
67160130 /etc/fstab
逻辑组合条件(-a/-o/!)
bash
# 逻辑与(-a,可省略):同时满足两个条件
[root@centos7 lab]# find . -name 'file-*' -perm /764 # 文件名匹配且权限满足
# 逻辑或(-o):满足任一条件
[root@centos7 ~]# find / -nouser -o -nogroup # 无所有者或无所属组
# 逻辑非(!):不满足该条件
[root@centos7 ~]# find / ! -size -200M 2>/dev/null # 查找大小不小于200M的文件
执行动作(-delete/-ls/-exec)
bash
# 动作1:删除找到的文件(-delete)
[root@centos7 ~]# find / -name PASSWD -delete # 删除所有名为PASSWD的文件
# 动作2:查看文件详情(-ls,等效于ls -dils)
[root@centos7 ~]# find /etc/ -name passwd -ls
67584593 4 -rw-r--r-- 1 root root 188 Apr 1 2020 /etc/pam.d/passwd
69030856 4 -rw-r--r-- 1 root root 2315 Dec 24 19:59 /etc/passwd
# 动作3:执行自定义命令(-exec)
# 格式:-exec 命令 {} \; ({} 代表找到的文件,\; 结束符)
[root@centos7 ~]# find / -inum 67160130 -exec cp -a {} ./findfiles \;
# 解析:将inode为67160130的文件复制到当前目录的findfiles文件夹
[root@centos7 ~]# ls findfiles/fstab # 验证复制结果
fstab