Linux中find命令的使用详解(上)

简介: find命令是各种Linux发现版中比较重要的、常用的一个命令,该命令功能强大,熟练掌握了这个命令的使用,对平时的系统运维、管理工作会起到事半功倍的效果。

find命令是各种Linux发现版中比较重要的、常用的一个命令,该命令功能强大,熟练掌握了这个命令的使用,对平时的系统运维、管理工作会起到事半功倍的效果。

一.获取帮助信息

[root@root@GeekDevOps-find ~]# find --help
[root@root@GeekDevOps-find ~]# man find

大家会发现帮助信息很多,但是不太好理解。

二.find命令的格式

通过find的在线帮助文档,我们可以知道,find命令的使用格式为:

find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

我们将[path…]之前平时很少使用的部分归为一类,简称为:option,。如此,该命令的格式即可表示为:

find [option] [PATH] [expression]

其中,’-H’ ‘-L’ ‘-P’三个选项主要是用于处理符号连接。’-H’表示除了处理命令行参数之外,不跟随其他符号链接,也就是说只跟随命令行中指定的符号连接,’-L’表示跟随所有的符号连接,’-P’是默认的选项,表示从不跟随符号连接。
[-D debugoptions]主要用于打印诊断信息。能帮助我们诊断出find命令为何不执行我们想要其执行的任务。我们来大致了解一下:

[root@GeekDevOps-find system]# find -D help
Valid arguments for -D:
help       Explain the various -D options
tree       Display the expression tree
search     Navigate the directory tree verbosely
stat       Trace calls to stat(2) and lstat(2)
rates      Indicate how often each predicate succeeded
opt        Show diagnostic information relating to optimisation
exec       Show diagnostic information relating to -exec, -execdir, -ok and -okdir

[-Olevel]:启用查询优化。一共有从0-3四个优化级别。其中0和1级别是等价的,系统默认值为1,这个选项需要在O后面直接跟一个表示查询优化的十进制数字,如O2。
以上部分均来自于find在线帮助文档,本人仅进行了翻译、收集、整理工作,由于这一部分内容平时均使用的是默认值,其他值很少用到,点到为止,不作深入探讨。
下面让我们具体举一个例子来讨论一下find命令的格式。

[root@GeekDevOps-find system]# find /bin /etc -name shadow
/etc/shadow

由于[option]部分使用的默认值,因此命令后直接跟的是[PATH]部分的内容,在上面的例子中,PATH的值为/bin和/etc,即需要查找的文件或目录的路径,可以是绝对路径,也可以是相对路径,可以跟多个。
[expression]后跟的是需要查找的表达式。例子中用的是-name shadow这个表达式,指定条件为找到文件名是shadow的文件。这是find命令的核心内容,是需要我们重点学习的部分。表达式指定了我们要查找的是什么属性的文件。此外,表达式还可以指定一些操作,比如删除某些条件匹配的文件或内容。

三.表达式

由于关于find的在线手册有1100多行之多,非常详细,要一一做介绍的话需要花很多时间。因此,我选择性的选取在日常工作中常用的知识点进行学习。

(一)TESTS

find命令是通过文件属性查找文件的。find表达式的tests都是文件的属性条件,比如文件的各种时间,文件权限等。很多参数中会出现指定一个数字n,一般会出现以下三种写法:
+n:表示大于n。
-n:表示小于n。
n:表示等于n。

(二)按照时间进行查找

-amin:以分钟为单位通过文件的最后存取时间(access time)查找文件。
-cmin:以分钟为单位通过文件的状态修改时间(change time)查找文件。
-mmin:以分钟为单位通过文件的数据修改时间(modify time)查找文件。
-atime:以天为单位通过文件的最后存取时间(access time)查找文件。
-ctime:以天为单位通过文件的状态修改时间(change time)查找文件。
-mtime:以天为单位通过文件的数据修改时间(change time)查找文件。
-newer:查找比当前文件数据修改时间更加新一点的另外的文件。
-anewer:查找比当前文件的最后存取时间更加新一点的另外的文件。
-cnewer:查找比当前文件的状态时间更加新一点的另外的文件。
现在的时间是16:55:

