linux中的文件查找命令
linux中文件查找常用的有两个命令,分别是locate和find。 #locate 根据locate数据库查找,不是实时查找,不是精确查找.速度比较快 #find 不根据数据库查找,实时查找,遍历目录查找,精确查找,速度慢. # locate 要查找的关键字 -n 只显示被匹配到的前10行. -c 统计被匹配到的结果总共有多少. locate是根据locate数据库进行查找的,所以速度比较快,如果一个文件刚存入linux系统,然后用locate进行查找,有可能会查找不到,因为locate的数据库里面,还没有该文件的相关记录,这时候,我们就需要手动更新locate的数据库,使用命令 updatedb 将手动生成locate命令所依赖的数据库 find [dir,...] [criteria,...] [action...] 如果[dir]省略,就是当前路径.如果find后面不跟任何参数,会把当前目录里的所有文件及目录全部显示出来,包括隐藏文件 action的默认动作为显示到屏幕上. criteria 查找标准 -name 指定文件名.还支持globbing方式的文件名通配 find /etc/ -name "passwd?" find /etc/ -name "*passwd*" -iname 忽略文件名中的文件名大小写. -regex "PATTERN" 查找文件名中符合PATTERN中的文件,支持正则. -user USERNAME 基于用户查找(查找属于某个用户的文件) -group GROUP_NAME find /tmp -user redhat | ls -l 这样不行,因为find的传递机制跟普通命令不太一样 ll `find /tmp -user redhat` 这样是可以的,引用命令. -uid UID 基于用户的ID号查找 -gid GID 基于组的ID号查找. -nouser 查找所有的,没有属主的文件 -nogroup 查找所有的,没有属组的文件 -type 指定类型进行查找 f 普通文件 d 目录 l 软连接文件 b 块设备 c 字符设备 p 管道文件 s 套接字文件 组合条件: -a -o -not -size 指定文件大小 10M 大小为10M的(9-10M的都符合,10M以上和9M以下不符合) -10M 小于10M的 +10M 大于10M的 -atime 根据文件的访问时间(单位为天) -mtime 根据文件的修改时间 (单位为天) -ctime 根据文件的改变时间(单位为天) -amin 根据文件的访问时间(单位为分钟) -mmin 根据文件的修改时间(单位为分钟) -cmim 根据文件的改变时间(单位为分钟) time 的默认时间为天,min的默认单位为分钟. 例: -atime 3 距离现在,刚好3天没访问的文件 -atime -3 3天以内被访问的文件 -atime +3 已经超过3天没被访问的文件 -perm 755 根据文件的权限进行查找. +755|/755 其中任何一类用户满足其权限都可以. /444 任何一类用户有读权限都可以. -755, 每一类用户都必须要满足条件. Ctrl+a 跳到命令的首部. Ctrl+e 跳到命令的尾部. action: -print 把匹配到的结果打印到屏幕(默认动作,可省略.) -ls 以长格式显示文件信息 -ok COMANDN {} ; 查找到文件后,执行指定命令(提醒确认) -exec COMMAND {} ; 查找到文件后,执行指定命令(不提醒确认) -exec rm {} ; 删除查找到的文件 {}表示引用前面查找到的文件,;表示命令到此结束 -exec mv {} {}.txt ; 把查找到的文件重命名,在原有的名字后面加上.txt的扩展名 下面做几个练习题 练习: 1,查找/var/ 目录下属主为root并且属组为mail的所有文件; [root@Honway scripts]# find /var -user root -group mail /var/spool/mqueue /var/spool/mail 2,查找/usr目录下不属于root,bin或student的文件; [root@Honway scripts]#find /usr/ -not -user root -not -user bin -not -user student /usr/local/apache2/logs/cgisock.3302 /usr/local/apache2/logs/cgisock.32138 /usr/local/apache2/logs/cgisock.3327 3,查找/etc/目录下最近一周内内容修改过且不属于root及apache的文件 [root@Honway scripts]# find /etc -not ( -user root -o -user apache ) -mtime -7 4,查找当前系统上没有属主或属组且最近1天内曾被访问过的文件,并将其属主属组均修改为root; [root@Honway scripts]# find / ( -nouser -o -nogroup ) -atime -1 -exec chown root:root {} ; 5,查找/etc目录下大于1M的文件,并将其文件名写入/tmp/etc/largefiles文件中; [root@Honway scripts]#for i in `find /etc/ -size +1M -exec basename {} ;`;do echo $i >>/tmp/etc.largefiles ;done [root@Honway ~]# find /etc/ -size +1M -exec basename {} >/tmp/find.out ; 6,查找/etc/目录下所有用户都没有写权限的文件,显示出其详细信息; [root@Honway scripts]# ll `find /etc/ -not -perm +222` -r-------- 1 root root 1225 02-11 10:00 /etc/gshadow -r-------- 1 root root 1213 02-11 00:19 /etc/gshadow- -r--r--r-- 1 root root 41286 2006-11-28 /etc/mail/submit.cf -r--r--r-- 1 root root 628 2010-07-21 /etc/selinux/config,v -r-------- 1 root root 3159 02-11 10:00 /etc/shadow -r-------- 1 root root 3129 02-11 00:29 /etc/shadow- 本文出自 “吖吖個呸” 博客,请务必保留此出处http://gm100861.blog.51cto.com/1930562/788831 查看本栏目更多精彩内容:http://www.bianceng.cn/OS/Linux/ (编辑:佛山站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |