Linux下有多种查找文件指令:find、whereis、which和locate。
● which:查看可执行文件的位置
● whereis:查看文件的位置
● locate:配合数据库查看文件
● find:实际搜寻硬盘查询
其中find是最常用和最强大的查找命令。它能做到实时查找,精确查找,但速度慢。下面主要对find指令相关用法进行详细介绍。
●●●find指令:
【格式】find [指定查找目录] [查找规则] [查找完后执行的action]
默认路径为当前目录;默认查找完后执行的action为 -print。
-print //默认情况下的动作
-ls //查找到后用ls 显示出来
-ok [commend] //查找后执行命令的时候询问用户是否要执行
-exec [commend] //查找后执行命令的时候不询问用户,直接执行
这里要注意{}的使用:替代查找到的文件
1、指定查找目录
2、根据文件名查找
-name:根据文件名查找(精确查找)
-iname:根据文件名查找,但不区分大小写
另外介绍下文件名通配的知识。
1)*表示 通配任意的字符
2)?表示通配任意的单个字符
3)[]表示通配括号里面的任意字符
3、正则表达式查找
!:非条件;
-a :与条件(-and);
-o :或条件(-or),连接两个不同的条件(两个条件满足其一即可)
-not 非条件(与“!”相同,对条件取反)
4、根据文件类型来查找文件
【-type】
f :普通文件;d :目录文件;l :链接文件;b :块设备文件;c:字符设备文件;p:管道文件;s :socket文件
5、根据文件大小查找文件
【-size】
-size n: 查找文件长度等于n的文件;-size -n:查找文件长度小于n的文件;-size +n:查找文件长度大于n的文件
6、根据文件时间查找文件
-atime:访问时间,用户最近一次访问文件的时间;
-mtime:修改时间,文件内容最后一次被修改的时间。
-ctime:变化时间,文件元数据(metadata,例如权限或所有权)最后一次改变的时间。
7、根据文件权限查找文件
【-prem】
权限符号:rex分别表示可读、可写和可执行,。当权限符号为-e-:表示只可以写,八进制表示为2,依次进行表示。
8、根据文件所属用户和组来查找文件
-user :根据属主来查找文件
-group:根据属组来查找文件
-nouser and -nogroup:在整个系统中查找既没有属主又没有属组的文件(这样的文件通常是很危险的,作为系统工程师的我们应该及时清除掉)
9、根据uid 和 gid来查找用户
gid为GroupId,即组ID,用来标识用户组的唯一标识符
uid为UserId,即用户ID,用来标识每个用户的唯一标示符
用户组:将同一类用户设置为同一个组,如可将所有的系统管理员设置为admin组,便于分配权限,将某些重要的文件设置为所有admin组用户可以读写,这样可以进行权限分配。
每个用户都有一个唯一的用户id,每个用户组都有一个唯一的组id
●● which指令:
which命令的作用是:在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
【格式】which 可执行文件名称
-n :指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。
-p :与-n参数相同,但此处的包括了文件的路径。
-w :指定输出时栏位的宽度。
-V :显示版本信息
which 是根据使用者所配置的 PATH 变量内的目录去搜寻可运行档的,所以不同的 PATH 配置内容所找到的命令是不一样的。 cd 是bash 内建的命令,但是 which 默认是找 PATH 内所规范的目录,所以找不到的。查找which时会有两个 which ,其中一个是 alias 这就是所谓的【命令别名】,意思是输入 which 会等同后面接的那串命令。
● whereis指令:
whereis命令只能用于程序名的搜索。而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。
whereis命令是定位可执行文件、源代码文件、帮助文件在文件系统中的位置。这些文件的属性应属于原始代码,二进制文件,或是帮助文件。whereis 程序还具有搜索源代码、指定备用搜索路径和搜索不寻常项的能力。
【格式】whereis 文件名
-b :定位可执行文件。
-m :定位帮助文件。
-s :定位源代码文件。
-u :搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其它文件。
和find相比,whereis查找的速度非常快,这是因为linux系统会将系统内的所有文件都记录在一个数据库文件中,当使用whereis和locate时,会从数据库中查找数据,而不是像find命令那样,通过遍历硬盘来查找,效率高。
但是该数据库文件并不是实时更新,默认情况下时一星期更新一次,因此在用whereis和locate 查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件却无法查找到,原因就是因为数据库文件没有被更新。
● locate指令:
locate作用:使用者可以很快速的搜寻档案系统内是否有指定的档案。其方法是先建立一个包括系统内所有档案名称及路径的索引数据库之后当寻找时就只需查询这个索引数据库而不必实际深入档案系统之中了
【格式】locate 文件名
eg:locate passwd (只要包含了passwd的都会被显示出来)
locate可进行筛选
-i :查找文件的时候不区分大小写
-n :只显示查找结果的前N行