目 录
一、需求
二、解决方法
1、解决思路
2、命令
三、实例演示和命令解释
1、实例演示
2、命令解释
四、扩展
想知道某台linux机器最近访问了哪些http的web地址,如何处理?
Linux系统访问外部web,也就是外部的http地址,这些数据应该保存在缓存中,所以应该想办法看linux系统的cache,cache中会又从外部web下载下来的一些图片和文本等信息,可以从jpg或者html等文件中获取一些信息。
经过反复斟酌,考虑使用grep结合awk,形成组合命令,实现需求,如下:
grep -r -a jpg /var/cache/* | strings | grep "http:" | awk -F'http:' '{print "http:"$2;}'
[root@localhost base]#
[root@localhost base]# grep -r -a jpg /var/cache/* | strings | grep "http:" | awk -F'http:' '{print "http:"$2;}'
http://www-archive.mozilla.org/directory/javasdk.htmlZ
http://bugs.centos.org>
http://bugs.centos.org>
http://bugs.centos.org>v
http://bugs.centos.org>v
http://tug.org/texlive/^
http://bugs.centos.org>MH8
http://tug.org/texlive/^
http://bugs.centos.org>
http://stedolan.github.io/jq/^
http://liballeg.org/]LF
http://www.ecplusplus.com/index.php?page=projects&pid=1]LF
[root@localhost base]#
[root@localhost base]#
本命令的作用是:在/var/cache/
目录及其子目录中递归地搜索包含“jpg”字符串的文件或文件内容,然后提取出这些文件中的可打印字符串,并筛选出包含“http:”的字符串,最后提取并打印出这些字符串后面的部分,就是URL了。
(1)、grep -r -a jpg /var/cache/*
grep:这是一个搜索文本的命令,它会在指定的文件或目录中搜索与给定模式匹配的行。
-r:这个选项告诉grep递归地搜索指定目录下的所有文件和子目录。
-a:这个选项告诉grep把二进制文件当作文本文件来处理。这意味着grep会尝试在二进制文件中搜索匹配项,而不仅仅是文本文件。
jpg:这是我们要搜索的模式,它会匹配包含“jpg”字符串的文件或文件内容。
/var/cache/*:这是我们要搜索的目录,星号(*)表示该目录下的所有文件和子目录。
所以,这个命令会递归地在/var/cache/目录及其子目录中搜索包含“jpg”字符串的文件或文件内容。
(2)、|
管道符号,它会将前一个命令的输出作为下一个命令的输入。在这个命令组合中,grep命令的输出会被传递给strings命令。
(3)、strings
strings命令用于从二进制文件中提取可打印的字符串。这通常用于从二进制文件(如可执行文件、库文件、图片文件等)中提取出文本信息。
在这命令组合中,strings命令会接收grep命令的输出,并尝试从匹配的文件中提取出可打印的字符串。
(4)、grep "http:"
再次使用grep命令,这次我们是在strings命令的输出中搜索包含“http:”字符串的行。
这会筛选出包含HTTP协议的URL或相关字符串的行。
(5)、awk -F'http:' '{print "http:"$2;}'
awk是一个强大的文本处理工具,它可以对文本文件进行模式扫描和处理。
-F'http:':这个选项设置了awk的字段分隔符为“http:”。这意味着awk会把每一行文本按照“http:”来分割成不同的字段。
'{print "http:"$2;}':这是awk的动作部分,它告诉awk打印每一行的第二个字段,并在前面加上“http:”。
在实际使用中,你可能查看访问包含rtmp的url,你可稍微做些修改,就可以适合您的应用了。比如,http改成rtmp,你可以用如下命令即可:
grep -r -a jpg /var/cache/* | strings | grep "rtmp:" | awk -rtmp:' '{print "rtmp:"$2;}'