Linux
导航:
一. Linux的体系结构
1.1 体系结构
-
图示:
-
解析:
- 体系结构主要分为用户态(用户上层活动)和内核态
- 内核: 本质是一段管理计算机硬件设备的程序
- 系统调用:内核的访问接口,是一种能再简化的操作
- 公用函数库: 系统调用的组合拳
- Shell:命令解释器,可编程 [是指“为使用者提供操作界面”的软件(命令解析器)。它类似于DOS下的command.com和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。它可以写shell脚本执行]
-
命令:
- echo $SHELL # 查看Shell版本
- cat /etc/shells # 查看支持的Shell版本
- chsh -s xxx # 切换到指定的shell版本上;比如: cash -s /bin/dash 或 cash -s /bin/sh 等
1.2 如何查找特定的文件
- find
- 语法:
find path [options] params
- 作用: 在 ** 指定目录 ** 下查找文件
- 图示:
- 语法:
前面是输入命令,后面是显示了结果
- 总结:
- 当在本目录中查找指定的文件的时候:
find -name "target3.java"
- 全局搜索指定的文件的时候:
find / -name "target3.java"
- 模糊搜索:
find ~ -name "target*"
# 这里的~是路径,可以填其他 - 忽略大小写:
find ~ -iname "target*"
- 搜索其他指令:
man find
- 当在本目录中查找指定的文件的时候:
1.3 检索文件内容
- grep:
- 语法:
grep [options] pattern file
- 全称:
- Global Regular Expression print
- 作用:查找文件里符合条件的字符串
- 示例:
grep "moo" target* # 检索target开头的文件的内容中带有"moo" 的数据
- 语法:
1.4 管道操作符
- 管道操作符: |
-
描述:可将指令连接起来,前一个指令的输出作为后一个指令的输入
-
图示:
-
操作:
- 意义一样的命令:
find ~ -name "target*" 与find ~ | grep "target"
- 意义一样的命令:
-
注意:
- 使用管道只处理前一个命令的正确输出,不处理错误输出;即管道的语法以及内容要输入正确
- 右边的命令必须能够接受标准输入流,否则传递过程中数据会被抛弃
- sed,awk,grep,cut,head,top,less,more,wc,join,sort,split等
-
1.5 面试里常用的方式
- grep ‘partial[true]’ bsc-plat-al.data.info.log’ 查找包含的某个文件并展示出来
- grep -o ‘engine[[0-9a-z]*]’
- grep -v ‘grep’
二. 其他常用命令
2.1 awk
- 语法:
awk [options] 'cmd' file
- 解析:
- 一次读取一行文本,按输入分隔符进行切片,切成多个组成部分
- 将切片直接保存在内建的变量中,$1,$2…($0表示行的全部)
- 支持对单个切片的判断,支持循环判断,默认分隔符为空格
- 图示:
这里的netstat.txt中的内容格式如图,而第二句:
awk '{print $1,$4}' netstat.txt
将值以空格剪切,打印每行第一个空格和第四个空格前内容
- 图示二:
这里语句:
awk '$1=="tcp" && $2==1{print $0}' netstat.txt
则将第一个空格和第二个空格前的值必须满足这两个条件显示;
- 图示三:
这里语句
cat test.txt
则显示这个文件的内容;awk -F "," '{print $2}' test.txt
是显示第二个以逗号分隔前的内容; 如果不使用** -F “,” **则不显示内容
2.2 统计
- 操作:
- 使用命令查找某个文件并排序展示出来| -o 筛选中符合正则表达式的内容:
grep 'partial\[true\]' bsc-plat-al-data.info.log | grep -o 'engine\[[0-9a-z]*\]'
- 展示的数据:
- 使用命令查找某个文件并排序展示出来| -o 筛选中符合正则表达式的内容:
- 使用管道组合命令统计出现的次数:
- 语句:
grep 'partial\[true\]' bsc-plat-al-data.info.log | grep -o 'engine\[[0-9a-z]*\]' | awk '{enginearr[$1]++}END{for(i in enginearr)print i "\t" enginearr[i]}'
- 显示的内容:
- 语句:
2.3 面试里常用的方式:
- awk ‘{print $1,$4}’ netstat.txt
- awk ‘$1==“tcp” && $2==1 {print $10}’ netstat.txt
- awk ‘{enginearr[$1]++}END{for(i in enginearr)print i “\t” enginearr[i]}’
2.4 批量替换文本的内容
-
sed
- 语法:
set [option] 'sed command' filename
- 全名stream editor ,流编辑器
- 适合用于对文本的行内容进行处理
- 语法:
-
替换Str->String
解析: 使用’sed ‘s/^Str/String/’ replace.java’ 替换掉的内容是一个类似视图的内容,它没有对源文件真正修改,如果需要修改则需要加 “-i” ,就是此句才行:
sed -i 's/^Str/String/' replace.java
- 对标点符号修改,将逗号替换为分号,以及替换姓名图示:
解析: 这里使用:
sed -i 's/\.$/\;/' replace.java
将结尾的句号替换为了分号;这里使用’sed -i ‘s/Jack/me/’ replace.java’ 将Jack替换为me,而有一小部分是没有被替换的,我们可以在最后面加个g,即可全部替换,语句为:sed -i 's/Jack/me/g' replace.java
- 删除空格
使用语句:
sed -i '/^ *$/d' replace.java
即可删除空格;
- 删除指定行如: Integer
这里通过语句:
sed -i '/Integer/d' replace.java
删除了指定的Integer行
2.6 面试中常用的批量替换文本的语句:
sed -i 's/^Str/String/' replace.java
sed -i's/\.$/\;/' replace.java
sed -i's/Jack/me/g' replace.java
2.7 面试经常涉及到的Shell指令
- find 文件检索
- grep 文件内容检索
- 管道操作符 | 输出结果当输入参数的联合操作
- awk 数据统计和数据抽取
- sed 批量编辑
2.8 跳槽过程中容易忽略的细节
- 面试要偷偷摸摸的进行 [不要对工作造成影响,同时也要提前找下家,裸辞慎重]
- 面试时间不要一味将就对方 [可以选择一个相对自己合适的时间]
- 提离职要谨慎 [确保拿到Offer,且自己满意的工作]
- 好聚好散 [有些公司会背调,回访以前自己的公司员工,交接要做好,不要离职就把怨气发在公司上面]
- 跳槽时间衔接: 一般15号之后离职,下个月15号前入职社保不会断