[root@GeekDevOps-find ~]# ll -al
总用量 48
dr-xr-x---.  3 root root   251 123 16:15 .
dr-xr-xr-x. 18 root root   238 122 16:00 ..
-rw-------.  1 root root 13536 123 09:03 .bash_history
-rw-r--r--.  1 root root    18 1229 2013 .bash_logout
-rw-r--r--.  1 root root   176 1229 2013 .bash_profile
-rw-r--r--.  1 root root   176 1229 2013 .bashrc
-rw-r--r--.  1 root root   100 1229 2013 .cshrc
-rw-r--r--.  1 root root     0 123 16:14 GeekDevOps.doc
-rw-r--r--.  1 root root     0 123 16:15 GeekDevOps.docx
-rw-r--r--.  1 root root     0 123 16:14 GeekDevOps.txt
-rw-r--r--.  1 root root     0 123 16:15 GeekDevOps.wps
-rw-r--r--.  1 root root    86 123 10:40 .nmcli-history
drwxr-----.  3 root root    19 111 15:43 .pki
-rw-r--r--.  1 root root   129 1229 2013 .tcshrc
-rw-------.  1 root root  4888 123 15:12 .viminfo
[root@GeekDevOps-find ~]# find ./ -amin -50
./
./GeekDevOps.txt
./GeekDevOps.doc
./GeekDevOps.docx
./GeekDevOps.wps
[root@GeekDevOps-find ~]# find ./ -amin +50
./.bash_logout
./.bash_profile
./.bashrc
./.cshrc
./.tcshrc
./.bash_history
./.pki
./.pki/nssdb
./.nmcli-history
./.viminfo
[root@GeekDevOps-find ~]# find ./ -mtime +1 
./.bash_logout
./.bash_profile
./.bashrc
./.cshrc
./.tcshrc
./.pki
./.pki/nssdb
[root@GeekDevOps-find ~]# find ./ -newer GeekDevOps.doc
./
./GeekDevOps.docx
./GeekDevOps.wps

-newer还有一种特殊用法,可以用来做各种时间之间的比较。比如,我想找到文件修改时间比/etc/passwd文件的change time更新的文件:

[root@GeekDevOps-find ~]# find /etc/ -newermc /etc/shadow

这个用法的原型是:find /etc/ -newerXY file。其中Y表示的是跟后面file的什么时间比较,而X表示使用查找文件什么时间进行比较。-newermc就是拿文件的modify time时间跟file的change time进行比较。X和Y可以使用的字母为:
a:文件access time。
c:文件change time。
m:文件modify time。

(三)根据用户、组查找

-uid n:文件的所属用户uid为n。
-user name:文件的所属用户为name。
-gid n:文件的所属组gid为n。
-group name:所属组为name的文件。
-nogroup:没有所属组的文件。
-nouser:没有所属用户的文件。

[GeekDevOps@GeekDevOps-find /]$ find / -uid `id -u`
...
/home/GeekDevOps
/home/GeekDevOps/.bash_logout
/home/GeekDevOps/.bash_profile
/home/GeekDevOps/.bashrc
(四)根据权限查找

-executable:文件可执行。
-readable:文件可读。
-writable:文件可写。

[GeekDevOps@GeekDevOps-find /]$ find / -writable #显示内容过多,不展示。

-perm mode:查找权限为mode的文件,mode的写法可以是数字,也可以是ugo的方式如:

[GeekDevOps@GeekDevOps-find /]$ find /home/ -perm 700 -ls
534195    0 drwx------   2 GeekDevOps GeekDevOps       62 123 17:09 /home/GeekDevOps

这个写法的等效写法为:

[GeekDevOps@GeekDevOps-find /]$ find /home/ -perm u=rwx -ls
534195    0 drwx------   2 GeekDevOps GeekDevOps       62 123 17:09 /home/GeekDevOps

另外要注意,mode指定的是完全符合这个权限的文件。
mode还可以使用/或-作为前缀进行描述。如果指定了-mode,就表示没指定的权限是忽略的,就是说,权限中只要包涵相关权限即可。如:

[GeekDevOps@GeekDevOps-find /]$ find /home/ -perm 644 -ls
534196    4 -rw-r--r--   1 GeekDevOps GeekDevOps       18 8月  3 05:11 /home/GeekDevOps/.bash_logout
534197    4 -rw-r--r--   1 GeekDevOps GeekDevOps      193 8月  3 05:11 /home/GeekDevOps/.bash_profile
534198    4 -rw-r--r--   1 GeekDevOps GeekDevOps      231 8月  3 05:11 /home/GeekDevOps/.bashrc
[GeekDevOps@GeekDevOps-find /]$ find /home/ -perm -600 -ls
16803401    0 drwxr-xr-x   3 root     root           24 1月 23 17:09 /home/
534195    0 drwx------   2 GeekDevOps GeekDevOps       62 1月 23 17:09 /home/GeekDevOps
534196    4 -rw-r--r--   1 GeekDevOps GeekDevOps       18 8月  3 05:11 /home/GeekDevOps/.bash_logout
534197    4 -rw-r--r--   1 GeekDevOps GeekDevOps      193 8月  3 05:11 /home/GeekDevOps/.bash_profile
534198    4 -rw-r--r--   1 GeekDevOps GeekDevOps      231 8月  3 05:11 /home/GeekDevOps/.bashrc

