Linux系统文件查找locate和find命令工具使用

讲到Linux的文件查找,首先大家一般在Windows中有过查找过文件,我们知道window是以文件名结尾来识别文件的,使用一些通配符*.doc,*.txt来检索一类文件,缩小范围,实现快速定位文件,在Linux中,也有文件查找的需要不过实现的方式将更加灵活;

1)locate工具 

2)find工具

1.locate

Linux中也有像window中那样模糊匹配的查找方式,那就是locate工具下面来详细介绍locate;

  

  (1)工作原理:

     locate查找文件不是对当前文件系统遍历查找,而是在locate自己的数据库locateDB中查找,根据系统负载状况,只需要在某个特定的时间点来遍历整个文件系统,把所有遍历的文件名放到自己的数据库中,这样在使用locate工具查找时只需要检索自己的数据库文件,速度是非常快的,但是又会带来一下几个问题;

       a:数据库更新时需要遍历整个系统,然后记录在locateDB中,遍历整个系统时,需要消耗大量的系统资源;所以系统一般只在特定的时间自动更新,也可以手动;

       b:locate在自己的数据库文件中检索,不用在系统中检索,查找速度是非常快的;

       c:系统中的文件操作是很频繁的,创建移动复制删除一个文件后,要想查找,对于这些最近更新的文件,是没办法准确定位的,因为locate工具检索的是自己的数据库文件,locateDB数据库文件只在特定的时间更新,所以很难实现实时查找;


       d:locate工具查找文件时只能对文件名进行globe通配匹配条件,没办法根据文件的其它属性针对查找,也就是说很难实现文件的精确匹配查找;

 

  (2)locate命令工具使用:

        命令:locate

语法:

  locate [option]…pattern…

        -i:ignore-case

-d:locateDB directory

-r:regex

-n #:只显示前#个匹配查找到的文件;

-c:统计查找到的文件个数;

   (2)locateDB数据库文件在系统中的位置:

        /var/lib/mlocate/mlocate.db

[root@xia7 ~]# ll /var/lib/mlocate/mlocate.db 
-rw-r----- 1 root slocate 3223706 Aug 16 09:12 /var/lib/mlocate/mlocate.db
[root@xia7 ~]#

   (3).如何手动更新locatdb? 

        updatedb

[root@xia7 ~]# updatedb 
[root@xia7 ~]#

2.find

    前面所说的locate工具虽然速度检索快,但是不能实现实时查找和特定文件属性查找,Linux系统中还有一款强

大的查找工具find,能够完成更多的高级查找条件,实现准确定位文件;

   (1)find工作原理:

  find工具可以指定特定路径和查找条件,对指定路径下所有路径根据查找条件完整遍历,查找完以后还能做相应的处理动作;工具功能非常强大;简述特性如下:

       a:find是对指定路径下完整遍历,默认不指定是当前目录,因为查找的是系统路径,所以是实时查找;

       b:由于查找的路径是系统完整路径,尤其是文件系统很大时,查找起来系统负载压力会很大,同时查找速度相对于locate的数据库文件查找有点慢;

       c:find的查找条件很多可以基于正则表达式以及其他文件属性,权限,大小,时间戳,属主属组,文件类型作为匹配查找条件,这样就能对文件实现精确定位查找;

       b:而且对查找到的文件还能多相应的处理动作,一般默认是print,还能多其他很多对文件操作的处理命令;这样对文件的处理能力得到进一步加强;

   (2)find命令工具使用:

        命令:find 

        语法:

            find [option]…[查找路径]  [查找条件] [处理动作]

        常用选项:

            -P:查找的文件如果是链接文件,将查找软链接文件指向的位置;

 

查找路径:

   不写默认从当前路径向下查找

可以指定路径

查找条件:

    a:根据文件名和inode查找:

                -name filename :根据文件名查找;

-iname filename :查找文件名时忽略大小写;

