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

Linux 文件系统基本管理

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@client ~ 20:26:48]# 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   52G  0 part ├─centos-root 253:0    0   50G  0 lvm  /└─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sr0              11:0    1 1024M  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@client ~ 20:36:24]# df
Filesystem              1K-blocks    Used Available Use% Mounted on
devtmpfs                   485776       0    485776   0% /dev
tmpfs                      497816       0    497816   0% /dev/shm
tmpfs                      497816    7720    490096   2% /run
tmpfs                      497816       0    497816   0% /sys/fs/cgroup
/dev/mapper/centos-root  52403200 1776504  50626696   4% /
/dev/sda1                 1038336  142216    896120  14% /boot
tmpfs                       99564       0     99564   0% /run/user/0# -h选项,友好显示单位,单位进制是1024。
# -T选项,显示文件系统类型。
[root@client ~ 20:40:22]# df -hT
Filesystem              Type      Size  Used Avail Use% Mounted on
devtmpfs                devtmpfs  475M     0  475M   0% /dev
tmpfs                   tmpfs     487M     0  487M   0% /dev/shm
tmpfs                   tmpfs     487M  7.6M  479M   2% /run
tmpfs                   tmpfs     487M     0  487M   0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        50G  1.7G   49G   4% /
/dev/sda1               xfs      1014M  139M  876M  14% /boot
tmpfs                   tmpfs      98M     0   98M   0% /run/user/0# -H选项,单位进制是1000。
[root@client ~ 20:40:36]# df -H
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 498M     0  498M   0% /dev
tmpfs                    510M     0  510M   0% /dev/shm
tmpfs                    510M  8.0M  502M   2% /run
tmpfs                    510M     0  510M   0% /sys/fs/cgroup
/dev/mapper/centos-root   54G  1.9G   52G   4% /
/dev/sda1                1.1G  146M  918M  14% /boot
tmpfs                    102M     0  102M   0% /run/user/0# 查看单个文件系统
[root@client ~ 20:40:47]# df -hT /boot
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/sda1      xfs  1014M  139M  876M  14% /boot# 查看文件或目录存储在哪个设备
[root@client ~ 20:41:24]# df /tmp
Filesystem              1K-blocks    Used Available Use% Mounted on
/dev/mapper/centos-root  52403200 1776504  50626696   4% /
du 命令

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

# 查看/boot目录及其子目录占用空间
[root@client ~ 20:41:51]# du /boot
0	/boot/efi/EFI/centos
0	/boot/efi/EFI
0	/boot/efi
2400	/boot/grub2/i386-pc
3176	/boot/grub2/locale
2504	/boot/grub2/fonts
8096	/boot/grub2
4	/boot/grub
109000	/boot# 只查看/boot目录占用空间
[root@client ~ 20:42:02]# du -s /boot
109000	/boot# -h 选项human方式显示size
[root@client ~ 20:42:11]# du -sh /boot
107M	/boot
案例

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

# 环境准备,创建一个大小为4GB的文件:使用 0 填充该文件
[root@client ~ 20:42:21]# dd if=/dev/zero of=/usr/share/doc/dhclient-4.2.5/bigfile-4G  bs=1M count=4096
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 8.40948 s, 511 MB/s# 查看过程如下:
[root@client ~ 20:43:20]# du -sk /* |sort -n
......
32596	/etc
109000	/boot
453532	/var
5435236	/usr[root@client ~ 20:43:47]# du -sk /usr/* |sort -n
......
65156	/usr/bin
138684	/usr/lib64
713908	/usr/lib
4462284	/usr/share[root@client ~ 20:44:03]# du -sk /usr/share/* |sort -n
......
18828	/usr/share/backgrounds
19816	/usr/share/perl5
25204	/usr/share/vim
90736	/usr/share/locale
4227244	/usr/share/doc[root@client ~ 20:44:31]# du -sk /usr/share/doc/* |sort -n
......
940	/usr/share/doc/coreutils-8.22
1060	/usr/share/doc/pam-1.1.8
1216	/usr/share/doc/postfix-2.10.1
4194316	/usr/share/doc/dhclient-4.2.5[root@client ~ 20:44:53]# 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@client ~ 20:45:20]# 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/cache/yum/x86_64/7/updates/gen/primary_db.sqlite
/usr/lib/locale/locale-archive
/usr/share/doc/dhclient-4.2.5/bigfile-4G

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

挂载和卸载文件系统

环境准备

