Linux 系统之文件查找工具--- locate、 find详解

一、学习Linux为什么要学习文件查找工具?

作为Linux爱好者,或者Linux运维人员经常会遇到要查找某个或者某一类文件的问题,但对于“一切皆文件”的Linux系统来说,如何能够在成千上万的文件中快速精确的定位到我们所需的文件,对我们来说是至关重要的。因此,熟练掌握并运用Linux系统下的文件查找命令是我们快速定位的关键。

本文着重介绍Linux环境下的locate、find文件查找工具

二、文件查找工具locate使用详解

2.1、locate - find files by name 【按名称查找文件】

locate命令用于查找文件,但比find命令速度快,其工作原理是,是先建立一个包括系统内所有档案名称及路径的索引数据库,之后当查找文件时只是查询的这个索引数据库而并非实际深入档案系统之中,所以它要比find全盘检索要快的多。

为了达到精确查找的目的也可以通过手动运行:updatedb 来更新其索引数据库,一般第一次使用此命令时比较慢,其数据库保存路径为:/var/lib/mlocate/mlocate.db

2.2、locate 特点:

优点:

查找速度快

缺点:

非实时查找---不能精确查找文件状况

模糊查找-----系统自动按照用户输入关键词的同义词进行模糊检索,从而得出较多的检索结果

2.3、语法:

locate [OPTION]... PATTERN...

2.4、主要参数:

-n 只显示前 n个输出

-i 查找文件的时候不区分大小写

-r 使用正规运算式 做寻找的条件

-e 将排除在寻找的范围之外

-q 安静模式不会显示任何错误讯息

eg:
查找Linux系统中的passwd文件只显示前5个搜索到的结果
[[email protected] mlocate]# locate -n 5  passwd
/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
/etc/security/opasswd
/lib64/security/pam_passwdqc.so
1、查找/etc/p开头的文件
[[email protected] state]# locate /etc/p
/etc/pam.d
/etc/pango
/etc/passwd
/etc/passwd-
/etc/pcmcia
/etc/pinforc
/etc/pkcs11
/etc/pki
/etc/plymouth
/etc/pm
/etc/pm-utils-hd-apm-restore.conf

三、Linux文件查找工具之find命令

3.1:search for files in a directory hierarchy---在目录层次结构中搜索文件

通过遍历指定的目标目录,实时查找符合指定属性的文件;

3.2、特点:

优点:

精确匹配,文件查找精确度高

缺点:

速度慢,由于该命令是通过文件在目录层次结构中搜索文件,所以其速度较慢

2.3、命令语法:

find [OPTIONS] [查找路径] [查找条件] [处理动作]

查找路径:默认为当前路径;

查找条件:默认为指定路径下的所有文件;

处理动作:默认为打印至屏幕;

2.4、查找条件

2.4.1、查找条件1

-name "文件名":// 区分文件大小写,并且文件名支持使用globbing    *, ?, [], [^]

eg:
[[email protected] ~]# find /etc -name "passwd"
/etc/passwd
/etc/pam.d/passwd
[[email protected] ~]# find /etc -name "passwd*"
/etc/passwd
/etc/pam.d/passwd
/etc/passwd-

-iname "文件名"  //不区分文件大小写

eg:
[[email protected] ~]# touch /etc/PASSwd
[[email protected] ~]# find /etc -name "passwd"
/etc/passwd
/etc/pam.d/passwd
[[email protected] ~]# find /etc -iname "passwd"
/etc/passwd
/etc/pam.d/passwd
/etc/PASSwd
[[email protected] ~]#

-user USERNAME: 根据属主查找

-group USERNAME: 根据属组查找

