2016-03-30-考试题及解答

注:原题出自老男孩教育

 

1、创建一个目录/data

解答:mkdir /data

2、/data下面建立一个文件oldboy.txt

解答:

方法一:touch /data/oldboy.txt

方法二:cat >> oldboy.txt <<EOF

>EOF

注:此处最后的EOF必须换行后输入,“>”是换行后的输入提示符。

方法三:>oldboy.txt

3、oldboy.txt增加内容“I am studying linux.”。

解答:

方法一:echo I am studying linux. > oldboy.txt

方法二:cat >> oldboy.txt <<EOF

>I am studying linux.

>EOF

注:使用这个命令,<<EOF后,必须换行输入,最后的EOF也必须换行后输入。

方法三:vi oldboy.txt

按“i”键,进入输入模式,输入“I am studying linux.”然后按“Esc”键,回到命令行模式,再按“:”进入尾行模式输入“wq”保存退出。(也可以在命令名模式输入“ZZ”,“Z”是按“shift + z”实现,快捷保存退出)

4、oldboy.txt文件拷贝到/tmp下。

解答:cp oldboy.txt /tmp/.

注:此处oldboy.txt文件可以带绝对路径,直接使用文件名时,该文件必须在当前目录下。

5、/data目录移动到/root下。

解答:mv /data/ /root/.

注:移动目录最好不要在被移动的目录下操作。

6、进入/root目录下的data目录,删除oldboy.txt文件。

解答:

cd /root/data/

rm -f oldboy.txt

注:root用户默认对rm做了别名处理,不加-f参数,会提示是否要删除该文件,出现提示,输入y按回车就行。

7、接第6题,退出到上一级目录,删除data目录。

解答:

cd ../

rmdir ./data/

注:由于data目录已经是空目录,所以可以直接用rmdir进行删除。另外可以用rm -rf ./data/删除该目录。

8、已知test.txt内容为:

test

liyao

oldboy

请给出输出test.txt文件内容是不包含oldboy字符串的命令。

解答:

方法一:head -2 test.txt

方法二:grep -v oldboy test.txt

方法三:sed -n 1,2p test.txt

方法四:awk NR < 3 {print $0} test.txt

此处用awk NR <  3 {print $1} test.txt也可以,因为每行只有一列,所以$0$1等效。

方法五:sed /oldboy/d test.txt

9、请用一条命令创建目录/oldboy/test,即创建/oldboy目录及/oldboy/test目录。

解答:mkdir -p /oldboy/test

10、已知/tmp下已经存在test.txt文件,如何执行命令才能把/mnt/test.txt拷贝到/tmp下覆盖掉/tmp/test.txt,而不让系统提示覆盖(root权限下)

解答:

方法一:/bin/cp /mnt/test.txt /tmp/test.txt

方法二:\cp /mnt/test.txt /tmp/test.txt

方法三:注释掉root用户下.bashrc文件中的cp别名,保存后source ~/.bashrc,再执行cp /mnt/test.txt /tmp/test.txt

注:root用户默认在.bashrc配置文件中对cprm等几个命令设置了别名,所以,本题的解题关键是如何将命令别名失效。

11、只查看ett.txt文件(共100行)内第2030行的内容。

解题:

生成测试文件:seq 100 > ett.txt

方法一:sed -n 20,30p ett.txt

方法二:head -30 ett.txt | tail -11

方法三:awk NR >=20 && NR <=30 {print $0} ett.txt

方法四:grep -C 5 25 ett.txt

方法五:grep -A 10 20 ett.txt

方法六:grep -B 10 30 ett.txt

12、分析图片服务日志,把日志(每个图片访问次数*图片大小的总和)排行,取top10,也就是计算每个url的总访问量大小。

【附加题:工作场景高难度加分题】

说明:本题生产环境应用:这个功能可以用于IDC网站流量带宽很高,然后通过分析服务器日志哪些元素占用流量过大,进而进行优化或裁剪该图片,压缩js等措施。