# 虚拟机添加一块硬盘/dev/sdb
[root@client ~ 20:48:53]# lsblk  /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb    8:16   0  20G  0 disk# 格式化文件系统
[root@client ~ 20:49:20]# mkfs.xfs /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@client ~ 20:49:41]# mkdir /data# 显示系统中所有文件系统
[root@client ~ 20:50:01]# blkid
/dev/sda1: UUID="7878aba8-e3eb-4373-af5a-f27f683ecab6" TYPE="xfs" 
/dev/sda2: UUID="TF5nsh-oCZ2-3ETj-6pCD-0a9n-2GEV-SGwPZT" TYPE="LVM2_member" 
/dev/mapper/centos-root: UUID="1a65de2c-c391-4bb3-ab7a-49de9b694035" TYPE="xfs" 
/dev/mapper/centos-swap: UUID="688d2a60-823c-42f1-b65b-097f77afe1f1" TYPE="swap" 
/dev/sdb: UUID="2acbe23e-e4cb-4298-979c-bf2063488fdf" TYPE="xfs"# 显示系统中特定文件系统
[root@client ~ 20:50:06]# blkid /dev/sdb
/dev/sdb: UUID="2acbe23e-e4cb-4298-979c-bf2063488fdf" TYPE="xfs"# 挂载设备并验证
[root@client ~ 20:50:32]# mount /dev/sdb /data
# 或者
[root@client ~ 20:50:49]# mount UUID="2acbe23e-e4cb-4298-979c-bf2063488fdf" TYPE="xfs" /data# 验证
[root@client ~ 20:51:15]# df -h /data
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb         20G   33M   20G   1% /data# 创建文件测试
[root@client ~ 20:51:37]# touch /data/file-{00..09}
[root@client ~ 20:51:49]# ls /data
file-00  file-02  file-04  file-06  file-08
file-01  file-03  file-05  file-07  file-09

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

[root@client ~ 20:51:54]# mount
......
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_prio,net_cls)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct,cpu)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
......
# 括号中属性,是文件系统当前支持的功能。
[root@client ~ 20:52:09]# mount |grep ^/dev
/dev/mapper/centos-root on / type xfs (rw,relatime,attr2,inode64,noquota)
/dev/sda1 on /boot type xfs (rw,relatime,attr2,inode64,noquota)
/dev/sdb on /data type xfs (rw,relatime,attr2,inode64,noquota)

卸载文件系统

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

umount命令语法:

umount device | dir

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

示例:

[root@client ~ 20:52:29]# umount /dev/sdb
# 或者
[root@client ~ 20:52:45]# umount /data
[root@client ~ 20:52:54]# df -h /data
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   50G  5.7G   45G  12% /

卸载失败处理

[root@client ~ 20:53:04]# mount /dev/sdb /data
[root@client ~ 20:53:16]# cd /data
[root@client data 20:53:21]# ls
file-00  file-02  file-04  file-06  file-08
file-01  file-03  file-05  file-07  file-09# 提示挂载点正在忙碌
[root@client data 20:53:23]# umount /dev/sdb
umount: /data: target is busy.(In some cases useful info about processes that usethe device is found by lsof(8) or 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@client data 20:54:58]# lsof /data
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
bash    1272 root  cwd    DIR   8,16      156   64 /data
tail    2005 root    3r   REG   8,16        0   67 /data/file-00
lsof    2065 root  cwd    DIR   8,16      156   64 /data
lsof    2066 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@client data 20:57:04]# fuser -m /data
/data:                1272c

终止进程,再次卸载

# 返回家目录,再次卸载
[root@client data 20:58:30]# cd
[root@client ~ 20:58:34]# umount /data

查找系统中文件

locate

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

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

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

[root@client ~ 20:59:37]# updatedb

locate命令语法:

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

常用选项:

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

示例:

