Linux常用命令——find命令大全

article/2025/10/11 10:28:48

一、find命令常用功能

1、find命令的基本信息如下。

  • 命令名称:find。
  • 英文原意:search for files in a directory hierarchy。
  • 所在路径:/bin/find。
  • 执行权限:所有用户。
  • 功能描述:在目录中搜索文件。

2、按照文件名搜索

[root@localhost ~ ] # find 搜索路径 [选项] 搜索内容
选项:
-name:按照文件名搜索
-iname:按照文件名搜索,不区分文件名大小写
-inum:按照inode号搜索#1.find命令基本使用
[root@192 ~]# find . -name abcde
./abcde提示:搜索位置越大,消耗系统资源越多。
在生产服务器上搜索的时候,尽量不在根目录下搜索,把搜索的范围尽量控制在最小。#2.-iname
[root@192 ~]# find . -iname abcde
./ABCDE
./abcde提示:i表示忽略的意思,就是忽略大小写。#3.-inum之前我们通过文件名可以查看到文件的i节点号
[root@192 ~]# ls -i abcde 
1043285 abcde这里通过find命令的-inum选项可以实现,通过i节点号查看文件的名字。
[root@192 ~]# find . -inum 1043285
./abcde这两个是一对命令,记忆比较方便。

扩展:
之前我们说过,硬连接是非常不好识别链接,源文件和硬链接文件只是引用计数增加了,其他信息是无法识别的。如下:

[root@192 ~]# ls -il abcde /tmp/abcde_h 
1043285 -rw-r--r--. 2 root root 0 12月 30 18:24 abcde
1043285 -rw-r--r--. 2 root root 0 12月 30 18:24 /tmp/abcde_h

我们可以看到硬连接文件和源文件的i节点号是一样的。我们可以通过i节点号来查询是否有多个文件与之对应。Linux系统中是一个文件对应一个i节点号,如果有多个文件对应一个i节点号,说明存在硬连接关系。

[root@192 ~]# find / -inum 1043285
find: “/proc/39609/task/39609/fd/5”: 没有那个文件或目录
find: “/proc/39609/task/39609/fdinfo/5”: 没有那个文件或目录
find: “/proc/39609/fd/5”: 没有那个文件或目录
find: “/proc/39609/fdinfo/5”: 没有那个文件或目录
/tmp/abcde_h
/root/abcde

我们可以看到,通过上边这种方式是可以确定两个文件是硬链接关系。但是我们在平时使用Linux系统的时候,还是不推荐创建文件的硬链接。
补充:上边代码块的前4行是干扰项。这是在整个根目录搜索的时候,会搜索到proc目录,而proc目录是内存,find命令在运行的时候,就会消耗一定的内存资源,这4行就是find命令在运行时产生的临时文件。同时这种临时文件找到也是立刻消失的,所以会出现每行最后的没有那个文件或目录

3、按照文件大小搜索

[root@localhost ~ ] # find 搜索路径 [选项] 搜索内容
选项:
-size[+|-]大小:按照指定大小搜索文件这里的“+”的意思是搜索比指定大小还要大的文件,“-”的意思是搜索比指定大小还要小的文件。

find 命令的单位:

[root@localhost ~ ] # man find-size n[cwbkMG]File uses n units of space.The following suffixes can be used:#这是默认单位,如果单位为b或不写单位,则按照512 Byte搜索。' b':for 512-byte blocks(this is the default if no suffix is used)#搜索单位是c,按照字节搜索。'c':for bytes#搜索单位是w,按照双字节(中文)搜索。'w':for two-byte words#按照KB单位搜索,必须是小写的k。'k':for Kilobytes(units of 1024 bytes)#按照MB单位搜索,必须是大写的M'M':for Megabytes(units of 1048576 bytes)#按照GB单位搜索,必须是大写的G' G':for Gigabytes(units of 1073741824 bytes)

举例:

