本节主要介绍一些文本处理相关的linux命令,是日后信息安全工作中的情报侦察、数据梳理、日志分析等技术的重要基础。
1. awk 命令
awk
是一种处理文本文件的语言,是一个强大的文本分析工具。
相比较屏幕处理的优点,awk
在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息。 awk
也是一个非常棒的数据处理工具!相较于sed
常常作用于一整个行的处理, awk
则比较倾向于一行当中分成数个字段
来处理。
awk
处理过程: 依次对每一行进行处理,然后输出。
命令的基本格式是:awk ‘{print($1)}’
案例:
1 | cat 1.txt|awk '{print($2)}' #打印出文本中每行的第二个字段 |
1 | cat /etc/passwd |awk -F ":" '{print($1)}' #-F指定分隔符,以“:”为分隔符,打印出文本中每行第一个字段 |
1 | cat /etc/passwd |awk -F ":" '{print($1,"+++",$3)}' #打印出第一个字段与第三个字段,并在其中间添加+++内容 |
1 | cat passwd | awk -F ":" '{print $NF}' #打印出文本中每行的最后一个字段 |
2. sed 命令
sed
是stream editor(流编辑器)的简称,是一款强大的,并且有些复杂的程序。
sed
本身是一个管线命令,可以将数据进行替换、删除、新增、提取特定行等功能,主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。sed按行来执行命令。
接下来的实验,我们要以/etc/passwd文件内容为例子。
拷贝文件cat /etc/passwd > 1.txt
我们以一个例子来介绍sed
命令,sed 's/:/+/g'
s代表搜索,g代表的则是全文。不加g的话则是替换每行第一个出现的。所以这条命令代表的将文件中所有的:替换为+
cat 1.txt |sed 's/:/+/3g'
#代表的则是从第三次匹配开始替换,依此类推。
sed -i 's/:/+/g' 1.txt
#参数-i
,直接修改文件,并非打印出来。
以上这些命令中是以/做为该命令的定界符,如果需要修改或者匹配的字段带有/则不能再使用/做为该条命令的定界符,可以使用任意的定界符,不冲突就行。cat passwd |sed 's!:!/!g'
以!号做为定界也是一样的。
此外,在此命令中,搜索位置使用^
代表一行的开头,$
代表一行的结尾。sed
是以行为单位执行的。
我们用如下案例展示:
cat ip.txt |sed 's#^#http://#g'
在每行之前加上http://
。
cat ip.txt |sed 's#$#:8080#g'
在每行末尾加上“:8080”
sed '/^$/d' 2.txt
删除空白的行。
sed '/^s/'d
删除文件中所有开头是s的行。
3. grep 命令
grep这个名字来自于短语“global regular expression print”,所以我们能看出 grep 程序和正则表达式有关联。
本质上,grep 程序会在文本文件中查找一个指定的正则表达式,并把匹配行输出到标准输出。
命令格式: grep [options] [pattern] [filename]
案例:
1 | cat passwd |grep root # 只显示带有root关键字的行 |
4. find 命令
find
命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
这是一个超级复杂的命令,最简单的模式为:find 路径 -name [名字]
。
案例:
1 | find / -size 1000k #从根目录查找大小为1000K的文件 |
- exec选项
1 | find 搜索路径 [选项] 搜索内容 -exec 命令2{}\; |
5. ag 命令
ag
类似grep
和find
,但是执行效率比后两者高。
最基本的用法为ag -g <File Name>
,从当前目录寻找文件
案例:
1 | ag -g <File Name> # 类似于 find . -name <File Name> |
6.stat命令
用于显示文件信息:
用法:stat [文件或目录]
7. split 命令
split
命令可以将一个大文件分割成很多个小文件,有时需要将文件分割成更小的片段,比如为提高可读性,生成日志等。
参数:
- -b 按文件大小进行切割
- -l 按行数来进行切割
- -d 为使用数字为生成文件的后缀
- -a 指定后缀的长度
案例:
1 | split -b 30k messages # 按照每个文件30K大小切割messages文件。 |
8.sort命令
sort
命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出。
1 | cat 1.txt|sort #默认的排序方式,从首字母开始 |
9. uniq 命令
uniq
用于报告或忽略文件中的重复行,一般与sort命令结合使用。
要注意先排序,后去重。因为uniq命令只能消除相邻且相同的行。
1 | cat 1.txt |sort -n |uniq #排序去重 |
以上系列命令可以用于日志分析:
如统计IP地址的访问数量并按照数量进行排序: cat access_log |awk '{print($1)}'|sort|uniq -c |sort -nr |more
针对访问量最大的IP分析其访问内容: cat access_log |grep 'IP地址'|head -n 100
10. nl 命令
nl
命令用于显示文件内容行号。
案例:
11.远程连接命令
11.1 ssh命令
ssh
命令是Linux的远程连接工具。
ssh命令:Linux的远程连接工具
例如ssh 192.168.0.149
,以当前终端用户身份远程连接IP为192.168.0.149
的计算机。
- -l 为指定用户 如
ssh -l farmsec 192.168.0.149
以farmsec用户远程登录,也可写成ssh farmsec@192.168.0.149
- -p 为指定端口号
执行ssh
的默认情况下,会使用本地的用户名连接对方的用户名,例如本地的root连接对面服务器的root,如果两端用户名不一样,则需要使用-l username
指定用户名。
再确认密码后,方能登录成功,而同时变化的文件为:/root/.ssh/known_hosts
在第一次登录时,openssh将会提示不知道这台登录的主机,只要输入yes
,就会把这台主机的“识别信息”添加到known_hosts文件中. 第二次登陆后,则无须此步骤,但是如果出现错误,例如主机产生变化,则需要删除/root/.ssh/known_hosts
内容。
11.2 linux下远程连接smb
Smb服务为网络文件共享协议,它允许应用程序和终端用户从远端的文件服务器访问文件资源 用法:在kali的文件
–>其他位置
-->连接到服务器
处输入:smb://192.168.0.149/share
关于此部分知识,还将在后续有关windows的章节中详述。
11.3 rdesktop 命令
rdesktop
命令用于在linux下链接windows远程桌面。
用法:rdesktop 192.168.0.178
关于此部分知识,还将在后续有关windows的章节中详述。
12. URL 相关命令
URL,既是俗称的网址/网页链接。
12.1 curl 命令
curl
命令是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具。作为一款强力工具,curl支持包括HTTP、HTTPS、ftp等众多协议,还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。
用法:curl [选项] [url]
参数:
- -i 显示头部信息
- -v 显示请求全过程解析
- -O 下载
案例:
1 | curl www.farmsec.com |
12.2 wget 命令
wget命令:用来从指定的URL下载文件。wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性,如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕。如果是服务器打断下载过程,它会再次联到服务器上从停止的地方继续下载。这对从那些限定了链接时间的服务器上下载大文件非常有用。
1 | wget https://bootstrap.pypa.io/get-pip.py |
前面我们下载下的文件名都是乱码,所以我们需要给它自定义文件名 加入-O的参数即可指定文件名
1 | wget https://bootstrap.pypa.io/get-pip.py -O 123.py |
如果文件比较大时,加入参数-b
,进行后台下载,然后可使用使用tail -f wget-log
查看进度。
1 | -c:继续执行上次终端的任务;可以在下载中断后再次使用。 |