1、grep :查找文件中的内容
$ grep [option] pattern [file]
例:
$ grep un day
Sunday
例:
$ grep include doulinked.c doulinked1.c
doulinked.c:#include <stdio.h>
doulinked.c:#include <stdlib.h>
doulinked.c:#include <string.h>
doulinked1.c:#include <stdio.h>
doulinked1.c:#include <stdlib.h>
doulinked1.c:#include <string.h>
例:
$ grep -n 'typedef struct' doulinked.c
6:typedef struct Stu
注:中间包含空格的词需要加单引号;
-n --number 列出所找词所在行。
2、find:我的东西在哪(迅速在指定的范围内查找到文件)
$find [OPTION] [path...] [expression]
例:
$ find ~/ -name linked.c -print
/home/liyuru/Myc/Everyc/linked.c
/home/liyuru/Myc/ADT/linklis/linked.c
find: ‘/home/liyuru/.cache/dconf’: Permission denied
注:find 命令后面要紧跟查找范围,大到根目录,小到当前目录,都可以(可以是相对或绝对路径)。find 会深入到这个路径的每一个子目录中去寻找。
Permission denied:最后一行输出现了这两个词。这是因为普通用户并没有进入这两个目录的权限,这样find 在扫描时将跳过这个目录。
-print
-name 后面跟着要查找的文件名。可以用通配符来指定文件名。
#此处拓展一下通配符
#“*” 用于匹配文件中任意长度的字符串,可以代表很复杂很长的字符串。
例:*.cpp *.c
#“?” 和“*”类似,但只匹配一个字符。
例:$ ls queue.?
queue.c
#“[]”用于匹配所有出现在方括号内的字符,一个文件只能匹配一个字符。
例:$ ls text[1A]
text1 textA
#“-” 来指定一个字符集范围,所有包含在上下界(可以是数字或字母)之间的字符都会被匹配。
例:$ ls text[1-3]
text1 text2 text3
-type选项的参数:
b :块设备文件 f:普通文件
c :字符设备文件 p:命名管道
d :目录文件 l:符号链接
-atime n 用来查找最后一次使用在n天前的文件(File was last accessed n*24 hours ago).
-mtime n 用来查找最后一次修改在n天前的文件.
#但是在实际使用过程中很少能准确确定n的大小,可以用+n表示大于n,用-n表示小于n。
例:在/usr/bin/中查找最近100天内没有使用过的命令(也就是最后一次使用在100天或100天以前的命令)
$find /usr/bin/ type -f -atime +100 -print
3、locate:更快速的定位文件(适合当用户完全不记得自己的文件放哪时)
$locate file
例:
注:locate 命令自动建立整个文件名数据库,不需要用户插手。如果希望生成数据库文件的最新版本,可以使用updatedb命令,不过运行这个命令需要root权限,大概耗费1分钟。
4、whereis:查找特定程序
该命令主要用于查找程序文件,并提供这个文件的二进制可执行文件、源代码文件和使用手册页存放的位置。
例:
#-b 只查找这个程序的二进制可执行文件。
#如果如第三种情况返回空字符串,说明该命令无法找到文件。
#无法找到文件的原因有两个:
1、文件不存在
2、文件没有存在于任何whereis命令搜索的子目录中。Whereis命令检索的目录是固定编写在它的程序中的,这有缺陷,但大大提高了检索的速度。
最后附上关于如何查找命令的一些命令
1、man:这个是最基础的就不介绍了
2、whatis
例:$whatis uname
uname (2) - get name and information about current kernel
uname (1) - print system information
注:whatis 从某个程序的使用手册中抽出一行简单的介绍性文字,帮助用户大致了解这个命令的用途。
3、apropos:与whatis命令相反
例:
注:该命令适合用户想用某个命令但想不起来时可以求助apropos。该命令通过使用手册中反查到某个命令。