Linux运维工程师面试题第八套

1、从AAA.log文件中提取“james”或者“curry”,同时不包含“kobe”的行,然后提取“:”分割的第五个字段。

cat AAA.log|grep -E "james|curry"|grep -v "kobe"|awk -F ":" '{print $5}'

【评析】搜寻"A or B"的方法就是grep -E "A|B"的方法,-E必须写。不包含某某的方法是grep -v。分割有两个方法,一个是cut,一个是awk。注意cut和awk命令参数的不同。

上面的命令用cut写是 cat AAA.log|grep -E "james|curry"|grep -v "kobe"|cut -d : -f 2


2、请用shell查询文件AAA.log里面空格开始的所在行号

grep -n ^$ AAA.log |cut -d : -f 1

【评析】为什么cat -n AAA.log|grep ^$得不到这个效果呢?思考一下


3、Linux如何在shell环境得知远程计算机的运行时间

比较有逼格的方法是这样的:

cat /proc/uptime| awk -F. '{run_days=$1 / 86400;run_hour=($1 % 86400)/3600;run_minute=($1 % 3600)/60;run_second=$1 % 60;printf("系统 已运行:%d天%d时%d分%d秒",run_days,run_hour,run_minute,run_second)}'

【评析】其实linux有很多方法可以查看远程计算机的运行时间,#uptime也可以,#top也可以,#w也可以。而且这三种方法直接显示小时,不像/proc/uptime,用秒显示,还要换算一下。


4、如何查看当前Linux系统状态,如cpu,内存,负载,版本

前三个用top直接就看了,版本用#uname -a

【评析】如果想了解更多服务器的硬件信息。使用 cat /proc/cpuinfo


5、用一条命令查看目前系统已启动服务所监听的端口

netstat -antp|grep LISTEN

【评析】netstat -antl的结果和上面的不一样,diff -y一下,就发现 -antl会有 ESTABLISHED的项。


6、sed将文件test中第50行中的“haiwao”改为“haiwai”

sed -i '50s/haiwao/haiwai/g' test


7、在每个月的第一天备份并压缩/etc目录下面的所以内容,存放在/root/backup目录下,文件名为yymmdd_etc,并且发邮件通知维护工程师,shell程序filebach存放在/usr/bin目录下

先写一个filebach.sh

#vim /usr/bin/filebach.sh    #进入脚本编辑界面

Author:管理员名称

E-mail:[email protected]    #sh前写好名称和邮件地址是一个好习惯

#!/bin/bash

YY=$(date +%y)

MM=$(date +%m)

DD=$(date +%d)

filename=$YY$MM$DD

tar -zcvf /data/filename 888.log 999.log NBA.txt

echo "今天的文件已经打包保存完毕,请放心"|mutt -s "主人,OK" [email protected]

echo "程序已运行成功"

exit 27


:wq保存完毕之后,#crontab -e

1 0 1 */1 * sh /usr/bin/filebach.sh    #在每个月的第一天0点1分的时候启动计划任务


8、用awk命令在NBA.txt文件里不显示4的倍数行

#awk 'NR%4' NBA.txt

【评析】NR表示执行awk命令之后系统读取的数据行数,如果读取多个文件,行数会叠加。

FNR表示执行awk命令之后系统读取的数据行数,如果读取多个文件,行数不会叠加,每个文件都新起头。

如果题目没有写明非要用awk的话,可以使用sed命令,#sed 'n;n;n;d' NBA.txt


9、在NBA.txt文件里匹配式样“JORDAN”的行之后插入一空行

#sed 's/JORDAN/JORDAN \n/g' NBA.txt

【评析】sed中的整行更改的参数是c,匹配单个词的更改是g,shell里的替换用的是gc,注意区别。


10、只保留Fifa.log文件里重复行中的一行,其他都删除

sort Fifa.log|sed '$!N;/\(.*\)\n\1$/!{x;//P;x};h;D' > 新的文件路径

【评析】这道题比较难,一道题考验了sed几乎全面的知识,而且上面的那个语句的前提就是一定要先 sort,把重复的行放在相邻的位置上。

删除重复行就比较简单,sort Fifa.log|uniq > 新的文件路径,或者使用 awk '!a[$0]++' NBA.txt 也能达到一样的效果。


你可能感兴趣的:(linux,面试,shell,运维工程师)