一、find
find 命令在指定的目录下查找对应的文件。
find [path] [expression]
● path 是要查找的目录路径,可以是一个目录或文件名,也可以是多个路径,多个路径之间用空格分隔,如果未指定路径,则默认为当前目录。
● expression 是可选参数,用于指定查找的条件,可以是文件名、文件类型、文件大小等等。
常用可选参数:
- -name pattern:按文件名查找,支持使用通配符 * 和 ?。
- -type type:按文件类型查找,可以是 f(普通文件)、d(目录)、l(符号链接)等。
- -size [±]size[cwbkMG]:按文件大小查找,支持使用 + 或 - 表示大于或小于指定大小,单位可以是 c(字节)、w(字数)、b(块数)、k(KB)、M(MB)或 G(GB)。
- -mtime days:按修改时间查找,支持使用 + 或 - 表示在指定天数前或后,days 是一个整数表示天数。
- -user username:按文件所有者查找。
- -group groupname:按文件所属组查找。
- -amin n:查找在 n 分钟内被访问过的文件。
- -atime n:查找在 n*24 小时内被访问过的文件。
- -cmin n:查找在 n 分钟内状态发生变化的文件(例如权限)。
- -ctime n:查找在 n*24 小时内状态发生变化的文件(例如权限)。
- -mmin n:查找在 n 分钟内被修改过的文件。
- -mtime n:查找在 n*24 小时内被修改过的文件。
例子–不同条件查找
- 查找 /home 目录下大于 1MB的文件
find /home -size +1M
- 查找 /home 目录下小于1MB的文件
find /home -size -1M
- 查找 /etc 目录下 在7天前修改过的文件(不包含文件目录)
find /etc -mtime +7 -type f
- 查找 / 下及其字目录的所有文件后缀为 .c的文件
find / -name "*.c"
- 查找 /home及其子目录下文件类型为目录的文件
find /home -type d
- 查找robin用户所拥有的文件中以txt结尾的文件
find -user robin -name "*.txt"
二、grep
grep命令在文本文件中查找指定模式的词或短语,然后在标准输出设备上显示包括给定字符串模式的所有行。
grep -E 等同于 egrep , 使用扩展的正则表达式模式进行搜索
grep -F 等同于 fgrep ,字符串快速检索不支持正则表达式
grep [选项]... PATTERN [FILE]...
● pattern - 表示要查找的字符串或正则表达式。
● files - 表示要查找的文件名,可以同时查找多个文件,如果省略 files 参数,则默认从标准输入中读取数据。
常用选项:
● -i:忽略大小写进行匹配。
● -v:反向查找,只打印不匹配的行。
● -n:显示匹配行的行号。
● -r:递归查找子目录中的文件。
● -l:只打印匹配的文件名。
● -c:只打印匹配的行数。
● -x : 只显示整个行都严格匹配的行
● -E 将查找模式解释成扩展的正则表达式
● -F 将查找模式解释成单纯的字符串
正则表达式的简单说明
正则表达式(简称 “regex”)是一种用于匹配和操作文本的强大工具,它是由一系列字符和特殊字符组成的模式,用于描述要匹配的文本模式。
组合 | 说明 |
---|---|
[abc] | 匹配中括号中的所有字符 |
[a-z] | 匹配中括号中的字符范围内的所有字符 |
[^abc] | 匹配除中括号中的字符外的所有字符 |
* | 匹配前面的子表达式零次或多次 |
+ | 匹配前面的子表达式的一次或多次 |
? | 匹配前面的子表达式零次或一次 |
. | 代表任意一个字符 |
$ | 匹配输入字符串的结束位置,以…结尾 |
^ | 匹配输入字符串的起始位置,以…开头 |
{n} | 匹配确定的n次 |
{n,} | 至少匹配n次 |
{n,m} | 最少匹配n次最多匹配m次 |
例子–简单文本查找
首先,在当前目录下创建一个文件,用于grep命令的练习
vi a.txt
Albania
Algeria
Canada
0
1
3
11
grep 对于 匹配的字符串区分大小写
“.” 只匹配一次任意字符
这里第二次匹配,因为没有添加严格限制选项,它依然匹配到了内容,加上严格限制以后得出了正确的结果。
- “+” 与 “?” 和 “”的区别
“+” 代表匹配前面的子表达式一次或多次 ; “ ?”相当于占位符,匹配前面的子表达式零次或一次; “”代表匹配前面的子表达式任意次。
这里的话,有一个问题就是多个正则表达式的特殊字符,需要使用 -E 开启正则表达式匹配模式,否则的话会出现找不到的问题。
例子–结合管道进行查找
- 查找根目录下的所有s开头的文件及目录
ls / | gerp -E ^s
- 查找/home目录下不是以数字结尾的文件及目录
ls /home | grep -v -E [0-9]$
- 查找/etc/passwd 中的以 user开头的账号信息
cat /etc/passwd | grep -E ^user* # 看起来貌似直接使用grep不用管道也行
# 等同于 grep -E ^user* /etc/passwd