V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
nonozone
V2EX  ›  问与答

linux下如何可以搜索目录下所有文件是否包含A文件的字符串,同时将这所有文件包含A文件的部分字符串搜索替换成其他字符串啊?

  •  
  •   nonozone · 2013-09-22 14:50:20 +08:00 · 3839 次点击
    这是一个创建于 4061 天前的主题,其中的信息可能已经有所发展或是发生改变。
    其实我是为了解决这个问题 http://v2ex.com/t/83224

    真心求教下。
    14 条回复    1970-01-01 08:00:00 +08:00
    anheiyouxia
        1
    anheiyouxia  
       2013-09-22 15:02:05 +08:00
    可以用grep
    给你个例子:http://blog.csdn.net/unbutun/article/details/6326598

    如果是我的话,我会全部下回来用Beyond Compare之类的工具和源文件进行对比
    nonozone
        2
    nonozone  
    OP
       2013-09-22 15:05:14 +08:00
    @anheiyouxia 主要是文件太多了,目录结构也复杂,上传 尤其是下载挺麻烦的。
    anheiyouxia
        3
    anheiyouxia  
       2013-09-22 15:56:31 +08:00
    @nonozone 如果你用tar打包的话,可以用-exclude参数来排除掉那些你不需要的文件
    主要是我觉得Beyond Compare之对比的话直观

    当然,不喜欢下回来,就用grep命令也足够了,只不过你不知道是不是所有的木马都是同样的内容
    所以我建议你最好再配合一些查杀webshell的工具来排查
    nonozone
        4
    nonozone  
    OP
       2013-09-22 16:14:10 +08:00
    @anheiyouxia
    文件都没变动,只是在有些文件头部加了一串代码。目测没有多余文件。
    应该是同样的,主要是我对正则不太熟悉,没办法很完整的匹配。grep如果是一段简单的话还知道怎么处理,这段代码对我来说过于复杂了。
    不知道有啥比较好的查杀webshell的工具?

    谢谢。
    ooxxcc
        5
    ooxxcc  
       2013-09-22 16:26:19 +08:00
    先grep查找哪些有这个字符串,然后用sed修改……

    抛砖

    grep -L -r "string1" . | xargs sed -i 's/string1/string1/g'
    nonozone
        6
    nonozone  
    OP
       2013-09-22 17:03:15 +08:00
    @ooxxcc 简单的字符串可以这么处理啊。这一串太复杂了。
    anheiyouxia
        7
    anheiyouxia  
       2013-09-22 17:05:15 +08:00
    @nonozone 不需要正则表达式
    grep -R wordpress_dir --include="*" 'base64_decode'
    就可以把wordpress_dir 目录下包含‘base64_decode’的文件都列出来

    以前有关注过这类查杀工具,不过现在不知道有什么了,给你找了一个大概的,你看看:http://www.jb51.net/article/29543.htm
    anheiyouxia
        8
    anheiyouxia  
       2013-09-22 17:06:03 +08:00
    @nonozone 另外你也可以参考一下此文:http://www.jincon.com/detail-52.html
    nonozone
        9
    nonozone  
    OP
       2013-09-22 17:06:58 +08:00
    @anheiyouxia 用简单的grep就可以列出来了,关键是怎么把这一段弄掉,我发现这好像就是在第一行,,并且后面还有N行空格,怎么用命令匹配之后,直接删掉第一行呢?
    anheiyouxia
        10
    anheiyouxia  
       2013-09-22 19:07:38 +08:00
    @nonozone 正则表达式就帮不了你了。不过,这应该不多吧?不多的话,就直接手动吧,用正则这些,怕误伤吧?
    9hills
        11
    9hills  
       2013-09-22 19:19:40 +08:00
    @nonozone sed -i 1d xxxxx
    删除文件第一行
    9hills
        12
    9hills  
       2013-09-22 19:25:33 +08:00
    另外我给lz一个一行命令,解决这个问题

    find 目录/ -type f | xargs -i replace "这里是你要替换的字符串" ""

    replace不做正则表达式展开,so一般不会有问题,另外字符串外部一定要加双引号或者单引号(内部的双引号和单引号对应转义即可)
    9hills
        13
    9hills  
       2013-09-22 19:25:49 +08:00
    晕,少了一部分

    find 目录/ -type f | xargs -i replace "这里是你要替换的字符串" "" -- {}
    nonozone
        14
    nonozone  
    OP
       2013-09-22 20:25:48 +08:00
    @9hills 我要把一长串都放进“”里面? 后面的--{}是啥意思?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3586 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 04:35 · PVG 12:35 · LAX 20:35 · JFK 23:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.