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 -e '50s/haiwao/haiwai/g' test
【评析】 如果是在vim状态下,需要替换当前行的nba改成NBA,那么就是:s/nba/NBA/gc,如果不加c就是直接替换,加c就是确认一下的意思,c是confirm。若是要替换所有的nba成NBA,语句是:%s/nba/NBA/gc。
7、在每个月的第一天备份并压缩/etc目录下面的所以内容,存放在/root/backup目录下,文件名为yymmdd_etc,并且发邮件通知维护工程师,shell程序filebach存放在/usr/bin目录下
先写一个filebach.sh
#vim /usr/bin/filebach.sh #进入脚本编辑界面
1
2
3
4
5
6
7
8
9
10
11
|
Author:管理员名称 E-mail:XXX@163.com #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" XXX@163.com
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
【评析】如果说是“显示4的倍数行” #cat -n NBA.txt|awk 'NR%4==0'
NR表示执行awk命令之后系统读取的数据行数,如果读取多个文件,行数会叠加。
FNR表示执行awk命令之后系统读取的数据行数,如果读取多个文件,行数不会叠加,每个文件都新起头。
如果题目没有写明非要用awk的话,可以使用sed命令,#sed 'n;n;n;d' NBA.txt
假如说“查看NBA.txt文件的前三行”,#awk 'NR<4 {print $0}' 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 也能达到一样的效果。
11、同一端口可否同时被两个应用监听?
别说两个,一百个都可以。但是不可以有两个以上的动态进程监听,也就是说,可以一个动态进程+若干个静态进程。
12、假设有如下内容的name.txt和team.txt,然后对应球员和所属球队进行整合
[root@ChrisChan mysql]# cat name.txt
1 curry
2 harden
3 kobe
4 durant
[root@ChrisChan mysql]# cat team.txt
4 thunders
1 warriors
2 rockets
3 lakers
1
2
3
4
5
6
7
|
#!/bin/bash for ((i=1;i<=4;i=i+1))
do
a=$( grep $i employee.txt)
b=$( grep $i team.txt| awk '{printf $2}' )
echo $a $b
done
|