eg:
[[email protected] user]# ls -l  /tmp/user
total 0
-rw-r--r-- 1 user1 user1 0 Apr  1 00:44 user1
-rw-r--r-- 1 user2 user2 0 Apr  1 00:44 user2
-rw-r--r-- 1 user3 user3 0 Apr  1 00:44 user3
-rw-r--r-- 1 user4 user4 0 Apr  1 00:44 user4
-rw-r--r-- 1 user5 user5 0 Apr  1 00:44 user5
-rw-r--r-- 1 user6 user6 0 Apr  1 00:44 user6
[[email protected] user]# find /tmp/user -user user1 -exec ls -l {} \;
-rw-r--r-- 1 user1 user1 0 Apr  1 00:44 /tmp/user/user1
[[email protected] user]# find /tmp/user -group user5 -exec ls -l {} \;
-rw-r--r-- 1 user5 user5 0 Apr  1 00:44 /tmp/user/user5
[[email protected] user]#

-uid UID: 根据指定UID查找;

-gid GID: 根据指定GID查找;

eg:
[[email protected] user]# tail -2 /etc/passwd
user5:x:1109:1109::/home/user5:/bin/bash
user6:x:1110:1110::/home/user6:/bin/bash
[[email protected] user]# find /tmp/user -uid 1109
/tmp/user/user5
[[email protected] user]# find /tmp/user -gid 1109
/tmp/user/user5
[[email protected] user]#

-nouser: 查找没有属主的文件;

-nogroup:查找没有属组的文件;

[[email protected] user]# userdel user1
[[email protected] user]# ls -l /tmp/user
total 0
-rw-r--r-- 1  1105  1105 0 Apr  1 00:44 user1
-rw-r--r-- 1 user2 user2 0 Apr  1 00:44 user2
-rw-r--r-- 1 user3 user3 0 Apr  1 00:44 user3
-rw-r--r-- 1 user4 user4 0 Apr  1 00:44 user4
-rw-r--r-- 1 user5 user5 0 Apr  1 00:44 user5
-rw-r--r-- 1 user6 user6 0 Apr  1 00:44 user6
[[email protected] user]# find /tmp/user -nouser 
/tmp/user/user1
[[email protected] user]#

2.4.2、组合查找条件:

与:-a, 查找条件1 -a 查找条件2 -a ...

所有条件必须同时满足

eg:查找/tmp/user目录下没有属主,且文件名是user3的文件
[[email protected] user]# ls -l
total 0
-rw-r--r-- 1  1105  1105 0 Apr  1 00:44 user1
-rw-r--r-- 1 user2 user2 0 Apr  1 00:44 user2
-rw-r--r-- 1 user3 user3 0 Apr  1 00:44 user3
-rw-r--r-- 1 user4 user4 0 Apr  1 00:44 user4
-rw-r--r-- 1 user5 user5 0 Apr  1 00:44 user5
-rw-r--r-- 1 user6 user6 0 Apr  1 00:44 user6
[[email protected] user]# userdel user3
[[email protected] user]# find /tmp/user -nouser -a -name user3 -exec ls -l {} \;
-rw-r--r-- 1 1107 1107 0 Apr  1 00:44 /tmp/user/user3

或:-o, 查找条件1 -o 查找条件2 -o ...

满足其中一个条件即可

非:-not, !

-not 查找条件

# find /tmp -nouser -a -name "*centos*" -ls
# find /tmp -not \( -name "*.txt" -o -name "*.out" \) // 注意此时括号与字符中间有空格
# find /tmp -not -name "*.txt" -a -not -name "*.out"

2.4.3、查找条件(2)

-type TYPE: 根据文件类型查找

f: 普通文件

d: 目录文件

l: 符号链接文件

b: 块设备

c: 字符设备文件

p: 命令名管道文件

s: 套接字文件

-size [+|-]#UNIT:

常用单位有:k, M, G

#UNIT: #-1 < x <= #

2k:1.8k, 1.9k, 1.1k

eg:如果查找#=2k的文件:即:-size 2k 实际得到的结果是大于2-1=1k,小于等于2K的所有文件

