LInux中的查找
- 一、grep
- 二、find
- 2.1 基本用法
- 2.2 -exec 命令选项
- 2.3 配合 xargs 命令
- 三、awk
一、grep
Global Regular Expression Print,表示全局正则表达式版本。grep 命令用于查找文件里符合条件的字符串的一列。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。
1、查找时不区分字符串的大小写
代码语言:javascript复制grep -i ${“查找的字符串”文件名}
2、查找时使用正则表达式,匹配符合的字符串
代码语言:javascript复制grep -e ${“正则表达式”文件名}
3、查找不匹配指定字符串的行:
代码语言:javascript复制grep -v ${“被查找的字符串”文件名}
4、查找时显示被查找字符串所在的行数
代码语言:javascript复制grep -n ${“查找的字符串”文件名}
5、其他
代码语言:javascript复制-q 或 --quiet或--silent : 不显示任何信息。
-w 或 --word-regexp : 只显示全字符合的列。
5、其他
代码语言:javascript复制-c <显示符合条件的个数>
-C <显示行数> 或 --context=<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前后的内容。
-d <动作> 或 --directories=<动作> : 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
-r <递归查询目录>
-f <规则文件> --file=<规则文件> #指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
参考文章
二、find
2.1 基本用法
用于在文件树中(目录结构下)查找文件,并作出相应的处理 。
- 命令参数 pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。 -print: find命令将匹配的文件输出到标准输出。 -exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为’command’ { } ;,注意{ }和;之间的空格。 -ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
- 命令选项 -name 按照文件名查找文件。 -perm 按照文件权限来查找文件。 -mtime -n n 按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内, n表示文件更改时间距现在n天以前。 -size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。 -type 查找某一类型的文件,诸如: b - 块设备文件。 d - 目录。 c - 字符设备文件。 p - 管道文件。 l - 符号链接文件。 f - 普通文件。 -fstype,- aount,- follow在文件系统、挂载点、链接文件中查询。
- 时间 atime(access time):在读取文件或者执行文件时更改,即文件最后一次被读取或执行的时间。 mtime(modify time):在写入文件时随文件内容的更改而更改,是指文件内容最后一次被修改的时间。 ctime(change time):在写入文件、更改所有者、权限或链接设置时随 Inode 的内容更改而更改,即文件状态(属性)最后一次被改变的时间。
-amin n 查找系统中最后N分钟访问的文件
-atime n 查找系统中最后n*24小时访问的文件
-cmin n 查找系统中最后N分钟被改变文件状态的文件
-ctime n 查找系统中最后n*24小时被改变文件状态的文件
-mmin n 查找系统中最后N分钟被改变文件数据的文件
-mtime n 查找系统中最后n*24小时被改变文件数据的文件
- 示例
- 根据关键字查找
# 在当前目录查找以.log结尾的普通文件,并排序
find . -type f -name "*.log" | sort
- 按照目录或文件的权限来查找文件
# 查找opt下查找权限为777,大小大于1K的文件
find /opt/ -size 1000c -perm 777
2.2 -exec 命令选项
find命令将所有匹配到的文件,以{}
表示,一起传递给exec执行。
-exec
参数后面跟的是command命令,它的终止是以;
为结束标志的,考虑到各个系统中分号会有不同的意义,前面加反斜杠。
- 示例
- 在目录中查找更改时间在n日以前的文件并删除它们
find . -type f -mtime 14 -exec rm {} ;
在shell中用任何方式删除文件之前,应当先查看相应的文件,建议使用-exec
的安全模式-ok
。
- 查找文件移动到指定目录
find . -name "*.log" -exec mv {} /home/logs ;
- -exec中使用grep命令
find /etc -name "account*" -exec grep "username" {} ;
查找文件名包含“account”中,匹配“root”字段的行。
2.3 配合 xargs 命令
有些系统对能够传递给exec的命令长度有限制,容易出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。使用 -exec 选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行,效率不高。 而使用 xargs 命令则只有一个进程,是否分批获取参数视情况而定。
- 查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件
# 显示为:
# ./log2013.log: empty
# ./log2012.log: ASCII text
find . -type f | xargs file
- 在整个系统中查找内存信息转储文件(core dump) ,然后把结果保存到/tmp/core.log 文件中
find / -name "core" -print | xargs echo "" >/tmp/core.log
- 在当前目录下查找所有用户具有读、写和执行权限的文件,并收回相应的写权限·
find . -perm -7 -print | xargs chmod o-w
三、awk
awk工作流程是这样的:读入有’n’换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,0则表示所有域,1表示第一个域,n表示第n个域。NF 表示的是浏览记录的域的个数,NF 表示的最后一个Field(列),即输出最后一个字段的内容默认域分隔符是"空白键" 或 “[tab]键”。
代码语言:javascript复制# 查找/opt/app/conf中properties文件格式的文件名,去掉前面的路径,只保留文件名
find /opt/app/conf -name "*.properties"|awk -F "/" '{print $NF}'