[root@client ~ 20:59:39]# yum install -y httpd
# 安装后,未跟新数据库,所以检索不到
[root@client ~ 20:59:55]# locate httpd.conf
[root@client ~ 21:00:06]## 更新后查找
[root@client ~ 21:00:06]#  updatedb
[root@client ~ 21:00:16]# locate httpd.conf
/etc/httpd/conf/httpd.conf
/usr/lib/tmpfiles.d/httpd.conf# -b选项 查找
[root@client ~ 21:00:20]# locate -b httpd
/etc/httpd
/etc/httpd/conf/httpd.conf
/etc/logrotate.d/httpd
/etc/sysconfig/httpd
/usr/lib/systemd/system/httpd.service
/usr/lib/tmpfiles.d/httpd.conf
/usr/lib64/httpd
······# 扩展
[root@client ~ 21:01:09]# basename /usr/share/doc
doc
[root@client ~ 21:02:20]# dirname /usr/share/doc
/usr/share# -i选项 忽略大小写
[root@client ~ 21:02:25]# locate PASSWD
[root@client ~ 21:02:34]# locate -i PASSWD
/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
······# -c选项 返回找到的数量
[root@client ~ 21:02:40]# locate -b -c PASSWD
0
[root@client ~ 21:02:59]# locate -b -c passwd
118# -r选项 正则表达式匹配查找
[root@client ~ 21:03:08]# 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@client ~ 21:03:19]# touch /etc/PASSWD[root@client ~ 21:03:36]# find /etc/ -name passwd
/etc/passwd
/etc/pam.d/passwd[root@client ~ 21:03:43]# find /etc/ -name '*passwd*'
/etc/passwd-
/etc/passwd
/etc/pam.d/passwd
/etc/security/opasswd[root@client ~ 21:03:56]# find /etc/ -iname passwd
/etc/passwd
/etc/pam.d/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@client ~ 21:04:07]# id wsh
    uid=1000(wsh) gid=1000(wsh) groups=1000(wsh),10(wheel)
    [root@client ~ 21:04:22]# find / -user wsh
    find: ‘/proc/2770/task/2770/fd/6’: No such file or directory
    find: ‘/proc/2770/task/2770/fdinfo/6’: No such file or directory
    find: ‘/proc/2770/fd/5’: No such file or directory
    find: ‘/proc/2770/fdinfo/5’: No such file or directory
    /var/spool/mail/wsh
    /home/wsh
    /home/wsh/.bash_logout
    /home/wsh/.bash_profile
    /home/wsh/.bashrc
    /home/wsh/.bash_history[root@client ~ 21:04:36]# find / -uid 1000
    find: ‘/proc/2790/task/2790/fd/6’: No such file or directory
    find: ‘/proc/2790/task/2790/fdinfo/6’: No such file or directory
    find: ‘/proc/2790/fd/5’: No such file or directory
    find: ‘/proc/2790/fdinfo/5’: No such file or directory
    /var/spool/mail/wsh
    /home/wsh
    /home/wsh/.bash_logout
    /home/wsh/.bash_profile
    /home/wsh/.bashrc
    /home/wsh/.bash_history
    
  • -group、-gid,属于特定组

    [root@client ~ 21:05:20]# find / -group wheel
    find: ‘/proc/2813/task/2813/fd/6’: No such file or directory
    find: ‘/proc/2813/task/2813/fdinfo/6’: No such file or directory
    find: ‘/proc/2813/fd/5’: No such file or directory
    find: ‘/proc/2813/fdinfo/5’: No such file or directory
    [root@client ~ 21:05:25]# find / -gid 10
    find: ‘/proc/2818/task/2818/fd/6’: No such file or directory
    find: ‘/proc/2818/task/2818/fdinfo/6’: No such file or directory
    find: ‘/proc/2818/fd/5’: No such file or directory
    find: ‘/proc/2818/fdinfo/5’: No such file or directory
    
  • -nouser,不属于任何用户;-nogroup,不属于任何组

    # 查找系统中不属于任何用户或者不属于任何组的文件
    [root@client ~ 21:05:30]# find / -nouser -o -nogroup
    find: ‘/proc/2827/task/2827/fd/6’: No such file or directory
    find: ‘/proc/2827/task/2827/fdinfo/6’: No such file or directory
    find: ‘/proc/2827/fd/5’: No such file or directory
    find: ‘/proc/2827/fdinfo/5’: No such file or directory
    