-inum inode:根据inode号查找;

-regex "pattern" :根据模式匹配查找文件;

[root@xia7 ~]# find /etc -name passwd
/etc/passwd
/etc/pam.d/passwd

[root@xia7 ~]# find /etc -iname SHADOW
/etc/shadow

[root@xia7 ~]# ll -i /etc/passwd
134347177 -rw-r--r-- 1 root root 2069 Aug 15 10:23 /etc/passwd
[root@xia7 ~]# find / -inum 134347177
/etc/passwd
[root@xia7 ~]# 

[root@xia7 ~]# find / -regex ".*passwd$"
/usr/bin/lppasswd
/usr/bin/passwd
/usr/bin/gpasswd
/usr/bin/smbpasswd
/usr/bin/vncpasswd
/usr/bin/kdepasswd
/usr/sbin/lpasswd
/usr/sbin/chpasswd

b:根据属主属组查找:

   

-user username:根据属主查找文件;

-group groupname:根据属组查找文件;

-uid userid:根据用户uid查找文件;

-gid usergid:根据用户gid查找文件;

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

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

[root@xia7 ~]# find /home -user xia
/home/xia
/home/xia/.mozilla
/home/xia/.mozilla/extensions
/home/xia/.mozilla/plugins
/home/xia/.bash_logout
/home/xia/.bash_profile
[root@xia7 ~]# 

[root@xia7 ~]# find /home -group xiashixiang
/home/xiashixiang
/home/xiashixiang/.mozilla
/home/xiashixiang/.mozilla/extensions
/home/xiashixiang/.mozilla/plugins


[root@xia7 ~]# find /home/ -uid 1000
/home/mageedu
/home/mageedu/.mozilla
/home/mageedu/.mozilla/extensions
/home/mageedu/.mozilla/plugins


[root@xia7 ~]# userdel xiashixiang
[root@xia7 ~]# find /home -nouser 
/home/xiashixiang
/home/xiashixiang/.mozilla/plugins
/home/xiashixiang/.bash_logout
/home/xiashixiang/.bash_profile
/home/xiashixiang/.bashrc
[root@xia7 ~]# ll /home/xiashixiang/.bashrc 
-rw-r--r-- 1 1002 1002 231 Nov 20  2015 /home/xiashixiang/.bashrc
[root@xia7 ~]#

c:根据文件类型查找:

   

-type f:查找文件类型为普通文件;

-type d:查找文件类型为目录文件;

-type l:查找文件类型为软连接文件;

-type b:查找文件类型为块设备文件;

-type c:查找文件类型为字符设备文件;

-type s:查找文件类型为套接字文件;

-type p:查找文件类型为管道文件;

[root@xia7 ~]# find /home -type d
/home
/home/mageedu
/home/mageedu/.mozilla

[root@xia7 ~]# find /run/ -type s
/run/abrt/abrt.socket
/run/NetworkManager/private
/run/gssproxy.sock
/run/systemd/notify
[root@xia7 ~]# ll /run/systemd/notify 
srwxrwxrwx 1 root root 0 Aug 16  2016 /run/systemd/notify
[root@xia7 ~]# 

[root@xia7 ~]# find / -type p
/run/dmeventd-client
/run/dmeventd-server
[root@xia7 ~]# ll /run/dmeventd-client 
prw------- 1 root root 0 Aug 16 15:48 /run/dmeventd-client
[root@xia7 ~]#

d:根据文件大小查找文件:

    

-size [+|-]#[k|M|G]

-size 5k :表示查找文件大小4k-5k之间的所有文件;

-size -5k :表示查找文件大小为4k以下的文件;

-size +5k :表示查找文件大小为5k以上的所有文件;

