前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux命令4-find、locate

Linux命令4-find、locate

作者头像
皮大大
发布2021-03-01 11:23:42
9040
发布2021-03-01 11:23:42
举报
文章被收录于专栏:机器学习/数据可视化

Linux命令4-find、locate

  • find
  • locate

find-查找文件

命令简介

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

代码语言:javascript
复制
find [指定查找目录] [查找规则] [查找后执行的动作]
  1. 查找路径:指定具体目标路径,默认为当前目录
  2. 查找条件:指定的查找标准,可以是文件名、大小、类型、权限等标准进行;默认为找出指定路径下的所有文件
  3. 执行动作:对符合条件的文件做操作,默认输出至屏幕
代码语言:javascript
复制
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

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

普通查找条件
代码语言:javascript
复制
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结尾的全部文件,并进行删除
根据文件路径查找
代码语言:javascript
复制
find /root -path "*local*"
根据文件名查找
代码语言:javascript
复制
find . -name "*.md"    # 查找以md结尾的文件
find . -iname "*.md"   # 不区分大小写

注意通配符的使用:

代码语言:javascript
复制
find . -name "hello?"  # 匹配任意单个字符
find . -name "[ab].sh"  # 匹配括号里面的一个字符
find . -name "*hello*"  # 匹配任意一个或多个字符
根据深度搜索
代码语言:javascript
复制
find . -maxdepth 3 -type f # 向下最大搜索限制为3
find . -mindepth 2 -type f # 搜索距离当前目录至少两个目录的所有文件
根据uid或gid搜索
代码语言:javascript
复制
find . -uid 700   # 查找uid是700的文件
find . gid 1000  # 查找gid是1000的文件
根据时间查找

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

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

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

代码语言:javascript
复制
stat /etc/passwd

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

代码语言:javascript
复制
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

吉字节

代码语言:javascript
复制
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:对条件取反
代码语言:javascript
复制
与:-a
或:-o
非:-not, !
代码语言:javascript
复制
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来表示。

代码语言:javascript
复制
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中用户(组)及用户权限的问题,可以查找相关的文件:

代码语言:javascript
复制
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{} \;进行结果的输出
代码语言:javascript
复制
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命令是查不到最近的数据,如果想查询需要先更新数据库:

代码语言:javascript
复制
updatedb  # 更新数据库
命令格式

locate命令的一般格式为:

代码语言:javascript
复制
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

匹配完整路径名(默认)

使用案例
代码语言:javascript
复制
$ 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结尾的文件
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-2-7,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Linux命令4-find、locate
  • find-查找文件
    • 命令简介
      • 普通查找条件
        • 根据文件路径查找
          • 根据文件名查找
            • 根据深度搜索
              • 根据uid或gid搜索
                • 根据时间查找
                  • 根据大小查找
                    • 根据逻辑判断条件查找
                      • 根据用户及用户权限查找
                        • 符号{}的使用
                        • locate
                          • 命令简介
                            • 命令格式
                              • 命令选项
                                • 使用案例
                                相关产品与服务
                                数据库
                                云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                                领券
                                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档