linux学习笔记:locate,find命令总结

linux中locate,find命令都是在文件系统中查找符合条件的文件,但是locate是利用数据库来搜寻数据,所以速度相对比较快。

locate依赖于事先构建好的索引库,每天系统在空闲时间都会通过周期性任务自动完成索引库的更新,手动更新索引库就需要执行命令updatedb,也正是因为依赖于数据库,造成locate查询出来的结果可能会跟执行查询命令时的实际情况有出入,并且其为模糊查找。

locate命令格式:

locate [OPTION]... [PATTERN]...

常用选项:

-b,--basename:只匹配路径中的基名;

-c,--count:统计出共有多少个符合条件的文件;

-r, --regexp REGEXP:查询时用基本的正则表达式;

-i, --ignore-case:忽略大小写查询;

注意:索引构建过程需要遍历整个根文件系统,及其消耗资源。

find是实时查找工具,通过遍历指定起始路径下文件系统层级结构完成文件查找,其查找速度比较慢,但为精确查找。

find用法:

格式:find [OPTIONS] [查找起始路径] [查找条件] [处理动作]

find [PATH] [option] [action]

查找起始路径:指定具体搜索目标起始路径,默认为当前目录;

查找条件:指定的查找标准,可以根据文件名,大小,类型,从属关系,权限等标准进行,默认为找出指定路径下的所有文件;

处理动作:对符合条件的文件做出操作,如删除,重命名等

以下对查找条件做出略微详细的说明:

根据文件名查找:

-name pattern

-iname pattern:同-name,但是不区分大小写;

此处的pattern支持glob风格的通配符,如*,?,[],[^]等;

-regex pattern:基于正则表达式查找,匹配到的是整个路径,而非文件名;

根据文件从属关系查找:

-user uname:查找属主为指定用户的文件;

-group gname:查找属组为指定组的文件;

-uid n:查找属主为指定UID的文件;

-gid n:查找属组为指定GID的文件;

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

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

根据文件类型查找:

-type TYPE:

f:普通文件;

d:目录文件;

l:符号链接文件;

b:块设备文件;

c:字符设备文件;

p:管道文件;

s:套接字文件

根据文件大小查找:

-size [+|-]#UNIT        ;其中#表示数字,UNIT为单位

常用的单位为:k,M,G

范围举例:

3M:(2,3]

-3M:[0,2]

+3M:(3,oo)            ;oo表示无穷大

根据时间戳查找:

以“天”为单位:

-atime    [+|-]#

-atime # :#为数字,意思为在#天之前的’一天之内‘访问过文件;[#,#-1)

-atime +# :列出在#天之前(不包含#天本身)被访问过的文件;(oo,#+1]

-atime -#:列出在#天之内(含#本身)被访问过的文件;(#,0]

如下图:#=4时的情况

-mtime与-ctime的用法与-atime相同,可以参考其用法;

以“分钟”为单位:

-amin:

-mmin:

-cmin:

这三个条件的用法与上边的-atime用法相同,可以参考其用法;

-newer file:file为一个已经存在的文件,此条件为列出比file还要新的文件名;

根据权限查找:

-perm [/|-]mode

mode:精确权限匹配;

/mode:任何一类用户(u,g,o)的权限中的任何一位(r,w,x)符合条件即满足;

9位权限之间存在“或”关系;

-mode:每一类用户(u,g,o)的权限中的每一位(r,w,x)同时符合条件即满足;

9位权限之间存在“与”关系;

注意:这些条件之间可以组合起来:

与:-a ,默认组合逻辑

或:-o

非:-not,!

处理动作:

-print:输出至标准输出,默认动作;

-ls:类似于对查找到的文件执行“ls -l”命令,输出文件的详细信息;

-delete:删除查找到的文件;

-fls /PATH/TO/SOMEFILE:把查找到的所有文件的长格式信息保存至指定文件中;

-ok COMMAND {} \;    :对查找到的每个文件执行由COMMAND表示的命令,每次操作都由用户确认;

-exec COMMAND {} \;    :对查找到的每个文件执行由COMMAND表示的命令,但用户不用确认;

{}表示对find命令执行结果的引用        \;为固定格式

注意:find传递查找到的文件路径至后边的命令时,是先查找出所有符合条件的文件路径,并一次性传递给后边的命令,但是有些命令不能接受过长的参数,此时命令执行会失败,而另外一种方式可以规避此问题:

find | xargs COMMAND

xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样.这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去.在有些系统中,使用-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高;而使用xargs命令则只有一个进程.另外,在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定

时间: 2024-10-10 16:11:24

linux学习笔记:locate,find命令总结的相关文章

Linux学习笔记--locate命令(文件搜索命令)