1.查看root目录下文件信息
[root@DevOps ~]# ll -h
总用量 48K
-rw-r--r--. 1 root root   17 1月   9 17:08 abc
-rw-------. 1 root root 1.3K 12月 23 20:46 anaconda-ks.cfg
-rw-r--r--. 1 root root  28K 12月 23 20:46 install.log
-rw-r--r--. 1 root root 7.4K 12月 23 20:45 install.log.syslog2.在当前目录下搜索文件大小为28k的文件
[root@DevOps ~]# find . -size 28k
./install.log3.在当前目录下搜索文件大小大于1k的文件。
[root@DevOps ~]# find . -size +1k
.
./install.log
./anaconda-ks.cfg
./install.log.syslog注意:具体单位字母看上边列表。4.注意一个小问题
如果按文件大小搜索,并且文件的大小没有写单位,默认是按b(字节)进行查找的,但是我们可以看到下面并没有查询处abc文件。[root@DevOps ~]# ll -h
总用量 48K
-rw-r--r--. 1 root root   17 1月   9 17:08 abc
-rw-------. 1 root root 1.3K 12月 23 20:46 anaconda-ks.cfg
-rw-r--r--. 1 root root  28K 12月 23 20:46 install.log
-rw-r--r--. 1 root root 7.4K 12月 23 20:45 install.log.syslog
[root@DevOps ~]# find . -size 17
[root@DevOps ~]# 原因是:
看上边的单位说明` ' b':for 512-byte blocks(this is the default if no suffix is used)`
说b默认单位是按照512byte查找,这是一个默认的属性值,如上边我们输入的17,就是17*512b的结果进行计算,然后进行查找。
`c`是按照字节搜索。[root@DevOps ~]# find . -size 17c
./abc

4、按照修改时间搜索

Linux中的文件有访问时间(atime)数据修改时间(mtime)状态修改时间(ctime)这三个时间,我们也可以按照时间来搜索文件。(注意:如果以time结尾的时间单位,默认单位时间是天。)

命令格式:
[root@localhost ~ ] # find 搜索路径 [选项] 搜索内容
选项:
-atime[+|-]时间:按照文件访问时间搜索
-mtime[+|-]时间:按照文件数据修改时间搜索
-ctime[+|-]时间:按照文件状态修改时间搜索提示:也有-amin、-mmin等时间选项,时间单位为分钟。

用mtime数据修改时间来举例,重点说说+-时间的含义。
我们画一个时间轴,来解释一下

说明:
-5:代表5天内修改的文件。
5:代表前5~6天,那一天修改的文件。
+5:代表6天前修改的文件。

5、按照权限搜索

命令格式:
[root@localhost ~ ] # find 搜索路径 [选项] 搜索内容
选项:
-perm: 权限模式:查找文件权限刚好等于“权限模式”的文件
-perm: -权限模式:查找文件权限全部包含“权限模式”的文件
-perm: +权限模式:查找文件权限包含“权限模式”的任意一个权限的文件

举例:

1.查看文件夹内容
[root@DevOps test]# ll
总用量 0
-rw-r--r--. 1 root root 0 1月   9 18:17 abc
-rw-r--r--. 1 root root 0 1月   9 18:17 def2.按照权限查找文件
[root@DevOps test]# find . -perm 644
./def
./abc注:644代表权限rw-r--r--3.修改文件def权限为600,然后进行+、-查找
[root@DevOps test]# chmod 600 def 
[root@DevOps test]# ll
总用量 0
-rw-r--r--. 1 root root 0 1月   9 18:17 abc
-rw-------. 1 root root 0 1月   9 18:17 def查找
[root@DevOps test]# find . -perm +444
.(代表当前目录不用考虑)
./def
./abc
[root@DevOps test]# find . -perm -444
.
./abc
[root@DevOps test]# 说明:
如果是+,代表所有者,所属组,其他人这三个权限中,只要有一个权限大于搜索的权限,就能够找到该权限。
如果是-,代表三个权限都要满足每项权限,如abc文件的权限是644,每个权限全都大于444,所以被搜索到。
总结说,`+`就是三个权限满足一个即可,`-`三个全满足才可以。

