【连续笔记第2天】
笔记来源于 Linux命令大全: http://man.linuxde.net
使用Linux系统时,我们经常需要查找某些文件、目录;或者在文件中搜索某个关键词。这里我们就对常用的查找命令find
、locate
、grep
进行总结
0X01 find命令
find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
1. 语法
find 起始目录 选项 参数
2. 常用选项:
-name<范本样式>:指定字符串作为寻找文件或目录的范本样式;
-iname<范本样式>:此参数的效果和指定“-name”参数类似,但忽略字符大小写的差别;
-path<范本样式>:指定字符串作为寻找目录的范本样式;
-regex<范本样式>:指定字符串作为寻找文件或目录的范本样式;(正则表达式)
起始目录:查找文件的起始目录
参数:是查找文件/目录字符
3. 实例:
find /home -name "*.txt" //在/home目录下查找以.txt结尾的文件名
find /home -iname "*.txt" //忽略大小写
find /usr/ -path "*locate*" //匹配文件路径或者问及那
find . -regex ".*\(\.txt\|\.pdf\)$" //基于正则表达式匹配文件路径
find . -iregex ".*\(\.txt\|\.pdf\)$" //同上,但忽略大小写
0x02 locate命令
locate命令和slocate命令都用来查找文件或目录。
locate命令其实是find -name
的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/locatedb
,这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。
1. 语法
locate [选项] [参数]
选项:
-d<目录>或--database=<目录>:指定数据库所在的目录;
-u:更新slocate数据库;
--help:显示帮助;
--version:显示版本信息。
2. 实例
locate 文件名
locate /etc/sh //搜索etc目录下所有以sh开头的文件
locate ~/m //搜索用户主目录下,所有以m开头的文件
locate -i ~/m //忽略大小写
0x03 grep命令
grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来(用于查找文件里符合条件的字符串 )
1. 语法
grep [选项] 字符串 文件
eg:
grep match_pattern file_name
grep "match_pattern" file_name
2. 选项
-a 不要忽略二进制数据。(用于在一个二进制文件中查找指定的字符串)
-A<显示列数> 除了显示符合范本样式的那一行之外,并显示该行之后的内容。
-b 在显示符合范本样式的那一行之外,并显示该行之前的内容。
-c 计算符合范本样式的列数。
-C<显示列数>或-<显示列数> 除了显示符合范本样式的那一列之外,并显示该列之前后的内容。
-d<进行动作> 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作。
-e<范本样式> 指定字符串作为查找文件内容的范本样式。
-E 将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式。(按正则表达式查找字符串)
-f<范本文件> 指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式。
-F 将范本样式视为固定字符串的列表。
-G 将范本样式视为普通的表示法来使用。
-h 在显示符合范本样式的那一列之前,不标示该列所属的文件名称。
-H 在显示符合范本样式的那一列之前,标示该列的文件名称。
-i 忽略字符大小写的差别。
-l 列出文件内容符合指定的范本样式的文件名称。
-L 列出文件内容不符合指定的范本样式的文件名称。
-n 在显示符合范本样式的那一列之前,标示出该列的编号。
-q 不显示任何信息。
-R/-r 此参数的效果和指定“-d recurse”参数相同。
-s 不显示错误信息。
-v 反转查找。
-w 只显示全字符合的列。
-x 只显示全列符合的列。
-y 此参数效果跟“-i”相同。
-o 只输出文件中匹配到的部分。
常用选项:
-a
-E
-v
3. 实例
grep match_pattern file_name //在文件中搜索一个单词,命令会返回一个包含“match_pattern”的文本行
grep "match_pattern" file_name
grep "match_pattern" file_1 file_2 file_3 ... //在多个文件中查找
grep -v "match_pattern" file_name //输出除之外的所有行 -v 选项
grep -E "[1-9]+" //使用正则表达式 -E 选项
或
egrep "[1-9]+"
netstat -an | grep ":22" //结合管道一起使用(重要)
4. 【遇到的问题】
grep 命令执行后 显示匹配到二进制文件
grep 命令执行后 显示匹配到二进制文件,说明grep 的字符串 在一个不开源的二进制文件源码中有用到,如果要看到里面再具体的字符,就用grep -a
命令,不过意义也不大,只要grep 命令执行后 显示匹配到二进制文件说明该字符串必然在这个二进制的源码中有调用到,这对搞清楚哪个函数,变量是否被一个不开源的程序调用了有很大的作用。
strings命令(补充)
先用man strings来看看:strings - print the strings of printable characters in files.
意思是, 打印文件中可打印的字符。 我来补充一下吧, 这个文件可以是文本文件(test.c), 可执行文件(test), 动态链接库(test.o), 静态链接库(test.a),二进制文件
1. 语法
strings 文件名