Linux面试

Linux面试

Linux体系结构

Linux体系结构主要分为用户态(用户上层活动)和内核态。

  • 内核:本质是一段管理计算机硬件设备(CPU、内存空间,硬盘接口,网络接口等)的程序,所有的计算机操作都要通过内核传递给硬件。用户态以及上层应用的活动空间,应用程序的执行必须依托于内核提供的资源,包括CPU资源,存储资源,IO资源等。为了使上层应用访问到这些资源,内核必须为上层应用提供访问的接口,即系统调用
  • 系统调用:内核的访问接口,是一种不能再简化的操作。
  • 公用函数库:系统调用的组合拳。
  • shell本质上是个命令解释器,下通系统调用,上通各种应用, 同时是可编程的。

如何查找特定的文件

1.find

语法 find path [options] params
  • 作用:在指定目录下查找文件和子目录

    find -name 文件名
    会在当前目录递归寻找,最终找到文件夹或文件
    
    find / -name 文件名
    会从根目录递归寻找文件
    
    find ~ -name "target*"
    会从home目录下递归寻找target打头的文件名
    
    find ~ -iname "target*"
    从home目录下忽略大小写递归查询target打头的文件名
    
    man find
    查找find指令相关用法
    

检索文件内容

1. grep

语法: grep [options] pattern file
  • 全称 Global Regular Expression Print
  • 作用:查找文件里符合条件的字符串。能使用正则表达式搜索文本,并把匹配的行打印出来
grep "moo" target*
从target打头的文件里查找moo打头的行

若grep指令后不输入文件名如(grep "haha"),那系统就会等待用户输入,输入haha后时才会反应

2.管道操作符 |

  • 可将指令连接起来,前一个指令的输出作为后一个指令的输入

    img

tail -f catalin.out| grep "异常"
在实时输出的日志里查询"异常"所在的行

find ~ | grep "target"
find ~ 在Home目录下递归查询所有的文件和文件夹
grep "target"会从当前的标准输入中获取数据查询"target"所在的行
将find ~ 查询到的内容作为输入传递到grep "target"语句中。
  • 使用管道注意的要点
    • 只处理前一个命令的正确输出,不处理错误输出
    • 管道操作符(|)右边命令必须能够接受标准输入流,否则传递过程中数据会被抛弃
    • 右边的常用命令 sed,awk,grep,cut,head,top,less,more,wc,join,sort,split等

grep 的小用法

  • -o 或 --only-matching : 只显示匹配PATTERN 部分。

  • -v:显示不匹配文本的所有行

    grep 'abc' filename| grep -o 正则表达式
    查找filename含字符串abc所在行中满足正则表达式的部分
    
    ps -ef|grep tomcat
    查找和tomcat相关的进程的信息
    
    ps -ef|grep tomcat|grep -v "grep"
    在上面指令的基础上去除掉 进程 ps -ef|grep tomcat|grep -v "grep"
    

对文件内容做统计

1. awk

awk特别适合处理表格化的数据

语法:awk [option] 'cmd' file
  • 一次读取一行文本,按输入分隔符进行切片, 切成多个组成部分。

  • 将切片直接保存在内建的变量中,$1,$2…($0表示行的全部)。

  • 支持对单个切片的判断,支持循环判断,默认分隔符为空格。

    img

awk '{print $1,$4}' netstat.txt将切片1(proto列)和切片4(Local列)打印出来
awk '$1=="tcp" && $2==1{print $0}'筛选出切片1=tcp,切片2=1的行,并把整行都打印出来

如果我们同时想读取表头,就可以写

awk '($1=="tcp" && $2==1)|| NR==1 {print $0}'

NR是内建变量表示从awk开始执行后,按照记录分隔符读取的数据次数,默认的记录分隔符为换行符,因此默认的就是读取的数据行数,NR可以理解为Number of Record的缩写

awk默认用空格将信息按列分隔开,我们可以使用其他符号来把列分开

  • -F : 声明分隔符来分隔行内容
awk -F "," '{print &2}' test.txt

2.统计操作

例子:筛选出partial==true的引擎,并统计该引擎partial为true的次数

grep 'partial\[true\]' XXX.log |grep -o 'engine\[[0-9a-z]*\]'

筛选出partial[true]的行中engine[XXXX]的部分

grep 'partial\[true\]' XXX.log |grep -o 'engine\[[0-9a-z]*\]'|awk '{enginearr[$1]++}END[for(i in enginearr) print i "\t" enginearr[i]]'

3.常见指令

awk '{print $1,$4} XXX.txt' //筛选出文件中某一列的数据,筛选文件也可以是多个,只要按照空格再传入多个文件即可

awk '$1=="tcp" && $2==1 {print $0}' netstat.txt //对列依据一定的条件筛选文件的行数据

awk '{enginearr[$1]++}END{for (i in enginearr) print i "\t" enginearr[i]}' 对内容逐行进行统计操作,并列出统计次数和统计对象

-F可以声明分隔符

批量替换文档里的内容

1.sed

语法:sed[option] 'sed command' filename
  • 全名 stream editor,流编辑器
  • 适合对行操作

​ 例子:如下部分str部分开头大写,我们想改为String

sed 's/^Str/String' replace.java

s代表替换,^Str代表以Str开头内容,将它们替换成String.

但是sed 默认将改变后的内容输出到终端,如果要改变文件内容,还需要加入-i

sed -i 's/^Str/String' replace.java

img

替换每一行的结尾的.为;

sed -i 's/\.$/\;/' replace.java

$表示以XX结尾。

sed 默认只替换一行中首次出现的字符串,如果要进行全文替换,需要加g

2. 删除某行

删除的空行

sed -i '/^ *$/d'

d表示要删除符合条件的行

vim 小用法

vim一个文件后

输入 /[你想查找的字段]

就可以标亮你想查找的字段

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值