Linux --find 实例详解

来源:互联网 发布:php网站安全维护 编辑:程序博客网 时间:2024/05/31 19:47

          LINUX 文件查找是有接触过LINUX的人都会碰到的内容,如何快速精准的定位到我们所需要的文件呢?采用find是一个不错的办法

LINUX 常用的文件查找有find , locate , 那这两者有什么区别呢?

          1. locate  非实时查找,它依赖于文件数据库,这个数据库由(crontab)来创建更新,可以手动updatedb生成数据库,这个过程会比较慢。但locate也有它的优点,查询速度快

         2. find  实时查找,精确,可以遍历指定目录中所有文件来完成查找,而且支持很多的查找标准和正则。因为是实时查找,所以同locate相比,速度会慢些。但是它功能强大,所以我们这里重点也只介绍find的一些常见用法。


1. 查找格式

 find 查找路径 查找标准  查找后的action

 默认值:查找路径默认当前目录, 查找标准默认为所有, action 默认为显示打印


2. 匹配标准

(1)   -name  : ‘FILENAME’ 根据文件名精确查找 , 区分大小写, 文件名可以是通配符 * ?[ ] 等。 

           -iname :     同name,不区分大小写

eg1

[root@localhost find_tdir]# lstdir1  Tdir1  tdir2  tfile1  Tfile1  tfile2[root@localhost find_tdir]# find -name "tfile1"./tfile1[root@localhost find_tdir]# find -iname "tdir1"./tdir1./Tdir1[root@localhost find_tdir]# find -name "*dir1"./tdir1./Tdir1
    (2)  -regex  :基于正则表达式进行的文件名匹配

eg2

[root@localhost find_tdir]# find -regex ".*dir.*"./tdir2./tdir1./Tdir1
  (3)-user , -group , -uid , -gid , -nouser , -nogroup  :分别是居于用户名,组名,用户IP,组ID,没有属主,没有属组 查找文件

eg3

[root@localhost find_tdir]# ls -lh

总用量 12Kdrwxr-xr-x 2 root root 4.0K 5月  10 10:22 tdir1drwxr-xr-x 2 root root 4.0K 5月  10 10:23 Tdir1drwxr-xr-x 2 root root 4.0K 5月  10 10:22 tdir2-rw-r--r-- 1 pylt pylt    0 5月  10 10:21 tfile1  #属主,属组都是pylt-rw-r--r-- 1 root pylt    0 5月  10 10:23 Tfile1  #属组是pylt-rw-r--r-- 1 root root    0 5月  10 10:21 tfile2[root@localhost find_tdir]# id root  #id 查看用户账号uid ,gid 等信息uid=0(root) gid=0(root) 组=0(root)[root@localhost find_tdir]# id pyltuid=501(pylt) gid=501(pylt) 组=501(pylt)[root@localhost find_tdir]# find -user pylt./tfile1[root@localhost find_tdir]# find -group pylt./tfile1./Tfile1[root@localhost find_tdir]# find -uid 0../tfile2./tdir2./tdir1./Tdir1./Tfile1[root@localhost find_tdir]# find -gid 501./tfile1./Tfile1
我把pylt的用户和组删除一下,就会产生一些没有用户和组的文件

[root@localhost find_tdir]# ll -lh总用量 12Kdrwxr-xr-x 2 root root 4.0K 5月  10 10:22 tdir1drwxr-xr-x 2 root root 4.0K 5月  10 10:23 Tdir1drwxr-xr-x 2 root root 4.0K 5月  10 10:22 tdir2-rw-r--r-- 1  501  501    0 5月  10 10:21 tfile1-rw-r--r-- 1 root  501    0 5月  10 10:23 Tfile1-rw-r--r-- 1 root root    0 5月  10 10:21 tfile2[root@localhost find_tdir]# find -nouser ./tfile1[root@localhost find_tdir]# find -nogroup./tfile1./Tfile1
 (4) -type :根据文件类型查找

              f --> 文件  ,  d-->目录 ,  c -->字符设备, b --> 块设备,  l -->链接文件, p-->管道文件,  s--> socket文件

下面就简单举两个例子

eg4

[root@localhost find_tdir]# find -type f./tfile2./tfile1./Tfile1[root@localhost find_tdir]# find -type d../tdir2./tdir1./Tdir1
   (5) -size : 根据文件大小查找,可以直接跟单位K,M,G, 不跟单位则默认是字节

+ 5K  :表示大于5K ;-  5K  : 表示小于5K ;   5K  : 表示等于5K

我用dd创建固定大小的文件,下面我们看下实例:

eg5

[root@localhost find_tdir]# ls -lh总用量 44K-rw-r--r-- 1 root root  20K 5月  10 11:02 ddf1-rw-r--r-- 1 root root  10K 5月  10 11:03 ddf2drwxr-xr-x 2 root root 4.0K 5月  10 10:22 tdir1drwxr-xr-x 2 root root 4.0K 5月  10 10:23 Tdir1drwxr-xr-x 2 root root 4.0K 5月  10 10:22 tdir2-rw-r--r-- 1  501  501    0 5月  10 10:21 tfile1-rw-r--r-- 1 root  501    0 5月  10 10:23 Tfile1-rw-r--r-- 1 root root    0 5月  10 10:21 tfile2[root@localhost find_tdir]# find -size 10k./ddf2[root@localhost find_tdir]# find -size +10k./ddf1[root@localhost find_tdir]# find -size -10k../tfile2./tdir2./tdir1./Tdir1./tfile1./Tfile1
   (6) 条件组合

      - a  相当于 &&  :条件 同时满足

      -o  相对于 || :任意一个条件满足

      -not  相对于 !: 否定

