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

Linux之文件的查找

2016-04-25 00:56 204 查看

1.脚本文件名的查询

我们知道在终端模式中,连续输入两次【Tab】按键就能够知道用户有多少命令可以执行。但是怎么知道这些命令的完整文件名放在哪里呢?举例来说,ls这个常用命令放在哪里呢?就通过which或者type来找寻。



which

作用:

which命令的作用是在PATH这个环境变量所规范的路径中搜索某个系统命令的位置并且返回第一个搜索结果。也就是说使用which命令就可以查看某个系统命令是不是存在,以及执行的到底是哪个位置的命令。

用法:

[wyhllk@Centos7~]$which [-anpwV] command
参数:
-a:将所有由PATH目录中可以找到的命令均列出,而不是第一个被找到的命令名称
-n:指定文件名长度,指定的长度必须大于等于所有文件中最长的文件名
-p:与-n参数相同,但是此处包含了文件的路径
-w:指定输出时栏位的宽度
-V:显示版本信息




其中的alias就是所谓的“命令别名”,意思就是输入which会等于后面接的那串命令。which命令是根据PATH这个环境变量所规范的路径去查询“执行文件”的文件名。所以,重点是找出执行文件而已!而且which后面接的是完整的文件名。若加上-a参数,则可以列出所有的可以找到的同名执行文件,而非仅显示第一个。



type

作用:

用来显示指定命令的类型,判断给出的命令是内部指令还是外部指令

用法:

[wyhllk@Centos7~]$type [-tpfa] name
参数:
:不加任何选项参数时,type会显示出name是外部指令还是bash內建指令
-t:当加入-t参数时,type会将name以下这些字眼显示出他的意义:
alias:表示该指令为命令别名所设定的名称
builtin:表示该指令为bash內建的指令
file:表示外部指令
function:表示shell函数
keyword:shell保留的关键字
unfound:没有找到
-p:如果后面接的name为外部命令时,才会显示完整的信息
-f:只返回shell函数的信息
-a:显示所有可能的类型,可以是內建命令也可以是外部命令



2.文件名的查找

在Linux下面经常需要进行文件的查找,而且Linux提供了相当优异的查找命令。有find,whereis,locate;通常我们都是先使用whereis或者locate来查找,如果真的找不到了,才用find来查找。因为whereis与locate是利用数据库来查找数据,所以相当快速,而且并没有实际查询硬盘,比较节省时间,而find直接查找磁盘,速度相对较慢。



whereis

[b]作用:[/b]

whereis命令是定位可执行文件、源代码文件、帮助文件在文件系统中的位置。

用法:

[wyhllk@Centos7~]$whereis [-bmsu] [BMS 目录名 -f] 文件名
参数:
-b:只找二进制格式的文件(定位可执行文件)
-m:只找在说明文件manual路径下的文件(定位帮助文件)
-s:只找source源文件(定位源代码文件)
-u:查找不在上述3个选项当中的其他特殊文件
-B:指定搜索可执行文件的路径
-M:指定搜索帮助文件的路径
-S:指定搜索源代码文件的路径




那么whereis到底是使用的什么呢?为何查找的速度会比find快?其实是因为Linux系统会将系统内的所有的文件都记录在一个数据库文件里面,而当使用whereis或后面的locate时,都会以此数据库文件的内容为准,因此,有时你会发现使用这两执行文件时,会找到已经删除的文件!而且也找不到最新的刚才才创建的文件呢!这就是因为这两个命令是由数据库当中的结果去查找文件的所在。



locate

作用:

loacte用在搜索符合条件的档案,他会去存储档案与目录名的数据库内,寻找合乎范本样式条件的档案或者目录。与find的功能相似,但是locate是通过查找档案和目录在数据库中的索引。

用法:

[wyhllk@Centos7~]$ locate [options] keyword
options:
-i:忽略大小写的差异
-r:后面可接正则表达式的显示方式
-c:不输出档案名,仅计算找到的档案数量
-l:仅输出几行的意思,例如输出5行则是-l 5
-S:输出locate所使用的资料库档案的相关资讯,包括该资料库纪录的档案/目录数量等


