剑指Java面试-Linux整理(不定期更新!)
一、Linux的体系结构
- 体系结构主要分为用户态(用户上层活动)和内核态
- 内核:本质是一段管理计算机硬件设备的程序
- 系统调用:内核的访问接口,是一种不能再简化的操作
- 公用函数库:系统调用的组合拳(实现了一组系统调用的封装)
- Shell:命令解释器,可编程
二、如何查找特定的文件
find
- 语法:
find path [options] params
- 作用:在指定目录下查找文件
面试里常用的方式:
-
find ~ -name "target3.java"
:精确查找文件 -
find ~ -name "target*"
:模糊查找文件 -
find ~ iname "target*"
:不区分文件名大小写去查找文件 -
man find
:更多关于find指令的使用说明
三、检索文件内容
grep
- 语法:
grep [options] pattern file
- 全程:Global Regular Expression Print
- 作用:查找文件里符合条件的字符串
**管道操作符 | **
- 可将指令连接起来,前一个指令的输出作为后一个指令的输入
使用管道注意的要点:
- 只处理前一个命令的正确输出,不处理错误的输出
- 右边命令必须能够接收标准输入流,否则传递过程中数据会被抛弃
- 常用来作为接收管道数据的指令有:sed,awk,grep,cut,head,top,less,more,wc,join,sort,split等
面试里常用的方式:
-
grep 'partial\[true\]' xxx.info.log
:查找文件中包含某个字段的行并将相关的行展示出来 -
grep -o 'engine\[[0-9a-z]*\]'
:通过正则筛选内容 -
grep -v 'grep'
:过滤操作
四、对文件内容做统计
awk
- 语法:
awk [options] 'cmd' file
- 一次性读取一行文本,按输入分隔符进行切片,切成多个组成部分
- 将切片直接保存在内建的变量中,
$1,$2
…($0表示行的全部) - 支持对单个切片的判断,支持循环判断,默认分隔符为空格
面试里常用的方式:
-
awk '{print $1,$4}' netstart.txt
:筛选出文件内容里某些列的数据 -
awk '$1=="tcp"&&$2==1{print $0}' netstart.txt
:依据一定的条件筛选文件内容里某些列的数据 -
awk '{enginearr[$1]++}END{for(i in enginearr)print i"\t"enginearr[i]}'
:逐行对文件内容做统计操作并列出对应的统计结果 -
awk -F ","'{print $2}'
:-F指定分隔符符号
五、批量替换文本内容
sed
- 语法:
sed [option] 'sed command' filename
- 全名stream editor,流编辑器
- 适合用于对文本的行内容进行处理
面试里常用的方式:
-
sed -i 's/^Str/String/' xxx.java
:筛选出以Str打头的行并将Str替换为String,-i是直接修改,不加的话只会将替换后的内容输出并不会改变原文件 -
sed -i 's/\.$/\;/' xxx.java
:筛选出 . 号结尾的行并将其替换成分号 -
sed -i 's/Jack/me/g' xxx.java
:将Jack替换为me,g表示替换全文内容,没有g只替换第一次 -
sed -i '/^ *$/d' xxx.java
:根据指定内容删除行