文件的查找一般有两种方法:locate命令和find命令。由于locate的功能有限,本文主要介绍find命令的使用。只是对locate命令做简单的介绍。

locate命令

1、命令的特点

Locate的命令是模糊查找。而且由于它是在database中查找,并不是在系统上查找所以它属于非实时性查找,查找并不精确,但是查找速度很快。其database可以用updatedb命令来生成。此命令的功能有限。

2、使用格式

locate KEYWORD

例如:你要搜索passwd这个文件就可以使用直接在命令行模式下输入

# locate passwd

find命令

1、命令特点

Find命令是精确查找,可指定查找路径,由于它是在系统上查找所有查找速度慢。

2、使用格式

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

(1)  查找路径

如果不指定查找路径,find默认在当前路径下搜索,当然find命令的查找路径可以指定多个,例如你可以同时指定在/etc/var目录下查找passwd

#find /etc /var passwd

(2)  查找条件

-name “FILENAME”

-iname “FILENAME”

这是按照文件名查找,-name表示区分文件的大小写,-iname表示忽略大小写,并且都支持文件名的通配。例如:

#find /etc -name “passwd”

这表示查找/etcpasswd文件,是精确查找,而且明确区分大小写。

#find /etc –name “*passwd”

这表示查找以passwd结尾的文件

#find /etc –iname “passwd”

这条命令表示忽略大小写,即:Passwd PASSWDpasswd等都可以搜索到。

              -user USERNAME

-group GROPNAME

                 这表示按照文件名的属主和属组进行查找。

                 例如:#find /etc –user redhat

                 这表示在/etc下查找属主是redhat的文件,同理:

                 #find /etc –group redhat查找的是属组是redat的文件。

              -uid UID

              -gid GID

这表示当用户没有属主属组的时候,可以根据用户ID号和组ID号进行查找。

             -nouser

              -nogroup

                 这是查找没有属主和属组的文件。例如:

                 #find /tmp –nouser 表示查找tmp目录下没有属主的文件。

             -type [d|f|l|b|c|p|s]

                 表示可以根据文件的类型来查找。例如:

                  #find /etc –type d 表示查找/etc下的所有目录。

             -size [-/+]#(#表示数字,数字后面的单位可以是M,K,B)

                 表示按照文件的大小来搜索,数字的前面也可以加+/-

例如:#find /etc –size 2k 表示查找幅度不大于1个单位的文件,此  命令表示:查找/etc下大于1k2k之间的文件。同理:

                 #find /etc –size +2k 表示查找大于2k的文件。

#find /etc –size -2k  表示查找小于2k的文件。

             -atime [+/-]#

             -mtime [+/-]#

             -ctime [+/-]#

                表示按照文件的访问、修改、改变时间进行查找。其单位是天。

             -amin [+/-]#

             -mmin [+/-]#

             -cmin [+/-]#

                      也表示按照文件的访问、修改、改变时间进行查找。但是其单位是分钟。

                      例如:#find /tmp –mtime 2 表示到当前时间恰好2天修改过的文件。

                            #find /tmp –mtime -2 表示在2天内修改过的文件。

                  #find /tmp –mtime +2 表示2天之前修改过的文件。

             -perm [//-]mode

                  表示按照文件的权限进行查找。

                       Mode:表示精确匹配。例如:#find /etc –perm 222 这表示查找所有用户的权限必须是222的文件

                       /mode:表示任何一位匹配都行。例如:#find /etc/ -perm /222 表示只要有一类用户具有W权限就行。

                         -mode:表示所有都匹配。例如:#find /etc –perm -222 表示所用户必须有w权限,其他权限不管。

            多条件查找:就是指条件间的逻辑关系:

                   -a:表示并关系。例如:

                          #find /tmp –name “*passwd*” –a –not –user redhat 表示:文件命中包含passwd并且属主不是redhat的文件。

                   -o:表示或关系。例如:

                        #find /tmp –name “*passwd*” –o –not –user redhat 表示:文件命中包含passwd或者属主不是redhat的文件。

                   !或 –not:表示非关系。例如:

                         #find /tmp –not /( -name “*passwd*” -a –user redhat \ ) 表示:文件命中包含passwd并且属主不是redhat的文件。

(3)  动作处理

-print:在不指定动作处理时,默认情况下是输出到屏幕中。

-ls:表示以详细信息显示。例如:

find命令的使用_redhat

-ok    COMMAND  {}  \;

-exec  COMMAND  {}  \;

这两个命令的用法一样都表示对前边find找的内容进行进一步的处理,只是-ok选项提醒用户确认,而-exec选项不提醒用户。{}表示占位符,find每找一个都替换掉小括号进行处理;\;是固定格式。例如:

#find ./ -perm 400 –exec chown redhat {}  \; 表示查找当前目录下权限为400的文件并将其属主改为redhat

 

find 也可以通过管道命令与xargs命令结合使用,其格式是:

find | xargs COMMAND 例如:

#find ./ -perm -022 | xargs chomd o-w  此命令表示将find查找到的文件的其他用户的写权限去掉。其他的具体用法可以通过man命令获得。