本题需要输出三个指标:【访问次数】 【访问次数*单个文件大小】 【文件名(可以带(URL)】

测试数据:

59.33.26.105 - - [08/Dec/2010:15:43:56 +0800] "GET /static/images/photos/2.jpg HTTP/1.1" 200 11299 "

http://oldboy.blog.51cto.com/static/web/column/17/index.shtml?courseId=43" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"

59.33.26.105 - - [08/Dec/2010:15:43:56 +0800] "GET /static/images/photos/2.jpg HTTP/1.1" 200 11299 "

http://oldboy.blog.51cto.com/static/web/column/17/index.shtml?courseId=43" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"

59.33.26.105 - - [08/Dec/2010:15:44:02 +0800] "GET /static/flex/vedioLoading.swf HTTP/1.1" 200 3583 "

http://oldboy.blog.51cto.com/static/flex/AdobeVideoPlayer.swf?width=590&height=328&url=/[[DYNAMIC]]/2" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"

124.115.4.18 - - [08/Dec/2010:15:44:15 +0800] "GET /?= HTTP/1.1" 200 46232 "-" "-"

124.115.4.18 - - [08/Dec/2010:15:44:25 +0800] "GET /static/js/web_js.js HTTP/1.1" 200 4460 "-" "-"

124.115.4.18 - - [08/Dec/2010:15:44:25 +0800] "GET /static/js/jquery.lazyload.js HTTP/1.1" 200 1627 "-" "-"

解答:

方法一:awk '{print $7" "$10}' test.log |sort|  uniq -c | awk '{print $1" "$2" "$1*$3}' |sort -rk 1|head

方法二:cut -d ' ' -f 7,10 test.log | sort|uniq -c | awk '{print $1" "$2" "$1*$3}' | sort -rk 1|head

注:uniq -c来统计次数,uniq的输入得是排过序的文本或输入,所以,在uniq -c之前得先sort处理输出;sort -rk 1-r是逆序排序,-k是排序是列值,可以通过-k来控制排序优先级。本题解题关键取出相应的字段,所以,首先得分析日志文件,确定日志文件的规律。如果该日志文件无规律可循,本题用cutawk来解可能都无法实现。在这还可以使用printf对输出进行美化(格式化输出)。如下:

printf "%-10s %-50s %-s\n"  "Visits" "File Name" "Total File Size";awk '{print $7" "$10}' test.log | sort | uniq -c | awk '{printf("%-10s %-50s %-s\n",$1,$2,$1*$3)}' | sort -rk 1 | head

在生产环境实际使用,一般会写成脚本,定期生成报表,定时执行后对比分析;当然,也可以直接从文件中把日期字段截取出来,可以可就时间段进行分析。

 

13、/oldboy目录下及其子目录下所有以扩展名.sh结尾的文件中包含./hostlists.txt的字符串全部替换为../idctest_iplist

解答:

首先生成测试文件:

[root@oldboy oldboy]# for file_name in {1..10}.sh

> do

>   echo "$file_name ./hostlists.txt 2222" > $file_name

> done

[root@oldboy oldboy]# ls

10.sh  1.sh  2.sh  3.sh  4.sh  5.sh  6.sh  7.sh  8.sh  9.sh  test

[root@oldboy oldboy]# cat 1.sh

1.sh ./hostlists.txt 2222

解题方法:

方法一:

find /oldboy/ -type f -name "*.sh" -exec sed -i 's#./hostlists.txt#../idctest_iplist#g' {} \;

方法二:

find /oldboy/ -type f -name "*.sh" | xargs sed -i 's#./hostlists.txt#../idctest_iplist#g'

方法三:

for file_name in $(find /oldboy -type f -name *.sh);do sed -i 's#./hostlists.txt#../idctest_iplist#g' $file_name;done

 

 


你可能感兴趣的:(老男孩,考试题,studying)