:找出系统中所有与wyh相关的文件名

这个locate的使用更简单,直接在后面输入“文件的部分名称”后就能够得到结果。举上面的例子来说,输入locate wyh,那么在完整文件名(包含路径名称)当中,只要有wyh在其中,就会被显示出来的!这也是个很方便好用的命令,如果你忘记了某个文件的完整文件名时。

但是,这个东西还是有使用上的限制。为什么呢?你会发现使用locate来寻找数据的时候特别,是因为locate寻找的数据是由已创建的数据库/var/lib/mlocate/里面的数据所查找到的,所以不用直接在硬盘当中访问数据,当然是很快。

那么有什么限制呢?就是因为他是经由数据库来查找的,而数据库的创建默认是每天执行一次(每个distribution都不同),所以当你新建文件后查找该文件,呢么locate会告诉你“找不到”!因为必须要更新数据库。

那么可以手动更新数据库吗?当然可以,更新locate数据库的方法非常简单,直接输入“updatedb”就可以了!updatedb命令会去读取/etc/updatedb.conf这个配置文件的设置,然后再去硬盘里面查找文件名的操作,最后就更新整个数据库文件。因为updatedb会去查找硬盘,所以当你执行updatedb时,可能会等待一段时间。

updatedb:根据/etc/updatedb.conf的设置去查找系统硬盘内的文件名,并更新/var/lib/mlocate内数据库文件。

locate:依据/var/lib/mlocate内数据库记载找出用户输入的关键字文件名。



find

[wyhllk@Centos7~]$ find[PATH] [option] [action]
参数:
1.  与时间有关的参数:共有-atime、-ctime、-mtime。下面以-mtime说明。
-mtime n:n为数字,意义为在n天之前的“一天之内”被更改过的文件;
-mtime +n:列出在n天之前(不含n天本身)被更改过的文件名;
-mtime –n:列出在n天之内(含n天本身)被更改过的文件名;
-newer file:file为一个存在的文件,列出比file还要新的文件名。

2.与用户或用户组名有关的参数
-uid n: n为用户的id,即uid
-gid n: n为用户组名称的id
-user name:name为用户账号名称
-group name:name为用户组名称
自动安装的软件可能存在软件并没有文件拥有者
-nouser:查找文件的拥有者不在/etc/passwd中的人
-nogroup:查找文件的拥有者不在/etc/group中的人

3.与文件权限及名称有关的参数
-name filename:搜索文件名为filename的文件
-size [+-]SIZE:搜索比SIZE还要大(+)小(-)的文件。SIZE的单位可以是c(byte),k(1024byte),如:-size +50k
-type TYPE:搜索文件类型为TYPE的文件,一般文件(F),设备文件(b,c),目录(d),链接(l),套接字(s),管道文件(p)
-perm mode:搜索文件属性,必须要刚好等于mode的文件,这个mode为类似chmod的属性值,如:-rwsr-xr-x 癿属性为 4755
-perm +mode:搜寻档案权限『包含任一 mode 的权限』的档案,比如说,我们搜寻-rwxr-xr-x ,即 -perm +755 时,但一个文件属性为 -rw-------也会被列出来,因为他有 -rw.... 的属性存在!
-perm -mode:搜索文件必须包含给定的所有属性。搜寻档案权限『必须要全部囊括 mode 的权限』的档案,比如:我们要搜寻 -rwxr--r-- ,即 0744 的档案,使用 -perm -0744,
当一个档案的权限为 -rwsr-xr-x ,即 4755 时,也会被列出来,因为 -rwsr-xr-x 的属性已经囊括了 -rwxr--r-- 的属性了。

4.附加操作
-exec command:command为其他命令,-exec后面可以再接额外的命令来处理搜索到的结果
find / -perm +7000 -exec ls -l {} \;
-print:将结果打印出来,这个动作是默认的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux 终端 shell