Linux——查找过滤(tail、grep、find)
tail
基本格式:
tail [ -f ] [ -c Number | -n Number | -m Number | -b Number | -k Number ] [ File ]
参数解释:
-f 该参数用于监视File文件增长。 -c Number 从 Number 字节位置读取指定文件 -n Number 从 Number 行位置读取指定文件。 -m Number 从 Number 多字节字符位置读取指定文件,比方你的文件假设包括中文字,假设指定-c参数,可能导致截断,但使用-m则会避免该问题。 -b Number 从 Number 表示的512字节块位置读取指定文件。 -k Number 从 Number 表示的1KB块位置读取指定文件。 File 指定操作的目标文件名称
示例:
tail -300f shopbase.log #倒数300行并进入实时监听文件写入模式
tail -f catalina.out |grep "S201903161209220000001" #输出指定文件的指定内容
grep
grep是根据文件的内容进行查找,会对文件的每一行按照给定的模式(patter)进行匹配查找。
基本格式:
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN]... [-f FILE]... [FILE...]
[options]主要参数:
OPTIONS: -e: 使用正则搜索 -i: 不区分大小写 -v: 查找不包含指定内容的行 -w: 按单词搜索 -c: 统计匹配到的次数 -n: 显示行号 -r: 逐层遍历目录查找 -A: 显示匹配行及前面多少行, 如: -A3, 则表示显示匹配行及前3行 -B: 显示匹配行及后面多少行, 如: -B3, 则表示显示匹配行及后3行 -C: 显示匹配行前后多少行, 如: -C3, 则表示显示批量行前后3行 --color: 匹配到的内容高亮显示 --include: 指定匹配的文件类型 --exclude: 过滤不需要匹配的文件类型
pattern正则表达式主要参数:
\: 忽略正则表达式中特殊字符的原有含义。 ^: 匹配正则表达式的开始行。 $: 匹配正则表达式的结束行。 \<: 从匹配正则表达 式的行开始。 \>: 到匹配正则表达式的行结束。 [ ]: 单个字符,如[A]即A符合要求 。 [ - ]: 范围,如[A-Z],即A、B、C一直到Z都符合要求 。 .: 所有的单个字符。 *: 有字符,长度可以为0。
示例:
grep 'forest' f.txt #文件查找 grep 'forest' f.txt cpf.txt #多文件查找 grep 'log' /home/admin -r -n #目录下查找所有符合关键字的文件 grep 'shopbase' /home/admin -r -n --include *.{vm,java} #指定文件后缀 grep 'shopbase' /home/admin -r -n --exclude *.{vm,java} #反匹配
find
find命令是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空,访问时间,修改时间等。
基本格式:
find pathname -options [-print -exec -ok ...]
参数:
pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。 -print:find命令将匹配的文件输出到标准输出。 -exec:find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' { } ;,注意{ }和;之间的空格。 -ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。 find[options]命令选项: -name:按照文件名查找文件。 -perm:按照文件权限来查找文件。 -prune:使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略。 -user:按照文件属主来查找文件。 -group:按照文件所属的组来查找文件。 -mtime -n +n:按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。find命令还有-atime和-ctime 选项,但它们都和-m time选项。 -nogroup:查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。 -nouser:查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。 -newer file1 ! file2:查找更改时间比文件file1新但比文件file2旧的文件。 -type
示例:
- 按照文件名查找
find / -name httpd.conf #在根目录下查找文件httpd.conf,表示在整个硬盘查找 find /etc -name httpd.conf #在/etc目录下文件httpd.conf find /etc -name 'srm' #使用通配符(0或者任意多个)。表示在/etc目录下查找文件名中含有字符串‘srm’的文件 find . -name 'srm' #表示当前目录下查找文件名开头是字符串‘srm’的文件
- 按照文件特征查找
find / -amin -10 # 查找在系统中最后10分钟访问的文件(access time) find / -atime -2 # 查找在系统中最后48小时访问的文件 find / -empty # 查找在系统中为空的文件或者文件夹 find / -group cat # 查找在系统中属于group为cat的文件 find / -mmin -5 # 查找在系统中最后5分钟里修改过的文件(modify time) find / -mtime -1 #查找在系统中最后24小时里修改过的文件 find / -user fred #查找在系统中属于fred这个用户的文件 find / -size +10000c #查找出大于10000000字节的文件(c:字节,w:双字,k:KB,M:MB,G:GB) find / -size -1000k #查找出小于1000KB的文件
- 使用混合查找方式查找文件
参数有: !,-and(-a),-or(-o)
find /tmp -size +10000c -and -mtime +2 #在/tmp目录下查找大于10000字节并在最后2分钟内修改的文件 find / -user fred -or -user george #在/目录下查找用户是fred或者george的文件文件 find /tmp ! -user panda #在/tmp目录中查找所有不属于panda用户的文件