find的权限搜索,能理解就好,+-工作中一般用不太多。

6、按照所有者和所属组搜索

命令格式:
[root@localhost ~ ] #find 搜索路径 [选项] 搜索内容
选项:
-uid 用户ID:按照用户ID查找所有者是指定ID的文件
-gid组ID:按照用户组ID查找所属组是指定ID的文件
-user用户名:按照用户名查找所有者是指定用户的文件
-group组名:按照组名查找所属组是指定用户组的文件
-nouser:查找没有所有者的文件

举例:

按照所有者查找文件
[root@DevOps test] # find . -user root
.
./def
./abc

提示:

(重要)上边这种方式并不常用,在按照所有者和所属组搜索时,“-nouser”选项比较常用,主要用于查找垃圾文件。
(重要)只有一种情况例外,那就是外来文件。比如光盘和U盘中的文件如果是由Windows复制来的(也就是文件是由windows建立的),在Linux中查看就是没有所有者的文件;再比如手工源码包安装的文件,也有可能没有所有者(由其他系统打的源码包)。
除了外来文件,Linux系统下所有的文件都应该有所有者,否则至少是一个垃圾文件。是需要用户来处理掉的。


而关于所有者和所属组搜索常用的命令为:

[root@DevOps test] # find / -nouser
find: “/proc/5244/task/5244/fd/5”: 没有那个文件或目录
find: “/proc/5244/task/5244/fdinfo/5”: 没有那个文件或目录
find: “/proc/5244/fd/5”: 没有那个文件或目录
find: “/proc/5244/fdinfo/5”: 没有那个文件或目录注意:这四行之前说过,是find命令在执行时,在内存中自己产生的临时文件,执行完既消失。
上边命令结果证明Linux系统中没有垃圾文件。

7、按照文件类型搜索

命令格式:
[root@localhost ~ ] # find 搜索路径 [选项] 搜索内容
选项:
-type d:查找目录
-type f:查找普通文件
-type l:查找软链接文件

举例

查找当前文件中的目录
[root@DevOps ~]# find . -type d
.
./test其他选项同理

8、逻辑运算符

find命令支持一些复杂的搜索方式:逻辑与、逻辑或、逻辑非。

命令格式:
[root@localhost ~ ] #find 搜索路径 [选项] 搜索内容
选项:
-a:and逻辑与
-o:or逻辑或
-not:not 逻辑非
  • 1)-a:and逻辑与
    find命令也支持逻辑运算符选项,其中-a代表逻辑与运算,也就是-a的两个条件都成立,find搜索的结果才成立(其中有一个不成立都不行)。举个例子:
#在当前目录下搜索大于2KB,并且文件类型是普通文件的文件
[root@localhost ~ ] # find . -size +2k -a -type f
  • 2)-o:or逻辑或
    -o选项代表逻辑或运算,也就是-o的两个条件只要其中一个成立,find命令就可以找到结果。例如:
#在当前目录下搜索文件要么是cangls的文件,要么是bols的文件,两个都可以搜索到。 
[root@localhost ~ ] # find . -name cangls -o -name bols
./cang1s
./bols
  • 3)-not:not 逻辑非
    -not是逻辑非,也就是取反的意思。举个例子:
#在当前目录下搜索文件名不是cangls的文件
[root@localhost ~] # find . -not -name cangls# 下面!的写法和上边-not是一个意思,都是逻辑非运算符。
[root@localhost ~] # find . ! -name cangls
(注意!左右两边都有要空格)


9、其他选项
这里我们主要讲解两个选项“-exec”和“-ok”,这两个选项的基本作用非常相似。我们先来看看“-exec”选项的格式。

  • 1)-exec选项
