一、find

使用语法:find  [查找目录]  [查找规则]  [查找完后执行的action]

find是根据具体目录进行搜索

1.查找目录

如果不指定查找目录,默认在当前目录下进行查找

如果需要在多个目录下查找,多个不同的目录通过空格隔开

2.查找规则

①根据文件名查找 -name

-name和-iname:后者表示不区分大小写

例如查找/tmp和/var目录下以.txt结尾的文件:find /tmp /var -name '*.txt'

②根据文件类型查找 -type

-type 文件类型,其中文件类型有

f:普通文件  d:目录文件  l:链接文件  b:块设备文件  c:字符设备文件  p:管道文件  s:socket文件

例如查找/tmp目录下的链接文件:find /tmp -type l

③根据所属用户和组查找

-user:根据属主查找

-group:根据属组查找

-nouser和-nogroup分别表示没有属主和属组,一般不允许系统中出现没有属主和属组的文件

例如查找/tmp目录下属主为oracle的文件:find /tmp -user oracle

例如查找/tmp目录下属组为phh的文件:find /tmp -grouop phh

例如查找系统中没有属主的文件:find / -nouser

④根据uid和gid查找

-uid:根据uid查找

-gid:根据gid查找

例如查找/tmp目录下uid为501的文件:find /tmp -uid 501

⑤根据大小查找 -size

size的单位可为b、c、w、k、M、G(各单位代指的含义可通过man find查看),如果不指定单位默认为b

-size 2M表示大小为2M,-size +2M表示大于2M,-size -2M表示小于2M

例如查找/tmp目录下大于1M的文件:find /tmp -size +1M

⑥根据权限查找 -perm

+  / -

⑦根据时间戳查找 -atime、-mtime、-ctime(单位均为天)

先通过stat命令查看时间戳,假设创建一个文件a.txt

