测试开发工程师面试总结(三)——Linux基础篇

###一个面试失败者引发的提问

某大厂面试官Boss问了一个测试五年以上的工程师一个基础的Linux致命题,以下为对话:

  • Boss:用一条命令查出机器上所有python进程,并杀掉
  • 候选人:ps -ef|grep python|kill -9 ,先grep之后并kill
  • Boss:这个不能杀掉进程。提示:可以考虑下如何传递参数
  • 候选人:不清楚。。。
    (此处省略一千字……面试失败)

面试官非常郁闷,开始怀疑是不是自己的问题太偏门了,于是开始灵魂拷问组员,以下为群消息:

  • Boss:不许上网,5s给出答案, 用一条命令查出机器上所有python进程,并杀掉。点名同学回答@A @B @C
  • A:(内心OS:还好以前常用)ps -ef|grep python|grep -v grep|cut 9-15|xargs kill -9
  • Boss: 知道xargs是什么意思吗?给大家解释一下。
  • A: 用来传参用的,通过管道得到的结果作为下一个命令的参数
  • Boss:那为什么不直接继续kill -9,非得xargs kill -9呢?xargs和管道符“|”的区别说一下啊?
  • A:不好说。。(阵亡)
  • B:管道是实现“将前面的标准输出作为后面的标准输入”,xargs是实现“将前面的标准输出作为命令的参数”(现场演示中)
  • C:感觉这个更好一些。ps -ef| grep ‘python’ | grep -v grep | awk ‘{print $2}’ | xargs -r kill -15 ,15是正常退出吧,9是强制退出。
    -Boss:15和9分别是什么signal?
  • A、B、C:(感觉要被问傻了。。。)
  • B:一二三,上图
    测试开发工程师面试总结(三)——Linux基础篇_第1张图片
  • Boss: term是什么的缩写?
  • D:(抢答)termination!
    (Boss很满意,终于告一段落)
  • Boss:大家工作时,除了知道该怎么做事情,还得知道为什么要这么做,凡事多往前走一步……

常见面试命令

上面的例子足以说明,命令是永远不可能止于命令的,背后还有着面试官对候选人问题了解深度的考量。那么该从哪些角度出发去准备Linux基础呢?

1. 查找类的命令sed awk grep 等

sed是文本查找和替换常用的工具,我经常用来替换固定字符(支持正则),例如

将a.conf 中的properties全部替换为property:
sed -i ‘s/properties/property/g’ a.conf

awk非常强大,除了查找或者过滤还能用来做一些计算,默认分隔符号为空格,例如

打印文件最后两行:
awk ‘{print KaTeX parse error: Undefined control sequence: \t at position 9: (NF-1),"\̲t̲",NF}’ file
计算文件的总行数:
awk ‘{print NR}’ file
[复杂计算]计算文件的第一列的值并且求平均
cat file|awk ‘{sum+=$1} END {print "Average = ", sum/NR}’
可自行探索awk的更多计算方法

grep也支持正则,曾经被考过的一个面试题:

查询2019-04-12 01-20点时间段内的log:
grep -E ‘2019-04-12 ([01][0-9]|20)’ log/*.log
以上三者经常可以互换,也是面试官爱考的题目之一。

2. 机器服务相关的命令

telnet [IP] [port] 查看目标服务是否正常访问
lsof -i:[port] 查看某个端口的占用情况
netstat -pnltu 查看服务及端口,结合grep使用

3. 句柄类相关的命令

lsof|awk ‘{print $2}’|wc -l 查看服务句柄数

4. 其他常用命令

ip addr show 查看本机ip地址(也可以用ipconfig)
crontab的用法
pwdx [pid] 可以查看进程所在的目录

你可能感兴趣的:(测试相关,linux,面试)