[2019.03.25]Linux中的查找
TMUX天下第一
全世界所有用CLI Linux的人都应该用TMUX,我爱它!
======================== 以下是正文 ========================
Linux下面常用的搜索命令有这些:find locate grep which whereis。其中在我用的SuSE上,并没有locate,所以也不能用它神奇的手动更新数据库和"高速"索引查找,而grep是文字查找命令(但是配合某些命令共同执行有奇效)。下面我们来看一看他们都是干嘛的
上面四个窗格对应了四个不同的查找命令
grep: grep命令用于在文本文件中查找字符串,可以理解为不用打开文件就能找到文件里有没有某些内容。由于linux一切皆文件的特性,在输入某些带有返回值的命令(比如你用ls的时候他就返回给你很多内容,这个内容就是返回值)时,可以通过管道(就是上面命令里面的‘|’)把前一个命令的输出作为后一个命令的输入,于是乎grep就可以帮你“查找文件”了 用的时候: <command a> | grep [-P] '[Regular Expression]' 其中-P调用perl进行高级正则表达式调用,正则表达式外的单引号不可以缺少 |
which: which命令相对比较专一,所以也就比较菜。他只查找在环境变量里面的可执行文件(Linux Man Page里面讲它是用来搜索“Program”也就是“程序”的)。Linux不像Windows,它的环境变量真的长得像环境变量,查看则是输入“echo $PATH”,所以只有放在各种bin目录,并且这个bin目录被添加进path里面的程序才能被which命令找到。 注意,这个命令并不支持正则表达式,也不支持通配符*或是?,也就是说你得知道你要找的程序的全名 |
find: 这个命令是linux通用搜索命令,他会直接检索整个磁盘来找你输入的东西,支持的参数超过二十个,非常非常强大的同时,也非常非常慢,海峡对岸某些朋友称这个命令“操硬碟”。在此处我不打算讨论它,毕竟如上图所示我都完成剩下三个命令的实例加上截图操作,他都没有运行完……
|
whereis: 个人感觉比较鸡肋的一个命令……希望有识之士告诉小弟这个命令的独到之处。 如图所示他只能查找二进制bin、源代码src和帮助man这几个目录下面的东东,具体他检索那些目录,请使用whereis * 来查询 |
FIND 命令踩坑合集:
2019.03.25 update:
-name可以用通配符*,要使用正则表达式请使用-regex
——某些网站的教程是有Bug的,他们把所有的参数都标成了<范本样式>然而……大部分的“范本样式”不可以使用正则!
2019.03.28 update:
-regex匹配的是全路径,也就是说针对一个存放在/a/b/c/路径下面的文件dashboard.sh,针对它的文件名写find,如果用regex,写法是:
√:find / -regex ".*/dashboard.*"
×:find / -regex "dashboard.*" #实质上在找根目录下的dashboard
你也可以写成:
√:find / -name "dashbo*.sh" #适用于你真的记不起来全名了
2019.04.02 update:
虽然shell或是bash中允许你把 find / -name "dashbo*.sh" 写成 find / -name dashbo*.sh ,但是这样查找结果会不准确。原因是对于通配符,shell会将他展开。
参见:https://segmentfault.com/q/1010000003090158 此链接中 kemad 大神的解释。
其原理和:https://www.cnblogs.com/jackablack/p/10637181.html 中第一个坑的原理相同。
以上就是我的一些拙见,说实话find真的……学了用了快一个月还没搞明白具体如何运作的……惭愧
学明白了在把一些想法放上来吧!可怜的硬碟,要被 /usr/bin/find 艹啦!