最近在学Linux,和很多初学者一样,有一大堆的操作命令要去熟悉和掌握,由于Linux秉承“一切皆文件”的思想,因此我们在操作中经常会使用到文件查找的命令喽,下面就简单介绍下在Linux中比较常用的查找命令:

一、which

 which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。

也就是说它返回的是你该命令所处的位置。

举个例子哈,比如说我现在看下使用gcc这个命令当前所在的路径,我用which查找下:

wKiom1c8WYuDa6XdAAAkpWorOGg055.png

二、whereis

   whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。

简单来说就是查找你当前系统是否安装了该程序,如果安装了就显示该程序的路径。

下面就还以gcc为例:

wKiom1c8WqySfrO7AAA_beSLGC4285.png因为没有给参数,所以将所有信息都显示出来了,如果我们只想看说明文件的位置就用-m参数:

wKioL1c8XB_wa8PqAAAsdElPriY849.png

这样它就只讲你所需要的路径给出了。

下面是一些whereis的命令参数:

-b   定位可执行文件。

-m   定位帮助文件。

-s   定位源代码文件。

-u   搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其它文件。

-B   指定搜索可执行文件的路径。

-M   指定搜索帮助文件的路径。

-S   指定搜索源代码文件的路径。


三、locate

说到locate,其实它基本已经能够完成我们基本所需的查找需求,并且速度很快,这是因为它是在一个库中进行查找的,上面的whereis也是哦。而不是通过硬盘来查找的,这个数据库是liunx自动创建的,并且每天更新一次。

下面我们还是看看它的用法吧:

其实用起来很简单,一般用 # locate your_file_name 的形式就可以了,比如我要查找一个名为11_26.c的一个文件:

wKiom1c8YYaxemIpAAAr1qhfpVU235.png

再用之前最好先执行下updatedb更新下,然后再进行使用。

z再给一些常用的参数:

 -n  至多显示n个输出。

 -h  显示辅助讯息

 -v  显示更多的讯息

 -V  显示程式的版本讯息

四、find

  关于find我就用一句话来形容它:find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件。上面说了locate是在一个库里查找文件,因此对于一些有新变动的文件,而你的库还没更新时,这些文件你是用locate找不到的,这时find就派上用场了,它可是从硬盘里一个一个进行查找的,正因为这样它的速度也会相当慢,一般都把它丢到后台运行。

为什么说它功能强大呢?

因为它有很多的参数:

pathname:       #find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
-print:        #find命令将匹配的文件输出到标准输出。
-exec:        #find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式                   为'command'{ } \;,注意{ }和\;之间的空格。
-ok:          #和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell                   命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

-name   filename             #查找名为filename的文件
-perm                     #按执行权限来查找
-user    username            #按文件属主来查找
-group groupname              #按组来查找
-mtime   -n +n               #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime    -n +n              #按文件访问时间来查

-ctime    -n +n              #按文件创建时间来查找文件,-n指n天以内,+n指n天以前

-nogroup                   #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser                    #查无有效属主的文件,即文件的属主在/etc/passwd中不存在
-ctime    -n +n               #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup                   #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser                    #查无有效属主的文件,即文件的属主在/etc/passwd中不存在
-newer   f1 !f2               #查更改时间比f1新但比f2旧的文件
-type    b/d/c/p/l/f         #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size      n[c]               #查长度为n块[或n字节]的文件
-depth                       #使查找在进入子目录前先行查找完本目录
-fstype                     #查更改时间比f1新但比f2旧的文件
-type    b/d/c/p/l/f         #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size      n[c]               #查长度为n块[或n字节]的文件
-depth                       #使查找在进入子目录前先行查找完本目录
-fstype       #查位于某一类型文件系统中的文件,这些文件系统类型通常可在/etc/fstab中找到
-mount                       #查文件时不跨越文件系统mount点
-follow                      #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio        #查位于某一类型文件系统中的文件,这些文件系统类型通常可在/etc/fstab中找到
-mount                       #查文件时不跨越文件系统mount点
-follow                      #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio                        #对匹配的文件使用cpio命令,将他们备份到磁带设备中
-prune                       #忽略某个目录

下面来举几个例子来体会下吧:

1、显示下今天一天在code目录中访问了哪些文件:

wKioL1c8cs3w1FnTAAA_MZO69w8843.png

2、再看看10天内在c目录下更改了哪些文件:

wKioL1c8c6iTHzJhAACYpbIdh_k515.png

3、再看看7天内在c目录下创建了哪些文件:

wKioL1c8dGCD7Q7lAACXi1NMyJc096.png

4、再找找大小超过10000000c的文件:

wKioL1c8dwfhlghhAABmAEPoO5w241.png5、在/查找11_26.c文件:

wKioL1c8d4eRX93FAAAo_sVMNCE836.png

6、在/下查找code目录:

wKiom1c8d4aj0WR4AAAiQ4Ifvv8980.png

还有好多的参数就不一一列举了,大家一起去电脑上体验吧,而且参数组合使用可以让你对你的文件为所欲为,哈哈....

拜了个拜!