Linux文件查找工具之find “大宝剑”

简介:

一、文件查找工具常用软件

locate:

    locate命令其实是find -name的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/locatedb,这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。   

find:

    find命令用来在指定目录下查找文件,通过遍历指定的目标目录,实时查找符合指定属性的文件。可以结合正则表达式(REGular EXPressio)来匹配模式。

二、软件常用参数及使用方式

locate:

    使用格式:locate [OPTION]... PATTERN...

        常用参数:

            -i:忽略大小写

 wKiom1bgPWGTjPsyAABDnEiqYOI752.png

        实例:

            过滤/etc/下以sh开头的文件

1
2
3
4
# locate /etc/sh
/etc/shadow
/etc/shadow-
/etc/shells

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

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

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

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

1、查找路径

    默认为当前路径,可以指定系统内的任意路径,但不建议使用/

2、查找条件

(1)基本查找条件

a、用户、用户组及文件名查找

-name "文件名":文件名支持使用globbing

    glob:文件名通配;快速引用多个文件;文件名整体匹配度检测;

元字符:基于元字符可编写匹配模式(pattern);

    *:匹配任意长度的任意字符;

    ?:匹配任意单个字符;

    [ ]:匹配指定集合内的任意单个字符;

[a-z], [A-Z]:不区分字符大小写;

[0-9]

[a-z0-9]

    [[:upper:]]:所有大写字母;

    [[:lower:]]:所有小写字母;

    [[:digit:]]:所有的数字;

    [[:alpha:]]:所有字母;

    [[:alnum:]]:所有字母和数字;

    [[:space:]]:空白字符;

    [[:punct:]]:标点符号;

            [^ ]:匹配指定集合外的任意单个字符;


实例:

1
# find /etc -name "passwd*"

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


实例:

1
2
3
4
5
# find /tmp -iname "*yum*"
/tmp/yum .log
/tmp/YUM .LOG
# find /tmp -name "*yum*"
/tmp/yum .log

-user USERNAME:根据属主查找

-group USERNAME:根据属组查找


实例:

1
# find /var -user root -o -group mail

-uid UID:根据指定UID查找

-gid GID:根据指定GID查找


实例:

1
2
3
# find /tmp -uid 3323 -ls
2346806    0 -rw-rw-r--   1 mageedu  mageedu         0 Mar 10 09:36  /tmp/mageedu
2346812    0 -rw-rw-r--   1 mageedu  mageedu         0 Mar 10 09:36  /tmp/testfile

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

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

    -nouser与-nogroup参数主要用在当公司员工离职后,虽然账户删除,但是他所有权限的文件还存在,并且以UID的形式来标识属主与属组,既当有uid有这个用户相同时就会可以查看此文件,所以需要删除此类文件。


实例:

1
2
3
# find /tmp -nouser -nogroup -ls
2346806    0 -rw-rw-r--   1 3323     3323            0 Mar 10 09:36  /tmp/mageedu
2346812    0 -rw-rw-r--   1 3323     3323            0 Mar 10 09:36  /tmp/testfile

b、文件类型查找

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

f: 普通文件

d: 目录文件

l: 符号链接文件

b: 块设备

c: 字符设备文件

p: 命令名管道文件

s: 套接字文

实例:

1
# find /tmp -type d -ls

c、文件大小

    -size [+|-]#UNIT:

常用单位有:k, M, G

#UNIT: #-1 < x <= #

            2k指1k-2k

-#UNIT:x <= #-1

    -2k:指0k-1k

        +#UNIT: x > #

    +2k:指2k到正无穷


实例:

1
# find /etc/ -type f -size +1

d、时间戳查找

    以“天”为单位

     -atime [+|-]#

-mtime [+|-]#

-ctime [+|-]#

            #: 例如:今天为3月10日,3就是3月7日到3月8日(注意天是24小时制)

            -#: 例如:今天为3月10日,-3就是三天内指,3月7日的现在时间到现在的时间。

            +#: 例如:今天为3月10日,+3就是三天前之前指,3月7日前

    以“分钟”为单位

-amin [+|-]#

        -mmin

-cmin

实例:

1
2
# find /etc -not -user root -not -user hadoop -mtime -7
# find / -nouser -nogroup -atime -3

e、权限查找

    根据权限查找:

-perm [+|-]MODE

    MODE: 与MODE精确匹配

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

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

#这里是指包含,例如:-444 指在属主、属组、其他用户中只要包含读权限就可以。

实例:

1
2
# find /etc/init.d/ -perm -113  #此处指所有用户都有执行权限,其他用户有写权限的文件或目录
# find /etc/ -type f -not -perm +222 #此处指所有用户都没有写权限

(2)组合查找条件

    组合查找条件:

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

    所有条件必须同时满足

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

    满足其中一个条件即可

非:-not, !   

    -not 查找条件

实例:

1
2
# find / \( -nouser -o -nogroup \) -a -atime -3
# find /etc/ -not \( -user root -o -user hadoop \) -a -mtime -7

3、处理动作

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

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

-exec COMMAND {} \;