根据文件 perm 查找
# 准备文件
[root@client ~ 21:05:43]# mkdir lab
[root@client ~ 21:05:56]#  cd lab
[root@client lab 21:06:00]# touch file-{1..3}
[root@client lab 21:06:05]# ls -l file*
-rw-r--r-- 1 root root 0 Aug  3 21:06 file-1
-rw-r--r-- 1 root root 0 Aug  3 21:06 file-2
-rw-r--r-- 1 root root 0 Aug  3 21:06 file-3
  • -perm mode,查找文件权限为mode的文件。

    [root@client lab 21:06:11]# chmod 764 file-1
    # 查找文件权限为764的文件
    [root@client lab 21:06:22]# find -perm 764 | xargs ls -l
    -rwxrw-r-- 1 root root 0 Aug  3 21:06 ./file-1
    
  • -perm -mode,例如:mode为764,则ugo必须同时满足的最小权限:user至少为7、group至少为6、other为4。

    [root@client lab 21:06:27]# chmod 777 file-1
    [root@client lab 21:06:48]# chmod 764 file-2
    [root@client lab 21:06:52]# chmod 760 file-3
    [root@client lab 21:06:56]#  find . -perm -764 | xargs ls -l
    -rwxrwxrwx 1 root root 0 Aug  3 21:06 ./file-1
    -rwxrw-r-- 1 root root 0 Aug  3 21:06 ./file-2# 0作为通配符,表示不匹配对应权限位。
    # 查找系统中具有suid权限的文件
    [root@client lab 21:06:59]# find / -perm -4000
    find: ‘/proc/2916/task/2916/fd/6’: No such file or directory
    find: ‘/proc/2916/task/2916/fdinfo/6’: No such file or directory
    find: ‘/proc/2916/fd/5’: No such file or directory
    find: ‘/proc/2916/fdinfo/5’: No such file or directory
    /usr/bin/fusermount
    /usr/bin/chfn
    /usr/bin/chsh
    ······# 查找系统中同时具有特殊权限的文件:suid和sgid
    [root@client lab 21:07:12]# find / -perm -6000 2>/dev/null |xargs ls -l
    total 0
    -rwxrwxrwx 1 root root 0 Aug  3 21:06 file-1
    -rwxrw-r-- 1 root root 0 Aug  3 21:06 file-2
    -rwxrw---- 1 root root 0 Aug  3 21:06 file-3
    
  • -perm /mode,例如mode为764,则ugo只要有一个满足即可:user至少为7、group至少为6、other至少为4。

    [root@client lab 21:07:26]# chmod a=- file-1
    [root@client lab 21:07:41]# chmod uo=-,g=rwx file-2
    [root@client lab 21:07:44]# chmod ug=-,o=r file-3[root@client lab 21:07:47]# find . -name 'file-*' -perm /764| xargs ls -l
    ----rwx--- 1 root root 0 Aug  3 21:06 ./file-2
    -------r-- 1 root root 0 Aug  3 21:06 ./file-3# 查找系统中具有特殊权限的文件:suid、sgid、sticky
    [root@client lab 21:07:50]# find / -perm /7000
    /dev/mqueue
    /dev/shm
    find: ‘/proc/2967/task/2967/fd/6’: No such file or directory
    find: ‘/proc/2967/task/2967/fdinfo/6’: No such file or directory
    find: ‘/proc/2967/fd/5’: No such file or directory
    find: ‘/proc/2967/fdinfo/5’: No such file or directory
    ······# 查找系统中具有特殊权限的文件:suid或者sgid
    [root@client lab 21:08:05]# find / -perm /6000
    find: ‘/proc/2981/task/2981/fd/6’: No such file or directory
    find: ‘/proc/2981/task/2981/fdinfo/6’: No such file or directory
    find: ‘/proc/2981/fd/5’: No such file or directory
    find: ‘/proc/2981/fdinfo/5’: No such file or directory
    /run/log/journal
    /run/log/journal/291bf5d6a6cb403395f8fd994dfc3d25
    /usr/bin/wall
    ······
    
  • -readable -writable -executable,文件具有可读、可写、可执行。

根据文件 size 查找

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

# 大小等于10M
[root@client ~ 21:08:38]# find -size 10M# 大小大于10G
[root@client ~ 21:08:44]# find -size +10G# 大小小于10k
[root@client ~ 21:08:50]# find -size -10k# 大小等于1M
[root@client ~ 21:08:55]# find -size 1M
# 注意:size会取整为1个单位,所以find -size 1M结果包含小于1M的文件。
# 可以使用1024k取代1M
[root@client ~ 21:09:14]# find -size 1024k
根据文件 time 查找
  • -amin, -cmin, -mmin 单位1分钟。
  • -atime, -ctime, -mtime 单位24小时。
  • -newer file,比file新的文件。
