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