[root@xia7 dir]# ll -h /dir/
total 28M
-rw-r--r-- 2 root root   15 Aug 16 15:57 ceshi
-rw-r--r-- 2 root root   15 Aug 16 15:57 ceshi_hlink
-rw-r--r-- 1 root root 2.0M Aug 16 16:20 file2
-rw-r--r-- 1 root root 3.0M Aug 16 16:21 file3
-rw-r--r-- 1 root root 4.0M Aug 16 16:21 file4
-rw-r--r-- 1 root root 5.0M Aug 16 16:21 file5
-rw-r--r-- 1 root root 6.0M Aug 16 16:21 file6
-rw-r--r-- 1 root root 7.0M Aug 16 16:22 file7
[root@xia7 dir]# find /dir/ -size 4M
/dir/file4
[root@xia7 dir]# find /dir/ -size +4M
/dir/file5
/dir/file6
/dir/file7
[root@xia7 dir]# find /dir/ -size -4M
/dir/
/dir/ceshi
/dir/ceshi_hlink
/dir/file2
/dir/file3
[root@xia7 dir]#

e:根据文件的时间戳查找文件:

 -atime -mtime -ctiem :以天为单位24小时;

 -amin -mmin -cmin :表示以分钟为单位;


 -atime [+|-]#

 -atime 5 :表示查找的文件访问时间为5-6天之内的文件;

 -atime +5 :表示查找的文件访问时间为6天以上的文件;

 -atime -5 :表示查找的文件访问时间为5天以内的文件;

 其他时间表示的区间用法一样;

[root@xia7 dir]# find / -atime 3
find: ‘/proc/1558/task/1558/fd/6’: No such file or directory
find: ‘/proc/1558/task/1558/fdinfo/6’: No such file or directory
find: ‘/proc/1558/fd/6’: No such file or directory
find: ‘/proc/1558/fdinfo/6’: No such file or directory
/usr/bin/kill
/usr/share/man/man1/sort.1.gz
/usr/share/man/man1p/sort.1p.gz
/usr/share/man/man3/sort.3pm.gz
/etc/systemd/journald.conf
/var/log/messages-20160813
/var/log/cron-20160814
/var/log/maillog-20160814
/var/log/secure-20160814
/var/log/spooler-20160814
/var/spool/abrt/ccpp-2016-08-03-05:17:40-3996/not-reportable
[root@xia7 dir]# stat /usr/bin/kill
  File: ‘/usr/bin/kill’
  Size: 29264     	Blocks: 64         IO Block: 4096   regular file