[[email protected] tmp]# ls -lh
total 88K
drwxr-xr-x  14 root   root   4.0K Mar 29 09:34 aa
-rw-r--r--   1 root   root     51 Mar 27 09:36 aa.txt
-rw-r--r--   1 root   root    936 Mar 29 10:19 fstab
-rw-r--r--   1 root   root     32 Mar 30 01:00 grep.txt
-rw-r--r--   1 root   root    198 Mar 27 10:14 hosts
-rwx------.  1 root   root   1.2K Mar 26 20:52 ks-script-N0tmJ1
-rwxr-xr-x.  1 root   root    346 Mar 26 20:52 ks-script-N0tmJ1.log
-rw-r--r--   1 root   root     46 Mar 27 10:14 network
-rw-r--r--   1 root   root   1.6K Mar 27 09:55 passwd
-rw-r--r--   1 root   root     93 Mar 29 03:28 path
drwx------   2 root   root   4.0K Mar 29 03:49 pulse-SUFCiTfcO22x
-rw-------   1 root   root     80 Mar 27 10:17 qjtTli
-rw-r--r--   1 root   root    154 Apr  1 00:44 userad.sh
-rw-------.  1 root   root      0 Mar 26 20:01 yum.log
[[email protected] tmp]# find /tmp -size 2k -exec ls -lh {} \;
-rw-r--r-- 1 root root 1.6K Mar 27 09:55 /tmp/passwd
-rwx------. 1 root root 1.2K Mar 26 20:52 /tmp/ks-script-N0tmJ1

-#UNIT:x <= #-1

-2k: 1k, 0.9k

eg:如果#=2k,即-size -2k 表示查找的文件小于等于1k

[[email protected] tmp]# find /tmp -size -2k -exec ls -lh {} \;
-rw-r--r-- 1 root root 93 Mar 29 03:28 /tmp/path
-rw-r--r-- 1 root root 936 Mar 29 10:19 /tmp/fstab
-rw------- 1 root root 80 Mar 27 10:17 /tmp/qjtTli
-rw-r--r-- 1 user6 user6 0 Apr  1 00:44 /tmp/user/user6
-rw-r--r-- 1 user5 user5 0 Apr  1 00:44 /tmp/user/user5
-rw-r--r-- 1 user4 user4 0 Apr  1 00:44 /tmp/user/user4

+#UNIT: x > #

+2k: 2.1k, 3.1k

eg:如果k=2,-size +2k,查询到的文件时大于2k的文件

[[email protected] tmp]# find /tmp/ -size +2k -exec ls -lh {} \;
total 88K
drwxr-xr-x  14 root   root   4.0K Mar 29 09:34 aa
drwxrwxr-x   2 centos centos 4.0K Mar 29 15:11 abc
drwxr-xr-x   2 root   root   4.0K Mar 29 09:31 a_c
drwxr-xr-x   2 root   root   4.0K Mar 29 09:31 a_d
drwxr-xr-x   2 root   root   4.0K Mar 29 09:31 b_c
drwxr-xr-x   2 root   root   4.0K Mar 29 09:31 b_d

2.4.4、根据时间戳查找:天 、分钟、秒

以“天”为单位

-atime [+|-]#  //指的是文件最后被读取的时间

#: #= < x < #+1

eg:#=3,即-atime 3表示查找访问文件是第三天访问的文件

-#: x < #

#=3 即-atime -3 表示查找小于3天内访问过的文件

+#: x >= #+1

#=3 即 -atime +3 查找3天以前访问过的文件

-mtime [+|-]#  //指的是文件内容最后被修改的时间  用法同atime

-ctime [+|-]#  // //指的是文件本身最后被变更的时间   用法同atime

以“分钟”为单位用法同上atime

-amin [+|-]#

-mmin [+|-]#

-cmin [+|-]#

eg: 查找五分钟内被修改过的文件:

[[email protected] tmp]# echo test > /tmp/test1
[[email protected] tmp]# find /tmp -amin -5
/tmp
/tmp/test1
[[email protected] tmp]#

根据权限查找:

-perm [+|-]MODE

MODE: 与MODE精确匹配

