作者:_名花侑主 | 来源:互联网 | 2023-08-31 20:04
###一个面试失败者引发的提问
某大厂面试官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:一二三,上图
- 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] 可以查看进程所在的目录