红联Linux门户
Linux帮助

Linux查找搜索命令

发布时间:2014-11-04 15:16:48来源:linux网站作者:linux521

命令是linux的灵魂,对于新手来说基于命令行想找到自己想要的文件或目录不是一件容易事。其实linux早就给我们准备好了强大的查询命令,下面我们就来看看linux到底有哪些命令。

1、find

毫不夸张的说,作为linux的使用者,不会find命令就像人失去了双眼,你的linux旅程只能在茫茫黑暗中前行。find功能非常强大它可以找出任何你想要的东西,find可以按文件的修改时间,文件名,文件类型,文件inode等等进行查询,配合exec等与系统命令结合事项更多的扩展功能。

2、locate

locate命令用于查找文件,速度要快于find,等价于“find -name”。它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,使用locate命令查不到最新变动过的文件。

3、whereis

whereis是用来查找命令的位置,包括二进制文件、man说明文件、源代码文件,可用参数指定。

4、which

which在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。

注:详细应用后文待续... ...

命令:which

语法:which  [参数]  命令名

实例:

1、普通查询: which ls

2、不显示别名:which --skip-alias  ls

linux查询搜索命令之whereis

命令:whereis

语法:which  [参数]  命令名

常用参数:

-b 搜索文件的二进制部分。

-m 搜索文件的手册部分。

-s 搜索文件的源部分。

-u 搜索不寻常文件。

实例:

1、默认查询:whereis ls

2、二进制文件查询:whereis -b ls

 3、man手册查询:whereis -m ls

linux查询搜索命令之whereis

意外:最小化安装Centos 6.2 不带locate命令,需执行yum install mlocate 来进行安装(mlocate优点见结尾补充内容)。

命令:locate

语法:locate  [参数]

常用参数:

-r 正则表达

-i 不区分大小写

-d 指定资料库的路径(可用updatedb生成数据库)

实例:

1、普通查询:locate rc.local

2、不区分大小写:locate -i rc.local

3、正则查询(db结尾的文件):locate -r  db$

命令:updatedb

常用参数:

-o 数据库的输出路径,默认路径“/var/lib/mlocate/mlocate.db”(可通过配置文件更改)

-U 建立数据库开始的根目录,默认“/”(可通过配置文件更改)

配置文件:/etc/updatedb.conf

注解:

a) PRUNE_BIND_MOUNTS="yes"的意思是:是否进行限制搜索。

b) PRUNEFS="9p afs ........." 排除检索的文件系统类型,即列出的文件系统类型不进行检索。

c) PRUNENAMES=".git .bzr .hg .svn"表示对哪些后缀的文件排除检索,也就是列在这里面的后缀的文件跳过不进行检索。不同后缀之间用空格隔开。

d) PRUNEPATHS=" /afs /media /net /tmp ..........."  排除检索的路径,即列出的路径下的文件和子文件夹均跳过不进行检索。

实例:

建立数据库并输出到/tmp/test 目录里:updatedb -o /tmp/test test.db

补充:

mlocate是GNU locate的一个变种。相比原始的locate,它具有一个很好优点:
每次更新数据库时并不需要重新读取全部目录的内容。mlocate 在数据库中保存了时间戳信息,无需重新读取,就能判断目录内容是否改变。所以更新的速度更快对硬盘的占用也更少。这是 mlocate 特有的功能。

在前面的博文中介绍了locate,whereis,locate的简单应用,在这篇中我将重点介绍一下find的应用,作为一个sa如果不会用find 你会感到你的工作是多么的无力乏味,天空也为之暗淡--哈哈有点夸张了--BEGIN:

-name filename #查找名为filename的文件
-perm #按执行权限来查找
-user username #按文件属主来查找
-group groupname #按组来查找
-mtime -n +n #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime -n +n #按文件访问时间来查找文件,-n指n天以内,+n指n天以前
-ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer f1 !f2 找文件,-n指n天以内,+n指n天以前
-type

查找某一类型的文件,诸如:
b - 块设备文件。
d - 目录。
c - 字符设备文件。
p - 管道文件。
l - 符号链接文件。
f - 普通文件。

-size n[c] #查长度为n块[或n字节]的文件
-depth #使查找在进入子目录前先行查找完本目录
-fstype #查更改时间比f1新但比f2旧的文件
-mount #查文件时不跨越文件系统mount点
-follow #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio #对匹配的文件使用cpio命令,将他们备份到磁带设备中
-prune #忽略某个目录

常用参数:

-print 将查找到的文件输出到标准输出
-exec command {} \; -----将查到的文件执行command操作,{} 和 \;之间有空格
-ok 和-exec相同,只不过在操作前要询用户(rm -rf 等危险命令时最好用ok)

实例:

1、查找 /etc 下以 .local 结尾的文件:find /etc -name "*.local" -print

2、查找 /tmp 下包含 te 的所有目录:find /tmp -type d -name "te*"

3、查找 /tmp 下权限为777的文件或目录:find /tmp -perm 777

4、查找 /tmp 下所有文件长度为0的普通文件:find /tmp -size 0 -type f

5、查找 /tmp 下一天前更改的文件:find /tmp -mtime +1

6、查找 /tmp 下用户名为mysql的文件:find /tmp -user mysql

7、find中 -exec的应用,查找 /tmp 名字包te大小为0的文件并删除:find /tmp -name "*te*" -size 0 -exec rm -rf {} \;

补充:此文中只介绍了find的简单应用,find的不同选项参数配合使用,会大大提高你的工作效率。find不会只局限于本文中的这点应用,充分发挥你的智商,多用多练,你一定会“爱”上他它。

《linux查找搜索命令》 系列到此结束,欢迎大家指出文章中的漏洞和不足。