eg6

[root@localhost find_tdir]# ls -lh总用量 44K-rw-r--r-- 1 root root  20K 5月  10 11:02 ddf1-rw-r--r-- 1 root root  10K 5月  10 11:03 ddf2drwxr-xr-x 2 root root 4.0K 5月  10 10:22 tdir1drwxr-xr-x 2 root root 4.0K 5月  10 10:23 Tdir1drwxr-xr-x 2 root root 4.0K 5月  10 10:22 tdir2-rw-r--r-- 1  501  501    0 5月  10 10:21 tfile1-rw-r--r-- 1 root  501    0 5月  10 10:23 Tfile1-rw-r--r-- 1 root root    0 5月  10 10:21 tfile2[root@localhost find_tdir]# find -type f -a -size +10k./ddf1[root@localhost find_tdir]# find -not -type d./ddf1./tfile2./tfile1./ddf2./Tfile1[root@localhost find_tdir]# find -size +10k -o -type d../ddf1./tdir2./tdir1./Tdir1
     (7)  根据时间戳格式匹配

           -atime 访问时间

           -mtime 修改时间

           -ctime 改变时间

 + 5 代表大于5天 ;  -5   代表5天之内 ;   5  代表刚好5天

我用touch 修改ddf2的mtime 为04041212

eg7 

[root@localhost find_tdir]# touch -t 04041212 ddf2[root@localhost find_tdir]# stat ddf1  File: "ddf1"  Size: 20480     Blocks: 40         IO Block: 4096   普通文件Device: fd00h/64768dInode: 137517      Links: 1Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)Access: 2014-05-10 11:02:52.153882782 +0800Modify: 2014-05-10 11:02:52.154906549 +0800Change: 2014-05-10 11:02:52.154906549 +0800[root@localhost find_tdir]# stat ddf2  File: "ddf2"  Size: 10240     Blocks: 24         IO Block: 4096   普通文件Device: fd00h/64768dInode: 137518      Links: 1Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)Access: 2014-04-04 12:12:00.000000000 +0800Modify: 2014-04-04 12:12:00.000000000 +0800Change: 2014-05-10 11:26:24.074880282 +0800[root@localhost find_tdir]# [root@localhost find_tdir]# find -mtime +7./ddf2[root@localhost find_tdir]# find -mtime -7 -a -size +10k./ddf1
   (8) 根据文件权限查找

-perm   644  精确匹配 ;  /644  只有一位匹配就满足 ;  -644  文件权限完全包含才644才满足

eg8

[root@localhost find_tdir]# ls -lh

总用量 44K-rw-r--r-- 1 root root    0 5月  10 11:22 04240920-rw-r--r-- 1 root root  20K 5月  10 11:02 ddf1-rw-r--r-- 1 root root  10K 4月   4 12:12 ddf2drwxr-xr-x 2 root root 4.0K 5月  10 10:22 tdir1drwxr-xr-x 2 root root 4.0K 5月  10 10:23 Tdir1drwxr-xr-x 2 root root 4.0K 5月  10 10:22 tdir2-rw-r--r-- 1  501  501    0 5月  10 10:21 tfile1-rw-r--r-- 1 root  501    0 5月  10 10:23 Tfile1-rw-r--r-- 1 root root    0 5月  10 10:21 tfile2[root@localhost find_tdir]# find -perm 544[root@localhost find_tdir]# find -perm 644./ddf1./tfile2./04240920./tfile1./ddf2./Tfile1[root@localhost find_tdir]# find -perm 777[root@localhost find_tdir]# find -perm /777../ddf1./tfile2./tdir2./04240920./tdir1./Tdir1./tfile1./ddf2./Tfile1

3 . 常用的action

     -print 显示

     -ls 类似每一个文件的详细

     -ok  command {} \;    对匹配到的所有文件进行操作,\; 为固定格式,{} 为匹配到的内容

     -exec command {} \;  同-ok  ;区别是-ok 每次操作都需要用户确认,而-exec 则不需要。通常-exec 比较常用

[root@localhost find_tdir]# ls -lh总用量 44K-rw-r--r-- 1 root root    0 5月  10 11:22 04240920-rw-r--r-- 1 root root  20K 5月  10 11:02 ddf1-rw-r--r-- 1 root root  10K 4月   4 12:12 ddf2drwxr-xr-x 2 root root 4.0K 5月  10 10:22 tdir1drwxr-xr-x 2 root root 4.0K 5月  10 10:23 Tdir1drwxr-xr-x 2 root root 4.0K 5月  10 10:22 tdir2-rw-r--r-- 1  501  501    0 5月  10 10:21 tfile1-rw-r--r-- 1 root  501    0 5月  10 10:23 Tfile1-rw-r--r-- 1 root root    0 5月  10 10:21 tfile2[root@localhost find_tdir]# find -type f -exec chmod 777 {} \;[root@localhost find_tdir]# ls -lh总用量 44K-rwxrwxrwx 1 root root    0 5月  10 11:22 04240920-rwxrwxrwx 1 root root  20K 5月  10 11:02 ddf1-rwxrwxrwx 1 root root  10K 4月   4 12:12 ddf2drwxr-xr-x 2 root root 4.0K 5月  10 10:22 tdir1drwxr-xr-x 2 root root 4.0K 5月  10 10:23 Tdir1drwxr-xr-x 2 root root 4.0K 5月  10 10:22 tdir2-rwxrwxrwx 1  501  501    0 5月  10 10:21 tfile1-rwxrwxrwx 1 root  501    0 5月  10 10:23 Tfile1-rwxrwxrwx 1 root root    0 5月  10 10:21 tfile2













      

0 0
原创粉丝点击