[root@localhost ~ ] # find 搜索路径 [选项] 搜索内容 -exec 命令2 {} \;
说明:
1.基本格式,只要写 -exec,命令最后一定要写 \;
2.作用是,把命令1的搜索结果( find 搜索路径 [选项] 搜索内容),作为命令2的操作对象。(其实可以理解成把命令1的操作结果,放在命令2后边的{ }中,然后用命令2去搜索{ }中的内容。)
3.在命令2种不识别别名,就是在命令2种不能用别名,如果 ll命令
  • 2)-ok选项
    “-ok”选项和“-exec”选项的作用基本一致,区别在于:“-exec”的命令2会直接处理,而不询问;“-ok”的命令2在处理前会先询问用户是否这样处理,在得到确认命令后,才会执行。
在删除自己产生的一些零时文件,且很久不用的时候,可以用下面命令删除。
[ root@ localhost ~] # find /var/log -mtime +10 -ok rm -rf 0\; 
〈 rm.../var/log/samba/old〉?n
〈 rm.../var/log/sssd〉?n
〈 rm...I/var/log/ntpstats〉?n
〈 rm.../var/log/cups〉?n

重点:配套学习资料和视频教学

那么在这里我也精心准备了上述大纲的详细资料在下方链接如下

 


http://chatgpt.dhexx.cn/article/sF8N5O2t.shtml

相关文章

linux内存管理系统

1. linux内存管理系统 1. 1 内存配置 vim .config 由上图可知,当前系统配置的内存资源为: 虚拟页大小4KiB 虚拟地址带宽48bit 物理地址带宽48bit 4级页表,pgd pud pmd pte 1.2 查看内存页的布局情况 make menuconfig利用qemu环境进行…

Linux内存管理详解

前一段时间看了《深入理解Linux内核》对其中的内存管理部分花了不少时间,但是还是有很多问题不是很清楚,最近又花了一些时间复习了一下,在这里记录下自己的理解和对Linux中内存管理的一些看法和认识。 我比较喜欢搞清楚一个技术本身的发展历程…

深入理解Linux内存管理

1.1 内存管理的意义1.2 原始内存管理1.3 分段内存管理1.4 分页内存管理1.5 内存管理的目标1.6 Linux内存管理体系2.1 物理内存节点2.2 物理内存区域2.3 物理内存页面2.4 物理内存模型2.5 三级区划关系3.1 Buddy System 3.1.1 伙伴系统的内存来源3.1.2 伙伴系统的管理数据结构3.…

【linux kernel】linux内存管理 | 分配物理内存页面

文章目录 一、物理内存分配概述二、分配核心函数(__alloc_pages_nodemask)(2-1)重要函数1:(get_page_from_freelist())(2-2-1)for_each_zone_zonelist_nodemask{} &#…

深度讲解Linux内存管理和Linux进程调度-打通任督二脉

《穆赫兰道》与《内陆帝国》 我在多年的工程生涯中发现很多工程师碰到一个共性的问题:Linux工程师很多,甚至有很多有多年工作经验,但是对一些Linux内存管理和linux进程管理关键概念的理解非常模糊,比如不理解CPU、内存资源等的真正…

Linux内存管理机制

在Linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然。这是Linux内存管理的一个优秀特性,主要特点是,无论物理内存有多大,Linux 都将其充份利用,将一…

关于linux内存管理

Linux的内存管理主要分为两部分:物理地址到虚拟地址的映射,内核内存分配管理(主要基于slab)。 物理地址到虚拟地址之间的映射 1、概念 物理地址(physical address) 用于内存芯片级的单元寻址,与处理器和CPU连接的地址…

深入理解Linux内存管理-之-目录导航

日期内核版本架构作者GitHubCSDN2016-08-31Linux-4.7X86 & armgatiemeLinuxDeviceDriversLinux内存管理 1 内存描述 CSDNGitHubLinux内存描述之概述–Linux内存管理(一)01-description/01-memoryLinux内存描述之内存节点node–Linux内存管理(二)01-description/02-nodeLin…

Linux内存管理(下)

