今天趁空复习了文件查找的相关知识,文件查找对我们来说是很有用的,当我们记不清楚我们把文件放到什么地方的时候,就可以轻松的找到了。这里就写下我学过的两个文件查找的命令,其中有一个是不常用,就简单说下,然后就重点写常使用的那个命令。
在Linux中文件查找主要有:locate,find这两个命令。先说说它们的区别吧:
locate:这个命令是非实时,非精确的查找,是依赖数据库查找的。
find:实时,精确的查找。速度可能有些慢。
简单说下locate命令吧!locate是依赖数据库查找的,上面我们已经说过了,这就意味着,如果没有这个数据库,那么我们就无法使用这个命令来进行查找了。而反之,数据库有了,但是没到更新时间的时候,我们的文件没了。那么在数据库中依然存有这条记录,我们依然可以用这个命令在数据库中查找到,但是却无法真正的找到这个文件,这就是这个命令的短处了。它的使用格式是:locate Keyword:命令加关键字就行了,另外,Linux系统会在默认的时间更新这个数据库,不过我们也可以手动更新,使用:updatedb这个命令就行了,这个命令就说到这吧!
下面是重头戏了,find命令,就是那个常用的命令了。Find命令不仅可以指定文件名进行查找,还可以根据指定路径、文件类型、文件大小、文件的更改时间。还能组合条件进行查找。查找出来的内容默认显示在屏幕上。
命令格式:find [dir1,…] [criteria,…] [action…]:dir:目录;criteria:标准(就是根据什么来查找,如姓名..);action:动作。
例如:#find /etc –name “passwd”:就是查找/etc目录下passwd的文件。
目录什么的没什么好说的,就来说说criteria:
依据文件的名字查找:
-name:依据文件名查找,并且严格区分大小写,并且是精确查找。而且支持globbing方式的文件名通配。例如:
#find /etc –name “passwd*” :查找/etc目录下passwd开头的文件;
-iname:不区分字母大小写,方法如-name;
-regex “PATTERN”:依据正则表达式查找;
依据文件的属主、属组查找:
-user:依据用户来查找,就是查找属于指定的用户的文件;例如:
#find /tmp –user redhat :查找/tmp目录下属于redhat用户的文件;
-group:依据用户组来查找,就是查找属于指定的用户组的文件;
-uid:依据用户UID来查找,也是查找指定的用户的文件,不过是指定用户的UID而已;例如:#find /var/tmp –uid 323 :查找/var/tmp目录下,与uid323对应的用户的所有文件;
-gid:依据用户组的GID来查找;
-nouser:查找所有没有属主的文件;
-nogroup:查找所有没有属组的文件;
依据文件的类型查找:
-type:依据文件的类型来查找文件:
f:普通文件;
d:目录文件;
l:链接文件;
b:块设备文件;
c:字符文件;
p:管道文件;
s:套接字文件;
例:#find /tmp –type s :查找/tmp目录下所有文件类型是套接字的文件。
依据文件大小查找:
-size:根据文件大小进行查找,默认单位是字节;
单位有k|M|G
例如:#find /tmp –size 10M :查找/tmp目录下,文件大小大于9M,小于等于10M的文件,为什么举这个例子呢?就是因为这点有些特殊。我们查找小于10M的文件和大于10M的文件的例子分别如下:#find /tmp –size -10M ;#find /tmp –size +10M。对,就是在10M前加个-号或+号来表示小于10M或大于10M的。
依据时间查找:
-atime:依据文件的访问时间来查找文件;
-mtime:依据文件的修改时间来查找文件;
-ctime:依据文件的改变时间来查找文件;
默认单位是天,例如:
#find /tmp –atime 3:查找/tmp目录下,正好距此时三天被访问过的文件;
#find /tmp –atime -3:查找/tmp目录下,在距此时三天内被访问过的文件;
#find /tmp –atime +3:查找/tmp目录下,在距此时三天前被访问过的文件,也就是距此时三天内没有被访问过的文件;
-amin、-mmin、-cmin :与-atime等一样,只不过默认时间是分钟,代换一下就知道这些命令的使用方法了。
依据文件的权限查找:
-perm:依据文件的权限来进行文件查找;例如:
#find /tmp 755 :查找/tmp目录下,所有权限位都满足的文件;
#find /tmp +755(/755) :查找/tmp目录下,任何一类用户某一个权限位符合条件的文件;
#find /tmp -755 :查找/tmp目录下,所有类别用户的所有权限位符合条件。
(注:-002: 这里的0表示不做检查)
Criteria说完了就来说说Action:
-print:显示信息,这是默认选项;
-ls:以长格式显示信息;
-ok:查找到文件以后,可以指定要执行的命令,会有提醒;
-exec:查找到文件以后,也可以指定要执行的命令,但不会有提醒;
-exec rm {} \; : -exec加要执行的命令加{} \;,这是使用格式。记住会用就行。
例如:#find /etc –size 10M –ls:查找/tmp目录下,大于9M小于等于10M的文件,并将其文件信息以长格式显示出来;
#find /tmp –nouser –exec rm {} \; :查找/tmp目录下,没有属主的文件,并将其删除;
最后说下find支持的组合条件:
-a:与 、-o:或 、-not:非 :其中,非优先级最高,与第二,或第三;默认是-a与关系。例如:
#find /tmp –name “*lc*” [-a] –user redhat:查找/tmp目录下,文件名中含有lc字符且属主是redhat的文件。
额,时间又不早了,就到这吧!我想写的应该能看懂吧!有些还有待完善,等明天有时间再来补充补充。呵呵。有错误提出来哈!睡觉咯!