eg: 查找/tmp目录下权限是644的文件

[[email protected] tmp]# find /tmp -perm 644 -exec ls -l {} \;
-rw-r--r-- 1 user6 user6 0 Apr  1 00:44 /tmp/user/user6
-rw-r--r-- 1 user5 user5 0 Apr  1 00:44 /tmp/user/user5
-rw-r--r-- 1 user4 user4 0 Apr  1 00:44 /tmp/user/user4
-rw-r--r-- 1 1105 1105 3 Apr  1 02:13 /tmp/user/user1
-rw-r--r-- 1 user2 user2 0 Apr  1 00:44 /tmp/user/user2
-rw-r--r-- 1 1107 1107 0 Apr  1 00:44 /tmp/user/user3

                +MODE:任何一类用户的权限只要能包含对其指定的任何一位权限即可;

[[email protected] tmp]# find /tmp -perm +666 -exec ls -l {} \;

total 92

drwxr-xr-x  14 root   root   4096 Mar 29 09:34 aa

-rw-r--r--   1 root   root     51 Mar 27 09:36 aa.txt

drwxrwxr-x   2 centos centos 4096 Mar 29 15:11 abc

drwxr-xr-x   2 root   root   4096 Mar 29 09:31 a_c

drwxr-xr-x   2 root   root   4096 Mar 29 09:31 a_d

drwxr-xr-x   2 root   root   4096 Mar 29 09:31 b_c

drwxr-xr-x   2 root   root   4096 Mar 29 09:31 b_d

    -MODE:每一类用户的权限都包含对其指定的所有权限;

处理动作:

-print: 默认动作,打印至屏幕;

-ls: 显示找到的文件的详细属性;

[[email protected] tmp]# find /etc/p* -ls
393449    4 drwxr-xr-x   2 root     root         4096 Mar 26 20:52 /etc/pam.d
393641    4 -rw-r--r--   1 root     root           71 Nov 22  2013 /etc/pam.d/cvs
393560    4 -rw-r--r--   1 root     root          155 Oct 15 21:14 /etc/pam.d/polkit-1
394967    4 -rw-r--r--   1 root     root          489 Oct 16 05:23 /etc/pam.d/gdm-fingerprint

-exec COMMAND {} \;    —–将查到的文件执行command操作,{} 和 \;之间有空格

[[email protected] tmp]# find /etc/passwd -exec ls -lh {} \;
-rw-r--r-- 1 root root 2.0K Apr  1 01:12 /etc/passwd

-ok COMMAND {} \;  // 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

注意:find命令会一次性找到所有符合条件的文件,并一同传递给后面的命令;但有些命令不能接受过长的参数;解决办法:

find | xargs COMMAND

时间: 2024-10-11 18:24:14

Linux 系统之文件查找工具--- locate、 find详解的相关文章

linux 系统监控、诊断工具之 top 详解

接触 linux 的人对于 top 命令可能不会陌生(不同系统名字可能不一样,如 IBM 的 aix 中叫 topas ),它的作用主要用来监控系统实时负载率.进程的资源占用率及其它各项系统状态属性是否正常. 下面我们先来看张 top 截图: (1)系统.任务统计信息: 前 8 行是系统整体的统计信息.第 1 行是任务队列信息,同 uptime 命令的执行结果.其内容如下: 01:06:48 当前时间 up 1:22 系统运行时间,格式为时:分 1 user 当前登录用户数 load avera

linux系统下文件查找

在我们实际应用中,经常需要查找某个特定的文件,或者根据文件的某个特定属性进行查找,今天小菜就给大家分享一下,linux系统下文件查找的两大利器: 1,locate:非实时查找(基于预先生成的数据库查找):模糊匹配:速度快 2,find:实时查找(遍历目录中的所有文件完成查找):精确匹配,支持众多查找标准:速度慢 一.locate 查询系统上预先生成的文件索引数据库:/var/lib/mlocate/mlocate.db 依赖于事先构建的索引:索引的构建是在系统较为空闲时自动进行(周期性任务) 管