[root@oldboy ~]# stat a.txt
File: `a.txt'
Size: Blocks: IO Block: regular file
Device: fd00h/64768d Inode: Links:
Access: (/-rw-r--r--) Uid: ( / root) Gid: ( / root)
Access: -- ::02.361000255 -
Modify: -- ::02.361000255 -
Change: -- ::02.361000255 -

最后三行,Access对应-atime,表示文件最后的访问时间

Modify对应-mtime,表示文件内容的最后修改时间

Change对应-ctime,表示文件状态的最后修改时间,包括大小、权限、属主属组、链接数等

例如查找/tmp目录下5天内未被访问过的文件:find /tmp -atime +5

例如查找/tmp目录下5天内被访问过的文件:find /tmp -atime -5

atime、mtime和ctime的单位为天,还有一组与它们对应的时间戳,分别为amin、mmin和cmin,单位为分钟

⑧多条件查询 -a、-o、-not

-a表示多个条件同时满足,例如查找/tmp目录下属主为oracle的.sh文件:find /tmp -user oracle -a -name '*.sh'

-o表示多个条件满足一个即可,例如查找/tmp目录下没有属主、或者没有属组的文件:find /tmp -nouser -o -nogroup

-not表示对条件取反,例如查找/tmp目录下属主不是root的文件:find /tmp -not -user root

3.查找完后执行的action

①-print:默认动作,将查询结果打印出来

[root@oldboy ~]# find -name '*.txt'
./a.txt
./test.txt
[root@oldboy ~]# find -name '*.txt' -print
./a.txt
./test.txt

②-ls:将查询结果通过ls显示出来

[root@oldboy ~]# find -name '*.txt' -ls
-rw-r--r-- root root Apr : ./a.txt
-rw-r--r-- root root Apr : ./test.txt

③-ok command \; 查找后执行命令,并询问用户是否执行

④-exec command \; 查找后直接执行命令,不询问用户

[root@oldboy ~]# find -name '*.txt' -ok chown phh {} \;
< chown ... ./a.txt > ? y
< chown ... ./test.txt > ? y
[root@oldboy ~]# ll *.txt
-rw-r--r--. phh root Apr : a.txt
-rw-r--r--. phh root Apr : test.txt
[root@oldboy ~]# find -name '*.txt' -exec chown root {} \;
[root@oldboy ~]# ll *.txt
-rw-r--r--. root root Apr : a.txt
-rw-r--r--. root root Apr : test.txt

上面例子中的{ }代表查找到的文件,\和;之间没有空格。

二、locate

locate命令用来查找文件或目录。创建Linux系统时会自动创建一个数据库/var/lib/mlocate/mlocate.db,并且每天自动更新一次,这个数据库中包含本地所有文件的信息。locate命令要比find -name快得多,原因在于它不搜索具体目录,而是搜索数据库。但是locate的查找不是实时的,有时会找到已经被删除的数据,或者刚刚建立的文件无法查找到,这是因为数据库文件没有更新。为了避免这种情况,在使用locate之前需先使用updatedb命令手动更新数据库。

整个locate工作其实是由四部分组成的:

/usr/bin/updatedb:主要用来更新数据库,通过crontab自动完成的

/usr/bin/locate:查询文件位置

/etc/updatedb.conf:updatedb的配置文件

/var/lib/mlocate/mlocate.db:存放文件信息的文件

使用语法:locate [参数] 模式

locate支持模糊匹配,例如查询文件名中包含passwd的文件:locate passwd

三.which

which会在PATH环境变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。即使用which命令,可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。

四.whereis

whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s),如果省略参数,则返回所有信息。

whereis和locate一样,都是通过数据库进行搜索。

cat: /bin/cat /usr/share/man/man1/cat..gz /usr/share/man/man1p/cat.1p.gz
[root@oldboy mlocate]# which passwd
/usr/bin/passwd
[root@oldboy mlocate]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man5/passwd..gz /usr/share/man/man1/passwd..gz
[root@oldboy mlocate]# locate passwd
/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
/etc/security/opasswd
/lib64/security/pam_passwdqc.so
/lib64/security/pam_unix_passwd.so
/usr/bin/gpasswd
/usr/bin/kpasswd
……

linux文件查找-find和locate的更多相关文章

  1. Linux文件查找find和locate

    目 录 第1章 locate文件查找    1 1.1 概述    1 1.2 locate文件查找的特性    1 第2章 文件查找概述    1 第3章    1 3.1 文件名查找    1 3 ...

  2. linux文件查找(find,locate)

    文件查找: locate:       非实时,模糊匹配,查找是根据全系统文件数据库进行的: # updatedb, 手动生成文件数据库 速度快   find:       实时       精确   ...

  3. Linux文件查找命令find用法整理(locate/find)

    Linux文件查找查找主要包括:locate和find 1.locate 用法简单,根据数据库查找,非实时,用法: locate FILENAME 手动更新数据库(时间可能较长) updatedb 2 ...

  4. linux 文件查找,which,whereis,locate,find

    linux 文件查找,which,whereis,locate,find 一:which 主要用于查找可执行命令的所在位置: 如图,查找命令 ls的目录: 二:whereis 主要用于查找命令的帮助文 ...

  5. Linux文件查找.md

    Linux 文件查找 在Linux系统的查找相关的命令: which 查看可执行文件的位置 whereis 查看文件的位置 locate 配合数据库查看文件位置 find 实际搜寻硬盘查询文件名称 w ...

  6. linux文件查找find命令

    linux文件查找find命令 1.文件查找 基本介绍 在文件系统上查找符合条件的文件 linux上常见的文件查找工具:find命令 查找分类 实时查找 精确查找 基本语法 find  [option ...

  7. Linux文件查找命令find,xargs详述【转】

    转自:http://blog.csdn.net/cxylaf/article/details/4069595 转自http://www.linuxsir.org/main/?q=node/137 Li ...

  8. Linux学习总结(十五)文件查找 which whereis locate find

    which命令 用于查找并显示给定命令的绝对路径,环境变量PATH中保存了查找命令时需要遍历的目录.which指令会在环境变量$PATH设置的目录里查找符合条件的文件.也就是说,使用which命令,就 ...

  9. Linux文件查找命令具体解释-which whereis find locate

    原创BLog.转载请注明出处 http://blog.csdn.net/hello_hwc? viewmode=contents which命令 首先查看man which的说明 which - sh ...

随机推荐

  1. 新装的centos怎样显示中文界面

    默认的显示英文界面,即使各种配置中都选择的chinese也没用,默认显示的还是英文. 要在终端输入 vim ~/.bashrc 编辑本用户配置文件 打开后最后一行加入 export LANG=&quo ...

  2. 1python简介

    02 python和03 python的区别: python:优美,清晰,简单. python2x:    源码重复,混乱,冗余.    源码不规范.     python3x: 源码整合,优美,清晰 ...

  3. ip通信第七周

    局域网的优点:1.具有较高的数据传输率 2.具有较低的误码率 3.具有较低的时延 4.能进行广播 网桥的基本特征:1.网桥在数据链录层上实现局域网互连 2.网桥能够互连两个采用不同数据链路层协议,不同 ...

  4. k8s-N0.4-service

    本章目录 k8s中的三种网络 service的构建及参数说明 一  k8s的三种网络 在k8s集群中,k8s是有三种网络类型的,下面我们看一下下面这个图 1 节点网络:顾名思义,节点网络就是你每台物理 ...

  5. 核心思想:决定你是富人还是穷人的11条标准(有强烈的赚钱意识,这也是他血液里的东西,太精彩了)good

    原文地址:决定你是富人还是穷人的11条标准作者:谢仲华 1.自我认知 穷人:很少想到如何去赚钱和如何才能赚到钱,认为自己一辈子就该这样,不相信会有什么改变. 富人:骨子里就深信自己生下来不是要做穷人, ...

  6. Libvmi实现分析

    LibVMI是一个专注于读写虚拟机内存的自省库,它能够监视虚拟机底层的运行细节并将其还原.LibVMI支持对Xen及KVM虚拟化平台上的运行虚拟机进行自省操作,针对KVM虚拟化平台,LibVMI对QE ...

  7. C# 使用MongoDB遇到的问题

    错误:缺少 System.Runtime.InteropServices.RuntimeInformation.dll version = 4.0.0 解决方法: 下载了System.Runtime. ...

  8. gitbook build/serve 失败,Error: ENOENT: no such file or directory, stat ...

    我使用的 gitbook 版本 CLI version: 2.3.2 GitBook version: 3.2.3 在使用 gitbook 生成文档时,发现编译偶尔不规律性地出现错误 d:\Mine\ ...

  9. table的thead,tbody,tfoot

    为了让大表格(table)在下载的时候可以分段的显示,就是说在浏览器解析HTML时,table是作为一个整体解释的,使用tbody可以优化显示. 如果表格很长,用tbody分段,可以一部分一部分地显示 ...

  10. 文件中间修改内容遇到OSEerror

    for i in f: 实际上是一直在调用 f.next() .(表明在交互模式下不能使用f.tell())从报错来看,是说 f.next() 方法被调用的时候,f.tell() 方法不可以被调用.