Linux 查找命令

来源:互联网 发布:炉石盒子mac版用不了 编辑:程序博客网 时间:2024/05/05 18:24

which(查找可执行文件)

作用:shows the full path of (shell) commands

常用选项:
-a——列出所有找到的结果(不加-a只列出第一项)

说明:
1、此命令是【根据PATH】查找,而且可以查找【非系统命令】,因此:
 ①可能不同的用户得到不同的结果(例如:which -a ifconfig);
 ②只要将【用户自己创建可执行文件】拷贝到PATH路径下,which也能找到;
2、只支持全名,【不支持通配符】

 

whereis(寻找特殊文件)【难理解】

作用:寻找二进制文件、源文件、manual帮助文件(但又找不到用户自己创建的二进制文件或源文件)
locate the binary, source, and manual page files for a command

常用选项:
-b:只查找二进制文件(并不一定是可执行文件)
-m:manul,只查找帮助文件
-s:只找source文件
-u:寻找-b,-m,s以外的特殊文件


说明:
1、“奇怪的”查找规则:(举例)whereis install.log是以intall即install.*为目标查找的,所以whereis install.log == whereis install
2、特殊文件的“特殊”之处:(举例)
whereis httpd——可行
whereis math.h——可行
whereis cd——可行(注意:cd是Shell内置命令,找到的是manual page文件)
whereis c1——不可行(c1为用户自己编译的得到的可执行文件)
3、文件数据库中查找
4、【不支持通配符】

 

locate( 查找数据库)

-----原理
locate 是在已创建的数据库 /var/lib/mlocate 里查找,所以速度比 find 快,但缺点是如果数据库更新不及时,可能找不到刚创建的文件或找到已经不存在的文件,这时用 update 命令来更新数据库

-----更新数据库
updatedb

-----用法及常见选项
usage: locate [OPTION]... PATTERN...
locate 的参数是 PATTERN, 而不是简单的文件名
If --regex is not specified, PATTERNs can contain globbing characters(通配符). 
If any PATTERN contains no globbing characters, locate behaves as if the pattern were *PATTERN*.(如果 PATTERN 中不含通配符,则默认 PATTERN 为 *NAME*)

-b 与 -w
-b: --basename, the base name, 只匹配文件名(但 PATTERN 的规则不变,如果 PATTERN 中不含通配符,则还是以 *NAME* 进行匹配)
-w: --wholename(默认选项), the whole path name, 匹配整个完整路径
【举例】
$ locate include# == locate -w include/usr/src/linux-headers-2.6.38-8-generic-pae/include/linux/xfrm.h# *include* 会在路径中出现...$ locate -b include/usr/src/linux-headers-2.6.38-8-generic-pae/scripts/checkincludes.pl# *include* 只出现在文件名中...
-r: --regex, 正则表达式匹配
-i: --ignore-case

【举例】
1、如果 PATTERN 中含有通配符(globbing characters),则 *NAME* 模式被打破
$ locate *.sh
不会出现 *.sh* 的文件

2、查找文件名为 NAME 的文件
$ locate -b '\NAME'
-b 指只能是文件名,\ 是通配符,能打破默认模式 *NAME*

To search for a file named exactly NAME (not *NAME*), use
locate -b '\NAME'
Because \ is a globbing character, this disables the implicit replacement of NAME by *NAME*.


find(磁盘查找)

-name:支持通配符
find / -name filename

-inum
find . -inum <inode>

【举例】

1、不通过文件名,通过 inode number 修改文件名

$ mv `find . -inum 1211251` nonono.zip


which,whereis,locate,find的比较

which根据PATH路径查找可执行文件
whereis是在文件数据库中查找特殊文件(“特殊”之处见上面)
locate是在文件数据库中查找所有文件
find是磁盘查找

所以,如果是查找一般文件,如果觉得这个文件创建很久了,最好用locate;如果文件才创建不久,就用find。
如果是特殊文件,就用which和whereis,两个侧重点不同。