一、Linux的体系结构
- 体系结构主要分为用户态(用户上层活动)和内核态
- 内核:本质是一段管理计算机硬件设备的程序
- 系统调用:内核的访问接口,是一种不能再简化的操作
- 公用函数库:系统调用的组合拳
- Shell:命令解释器,可编程
查看支持的shell版本:echo $SHELL; cat /etc/shells; 修改shell版本:chsh -s “shell路径”
man 2 syscalls:查看所有系统调用的接口(man 2 意思是系统调用,man 3 意思是查看公共库函数)
man 2 acct:查看系统调用接口acct
二、查找特定文件
find
- 语法:find path [options] params
- 作用:在指定目录下查找文件
eg:
find -name "xxx.py";返回xxx.py所在的路径(会从当前目录递归寻找目标文件)
find / -name "xxx.py";全局搜索xxx.py,Linux的根目录为"/"
find ~ -name "x*";查找当前用户home目录下所有以x开头的文件
find ~ -iname "x*";查找当前用户home目录下所有以x开头/X开头的文件,-iname表示不区分大小写
man find;查看find指令的用法
三、检索文件内容
grep
- 语法:grep [options] pattern file
- 全称:Global Regular Expression Print
- 作用:查找文件里符合条件的字符串
eg:
grep "xxx" "target*";从target开头的文件中找到所有包含"xxx"的行。如果不指定文件,则会从输入内容里搜索。
管道操作符 |
- 可将指令连接起来,前一个指令的输出作为后一个指令的输入
eg:
find ~ | grep "target";效果同find ~ -name "target*";其中find ~ 会列出当前用户home目录下的所有目录及文件
grep "partial\[true\]" a.log;查找a.log里面partial为true的行
grep "partial\[true\]" a.log | grep -o "engine\[[0-9a-z]*\]";返回a.log里面partial为true的行里engine为数字和字母的信息,grep -o 筛选出符合正则条件的项
ps -ef | grep tomcat;过滤出跟tomcat相关的进程信息
ps -ef | grep tomcat | grep -v "grep";过滤出跟tomcat相关但是又跟grep不相关的进程信息,grep -v 过滤掉包含相关字符串的项
使用管道注意的要点:
- 只处理前一个命令正确输出,不处理错误输出
- 右边命令必须能够接收标准输入流,否则传递过程中数据会被抛弃
- 常用支持管道的命令:sed,awk,grep,cut,head,top,less,more,wc,join,sort,split等
四、对日志内容做统计
awk
- 语法:awk [options] 'cmd' file (可传多个文件,空格隔开)
- 一次读取一行文本,按输入分隔符进行切片,切成多个组成部分
- 将切片直接保存在内建的变量中,$1,$2...($0表示行的全部)
- 支持对单个切片的判断,支持循环判断,默认分隔符为空格
eg:
awk '{print $1,$4}' a.log;输出a.log中第一个切片和第4个切片的内容,如果a.log每一行是以空格隔开,则即是输出a.log中第一列和第四列的内容。
awk '$1=="tcp" && $2==1{print $0}' a.log;输出a.log中第一个切片为"tcp",第二个切片为1的所有的行
awk '($1=="tcp" && $2==1) || NR==1 {print $0}' a.log;在上一句的基础上输出加上表头,NR==1表示第一行,默认以换行符作为分隔符
awk -F ',' '{pring $2}' b.log;指定每一行以","作为切片的分隔符,并输出每一行第二个切片内容,-F 指定分隔符
grep "partial\[true\]" a.log | grep -o "engine\[[0-9a-z]*\]" | awk '{enginearr[$1]++}END{for(i in enginearr)print i "\t" enginearr[i]}';(enginearr可自由命名)结果会输出两列,第一列是满足条件的engine,第二列是engine对应的次数
五、批量替换文件内容
sed
- 语法:sed [option] 'sed command' filename
- 全名stream editor,流编辑器
- 适合用于对文本的行内容进行处理
eg:
sed 's/^Str/String/' replace.txt;将replace.txt内容里每一行中开头的Str替换成String并输出,s表示将要进行字符串操作,默认情况下,sed命令只是将替换后的内容输出,并不会真正修改replace.txt
sed -i 's/^Str/String/' replace.txt;将replace.txt里每一行中开头的Str替换成String,直接修改replace.txt,-i 表示修改原文件内容
sed -i 's/\.$/\;/' repalce.txt;将replace.txt里每一行中末尾的"."替换成";"
sed -i 's/xx/vv/' repalce.txt;将replace.txt里每一行中的"xx"替换成"vv",只会替换每一行中第一次出现的"xx"
sed -i 's/xx/vv/g' repalce.txt;将replace.txt里每一行中的"xx"替换成"vv",g 表示全文替换
sed -i '/^ *$/d' replace.txt;删除replace.txt里的空行
sed -i '/xxx/d' replace.txt;删除replace.txt里包含"xxx"的行