Linux命令4-find、locate

皮大大 2021-03-01 15:08:39
linux 命令 locate 4-find


Linux命令4-find、locate

  • find
  • locate

find-查找文件

命令简介

find命令用于在指定目录中查找文件,命令格式为:

find [指定查找目录] [查找规则] [查找后执行的动作]
  1. 查找路径:指定具体目标路径,默认为当前目录
  2. 查找条件:指定的查找标准,可以是文件名、大小、类型、权限等标准进行;默认为找出指定路径下的所有文件
  3. 执行动作:对符合条件的文件做操作,默认输出至屏幕
find pathname [选项] [-print] [-exec -ok command] {} \;

主要的参数是:

参数

说明

pathname

所查找的文件路径;用点.来表示当前目录,用/来表示系统根目录

-print

将匹配的文件输出到标准输出

-exec

find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为command{} ;注意{}和\;之间的空格

-ok

和-exec类似,只是在操作之前会询问用户

主要的选项说明:

选项

说明

-name

-name filename:按照名字来查找

-perm

按照执行权限来查找

-user

-user username:按照文件属性来查找

-group groupname

-group groupname:按照所属组来查找

-mtime -n、+n

-n、+n:按照文件更改时间,-n表示n天之内,+n指的是n天以前

-atime

按照访问时间来查

-ctime

按照创建时间来查;-n、+n:-n指的是n天之内,+n指的是n天以前

-newer f1 !f2

查找更改时间比f1新,但是比f2旧的文件

-size n[c]

查找长度是n块(n个字节)的文件

-type b/d/c/p/l/f

查找块设备、目录、字符设备、管道、符号链接、普通文件

普通查找条件

find . # 列出当前目录及子目录下的全部文件及文件夹
find /root -name "*.txt" # 查找root目录下以txt结尾的文件
find /root -iname "*.txt" # 同上,但是忽略大小写
find . -name dog* -o -name cat* # 当前目录下查找以dog或者cat开始的文件
# find . \( -name dog* -o -name cat* \)
find /home ! -name "*.md" # 找出home目录下不是以md结尾的文件
find . -type [fldcbs] # [类型参数: f普通文件 l符号链接 d目录 c字符设备 b块设备 s套接字]
find -name hello* # 查找hello开头的文件
find -name hello* fprint file # 在当前目录下查找hello开头的文件,并输出到file文件中
find . -type f -exec ls -l {} \; # 查找当前目录下的所有普通文件
find . -type f -name ".md" -delete # 找出md结尾的全部文件,并进行删除

根据文件路径查找

find /root -path "*local*"

根据文件名查找

find . -name "*.md" # 查找以md结尾的文件
find . -iname "*.md" # 不区分大小写

注意通配符的使用:

find . -name "hello?" # 匹配任意单个字符
find . -name "[ab].sh" # 匹配括号里面的一个字符
find . -name "*hello*" # 匹配任意一个或多个字符

根据深度搜索

find . -maxdepth 3 -type f # 向下最大搜索限制为3
find . -mindepth 2 -type f # 搜索距离当前目录至少两个目录的所有文件

根据uid或gid搜索

find . -uid 700 # 查找uid是700的文件
find . gid 1000 # 查找gid是1000的文件

根据时间查找

