目录
Linux的体系结构
- 体系结构主要分为用户态(用户上层活动)和内核态
- 内核:本质是一段管理计算机硬件设备的程序(Linux启动后首先启动内核)
- 系统调用:内核的访问接口,是一种能再简化的操作
- 公用函数库:系统调用的组合拳(实现对系统的封装,将简单的业务逻辑呈现给用户)
- Shell指令:命令解释器,可编程(没有图形界面之前,shell充当了用户界面,编写的程序就叫shell脚本)
man 2 syscalls: 查看所有系统指令
man 2 acct : 查看相关系统调用说明(这里是acct)
man 2 :表示查看系统调用
man 3 :表示查看公共库函数
man 指令:表示查看用法
ls -lrt :表示查看当前目录以及相关参数
cat 文件名1 文件名2 ... :表示查看文件的指令(连接显示多个文件)
less 文件名 :表示打开文件查看(类似于vi、vim但是只能查看不能修改)
more文件名 :表示查看文件内容(类似于cat,只能显示一个文件名,并且可以一页一页显示方便查看)
echo $SHELL : 查看当前shell版本
cat /etc/shells:查看本机器etc支持的版本
chsh -s 路径 : 切换shell指令
如何查找特定的文件
find
语法: find path [options] params 在指定目录下查找文件
- 当前目录下搜索:
- 全局搜索:
- 模糊搜索:
忽略大小写的模糊指令
find -iname "demo*"
检索文件内容
grep指令
语法:grep [options] pattern file grep用于查找文件里符合条件的字符串
- 查找目录下包含某字符串的文件内容所在的行并打印出来:
管道操作符 |
注意:
- 只处理前一个命令正确输出,不处理错误输出
- 右边命令必须能够接收标准输入流,否则传递过程中数据会被拋弃
- 常用来接受管道输出的命令有:sed, awk, grep, cut, head, top,less, more, wc join, sort, splits
grep在面试中常用的方式:
- grep 'partial\[true\]' demo.log //在demo.log中查找出包含partial[true]的行并展示
- grep -o 'engine\[[0-9a-z]*\]' //通过-o 命令筛选出符合正则表达式的内容
- grep -v 'grep' //通过-V 命令过滤掉包含grep字符串的结果
对文件内容做统计
awk指令(适合格式化的文档,类似于Excel的文档)
语法:awk [options] 'cmd' file
- 一次读取一行文本,按输入分隔符进行切片,切成多个组成部分
- 将切片直接保存在內建的变量中,$1,$2...($0表示行的全部)
- 支持对单个切片的判断,支持循环判断,默认分隔符为空格
我们实现准备好一个文本
查看一下:
- 统计出第二列和第四列的内容:
- 找出第二列等于hx,第四列等于100的那些行:
- 找出第二列等于hx,第四列等于100的那些行并保存表头(NR==1保存第一行):
注意:awk默认是使用空格来进行分隔的,当然也可以使用别的符号。
- 例如使用逗号作为分隔符(使用-F做参数)
awk -F "," '$2=="hx" && $4==100 {print $0}' lmm
- awk统计次数
批量替换文件内容
sed指令
语法:sed [option] 'sed command' filename sed全名stream editor,流编辑器,用于对文本的行内容进行处理
把id为1的全部改为520
但是并未更改lmm文档中的实际内容,只是把修改之后内容输出,要实际替换需要加入-i属性
面试中常见的用法:
通式 sed -属性 's/原内容/替换内容' 目标文件
- sed -i 's/^1/520/' lmm 其中^表示以什么开头
- sed -i 's/\.$/\;/' lmm 其中$表示以什么结尾,整句话的意思是替换lmm文档中以句号结尾的改为分号(符号是特殊字符需转义)
- sed -i 's/1/2/' lmm 把每一行的第一个1改成2
- sed -i 's/1/2/g' lmm 把每一行的所有的1改成2
- sed -i '/^ *$/d' lmm 删除文档空行
- sed -i '/gzy/d' lmm 删除文档包含gzy字符串的行
sed还能移动和搜索等功能,这里不再赘述