find命令,详细

article/2025/10/11 10:08:37

find命令,查找文件和目录

find查找命令是Linux系统中最重要和最常用的命令之一。查找用于根据与参数匹配的文件指定的条件来搜索和查找文件和目录列表的命令。查找可以在各种条件下使用,您可以通过权限,用户,组,文件类型,日期,大小等可能的条件查找文件。
语法:
find pathname -option [-print ] [ -exec | -ok command ] {} ;
find命令的参数;
pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
-print: find命令将匹配的文件输出到标准输出。
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为command { } ;,注意{ }和\;之间的空格。
-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

第一部分:查找名称查找文件的基本查找命令

-name filename //查找名为filename的文件。
-iname filename //与-name相同,查找名为filename的文件,但忽略大小写,即不区分大小写。
-type b/d/c/p/l/f //按照文件类型查找,查是块设备、目录、字符设备、管道、符号链接、普通文件。 块设备:随机读取,例如硬盘 字符设备:顺序读取,例如键盘、鼠标
-type查找某一类型的文件,诸如:
b - 块设备文件。
d - 目录。
c - 字符设备文件。
p - 管道文件。
l - 符号链接文件。
f - 普通文件。
s -socket文件
1.使用当前目录中的名称查找文件
在这里插入图片描述
2.在指定目录下查找文件
在这里插入图片描述
3.使用名称和忽略大小写查找文件
在这里插入图片描述
4.使用名称查找目录
在这里插入图片描述
5.使用名称查找PHP文件
在这里插入图片描述
6.查找目录中的所有PHP文件
在这里插入图片描述
7.查找目录并列出目录下的文件(为找到的每一个目录单独执行ls命令,没有选项-print时文件列表前一行不会显示目录名称 在这里插入图片描述
说明:这里要注意{}的使用:替代查找到的文件
8.查找目录并列出目录下的文件(为找到的每一个目录单独执行ls命令,执行命令前需要确认)
在这里插入图片描述

第二部分:根据他们的权限查找文件

-perm //按执行权限来查找
-empty //查找长度为零(即空文件)的文件 r 4 w 2 x 1
1.查找权限为777的所有文件
在这里插入图片描述
2.查找没有777权限的文件
说明: !表示否定,即取反
在这里插入图片描述
3.查找权限设置为644的所有SGID位文件。
# find / -perm 2644
4.查找权限为551的所有Sticky Bit设置文件。
# find / -perm 1551
5.查找所有可执行文件。
# find / -perm /a=r
6.找到777个权限和Chmod到644的文件
在这里插入图片描述
7.找到一个名为test.c的文件并将其删除
# find -type f -name test.c -exec rm -f {} ;
8.查找和删除多个文件,如.mp3或.txt
# find -type f -name “.txt" -exec rm -f {} ;
# find -type f -name "
.mp3” -exec rm -f {} ;
9.在特定路径下查找所有空文件。
# find /tmp -type f -empty
10.在特定路径下查找所有空目录
# find /tmp -type d -empty
12. 查找空文件或空目录
# find ./ -empty
13.查找空文件并删除
# find ./ -empty -name test.a -print -delete
14.要查找所有隐藏的文件,请使用以下命令。

第三部分:基于所有者和组的搜索文件

-user username #按文件属主来查找
-group groupname #按组来查找
-nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存(孤儿文件 没有所有者的文件)
1.查找所有者root的、名为test.c的文件。
# find / -user root -name test.c
2.查找/ home目录下属于Group Developer的所有文件。
# find / -group developer
3.查找无效属组的所有文件
# find / -nogroup
4.查找无效属主的所有文件
# find / -nouser

第四部分:根据日期和时间查找文件和目录

-mtime -n +n #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime -n +n #按文件访问时间来查,-n指n天以内,+n指n天以前
-ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
注:我们可以使用stat命令来查看一个文件的时间信息。

  1. 在/root下查找文件更新日是在距现在时刻二天以内的文件
    # find /root/ -mtime -2
  2. 在/root下查找文件更新日是在距现在时刻二天以上的文件
    # find /root/ -mtime +2
    3.在/root下查找文件更新日是在距现在时刻一天以上二天以内的文件
    # find /root/ -mtime 2
    注:-atime、-ctime与-mtime用法类似,可以自行查看man帮助。
    4.查找文件更新日是在距现在时刻二分钟以内的文件
    #find ./ -mmin -2
    5.查找文件更新日是在距现在时刻二分钟以上的文件
    #find ./ -mmin +2
    6.查找文件更新日是在距现在时刻一分钟以上二分钟以内的文件
    #find ./ -mmin 2
    注:-amin、cmin与-mmin用法类似,可以自行查看man帮助。
    7.查找文件更新时间比文件abc的内容更新时间新的文件
    #find ./ -newer abc
    查找更改时间比文件file1新但比文件file2旧的文件。-newer file1 ! file2
    8.查找文件访问时间比文件abc的内容更新时间新的文件
    #find ./ -anewer abc
    9.查找所有被修改超过50天以及少于100天的文件。
    # find / -mtime +50 -mtime -100
第五部分:根据大小查找文件

-size [+/-]n
按照文件大小查询文件,+n表示文件大小大于n,-n表示文件大小小于n。常用单位:k, M, G
# find /tmp -size 2M //查找在/tmp 目录下等于2M的文件
# find /tmp -size +2M //查找在/tmp 目录下大于2M的文件
# find /tmp -size -2M //查找在/tmp 目录下小于2M的文件
# find /tmp -size +50M -size -100M //找到大于50MB且小于100MB的所有文件。
#find / -type f -name “.mp3” -size +10M -exec rm {} ; //查找超过10MB的所有.mp3文件,并使用一个命令删除它们。
1.find 命令默认会递归查找整个目录树,而这非常消耗时间和资源。好在目录查找的深度可以手动指定。例如我们只想查找一到两层以内的子目录,可以通过 maxdepth 选项来指定。
# find ./test -maxdepth 2 -name "
.php"
# find ./test -maxdepth 1 -name ".php"
第二个示例中指定了maxdepth 为1,表明最多只查找一层内的子目录,也就是只查找当前文件夹。
当我们只想在当前目录下查找,而不是查找整个目录树的时候,这个选项会特别有用。
与maxdepth 选项相似,还有一个选项叫做 mindepth ,正如名字所表示的那样,它会至少到达第 N 层子目录后才开始查找文件。
2.反向查找
除了查找满足条件的文件之外,我们还可以查找不满足条件的所有文件。当我们知道要在查找中排除哪些文件时,这个选项就能发挥作用了。
$ find ./test -not -name “
.php”
./test
./test/abc.txt
./test/subdir
在上面的示例中我们找到了所有扩展名不是 php 的文件和文件夹。我们也可以使用感叹号 ! 来代替 -not。
find ./test ! -name “.php”
结合多个查找条件
我们可以同时使用多个查找条件来指定文件名并排除某些文件。
$ find ./test -name ‘abc
’ ! -name ‘.php’
./test/abc.txt
./test/abc
上面的命令查找所有以abc 开头并且不含 .php 扩展名的文件。这个示例展现了 find 命令自带的查找表达式是多么的强大。
3.OR 操作符
当我们使用多个查找条件时, find 命令会将它们通过 AND 操作符(-a)结合起来,也就是说,只有满足所有条件的文件才会被列出。不过,如果我们需要进行基于 OR 运算的查找时,可以加上 -o开关。
$ find -name ‘
.php’ -o -name ‘*.txt’
./abc.txt
./subdir/how.php
./abc.php
./cool.php
上面的命令查找所有以 .php 结尾或者以 .txt 结尾的文件。
4.-prune:不在当前指定目录中查找
例如:已知在/etc,/etc/pam.d以及/usr/bin目录下都有一个名为passwd的文件,我们看一下-prune的作用
# find / -name passwd  //在根目录及其子目录下查找名为passwd的文件
./usr/bin/passwd
./etc/passwd
./etc/pam.d/passwd
# find / -path /etc -prune -o -name passwd -print  //在根目录及其子目录(除了/etc目录及其子目录)下查找名为passwd的文件。
./usr/bin/passwd
# find / ( -path /usr/bin -o -path /etc ) -prune -o -name “passwd” -print  //在根目录及其子目录(除了/usr/bin目录及其子目录;/etc目录及其子目录)下查找名为passwd的文件。由于命令行不能直接识别圆括号,因此要用转义字符\,在和前后都要有空格。


http://chatgpt.dhexx.cn/article/8ksHaBsK.shtml

相关文章

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

一、find命令常用功能 1、find命令的基本信息如下。 命令名称:find。英文原意:search for files in a directory hierarchy。所在路径:/bin/find。执行权限:所有用户。功能描述:在目录中搜索文件。 2、按照文件名搜…

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;也涉及到虚拟内存管理、内存交换和内存回…