文件的查找一般有两种方法:locate命令和find命令。由于locate的功能有限,本文主要介绍find命令的使用。只是对locate命令做简单的介绍。
1、命令的特点
Locate的命令是模糊查找。而且由于它是在database中查找,并不是在系统上查找所以它属于非实时性查找,查找并不精确,但是查找速度很快。其database可以用updatedb命令来生成。此命令的功能有限。
2、使用格式
locate KEYWORD
例如:你要搜索passwd这个文件就可以使用直接在命令行模式下输入
# locate passwd
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”
这表示查找/etc下passwd文件,是精确查找,而且明确区分大小写。
#find /etc –name “*passwd”
这表示查找以passwd结尾的文件
#find /etc –iname “passwd”
这条命令表示忽略大小写,即:Passwd 、PASSWD、passwd等都可以搜索到。
-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下大于1k到2k之间的文件。同理:
#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:表示以详细信息显示。例如:
-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命令获得。