# 10分钟前(正好10分钟)
[root@client ~ 21:09:23]# find -amin 10# 10分钟以前(大于10分钟)
[root@client ~ 21:09:41]# find -amin +10# 10分钟以内(小于10分钟)
[root@client ~ 21:09:45]# find -amin -10
根据文件硬链接数和 inum 查找
# 硬链接数等于、大于、小于3的文件
[root@client ~ 21:09:48]# find -links 3[root@client ~ 21:10:06]# find -links +3[root@client ~ 21:10:10]# find -links -3# inode为33554498的文件
[root@client ~ 21:10:13]# ls -i /etc/fstab
33554498 /etc/fstab
[root@client ~ 21:10:37]# find / -inum 33554498| xargs ls -i
33554498 /etc/fstab
多条件表达式
  • 逻辑与: expr1 -a expr2 或者 expr1 expr2

    [root@client ~ 21:11:22]# find . -name 'file-*' -perm /764
    ./lab/file-2
    ./lab/file-3
  • 逻辑或:expr1 -o expr2

    # 查找系统中不属于任何用户或者不属于任何组的文件
    [root@client ~ 21:11:33]# find / -nouser -o -nogroup# 例如
    [root@client ~ 21:11:51]# find / -perm /7000
    # 等效与
    [root@client ~ 21:11:58]# find / -perm -4000 -o -perm -2000 -o -perm -1000
    
  • 逻辑非:! expr

    [root@client ~ 21:12:09]# find / ! -size -200M 2>/dev/null
    /proc/kcore
    /proc/3197/task/3197/fd/6
    /proc/3197/task/3197/fdinfo/6
    /proc/3197/fd/5
    /proc/3197/fdinfo/5
    /usr/share/doc/dhclient-4.2.5/bigfile-4G
    [root@client ~ 21:12:20]# ls -lh /proc/kcore
    -r-------- 1 root root 128T Aug  3 21:12 /proc/kcore
    
action
  • -delete,查出找到的文件。

    [root@client ~ 21:12:34]# find / -name PASSWD
    /etc/PASSWD[root@client ~ 21:12:45]# find / -name PASSWD -delete
    [root@client ~ 21:12:49]# find / -name PASSWD
    
  • -ls,相当于 ls -dils 查看找到的文件。

    [root@client ~ 21:12:52]# find /etc/ -name passwd
    /etc/passwd
    /etc/pam.d/passwd[root@client ~ 21:13:04]# find /etc/ -name passwd -ls
    34145840    4 -rw-r--r--   1 root     root          939 Aug  3 20:59 /etc/passwd
    34079985    4 -rw-r--r--   1 root     root          188 Apr  1  2020 /etc/pam.d/passwd
    
  • -exec command ;,找到文件后,执行相应的command。

    [root@client ~ 21:13:07]# find /etc/ -name passwd -exec echo haha \;
    haha
    haha
    
  • -exec command {} ;,找到文件后,可以在命令中对文件操作。

    [root@client ~ 21:13:28]# find / -inum 33554498
    /etc/fstab
    # 将inode为33554498的所有文件复制到当前目录
    [root@client ~ 21:13:57]# mkdir findfiles
    [root@client ~ 21:14:14]# find / -inum 33554498 -exec cp -a {} ./findfiles \;
    [root@client ~ 21:14:26]# ls findfiles/fstab
    findfiles/fstab
    
http://www.lryc.cn/news/609391.html

相关文章:

  • python 12 install jupyter时zmq.h或libzmq报错处理
  • 基于springboot的在线考试系统/考试信息管理平台
  • 苍穹外卖项目学习——day1(项目概述、环境搭建)
  • 团队独立思考的力量
  • 机器学习——决策树(DecisionTree)
  • 波士顿房价预测工具 - XGBoost实现
  • 三、驱动篇-HDF驱动介绍1
  • 【Unity】背包系统 + 物品管理窗口 (上)
  • Python 的标准库 bisect 模块
  • 从WebShell 与 ShellCode 免杀技术 打造适合自己的免杀技术链
  • [Oracle] 获取系统当前日期
  • 使用AssemblyAI将音频数据转换成文本
  • [Oracle] TO_DATE()函数
  • gpu instancer crowd 使用自定义材质并且只修改单个物体的材质参数
  • 机器学习 决策树基本介绍
  • [2025ICCV-目标检测方向]DuET:通过无示例任务算术进行双增量对象检测
  • 数据结构:单向链表的函数创建
  • kubernetes基础知识
  • io_cancel系统调用及示例
  • 11.消息队列
  • IDEA查看源码利器XCodeMap插件
  • LangChain4J入门:使用SpringBoot-start
  • 网络规划与设计5个阶段内容
  • 项目日记---高并发内存池整体框架
  • Python中的sys.path与PYTHONPATH全解析:模块导入路径的底层机制与最佳实践
  • 进阶向:YOLOv11模型轻量化
  • 微店所有店铺内的商品数据API接口
  • AI Competitor Intelligence Agent Team
  • io_getevents 和 io_pgetevents 系统调用及示例
  • 【Mysql】日志--错误日志、二进制日志、查询日志、慢查询日志