1.find vs locate
在实际中,我们经常需要查找到一些特定文件,然后进行处理,LINUX提供了locate , find这两个命令用于文件查找。
a.locate,非实时查找,非精确查找。linux会定期生成更新文件数据库,而locate将根据文件数据库进行查找。我们可以在使用locate命令前,更新文件数据库,使用updatedb即可。但是updatedb将会花费可能半天时间,SO LONG! b.find , 实时查找,精确查找。根据指定路径,查找标准,进行文件遍历(包括隐藏文件和子目录)。 c. 显然,locate除了快些,相比find没什么优点。因此,实际中,我们查找文件首选find~ |
2.How to use find?
find 路径 标准 动作 |
说明:
关于路径: 我们可以不给,那么就是当前路径。 关于标准: 要知道find查找文件,支持众多标准,比如文件名精确匹配查找,权限,大小,正则等等。 关于动作: 定义查找到文件后可以发生哪些动作。默认的行为就是显示到屏幕上。 |
3.Some examples about find
实例一:-name 与 globbing
[root@localhost ~]# find . -name "*.sh" ./manageuser.sh ./13.sh ./17.sh ./25.sh ./mytask.sh |
注意,-name表示根据文件名称进行精确匹配查找,支持文件名通配,即globbing。 【回顾下globbig,有*,?,[]等】 如果,我们不想区分大小写,可以-iname。 |
实例二:-user 与 -group , -uid 与 -gid
[root@localhost ~]# find /etc -uid 501 [root@localhost ~]# find /etc -user root |
注意,-user,-group分别表示根据文件的属主,属组名称进行查找;-uid,-gid表示根据文件的uid,gid进行查找。那么它们有什么区别呢? 假设,file1的owner是zhangfengzhe,uid是550,如果userdel -r zhangfengzhe,那么文件file1怎么办?它将属于谁呢? 484299 4 ---xrwx--x 1 550 root 0 May 16 15:08 ./file1 可以看到,文件的属主将是uid,就是表示文件已经没有属主了。 可以利用-nouser,-nogroup查找没有属主,属组的文件。 事实上,我们应该定期利用-nouser查找没有属主的文件,然后交给root用户,以防止其他用户趁虚而入! |
实例三:-type 'TYPE'
[root@localhost ~]# find -type d . ./.gconf ./.gconf/desktop ./.gconf/desktop/gnome |
注意,-type表示根据文件类型进行查找。LINUX的文件类型常见的有: f(file),d(directory),l(linked file),s(socket file),p(pipe file),c(character),b(block) |
实例四:-size [+-]Number[k/M/G...]
[root@localhost ~]# find /etc -size +1M /etc/selinux/targeted/policy/policy.21 /etc/selinux/targeted/modules/active/base.pp /etc/selinux/targeted/modules/active/base.linked /etc/selinux/targeted/modules/active/policy.kern /etc/gconf/schemas/apps_nautilus_preferences.schemas /etc/gconf/schemas/metacity.schemas /etc/gconf/schemas/gnome-terminal.schemas /etc/gconf/schemas/gok.schemas /etc/gconf/gconf.xml.defaults/%gconf-tree.xml |
注意: -size 2M 表示的是查找[1M,2M],并不是说查找等于2M的文件 -size +1K 表示查找大于1K的文件,很显然-表示小于 |
实例五:-atime -ctime -mtime -amin -cmin -mmin
[root@localhost ~]# find /etc -atime +7 |
注意,我们知道文件有3个timestamp:access,change,modify -atime 7 表示在7天之前访问过的文件 -ctime -3 表示在3天之内修改过的文件 -amin -10 表示10分钟之内访问过的文件 这些有时候非常有用,比如,我们的WEB服务器突然异常了,可能是由于配置文件发生了修改导致的,那么我们就可以查下最近一段时间哪些文件发生了修改。 |
其实除了上面的,还有-perm MODE来根据权限来查找。我这里就不介绍了,大家自学成才吧~另外,我们可以使用-a,-o,not进行条件组合。默认就是-a。
4.Action for find
当我们找到特定文件后,就可以进行ACTION处理,使用-ok,-exec,xargs即可。格式如下:
find yourpath yourpattern -ok COMMAND \; find yourpath yourpattern -exec COMMAND \; find yourpath yourpattern | xargs COMMAND ; |
注意,对于-ok,-exec而言,必须注意\;,否则语法错误。 在-ok,-exec的COMMAND中,可以使用{}进行文件名引用。 -ok与-exec的区别在于,-ok需要询问,-exec不需要。 xargs需要以管道的方式进行处理。 |
实例:
find /etc -size +1M | xargs echo {} >> yourfile; find -name '*.sh' -exec cp {} {}.bak \; |
5.小结
专家都从菜鸟来,原来find如此easy~