【linux_笔记】Linux_文件查找(find)详解&&特殊权限

学习资源来自:www.magedu.com 学习记录过程中难免出现错误,如有发现,还望大神们指出. 示例操作部分有的与历史操作有关,如果先前的示例操作没有执行过的话,可能会有部分示例的操作无法执行.示例仅供参考(练习题在附录). 文件查找: locate(不常用):非实时,模糊匹配,根据全系统文件数据库进行查找,速度快:# updatedb, 手动生成文件数据库(非常耗时) find:实时,精确,支持众多查找标准,遍历指定目录中的所有文件完成查找,速度慢: 命令格式:find 查找路径 查找标准

Protobuf 文件生成工具 Prototool 命令详解

Protobuf 文件生成工具 Prototool 命令详解 简介 Prototool 是 Protobuf 文件的生成工具, 目前支持go, php, java, c#, object c 五种语言包的生成. 详情参考Github: https://github.com/uber/prototool docker 方式使用 prototool 工具 使用方式 // prototool 的使用 docker run --rm -v $(pwd):/work "uber/prototool&quo

文件查找工具locate与find

写在前面: 博客书写牢记5W1H法则:What,Why,When,Where,Who,How. 本篇主要内容: ● locate用法 ● 使用find基于文件属性进行查找 locate与find简介: locate与find都是文件查找工具(区别与grep等文本查找工具),尤其是find,可根据文件的诸多属性(如文件大小.属主属组.权限信息.修改时间等),对文件进行实时查找 locate: 1.查找默认数据库文件/var/lib/mlocate/mlocate.db,所以查找速度快,非实时,每天

文件查找及find命令详解

find 1.文件查找: 在文件系统上查找符合条件的文件的过程: 2.文件查找:locate, find locate: 非实时查找工具:依赖于事先构建的索引:索引的构建是在系统较为空闲时自动进行(周期性任务):手动更新此数据库(updatedb):查找速度快:模糊查找: find:实时查找:查找速度略慢:精确查找: 3.find命令使用方法: find [OPTION]... [查找路径] [查找条件] [处理动作] 查找路径:默认为当前路径: 查找条件:指定的查找标准,可以根据文件名.大小.

Linux系统传输文件小工具lrzsz

对于经常使用Linux系统的人员来说,少不了将本地的文件上传到服务器或者从服务器上下载文件到本地,rz / sz命令很方便的帮我们实现了这个功能,但是很多Linux系统初始并没有这两个命令.今天,我们就简单的讲解一下如何安装和使用rz.sz命令. 安装: 配置好epel源: 2.使用说明 sz命令发送文件到本地: # sz filename rz命令本地上传文件到服务器: # rz 执行该命令后,在弹出框中选择要上传的文件即可.

Linux下which、whereis、locate命令详解

which 命令 which 命令的作用是,在 PATH 变量指定的路径中搜索可执行文件的所在位置.它一般用来确认系统中是否安装了指定的软件. 命令格式: which 可执行文件名称 常用范例: 例一:确认是否安装了 gcc,可以使用如下命令: which gcc 例二:查看 cd 命令的位置路径,可以使用如下命令: which cd 命令可以是下面四种形式之一: 是一个可执行程序,就像我们所看到的位于目录/usr/bin 中的文件一样. 属于这一类的程序,可以编译成二进制文件,诸如用 C 和

linux系统/var/log目录下的信息详解

一./var目录 /var 所有服务的登录的文件或错误信息文件(LOG FILES)都在/var/log下,此外,一些数据库如MySQL则在/var/lib下,还有,用户未读的邮件的默认存放地点为/var/spool/mail 二.:/var/log/ 系统的引导日志:/var/log/boot.log例如:Feb 26 10:40:48 sendmial : sendmail startup succeeded就是邮件服务启动成功! 系统日志一般都存在/var/log下常用的系统日志如下:核心