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 ~ 21:31:55]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 199G 0 part
├─centos-root 253:0 0 50G 0 lvm /
├─centos-swap 253:1 0 2G 0 lvm [SWAP]
└─centos-home 253:2 0 147G 0 lvm /home
sdb 8:16 0 100G 0 disk
sr0 11:0 1 4.4G 0 rom /run/media/li/CentOS 7 x86_64
结果说明:
- 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 ~ 21:31:59]# df
文件系统 1K-块 已用 可用 已用% 挂载点
devtmpfs 996800 0 996800 0% /dev
tmpfs 1013928 0 1013928 0% /dev/shm
tmpfs 1013928 10668 1003260 2% /run
tmpfs 1013928 0 1013928 0% /sys/fs/cgroup
/dev/mapper/centos-root 52403200 9140660 43262540 18% /
/dev/sda1 1038336 177536 860800 18% /boot
/dev/mapper/centos-home 154057220 39476 154017744 1% /home
tmpfs 202788 28 202760 1% /run/user/1000
/dev/sr0 4635056 4635056 0 100% /run/media/li/CentOS 7 x86_64
# -h选项,友好显示单位,单位进制是1024。
# -T选项,显示文件系统类型。
[root@server ~ 21:32:34]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 974M 0 974M 0% /dev
tmpfs tmpfs 991M 0 991M 0% /dev/shm
tmpfs tmpfs 991M 11M 980M 2% /run
tmpfs tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 50G 8.8G 42G 18% /
/dev/sda1 xfs 1014M 174M 841M 18% /boot
/dev/mapper/centos-home xfs 147G 39M 147G 1% /home
tmpfs tmpfs 199M 28K 199M 1% /run/user/1000
/dev/sr0 iso9660 4.5G 4.5G 0 100% /run/media/li/CentOS 7 x86_64
# -H选项,单位进制是1000。
[root@server ~ 21:33:05]# df -H
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 1.1G 0 1.1G 0% /dev
tmpfs 1.1G 0 1.1G 0% /dev/shm
tmpfs 1.1G 11M 1.1G 2% /run
tmpfs 1.1G 0 1.1G 0% /sys/fs/cgroup
/dev/mapper/centos-root 54G 9.4G 45G 18% /
/dev/sda1 1.1G 182M 882M 18% /boot
/dev/mapper/centos-home 158G 41M 158G 1% /home
tmpfs 208M 29k 208M 1% /run/user/1000
/dev/sr0 4.8G 4.8G 0 100% /run/media/li/CentOS 7 x86_64
# 查看单个文件系统
[root@server ~ 21:33:29]# df -hT /boot
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/sda1 xfs 1014M 174M 841M 18% /boot
# 查看文件或目录存储在哪个设备
[root@server ~ 21:33:50]# df /tmp
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/mapper/centos-root 52403200 9140660 43262540 18% /
du 命令
查看目录和文件占用磁盘空间大小。
# 查看/boot目录及其子目录占用空间
[root@server ~ 21:34:11]# 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
144320 /boot
# 只查看/boot目录占用空间
[root@server ~ 21:34:43]# du -s /boot
144320 /boot
# -h 选项human方式显示size
[root@server ~ 21:35:10]# du -sh /boot
141M /boot
案例
查找根文件系统中哪个文件占用了大量空间。
# 环境准备,创建一个大小为4GB的文件:使用 0 填充该文件
[root@server ~ 21:35:30]# 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)已复制,7.15984 秒,600 MB/秒
# 查看过程如下:
[root@server ~ 21:36:06]# du -sk /* |sort -n
.......
104 /tmp
6308 /home
43036 /etc
144320 /boot
1043132 /var
4705597 /run
7955492 /usr
[root@server ~ 21:37:08]# du -sk /usr/* |sort -n
......
145416 /usr/bin
868660 /usr/lib
1211040 /usr/lib64
5614096 /usr/share
[root@server ~ 21:38:02]# du -sk /usr/share/* |sort -n
.......
213252 /usr/share/help
442224 /usr/share/locale
4279820 /usr/share/doc
[root@server ~ 21:38:40]# du -sk /usr/share/doc/* |sort -n
......
968 /usr/share/doc/opus-1.0.2
1060 /usr/share/doc/pam-1.1.8
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@server ~ 21:39:19]# 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 ~ 21:40:11]# find / -size +100M 2>/dev/null
/proc/kcore
/run/media/li/CentOS 7 x86_64/LiveOS/squashfs.img
/run/media/li/CentOS 7 x86_64/Packages/firefox-91.11.0-2.el7.centos.x86_64.rpm
/sys/devices/pci0000:00/0000:00:0f.0/resource1_wc
/sys/devices/pci0000:00/0000:00:0f.0/resource1
/var/cache/yum/x86_64/7/updates/gen/primary_db.sqlite
/var/cache/yum/x86_64/7/updates/gen/filelists_db.sqlite
/var/cache/yum/x86_64/7/updates/packages/firefox-115.12.0-1.el7.centos.x86_64.rpm
/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 ~ 21:41:06]# lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 20G 0 disk
# 格式化文件系统
[root@server ~ 21:41:36]# mkfs.xfs /dev/sdb
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
挂载文件系统
当需要适用文件系统的时候,通过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 ~ 21:42:08]# mkdir /data
# 显示系统中所有文件系统
[root@server ~ 21:42:23]# blkid
/dev/sda1: UUID="b010bd5d-1568-4254-9bcb-24e0f4b6c3d3" TYPE="xfs"
/dev/sda2: UUID="1hRUBd-Kw8c-Ecqr-rmQS-ySDD-kBP0-MpZITb" TYPE="LVM2_member"
/dev/sr0: UUID="2022-07-26-15-09-17-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/mapper/centos-root: UUID="56070bc8-042a-4a04-b0fc-5f0e32d52a3a" TYPE="xfs"
/dev/mapper/centos-swap: UUID="8dda2c0b-c97c-416e-a481-92fda9b88a6f" TYPE="swap"
/dev/mapper/centos-home: UUID="6f6b8e82-337b-4392-88e7-bc46914bab21" TYPE="xfs"
/dev/sdb: UUID="59f1d4ec-76b1-4fe3-b03a-8f26b0c522e7" TYPE="xfs"
# 显示系统中特定文件系统
[root@server ~ 21:42:55]# blkid /dev/sdb
/dev/sdb: UUID="59f1d4ec-76b1-4fe3-b03a-8f26b0c522e7" TYPE="xfs"
# 挂载设备并验证
[root@server ~ 21:43:17]# mount /dev/sdb /data
# 或者
[root@server ~ 21:43:38]#mount UUID="f20547b2-df53-46e5-b526-a8744be26231" /data
# 验证
[root@server ~ 21:44:16]# df -h /data
文件系统 容量 已用 可用 已用% 挂载点
/dev/sdb 100G 33M 100G 1% /data
# 创建文件测试
[root@server ~ 21:44:17]# touch /data/file-{00..09}
[root@server ~ 21:47:28]# ls /data
file-00 file-02 file-04 file-06 file-08
file-01 file-03 file-05 file-07 file-09
查看系统当前所有挂载,可以看到挂载的详细信息。
[root@server ~ 21:47:34]# mount
......
/dev/nvme0n1p1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
/dev/mapper/rl-home on /home type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
......
# 括号中属性,是文件系统当前支持的功能。
[root@server ~ 21:47:50]# mount |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/mapper/rl-home on /home type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
卸载文件系统
当文件系统不使用的时候,通过 umount 命令卸载。
umount命令语法:
umount device | dir
可以通过指定设备或者挂载点,卸载文件系统。
示例:
[root@server ~ 21:49:27]# umount /dev/sdb
# 或者
[root@server ~ 21:50:52]# umount /data
[root@server ~ 21:51:28]# df -h /data
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 50G 8.8G 42G 18% /
卸载失败处理
[root@server ~ 21:51:30]# mount /dev/sdb /data
[root@server ~ 21:51:51]# cd /data
[root@server data 21:51:56]# ls
file-00 file-02 file-04 file-06 file-08
file-01 file-03 file-05 file-07 file-09
# 提示挂载点正在忙碌
[root@server data 21:52:00]# 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 ~ 21:53:01]# lsof /data
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 3323 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 ~ 21:53:07]# fuser -m /data
/data: 3323c
终止进程,再次卸载
# 返回家目录,再次卸载
[root@server data 21:52:22]# cd
[root@server ~ 21:54:29]# umount /data
查找系统中文件
locate
locate 命令根据文件名及其路径,在 mlocate 数据库中查找文件,并返回结果。数据库中存放文件和文件路径信息。
常规用户查找时,返回的结果仅包含用户有读取权限的目录树中匹配项。
查找文件前,需要root用户手动执行updatedb命令更新mlocate数据库。
[root@server ~ 22:04:02]# updatedb
locate命令语法:
locate [OPTION]... [PATTERN]...
常用选项:
- -b, --basename
- -i, --ignore-case
- -c, --count
- -r, --regexp
示例:
[root@server ~ 22:06:26]# yum install -y httpd
# 安装后,未跟新数据库,所以检索不到
[root@server ~ 22:16:35]# locate httpd.conf
# 更新后查找
[root@server ~ 22:16:48]# updatedb
[root@server ~ 22:17:12]# locate httpd.conf
/etc/httpd/conf/httpd.conf
/usr/lib/tmpfiles.d/httpd.conf
# -b选项 查找
[root@server ~ 22:17:16]# locate -b httpd
/usr/share/augeas/lenses/dist/httpd.aug
/usr/share/augeas/lenses/dist/thttpd.aug
/usr/share/setroubleshoot/plugins/httpd_can_sendmail.py
/usr/share/setroubleshoot/plugins/httpd_can_sendmail.pyc
/usr/share/setroubleshoot/plugins/httpd_can_sendmail.pyo
/usr/share/setroubleshoot/plugins/httpd_unified.py
/usr/share/setroubleshoot/plugins/httpd_unified.pyc
/usr/share/setroubleshoot/plugins/httpd_unified.pyo
/usr/share/setroubleshoot/plugins/httpd_write_content.py
/usr/share/setroubleshoot/plugins/httpd_write_content.pyc
/usr/share/setroubleshoot/plugins/httpd_write_content.pyo
# 扩展
[root@server ~ 22:17:42]# basename /usr/share/doc
doc
[root@server ~ 22:18:15]# dirname /usr/share/doc
/usr/share
# -i选项 忽略大小写
root@server ~ 22:18:22]# locate PASSWD
/etc/PASSWD
[root@server ~ 22:18:44]# locate -i PASSWD
/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
......
# -c选项 返回找到的数量
[root@server ~ 22:19:08]# locate -b -c PASSWD
34
# -r选项 正则表达式匹配查找
[root@server ~ 22:19:45]# locate -r 'http.*conf'
find
find 命令在本地文件系统中执行实时查找文件。使用find命令的用户对文件夹必须有读取和执行权限。
语法:
find [path] [expression] [action]
- path,是查询路径,如果没有指定文件夹,将会查找当前目录及子目录。
- expression,是查询条件表达式。
- action,是找到文件后采取的动作。
根据文件 name 查找
[root@server ~ 22:20:11]# touch /etc/PASSWD
[root@server ~ 22:20:33]# find /etc/ -name passwd
/etc/pam.d/passwd
/etc/passwd
[root@server ~ 22:20:38]# find /etc/ -name '*passwd*'
/etc/pam.d/passwd
/etc/passwd
/etc/security/opasswd
/etc/passwd-
[root@server ~ 22:20:55]# find /etc/ -iname passwd
/etc/pam.d/passwd
/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 ~ 22:21:09]# id li
uid=1000(li) gid=1000(li) 组=1000(li),10(wheel)
[root@server ~ 22:22:17]# find / -user li
[root@server ~ 22:22:44]# find / -uid 1000
- group、-gid,属于特定组
[root@server ~ 22:23:03]# grep wheel /etc/group
wheel:x:10:li
[root@server ~ 22:23:08]# find / -group wheel
[root@server ~ 22:23:26]# find / -gid 10
- -nouser,不属于任何用户;-nogroup,不属于任何组
# 查找系统中不属于任何用户或者不属于任何组的文件
[root@server ~ 22:23:43]# find / -nouser -o -nogroup
根据文件 perm 查找
# 准备文件
[root@server ~ 22:24:55]# mkdir lab
[root@server ~ 22:24:59]# cd lab
[root@server lab 22:25:04]# touch file-{1..3}
[root@server lab 22:25:21]# ls -l file*
-rw-r--r--. 1 root root 0 7月 31 22:25 file-1
-rw-r--r--. 1 root root 0 7月 31 22:25 file-2
-rw-r--r--. 1 root root 0 7月 31 22:25 file-3
- -perm mode,查找文件权限为mode的文件。
[root@server lab 22:25:26]# chmod 764 file-1
# 查找文件权限为764的文件
[root@server lab 22:25:43]# find -perm 764 | xargs ls -l
-rwxrw-r--. 1 root root 0 7月 31 22:25 ./file-1
- -perm -mode,例如:mode为764,则ugo必须同时满足的最小权限:user至少为7、group至少为6、other为4。
[root@server lab 22:25:49]# chmod 777 file-1
[root@server lab 22:26:12]# chmod 764 file-2
[root@server lab 22:26:17]# chmod 760 file-3
[root@server lab 22:26:22]# find . -perm -764 | xargs ls -l
-rwxrwxrwx. 1 root root 0 7月 31 22:25 ./file-1
-rwxrw-r--. 1 root root 0 7月 31 22:25 ./file-2
# 0作为通配符,表示不匹配对应权限位。
# 查找系统中具有suid权限的文件
[root@server lab 22:26:28]# find / -perm -4000
# 查找系统中同时具有特殊权限的文件:suid和sgid
[root@server lab 22:26:57]# find / -perm -6000 2>/dev/null |xargs ls -l
-rwsr-sr-x. 1 abrt abrt 15344 10月 2 2020 /usr/libexec/abrt-action-install-debuginfo-to-abrt-cache
- -perm /mode,例如mode为764,则ugo只要有一个满足即可:user至少为7、group至少为6、other至少为4。
[root@server lab 22:27:24]# chmod a=- file-1
[root@server lab 22:27:46]# chmod uo=-,g=rwx file-2
[root@server lab 22:27:54]# chmod ug=-,o=r file-3
[root@server lab 22:28:02]# find . -name 'file-*' -perm /764| xargs ls -l
----rwx---. 1 root root 0 7月 31 22:25 ./file-2
-------r--. 1 root root 0 7月 31 22:25 ./file-3
# 查找系统中具有特殊权限的文件:suid、sgid、sticky
[root@server lab 22:28:08]# find / -perm /7000
# 查找系统中具有特殊权限的文件:suid或者sgid
[root@server lab 22:28:38]# find / -perm /6000
- -readable -writable -executable,文件具有可读、可写、可执行。
根据文件 size 查找
单位 c(字节)、k(KiB)、M(MiB)、G(GiB)
# 大小等于10M
[root@server ~ 22:29:28]# find -size 10M
# 大小大于10G
[root@server ~ 22:29:32]# find -size +10G
# 大小小于10k
[root@server ~ 22:29:54]# find -size -10k
# 大小等于1M
[root@server ~ 22:30:06]# find -size 1M
# 注意:size会取整为1个单位,所以find -size 1M结果包含小于1M的文件。
# 可以使用1024k取代1M
[root@server ~ 22:30:35]# find -size 1024k
根据文件 time 查找
- -amin, -cmin, -mmin 单位1分钟。
- -atime, -ctime, -mtime 单位24小时。
- -newer file,比file新的文件。
# 10分钟前(正好10分钟)
[root@server ~ 22:30:54]# find -amin 10
# 10分钟以前(大于10分钟)
[root@server ~ 22:31:45]# find -amin +10
# 10分钟以内(小于10分钟)
[root@server ~ 22:32:04]# find -amin -10
根据文件硬链接数和 inum 查找
# 硬链接数等于、大于、小于3的文件
[root@server ~ 22:32:24]# find -links 3
[root@server ~ 22:32:48]# find -links +3
[root@server ~ 22:32:53]# find -links -3
# inode为67160130的文件
[root@server ~ 22:32:59]# ls -i /etc/fstab
67160130 /etc/fstab
[root@server ~ 22:33:31]# find / -inum 67160130| xargs ls -i
67160130 /etc/fstab
多条件表达式
- 逻辑与: expr1 -a expr2 或者 expr1 expr2
[root@server lab 22:34:12]# find . -name 'file-*' -perm /764
./file-2
./file-3
- 逻辑或:expr1 -o expr2
# 查找系统中不属于任何用户或者不属于任何组的文件
[root@server ~ 22:34:15]# find / -nouser -o -nogroup
# 例如
[root@server ~ 22:34:48]# find / -perm /7000
# 等效与
[root@server ~ 22:35:11]# find / -perm -4000 -o -perm -2000 -o -perm -1000
- 逻辑非:! expr
[root@server ~ 22:36:24]# find / ! -size -200M 2>/dev/null
/proc/kcore
/proc/4112/task/4112/fd/5
/proc/4112/task/4112/fdinfo/5
/proc/4112/fd/6
/proc/4112/fdinfo/6
[root@server ~ 22:36:27]# ls -lh /proc/kcore
-r--------. 1 root root 128T 7月 31 22:36 /proc/kcore
action
- -delete,查出找到的文件。
[root@server ~ 22:36:56]# find / -name PASSWD
/etc/PASSWD
[root@server ~ 22:37:19]# find / -name PASSWD -delete
[root@server ~ 22:37:40]# find / -name PASSWD
- -ls,相当于
ls -dils
查看找到的文件。
[root@server ~ 22:37:46]# find /etc/ -name passwd
/etc/pam.d/passwd
/etc/passwd
[root@server ~ 22:38:14]# find /etc/ -name passwd -ls
101499756 4 -rw-r--r-- 1 root root 188 4月 1 2020 /etc/pam.d/passwd
68565490 4 -rw-r--r-- 1 root root 2297 7月 22 15:33 /etc/passwd
- -exec command ;,找到文件后,执行相应的command。
[root@server ~ 22:38:26]# find /etc/ -name passwd -exec echo haha \;
haha
haha
- -exec command {} ;,找到文件后,可以在命令中对文件操作。
[root@server ~ 22:38:49]# find / -inum 67160130
/etc/fstab
# 将inode为67160130的所有文件复制到当前目录
[root@server ~ 22:39:09]# mkdir findfiles
[root@server ~ 22:39:14]# find / -inum 67160130 -exec cp -a {} ./findfiles \;
[root@server ~ 22:39:19]# ls findfiles/fstab
fstab