以上代码块中,前面一个代码块找到所有只有644权限的文件,后面一个代码块-600就表示只要是包括了rw的其他位任意的文件。mode加/前缀表示的是,指定的权限只要某一位复合条件就可以,其他位跟-一样忽略,就是说-perm /600还可以找到400或者600这样权限的文件。目前CentOS7前缀+已经被弃用。

相关文章
|
2月前
|
Linux 应用服务中间件 Shell
二、Linux文本处理与文件操作核心命令
熟悉了Linux的基本“行走”后,就该拿起真正的“工具”干活了。用grep这个“放大镜”在文件里搜索内容,用find这个“探测器”在系统中寻找文件,再用tar把东西打包带走。最关键的是要学会使用管道符|,它像一条流水线,能把这些命令串联起来,让简单工具组合出强大的功能,比如 ps -ef | grep 'nginx' 就能快速找出nginx进程。
347 1
二、Linux文本处理与文件操作核心命令
|
2月前
|
Linux
linux命令—stat
`stat` 是 Linux 系统中用于查看文件或文件系统详细状态信息的命令。相比 `ls -l`,它提供更全面的信息,包括文件大小、权限、所有者、时间戳(最后访问、修改、状态变更时间)、inode 号、设备信息等。其常用选项包括 `-f` 查看文件系统状态、`-t` 以简洁格式输出、`-L` 跟踪符号链接,以及 `-c` 或 `--format` 自定义输出格式。通过这些选项,用户可以灵活获取所需信息,适用于系统调试、权限检查、磁盘管理等场景。
260 137
|
2月前
|
安全 Ubuntu Unix
一、初识 Linux 与基本命令
玩转Linux命令行,就像探索一座新城市。首先要熟悉它的“地图”,也就是/根目录下/etc(放配置)、/home(住家)这些核心区域。然后掌握几个“生存口令”:用ls看周围,cd去别处,mkdir建新房,cp/mv搬东西,再用cat或tail看文件内容。最后,别忘了随时按Tab键,它能帮你自动补全命令和路径,是提高效率的第一神器。
592 57
|
5月前
|
JSON 自然语言处理 Linux
linux命令—tree
tree是一款强大的Linux命令行工具,用于以树状结构递归展示目录和文件,直观呈现层级关系。支持多种功能,如过滤、排序、权限显示及格式化输出等。安装方法因系统而异常用场景包括:基础用法(显示当前或指定目录结构)、核心参数应用(如层级控制-L、隐藏文件显示-a、完整路径输出-f)以及进阶操作(如磁盘空间分析--du、结合grep过滤内容、生成JSON格式列表-J等)。此外,还可生成网站目录结构图并导出为HTML文件。注意事项:使用Tab键补全路径避免错误;超大目录建议限制遍历层数;脚本中推荐禁用统计信息以优化性能。更多详情可查阅手册mantree。
430 143
linux命令—tree
|
1月前
|
存储 安全 Linux
Linux卡在emergency mode怎么办?xfs_repair 命令轻松解决
Linux虚拟机遇紧急模式?别慌!多因磁盘挂载失败。本文教你通过日志定位问题,用`xfs_repair`等工具修复文件系统,三步快速恢复。掌握查日志、修磁盘、验重启,轻松应对紧急模式,保障系统稳定运行。
267 2
|
2月前
|
缓存 监控 Linux
Linux内存问题排查命令详解
Linux服务器卡顿?可能是内存问题。掌握free、vmstat、sar三大命令,快速排查内存使用情况。free查看实时内存,vmstat诊断系统整体性能瓶颈,sar实现长期监控,三者结合,高效定位并解决内存问题。
149 0
Linux内存问题排查命令详解
|
2月前
|
Unix Linux 程序员
Linux文本搜索工具grep命令使用指南
以上就是对Linux环境下强大工具 `grep` 的基础到进阶功能介绍。它不仅能够执行简单文字查询任务还能够处理复杂文字处理任务,并且支持强大而灵活地正则表达规范来增加查询精度与效率。无论您是程序员、数据分析师还是系统管理员,在日常工作中熟练运用该命令都将极大提升您处理和分析数据效率。
200 16
|
4月前
|
监控 Linux 网络安全
Linux命令大全:从入门到精通
日常使用的linux命令整理
754 13
|
5月前
|
Linux 网络安全 数据安全/隐私保护
使用Linux系统的mount命令挂载远程服务器的文件夹。
如此一来,你就完成了一次从你的Linux发车站到远程服务器文件夹的有趣旅行。在这个技术之旅中,你既探索了新地方,也学到了如何桥接不同系统之间的距离。
787 21
|
5月前
|
监控 Linux
Linux系统中使用df命令详解磁盘使用情况。
`df`命令是Linux系统管理员和用户监控和管理磁盘空间使用的重要工具。掌握它的基本使用方法和选项可以帮助在必要时分析和解决空间相关问题。简洁但功能丰富,`df`命令确保了用户可以快速有效地识别和管理文件系统的空间使用情况。
353 13