Linux内存管理(下) 物理内存管理(页管理) Linux内核管理物理内存是通过分页机制实现的,它将整个内存划分成无数4k(在i386体系结构中)大小页,从而分配和回收内存的基本单位便是内存页了。利用分页管理有助于灵活分配内存地址&…

Linux中的内存管理机制

Linux中的内存管理机制 ​ 程序在运行时所有的数据结构的分配都是在堆和栈上进行的,而堆和栈都是建立在内存之上。内存作为现代计算机运行的核心,CPU可以直接访问的通用存储只有内存和处理器内置的寄存器,所有的代码都需要装载到内存之后才能…

Linux - 内存管理

【1】前言 内存管理是指软件运行时对计算机内存资源的分配和使用的技术。其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和回收内存资源。 内存管理是操作系统很重要的一部分。作为一个后端开发来说,了解操作系统是如何进行内存…

Linux的内存管理

Linux的内存管理 Linux的内存管理是一个非常复杂的过程,主要分成两个大的部分:内核的内存管理和进程虚拟内存。内核的内存管理是Linux内存管理的核心,所以我们先对内核的内存管理进行简介。 一、物理内存模型 物理内存模型主要分为两种&…

Linux内存管理(上)

Linux内存管理(上) 摘要:本章首先以应用程序开发者的角度审视Linux的进程内存管理,在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存地使用方法。力求从外自内、水到渠成地引导网友分析Linux地内存管理与使用。在本章最后我们给出一个内存映射…

【纯干货】Linux内存管理(最透彻的一篇)

摘要:本章首先以应用程序开发者的角度审视Linux的进程内存管理,在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存的使用方法。力求从外到内、水到渠成地引导网友分析Linux的内存管理与使用。在本章最后,我们给出一个内存映射的实例…

Linux内存管理方式

目录 前言 内存管理方式 分段式 分页式 段页式 虚拟地址如何映射到物理地址 缺页中断 内存交换 内存置换算法 前言 之前说过linux中的程序地址空间是使用的虚拟地址,虚拟地址和真实的物理地址有着某种特殊的映射关系(MMU,全称Memory Ma…

一文讲透Linux内存管理

一、Linux内存管理概述 Linux内存管理是指对系统内存的分配、释放、映射、管理、交换、压缩等一系列操作的管理。在Linux中,内存被划分为多个区域,每个区域有不同的作用,包括内核空间、用户空间、缓存、交换分区等。Linux内存管理的目标是最…

Linux内存管理(一):内存管理概述

首先明确下面几个概念: 程序(Program):一组指令的有序集合,是静态的实体。进程(Process):执行程序后,操作系统将程序的可执行文件和它的相关依赖加载到内存中,得到的动态的实体称为进程。 程序和进程并不…

史上最全linux内存管理

Linux内存结构 Node 首先, 内存被划分为结点. 每个结点关联到系统中的一个处理器,内核中表示为pg_data_t的 实例. 系统中每个节点被链接到一个以NULL结尾的pgdat_list链表中<而其中的每个节点利用pg_data_tnode_next字段链接到下一节&#xff0e;而对于PC这种UMA结构的机…

一文掌握 Linux 内存管理

作者&#xff1a;dengxuanshi&#xff0c;腾讯 IEG 后台开发工程师 以下源代码来自 linux-5.10.3 内核代码&#xff0c;主要以 x86-32 为例。 Linux 内存管理是一个很复杂的“工程”&#xff0c;它不仅仅是对物理内存的管理&#xff0c;也涉及到虚拟内存管理、内存交换和内存回…

linux内存管理(一)-内存管理架构

文章目录 一、内存管理架构二、虚拟地址空间布局架构2.1内核地址空间布局2.2用户地址空间布局 三、物理内存体系架构3.1 正常内存3.2 设备内存四、内存结构五、内存模型六、虚拟地址和物理地址的转换七、页表八、内存映射原理分析 一、内存管理架构 内存管理子系统架构可以分为…