Linux文件系统文件中每个文件都有3种时间戳:

  • 访问时间(-atime/天,-amin/分钟):用户最近一次访问时间。
  • 修改时间(-mtime/天,-mmin/分钟):文件最后一次修改时间。
  • 变化时间(-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间。

使用stat命令来查看一个文件的时间信息:

stat /etc/passwd

通过时间查找文件的例子:

find . -type f -atime -7 # 搜索最近7天被访问过的文件
find . -type f -atime 7 # 搜索恰好在7天前被访问的所有文件
find . -type f -atime +7 # 搜索超过7天被访问的文件
find . -type f -amin +10 # 超过10分钟访问的文件
find . -type f -newer hello.txt # 找出比hello.txt修改时间更长的所有文件

根据大小查找

Linux系统中文件大小单元:

符号

大小

b

块,512字节

c

字节

w

字(2个字节)

k

千字节

M

兆字节

G

吉字节

find . -type f -size +10k # type指定类型为f(文件),大于10k
find . -type f -size 10k # type指定类型为f(文件),刚好为10k
find . -type f -size -10k # type指定类型为f(文件),小于10k
find . -empty # 列出长度为0的文件

根据逻辑判断条件查找

根据3种逻辑判断条件来进行查找:

  • -a:连接两个不同的条件,同时满足条件
  • -o:连接两个不同的条件,满足其中一个
  • -not:对条件取反
与:-a
或:-o
非:-not, !
find . -name "*.md" -a -user root # and
find /tmp -not -user root # tmp目录下,用户不是root

根据用户及用户权限查找

Linux中文件具有3种权限:读、写、可执行

权限

对文件的影响

对目录的影响

对应大小

r(读取)

可读取文件内容

可列出目录内容

4

w(写入)

可修改文件内容

可在目录中创建删除内容

2

x(执行)

可作为命令执行

可访问目录内容

1

目录必须拥有 x 权限,否则无法查看其内容

Linux中的权限分配给3种用户:user、group、other

  • U:User
  • G:Group
  • O:Other

每个文件的权限基于UGO进行设置;权限三位一组(rwx),同时需授权给三种角色(UGO);

每个文件拥有一个所属用户和所属组,对应UGO,不属于该文件所属用户或所属组使用O来表示。

drwxr-xr-x 5 peter staff 160 3 5 2020 good-good-study

解释上面目录属性:

  • d:表示目录,同一位置如果为-则表示为普通文件
  • rwxr-xr-x:表示分配给3种用户的权限,以此是ugo;则对应为:user的权限rwx(4+2+1=7),group的权限r-x(4+0+1=5),other的权限r-x(4+0+1=5)
  • 5:表示文件夹的链接数量,可以理解为目录子目录的数量
  • peter:表示用户名;staff:表示peter所属的组名;其他人角色默认不显示
  • 160:表示该文件夹占据的字节数
  • 3 5 2020:文件创建时间
  • good-good_study:目录名或者文件名

理解了上面Linux中用户(组)及用户权限的问题,可以查找相关的文件:

find . -type f -perm 777 # 查找权限为777 的文件
find . -type f -name ".md" ! -perm 644 # 查找当前目录下全部不是644的md文件
find . -type f -user peter # 查找peter拥有的全部文件
find . -type f -group staff # 查找用户组staff的全部文件

符号{}的使用

ind命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为’command’ { } ;,注意{ }和\;之间的空格。

  • 先通过find命令查找出结果
  • 再通过-exec{} \;进行结果的输出
find . -type f -exec ls -l {} \; # 前面是找出文件,后面是输出文件到终端()
find ./ -mtime -1 -type f -exec ls -l {} \; # 查找当前修改过的文件(不会询问)
find ./ -mtime -1 -type f -ok ls -l {} \; # ok会询问是否输出

总结:

  • -exec:直接执行动作,不会询问
  • -ok:执行动作之前先询问

locate

命令简介

locate 可以很快速的搜寻档案系统内是否有指定的档案。locate 因为是只去检索索引数据库,所以在比 find 全盘检索要快很多。

locate是透过update程序将硬盘中的所有档案和目录资料先建立一个索引数据库,在 执行loacte时直接找该索引,查询速度会较快

locate命令是查不到最近的数据,如果想查询需要先更新数据库:

updatedb # 更新数据库

命令格式

locate命令的一般格式为:

locate [option] [pattern]

命令选项

选项

说明

-A, --all

只显示匹配所有模式的条目

-b, --basename

只匹配路径名的基本名称

-c, --count

只显示找到的条目的数目

-d, --database DBPATH

使用 DBPATH,而非默认数据(即:/var/lib/mlocate/mlocate.db)

-e, --existing

只显示当前存在的文件条目

-L, --follow

当文件存在时跟随蔓延的符号链接(默认)

-h, --help

显示帮助信息

-i, --ignore-case

忽略大小写区别

-l, --limit, -n LIMIT

限制为 LIMIT项目的输出(或 计数)

-m, --mmap

被忽略,用于向后兼容

-P, --nofollow, -H

当检查文件时不跟随蔓延的符号链接

-0, --null

输出时以 NUL 分隔项目

-S, --statistics

不搜索项目,显示有关每个已用数据库的统计信息

-q, --quiet

不报告关于读取数据库的错误消息

-r, --regexp REGEXP

搜索基本正则表达式 REGEXP 而不是模式

--regex

模式是扩展正则表达式

-s, --stdio

被忽略,用于向后兼容

-V, --version

显示版本信息

-w, --wholename

匹配完整路径名(默认)

使用案例

$ locate /home/hello # 指定目录下查找hello开头的文件
$ locate hello # 查询hello开头的文件
$ locate -n 10 python # 限制输出10条和python相关的条目
$ locate -i -n 5 passwd # 不区分大小写
$ locate -r ^/var/lib/rpm # 使用正则表达式:^表示开始的符号
$ locate -r zip$ # 以zip结尾的文件

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

版权声明
本文为[皮大大]所创,转载请带上原文链接,感谢
https://cloud.tencent.com/developer/article/1794720

  1. 【计算机网络 12(1),尚学堂马士兵Java视频教程
  2. 【程序猿历程,史上最全的Java面试题集锦在这里
  3. 【程序猿历程(1),Javaweb视频教程百度云
  4. Notes on MySQL 45 lectures (1-7)
  5. [computer network 12 (1), Shang Xuetang Ma soldier java video tutorial
  6. The most complete collection of Java interview questions in history is here
  7. [process of program ape (1), JavaWeb video tutorial, baidu cloud
  8. Notes on MySQL 45 lectures (1-7)
  9. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  10. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  11. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  12. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  13. 【递归,Java传智播客笔记
  14. [recursion, Java intelligence podcast notes
  15. [adhere to painting for 386 days] the beginning of spring of 24 solar terms
  16. K8S系列第八篇(Service、EndPoints以及高可用kubeadm部署)
  17. K8s Series Part 8 (service, endpoints and high availability kubeadm deployment)
  18. 【重识 HTML (3),350道Java面试真题分享
  19. 【重识 HTML (2),Java并发编程必会的多线程你竟然还不会
  20. 【重识 HTML (1),二本Java小菜鸟4面字节跳动被秒成渣渣
  21. [re recognize HTML (3) and share 350 real Java interview questions
  22. [re recognize HTML (2). Multithreading is a must for Java Concurrent Programming. How dare you not
  23. [re recognize HTML (1), two Java rookies' 4-sided bytes beat and become slag in seconds
  24. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  25. RPC 1: how to develop RPC framework from scratch
  26. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  27. RPC 1: how to develop RPC framework from scratch
  28. 一次性捋清楚吧,对乱糟糟的,Spring事务扩展机制
  29. 一文彻底弄懂如何选择抽象类还是接口,连续四年百度Java岗必问面试题
  30. Redis常用命令
  31. 一双拖鞋引发的血案,狂神说Java系列笔记
  32. 一、mysql基础安装
  33. 一位程序员的独白:尽管我一生坎坷,Java框架面试基础
  34. Clear it all at once. For the messy, spring transaction extension mechanism
  35. A thorough understanding of how to choose abstract classes or interfaces, baidu Java post must ask interview questions for four consecutive years
  36. Redis common commands
  37. A pair of slippers triggered the murder, crazy God said java series notes
  38. 1、 MySQL basic installation
  39. Monologue of a programmer: despite my ups and downs in my life, Java framework is the foundation of interview
  40. 【大厂面试】三面三问Spring循环依赖,请一定要把这篇看完(建议收藏)
  41. 一线互联网企业中,springboot入门项目
  42. 一篇文带你入门SSM框架Spring开发,帮你快速拿Offer
  43. 【面试资料】Java全集、微服务、大数据、数据结构与算法、机器学习知识最全总结,283页pdf
  44. 【leetcode刷题】24.数组中重复的数字——Java版
  45. 【leetcode刷题】23.对称二叉树——Java版
  46. 【leetcode刷题】22.二叉树的中序遍历——Java版
  47. 【leetcode刷题】21.三数之和——Java版
  48. 【leetcode刷题】20.最长回文子串——Java版
  49. 【leetcode刷题】19.回文链表——Java版
  50. 【leetcode刷题】18.反转链表——Java版
  51. 【leetcode刷题】17.相交链表——Java&python版
  52. 【leetcode刷题】16.环形链表——Java版
  53. 【leetcode刷题】15.汉明距离——Java版
  54. 【leetcode刷题】14.找到所有数组中消失的数字——Java版
  55. 【leetcode刷题】13.比特位计数——Java版
  56. oracle控制用户权限命令
  57. 三年Java开发,继阿里,鲁班二期Java架构师
  58. Oracle必须要启动的服务
  59. 万字长文!深入剖析HashMap,Java基础笔试题大全带答案
  60. 一问Kafka就心慌?我却凭着这份,图灵学院vip课程百度云