版权声明:
本文的所有内容均来自作者刘春凯的学习总结,未经本人许可,禁止私自转发及使用。
QQ:1151887353
E-mail:dakai517@163.com 1151887353@qq.com
##########################################################################
1.创建一个目录/data
解答:
mkdir /data
2.在/data下面建立一个文件oldboy.txt。
解答:
touch /data/oldboy.txt 或者: cd /data touch oldboy.txt
3.为oldboy.txt增加内容为“I am studying linux.”。
解答:
法一: cd /data echo "I am studying linux">>oldboy.txt 法二: vi/vim --a/i--" I am studying linux "--esc--:qw 法三: cat >>oldboy.txt > I am studying linux crul+c
4.把oldboy.txt文件拷贝到/tmp下。
解答:
cd /data cp oldboy.txt /tmp/
5.把/data目录移动到/root下。
解答:
mv /data /root/
6.进入/root目录下的data目录,删除oldboy.txt文件。
解答:
cd - cd data rm -f oldboy.txt
7.接第6题,退出到上一级目录,删除data目录。
解答:
cd - rm -fr data
8.已知文件test.txt内容为:
test
liyao
oldboy
请给出输出test.txt文件内容时,不包含oldboy字符串的命令。
解答:
模拟环境 cd /data touch test.txt cat >>/test.txt<0' test.txt或者awk '{if(NR<3&&NR>0) print $0"\n"}' test.txt 法六: grep 2 -A 1 test.txt grep 1 -B 1 test.txt
9.请用一条命令完成创建目录/oldboy/test,即创建/oldboy目录及/oldboy/test目录
解答:
cd ~ mkdir -p /oldboy/test
10.已知/tmp下已经存在test.txt文件,如何执行命令才能把/mnt/test.txt拷贝到/tmp下覆盖掉/tmp/test.txt,而让系统不提示是否覆盖(root权限下)。
解答: 法一: /bin/cp /mnt/test.txt /tmp/ 法二: \cp /mnt/test.txt /tmp/ 法三: alias cp unalias cp cp /mnt/test.txt /tmp/
11.只查看ett.txt文件(共100行)内第20到第30行的内容
解答:
法一: head -30 ett.txt|tail -11或者tail -81 ett.txt|head -11 法二: sed -n '20,30p' ett.txt 法三: grep 30 -A 10 ett.txt grep 20 -B 10 ett.txt grep 25 -C 5 ett.txt 法四: awk 'NR>19&&NR<31' ett.txt awk '{if(NR>19&&NR<31) print$0"\n"}' ett.txt
12.分析图片服务日志,把日志(每个图片访问次数*图片大小的总和)排行,取top10,也就是计算每个url的总访问大小
【附加题:工作场景高难度加分题,不会的同学可以放弃不答】。
说明:本题生产环境应用:这个功能可以用于IDC网站流量带宽很高,然后通过分析服务器日志哪些元素占用流量过大,进而进行优化或裁剪该图片,压缩js等措施。
本题需要输出三个指标: 【访问次数】 【访问次数*单个文件大小】 【文件名(可以带URL)】
测试数据
59.33.26.105 - - [08/Dec/2010:15:43:56 +0800] "GET /static/p_w_picpaths/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/p_w_picpaths/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 "-" "-"
解答:模拟环境 touch /var/log/access.log 1.log 2.log cd /var/log vim access.log(添加内容,生成日志)
法一:通过两个数组来计算(用到数组累加和去重) 因为我们要的最终结果是某个文件的访问次数和消耗的流量,所以考虑建立以文件名为索引的两个数组,一个存储访问次数,一个保存消耗的流量,这样当使用awk按行遍历文件时,对次数数组+1,同时对流量数组进行文件大小的累加,等文件扫描完成,再遍历输出两个数组既可以得到该文件的反问次数和总的流量消耗。 awk '{array_num[$7]++;array_size[$7]+=$10}END{for(xin array_num){print array_size[x],array_num[x],x}}' access.log|sort -rn -k1|head-10 >1.log cat 1.log 46232 1/?= 22598 2/static/p_w_picpaths/photos/2.jpg 4460 1/static/js/web_js.js 3583 1/static/flex/vedioLoading.swf 1627 1/static/js/jquery.lazyload.js
法二: awk '{print $7"\t" $10}' access.log|awk'{S[$1]+=$2;S1[$1]+=1}END{for(i in S) print S[i],S1[i],i}'|sort -rn|head -10>2.log cat 2.log 46232 1/?= 22598 2/static/p_w_picpaths/photos/2.jpg 4460 1/static/js/web_js.js 3583 1/static/flex/vedioLoading.swf 1627 1/static/js/jquery.lazyload.js
13、把/oldboy目录及其子目录下所有以扩展名.sh结尾的文件中包含oldboy的字符串全部替换为oldgirl【附加题:加分题,不会的同学可以放弃不答】。
解答:
模拟环境: mkdir -p /oldboy/test touch a.txt /oldboy touch b.txt /oldboy/test echo "oldboy" >a.sh echo "oldgirl" >b.sh 法一:sed sed -i "s#oldboy#oldgirl#g" /oldboy/*.txt sed -i "s#oldboy#oldgirl#g" `find/oldboy/ -type f -name "*.sh"` sed -i "s#oldboy#oldgirl#g" $(fing/oldboy/ -type f -name "*.sh") 法二:find+|xargs find /oldboy/ -type f -name "*.sh" |xargs sed -i "s#oldboy#oldgirl#g" find /oldboy/ -type f -name "*.sh" -exec sed -i "s#oldboy#oldgirl#g {} \; 法三:for语句 for i in `ll /oldboy | grep .sh|awk '{print $NF}'` do sed -i 's#oldboy#oldgirlg'$i done