一 概述
Linux操作系统的体系结构主要分为用户态和内核态,用户态通过系统公共函数进行系统调用以使用内核态的功能。Linux中的内核本质为一段管理计算机硬件设备的程序,系统调用为内核的访问接口,是一种不能再简化的操作,公共函数将系统调用进行封装提供给用户使用。
shell:命令解释器,我们可以进行shell编程,shell脚本同样对系统调用进行了一次封装。
二 grep检索文件内容
grep用于在文本中执行关键字搜索,并显示匹配的结果
grep --help
Usage: grep [OPTION]... PATTERNS [FILE]...
Search for PATTERNS in each FILE. //查找指定文件中符合条件的字符串
Example: grep -i 'hello world' menu.h main.c
PATTERNS can contain multiple patterns separated by newlines.
格式
grep [参数] [文件]
grep命令的参数及其作用
参数 | 作用 |
-b | 将可执行文件(binary)当作文本文件(text)来搜索 |
-c | 仅显示找到的行数 |
-i | 忽略大小写 |
-n | 显示行号 |
-v | 反向选择——仅列出没有"关键词"的行 |
例子
grep ''test" target*
从target开头的文件中,查出含有test字符串的信息,结果会返回含有test字符串的行信息
从日志文件中查出目标信息
要求:从海量文件中共直接查出某字段
命令:grep "test" 文件 | grep -o "grep\[[0-9a-z]*\]"
[]为特殊字符需要通过转义字符\[ \]进行转义。
命令:grep -c "payMethod" all.log
二 管道操作符 |
管道操作符 | 可以将指令连接起来,前一个指令的标准输出作为后一个指令的标准输入。
管道命令只能处理前一个命令的正确输出,错误输出则不会进行处理,同时管道右边的命令必须能接收标准输入输出流,否则左侧传递过来的数据会被抛弃,如echo
常见的能够接收标准输入输出流的命令
sed,awk,grep,cut,head,top,less,more,wc,join,sort,split等
查询系统的进程信息:ps -ef
从进程信息中查出属于zero的进程信息:ps -ef | grep zero
从zero进程信息中过滤grep命令本省:ps -ef | grep zero | grep -v "grep"
三 find命令
find命令用于按照指定条件来查找文件。
find [查找路径] 寻找条件 操作
find命令中的参数及作用
参数 | 参数的作用 |
-name | 匹配名称 |
-perm | 匹配权限(mode为完全匹配,-mode为包含即可) |
-user | 匹配所有者 |
-group | 匹配所有组 |
-mtime -n +n | 匹配修改内容的时间(-n指n天之内,+n指n天以前) |
-atime -n +n | 匹配访问文件的时间(-n指定n天以内,+n指定n天以前) |
-ctime -n +n | 匹配修改文件权限的时间(-n指n天以内,+n指n天以前) |
-nouser | 匹配无所有者的文件 |
-nogroup | 匹配无所有组者的文件 |
-newer f1 !f2 | 匹配比文件f1新但比f2旧的文件 |
--type b/d/c/p/l/f | 匹配文件类型(后面的字母依次表示为:块设备,目录,字符设备,管道,链接文件,文本文件) |
-size | 匹配文件的大小(+50KB为查找超过50KB的文件,而-50KB为查找小于50KB的文件) |
-prune | 忽略某个目录 |
-exec ......{}\; | 后面可跟用于进一步处理搜索结果的命令,{}表示find命令搜索出的每一个文件,并且结尾必须是\; |
find + path:递归列出path路径下的所有文件及目录。
查询指定文件名的文件:find -name "name"
- find dir -name "name" //精确查找文件
- find dir -name "name*" //模糊查找文件
- find dir -iname "target*" //不区分文件名大小写查找文件
四 sed完成文件内容的批量替换
在输出内容上修改不会影响文件本身:sed '^tes/text/g' target.txt
^tes表示tes为将被替换掉的内容
text表示^tes会被text替换
在文件本身上对内容修改:sed -i '^tes/text/g' target.txt
五 awk对文件中的内容进行统计
将文件中的第一列和第三列数据输出:awk '{print $1,$3}' fileName
将文件中的每一列都输出:awk '{print $0}' fileName
将文件中第一列为tcp且第三列为tcp1的数据输出:awk 'S1 == "tcp" && $3 == "tcp1" {print $0}' awk.txt
在上述基础上输出表头:awk '(S1 == "tcp" && $3 == "tcp1") || NR==1 {print $0}' awk.txt
awk默认以空格将字段进行分隔。
以其他符号作为分隔符:awk -F "符号" '{print $2}' fileName
统计某些内容出现的次数:
grep "test" target.txt | grep -o "grep\[[0-9a-z]*\]" | awk '{greparr[$1]++}END{for(i in greparr)print i "\t" greparr[i]}'