locate,定位的意思,作用是让使用者可以快速的搜寻系统中是否有指定的文件. locate 命令特点: 1) "locate"的速度比"find"快,因为它并不是真的查找文件,而是查数据库. 2) 新建的文件,我们立即用"locate"命令去查找,一般是找不到的, 因为数据库的更新不是实时的,数据库的更新时间由系统维护. 3) "locate"命令所搜索的后台数据库在"/var/lib/mlocate"这

Linux学习笔记之sed命令

讷于言而敏于行    --<论语·里仁> sed命令是一个用在对输入流进行处理的文本处理工具.掌握它能够更好地帮助管理Linux和处理日志文件. 用法: sed [option] 'command' 输入流 常用option: -n:安静模式,一般如果没有加-n选项,输入流中所有的行将会被列出,加入-n后只会列出'command'处理过的行.一般与 command中p命令连用. -r:默认sed只是支持一般的正则表达式,如果加上-r参数表示让sed支持扩展的正则表达式. -i:插入,如果输入流

linux学习笔记23--时间命令date和cal

在linux环境中,不管是编程还是其他维护,时间是必不可少的,也经常会用到时间的运算,熟练运用date命令来表示自己想要表示的时间,肯定可以给自己的工作带来诸多方便. 1.命令格式: date [参数]... [+格式] 2.命令功能: date 可以用来显示或设定系统的日期与时间. 3.命令参数: 必要参数: %H 小时(以00-23来表示). %I 小时(以01-12来表示). %K 小时(以0-23来表示). %l 小时(以0-12来表示). %M 分钟(以00-59来表示). %P AM

LInux学习笔记之常用命令

以下命令主要是平时用到的命令,对于一些经常用到的,就收集资料,归纳一下. 指令目录: 1.yum 2.wget 3.tar 1.yum命令: yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载.安装.yum提供了查找.安装.删除某一个.一组甚至全部软件包的命令,

Linux学习笔记(三)-Shell命令机制

切换命令行:ctrl+alt+f1-f6 切换到图形界面:ctrl+alt+f7 ls-list(win下的dir) 白色:普通文件 蓝色:目录文件 绿色:可执行文件 执行步骤: 输入ls 在相关目录下去找命令程序(path,环境变量:/etc/environment),whereis+命令:查找该命令的可执行文件的位置 基于shell的基本类库Bash 底层的交互 GNU,FSF,Bash,Coreutils 来自为知笔记(Wiz)

Linux学习笔记之——基础命令学习

1.find 按照名字查找:find / -name file_name 2.zip压缩 1) 我想把一个文件repartition.txt和一个目录invader压缩成为amateur.zip: # zip -r amateur.zip repartition.txt invader 2)我下载了一个aptly.zip文件,想解压缩: # unzip aptly.zip 3)我当前目录下有abc1.zip,abc2.zip和abc3.zip,我想一起解压缩它们: # unzip abc\?.z

linux学习笔记30--网络命令ifconfig

许多windows非常熟悉ipconfig命令行工具,它被用来获取网络接口配置信息并对此进行修改.Linux系统拥有一个类似的工具,也就是ifconfig(interfaces config).通常需要以root身份登录或使用sudo以便在Linux机器上使用ifconfig工具.依赖于ifconfig命令中使用一些选项属性,ifconfig工具不仅可以被用来简单地获取网络接口配置信息,还可以修改这些配置.用ifconfig命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在.要想将上述的配

Linux学习笔记之grep命令及sed 命令相关选项

#grep  强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来. 根据模式,搜索文本 ,并将符合模式的文本行显示出来,常与正则表达式相结合使用. [[email protected] ~]# grep --h 用法: grep [选项]... PATTERN [FILE]... 在每个 FILE 或是标准输入中查找 PATTERN. 默认的 PATTERN 是一个基本正则表达式(缩写为 BRE). 例如: grep -i 'hello world' menu.h main.c

Linux学习笔记——文本管理命令及相关选项

文本处理: cut  echo  sort  uniq  wc tr 文本查看: cat tac  more less tail head 文本处理 #cut   文本输出 [[email protected] ~]# cut --help 用法:cut [选项]... [文件]... Print selected parts of lines from each FILE to standard output. Mandatory arguments to long options are m

马哥linux学习笔记:htop命令使用详解

htop工具在centos官方yum源仓库中是不提供的,但在epel的yum源仓库中是有的,所以我们可以通过源码编译安装htop,也可以设置epel的yum源来用yum命令安装htop,设置epel的yum源方法为: 首先,下载epel官方网站提供的rpm包,然后安装,就可以设置epel的yum源直接使用了: centos6: wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm centos7: