您的位置:首页 > 运维架构 > Linux

Notes: Linux的which, whereis and locate (file and find)

2016-09-27 00:09 531 查看
首先,在操作系统课程上,我们已经知道,在linux中,并没有后缀名的概念。所有的文件都一视同仁,种类都是“-”。后缀名一般是不强求的,只是如gcc等应用会检查的辅助,此时加上后缀名是通过编译器必须的。同时,加上后缀名也是方便我们辨认的途径。

所以,在linux中,有file这个命令,专门查看文件的类型:是ASCII文本文件还是Binary二进制文件。

#usage of file

file [whole path filename]

data file/ executable file/ ASCII text


同时,Linux也提供了很多查找文件的命令。

其中whereis和locate是什么文件都可以查找的,速度也较快,但有个局限是查找结果(依据)可能不是最新的。因为两者的查找依据是/var/lib/mlocate/mlocate.db的数据库内容,这个数据库默认一天才更新一次。也可以手动通过/etc/updatedb.conf手动触发更新。

但也正因为其实从数据库中提取查找数据,相比另一个直接从硬盘查找的find就显得快速多了。

whereis和find之间有什么区别呢?区别在于whereis只提供精确查找,但能归类查找,定义只查找一类型的这个名字的文件。而locate能够实现模糊查找,默认查找文件路径名中包含这个字符串的文件,同时也能指定不分大小写和正则表示法。

详细用法如下:

#usage of whereis

whereis [-b-m-s-u] [filename]

-b binary file
-m man file
-s source file
-u files other than those three above


#usage of locate

locate [-i-r] [filename]

-i ignore the upper case or lower case
-r use regular expression


同时,提供一个比较局限的,同时只能查找二进制可执行文件的命令:which

which的局限在于只能查找当前用户PATH目录下的命令。如ifconfig在/sbin只在root的path有,不在一般用户的/usr/sbin有,所有,一般用户用which ifconfig是找不到这个命令的。这时候可以考虑用type。

#usage of which

which [-a] [command name]

-a list all the result out, default is listing one


最后,我们看看一个功能强大的命令:find。

先说说怎么用吧:

#usage of find

find [Path] [Option] [Action]

# The command is to find the files that satisfy the condition mentioned by option under the path. Then we can do the actions to those file

E.g.

find /home -mtime 0
find /etc -newer /etc/passwd


以上两个例子给的option都是时间参数。

find的时间参数有以下的选项:

首先时间参数有三种 mtime、atime和ctime。针对每种time有以下三种数字格式,以mtime为例:-mtime +4/ -mtime -4 / -mtime 4。0表示现在,数字表示天。

上述的请求对应着在某个时间区间的条件,如下图:



当然,除了用数字,还可以用一个字符串:newer [file]。例如:-mtime newer [file_ins],寻找修改时间比file_ins这个文件的修改时间更靠近现在的所有文件。

find的参数可以指定用户、组参数:

-uid/ -gid/ -user / -group/ -nouser/ -nogroup

例如:-uid 1/ -gid 10/-user xiaojie/ -group staff/ -nouser/ -nogroup

其中,nouser和nogroup分别指的是:满足文件的创建者不在/etc/passwd的所有文件和满足文件所属组不存在于/etc/groups的所有文件。

find的参数也可以指定权限参数、名字或者大小:利用-perm指定权限,-name指定名字和-size指定大小。





同时,find也允许我们指定对应的action来处理find出来的结果。

例如:find / -perm +7000 -exec ls -l {} \;

注意最后的\;,因为";"在bash中有自己的意思,所以需要转移字符。表示exec的命令结束。{}表示将find找到的内容移动括号里。

注意,find返回的是找到的符合条件的文件的完整路径文件名。所以,得到的结果可以传入ls -l 后面的路径文件名参数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  whereis locate find which file