-ok COMMAND {} \;

            #exec与ok的区别:ok会提供交互式,让你确认。而exec则不需要;

实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
# find /tmp -iname "*yum*" -type f -ls
    134    0 -rw-r--r--   1 root     root            0 Mar 10 09:32  /tmp/yum .log
    137    0 -rw-r--r--   1 root     root            0 Mar 10 09:32  /tmp/YUM .LOG
 
# find /tmp -iname "*yum*" -type f -exec ls -l {} \;
-rw-r--r-- 1 root root 0 Mar 10 09:32  /tmp/yum .log
-rw-r--r-- 1 root root 0 Mar 10 09:32  /tmp/YUM .LOG
 
# find /tmp -iname "*yum*" -type f -exec echo {} >>/tmp/test.file \;
 
# find /tmp -iname "*yum*" -type f -ok echo {} >>/tmp/test.file \;
echo  ...  /tmp/yum .log > ? y
echo  ...  /tmp/YUM .LOG > ? y










本文转自 赵大鑫 51CTO博客,原文链接:http://blog.51cto.com/xinzong/1749465,如需转载请自行联系原作者
目录
相关文章
|
20天前
|
Linux 数据安全/隐私保护 Windows
命令方式:window向linux传文件
【10月更文挑战第6天】本文介绍了如何在Linux系统中通过命令`ip a`获取IP地址,并在Windows系统下使用CMD命令行工具和SCP命令实现文件传输。示例展示了如何将D盘中的`mm.jar`文件上传至IP地址为192.168.163.122的Linux系统的/up/目录下,最后在Linux系统中确认文件传输结果。
203 65
|
8天前
|
运维 安全 Linux
Linux中传输文件文件夹的10个scp命令
【10月更文挑战第18天】本文详细介绍了10种利用scp命令在Linux系统中进行文件传输的方法,涵盖基础文件传输、使用密钥认证、复制整个目录、从远程主机复制文件、同时传输多个文件和目录、保持文件权限、跨多台远程主机传输、指定端口及显示传输进度等场景,旨在帮助用户在不同情况下高效安全地完成文件传输任务。
84 5
|
8天前
|
Linux Shell 数据库
Linux文件查找新姿势:总有一种你没见过
【10月更文挑战第18天】文件查找是Linux用户提升工作效率的重要技能。本文介绍了几种实用的文件查找方法,包括基础的`find`命令、快速的`locate`和`mlocate`、高效的`fd`工具、以及结合`grep`和`rg`进行内容搜索。此外,还提供了编写Shell脚本和使用图形界面工具的建议,帮助你更灵活地管理文件。
36 3
|
9天前
|
监控 Java Linux
Linux系统之安装Ward服务器监控工具
【10月更文挑战第17天】Linux系统之安装Ward服务器监控工具
25 5
Linux系统之安装Ward服务器监控工具
|
11天前
|
JSON JavaScript Linux
Linux系统之安装cook菜谱工具
【10月更文挑战第15天】Linux系统之安装cook菜谱工具
29 2
Linux系统之安装cook菜谱工具
|
19天前
|
Linux 开发工具 数据安全/隐私保护
linux异常一:feng 不在 sudoers 文件中,此事将被报告。yum提示Another app is currently holding the yum lock; waiting for
这篇文章介绍了在CentOS 7系统中安装Docker时遇到的两个常见问题及其解决方法:用户不在sudoers文件中导致权限不足,以及yum被锁定的问题。
30 2
linux异常一:feng 不在 sudoers 文件中,此事将被报告。yum提示Another app is currently holding the yum lock; waiting for
|
3天前
|
Linux 数据库
linux 全局搜索文件
在 Linux 系统中,全局搜索文件常用 `find`、`locate` 和 `grep` 命令。`find` 根据文件名、类型、大小、时间戳等条件搜索;`locate` 通过预构建的数据库快速查找文件;`grep` 在文件中搜索特定文本,常与 `find` 结合使用。选择合适的命令取决于具体需求。
|
6天前
|
Linux 开发工具 Perl
Linux命令替换目录下所有文件里有"\n"的字符为""如何操作?
【10月更文挑战第20天】Linux命令替换目录下所有文件里有"\n"的字符为""如何操作?
22 4
|
5天前
|
运维 安全 Linux
Linux文件清空的五种方法总结分享
每种方法各有优势,选择最合适的一种或几种,可以极大提高您的工作效率。更多有关Linux系统管理的技巧与资源,欢迎访问,持续提升您的运维技能。
40 1
|
15天前
|
Linux Shell 数据库
Linux文件查找新姿势:总有一种你没见过
文件查找是Linux用户提升工作效率的关键技能。本文介绍了几种不常见的文件查找方法,包括使用`find`结合`column`美化输出、利用`locate`和`mlocate`快速查找、编写Shell脚本自动化任务、使用现代工具`fd`以及结合`grep`和`rg`进行内容搜索。此外,还推荐了几款图形界面搜索工具。掌握这些技巧,让你的文件查找更加高效便捷。
44 2