Device: 803h/2051d	Inode: 588838      Links: 1
Access: (0755/-rwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-08-13 11:34:01.328118074 +0800
Modify: 2015-11-20 20:37:48.000000000 +0800
Change: 2016-07-28 01:45:05.517002449 +0800
 Birth: -
[root@xia7 dir]# date
Tue Aug 16 16:30:15 CST 2016
[root@xia7 dir]# 

[root@xia7 dir]# find /etc/init.d/ -atime -3
/etc/init.d/
/etc/init.d/functions
/etc/init.d/network
[root@xia7 dir]# stat /etc/init.d/network 
  File: ‘/etc/init.d/network’
  Size: 6630      	Blocks: 16         IO Block: 4096   regular file
Device: 802h/2050d	Inode: 7807        Links: 1
Access: (0755/-rwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-08-15 19:25:33.748523241 +0800
Modify: 2015-09-16 19:51:07.000000000 +0800
Change: 2016-07-28 01:45:13.605002630 +0800
 Birth: -
[root@xia7 dir]# date
Tue Aug 16 16:33:17 CST 2016
[root@xia7 dir]# 

[root@xia7 dir]# find /etc/init.d/ -atime +7
/etc/init.d/README
/etc/init.d/netconsole
[root@xia7 dir]# stat /etc/init.d/netconsole 
  File: ‘/etc/init.d/netconsole’
  Size: 2989      	Blocks: 8          IO Block: 4096   regular file
Device: 802h/2050d	Inode: 7806        Links: 1
Access: (0755/-rwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-08-03 02:56:47.264675229 +0800
Modify: 2015-09-16 19:51:07.000000000 +0800
Change: 2016-07-28 01:45:13.605002630 +0800
 Birth: -
[root@xia7 dir]# date 
Tue Aug 16 16:35:11 CST 2016
[root@xia7 dir]#

f:根据权限查找文件:

  

  -perm[/|-] mode 

  -perm 644 :查找权限为644的文件,精确查找;

  -perm -444 :查找每组权限只要有读权限的文件;

  -perm /222 :查找每组权限只要有一组权限是写权限的文件;

  -perm -020 :表示查找属组有写权限的文件,0表示忽略权限位;

[root@xia7 dir]# find /home -perm 644
/home/mageedu/.bash_logout
/home/mageedu/.bash_profile
/home/mageedu/.bashrc
/home/xia/.bash_logout
/home/xia/.bash_profile
/home/xia/.bashrc
/home/xiashixiang/.bash_logout
/home/xiashixiang/.bash_profile
/home/xiashixiang/.bashrc
[root@xia7 dir]# ll /home/xiashixiang/.bashrc 
-rw-r--r-- 1 1002 1002 231 Nov 20  2015 /home/xiashixiang/.bashrc
[root@xia7 dir]# 

[root@xia7 dir]# find /tmp -perm -222
/tmp
/tmp/.X11-unix
/tmp/.font-unix
/tmp/.ICE-unix
/tmp/.Test-unix
/tmp/.XIM-unix
/tmp/systemd-private-6ca5fb894d61414da9daecbef334b022-cups.service-q0ZQQD/tmp
[root@xia7 dir]# ll /tmp/.font-unix -d
drwxrwxrwt. 2 root root 6 Jul 28 01:45 /tmp/.font-unix
[root@xia7 dir]# 

[root@xia7 dir]# ll
total 27656
-rw-r--r-- 2 root root      15 Aug 16 15:57 ceshi
-rw-r--r-- 2 root root      15 Aug 16 15:57 ceshi_hlink
-rw-r--r-- 1 root root 2097152 Aug 16 16:20 file2
-r-xrwxr-x 1 xia  xia  3145728 Aug 16 16:21 file3
-rw-r--r-- 1 root root 4194304 Aug 16 16:21 file4
-rw-r--r-- 1 root root 5242880 Aug 16 16:21 file5
-rw-r--r-- 1 root root 6291456 Aug 16 16:21 file6
-rw-r--r-- 1 root root 7340032 Aug 16 16:22 file7
[root@xia7 dir]# su - xia
Last login: Tue Aug 16 16:55:09 CST 2016 on pts/0
[xia@xia7 ~]$ find /dir -perm /111
/dir
/dir/file3
[xia@xia7 ~]$

  

 

g:组合查找条件:

   与:-a :并且的关系,条件之间可以省略;

或:-o :条件之间是或者的关系;

非:-not,!:对条件取反;

根据多个相同条件之间可以使用德.摩根定律,这样对后面的动作处理对象有个明确的范围;

非( A -a B ) = (非A) -o (非B)

非( A -o B ) = (非A) -a (非B)

root@xia7 dir]# find /home/ -type d -a -nouser
/home/xiashixiang
/home/xiashixiang/.mozilla
/home/xiashixiang/.mozilla/extensions
/home/xiashixiang/.mozilla/plugins
[root@xia7 dir]# ll /home/xiashixiang/ -d
drwx------ 3 1002 1002 74 Aug 15 10:23 /home/xiashixiang/
[root@xia7 dir]#


h:处理动作:

   -print:这是默认的处理动作。显示到stdout;

-ls :相当于于执行ls -l 命令查看匹配到的文件详细信息;

-delete:对查找的文件删除,注意:动作很危险,在工作中谨慎使用,避免误操作;

-fls file:对查找的文件ls -l的详细输出保存到指定文件中;

            

            -ok COMMAND {} \;对查找到的文件,每个文件都执行CMMMAND命令,后面的{}花括号表示引用查找

                到的文件自身;“\;“表示特定固定格式;-ok,表示对每条执行都进行确认问答,直接

                回车表示忽略;

            -exce COMMAND {} \; -exce:表示忽略全部执行前的确认,直接执行命令;

            

find | xargs COMMAND – :命令一般对参数会有限制,这时超过限制参数量,命令会报错,为了避免报错,

                可以使用xargs命令,把查找到的结果,全部通过管道传递给xargs命令,在做相应的操作命令;

[root@xia7 dir]# find /home/ -type d -a -nouser -ls
 28066    0 drwx------   3 1002     1002           74 Aug 15 10:23 /home/xiashixiang
67380614    0 drwxr-xr-x   4 1002     1002           37 Jul 28 01:43 /home/xiashixiang/.mozilla
134369665    0 drwxr-xr-x   2 1002     1002            6 Jun 10  2014 /home/xiashixiang/.mozilla/extensions
201368685    0 drwxr-xr-x   2 1002     1002            6 Jun 10  2014 /home/xiashixiang/.mozilla/plugins
[root@xia7 dir]#

                   

           

           

          

原创文章,作者:xiashixiang,如若转载,请注明出处:http://www.178linux.com/36454

(0)
xiashixiangxiashixiang
上一篇 2016-08-18
下一篇 2016-08-18

相关推荐

  • httpd2.2基础安装

    编译安装前,首先要确认开发包组已经装上。 开发包组: Developments tools server platform development(centos 7) 并且将apr 与 apr-unil 装上。这是httpd 可移植运行所必须用到的组件.这里举例说明的是httpd2.2版本。 若是安装httpd2.4以上版本的话,还要安装pcre库。pcre…

    2017-04-24
  • LVS类型及工作原理

    lvs工作原理 lvs(Linux Virtual Server),工作于layer4,其原理是根据请求报文的目标IP和PORT将其转发至后端主机集群中的某一提供服务的主机,具体转发到哪一台后端主机需要由挑选算法来决定。通俗来说,lvs的功能是通过在内核空间的netfilter上的INPUT链上的ipvs实现的,当报文由物理网络接口进入主机后,ipvs将流经…

    Linux干货 2016-12-05
  • 终端类型

        终端是什么?终端不仅仅是显示器,还包括与之配套的键盘。在linux中表现为一个字符设备。Linux与用户交互时,直接向终端设备发送数据,数据就会被发送到屏幕上,用户通过键盘写的数据,就是向这个字符设备写数据,数据会同步显示到显示器上,回车后数据才会被linux执行命令。 终端类型 1串行口终端  &n…

    Linux干货 2016-10-17
  • 马哥教育21期网络班—第三周课程+练习

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 who |cut -d" " -f1 |sort -u 2、取出最后登录到当前系统的用户的相关信息。 id `who | tail -n …

    Linux干货 2016-07-12
  • 作业管理

    作业管理 ·Linux的作业控制:          前台作业:通过终端启动,且启动后一直占据终端;          后台作业:可通过终端启动,但启动后即转入后台运行(释放终端) ·如何让作业运行于…

    Linux干货 2016-09-11
  • SHELL脚本编程之变量的种类

    变量 在进行脚本编程的时候,经常会使用到不同类型的变量,根据变量的生效范围,可大致分为以下的几类: 本地变量:生效范围为当前shell进程,对当前shell之外的其他shell进程,包括当前shell进程的子shell进程都是无效的,它的作用域就是当前shell进程 环境变量:生效范围是当前shell进程及其子进程 局部变量:生效范围是当前shell进程中某…

    Linux干货 2016-08-12

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-19 11:37

    find命令是笔试中常见的考点,需要我们多加练习,予以掌握,课堂练习需要按时完成,通过练习,可以巩固我们所学的东西。