文本操作

优质
小牛编辑
141浏览
2023-12-01

TEXT MANIPULATION

在 Linux 系统中,我们处理的一切都是文件,并且绝大多数都是文本文件;举个例子,在 Linux 系统中,所有的配置文件都是文本文件。所以我们只需要打开文件,更改文件的内容,保存文件,再重新启动应用就可以更改应用配置。

由于存在大量文本文件,操作文本在 Linux 系统管理和 Linux 应用中显得尤为重要。在这一章节, 你可以通过一些命令和技巧,实现在 Linux 系统下操作文本。

为了方便演示,我将使用世界顶尖的网络入侵检测系统(NIDS)Snort 的文件,Snort 最早由 Marty Roesch 开发,现在属于 Cisco。NIDS 经常被用于检测黑客入侵,所以如果你想成为成功的黑客,你必须了解 NIDS 如何检测攻击和绕过检测的方法。

查看文件

如第 1 章所示,最基本的打印文本命令是cat,但是它有它的限制,使用cat命令打印位于/etc/snort 的 Snort 配置文件(snort.conf)(参见文本清单 2-1)

kali >cat /etc/snort/snort.conf

清单 2-1: 在终端中打印 snort.conf

现在你的屏幕上应该显示了整个 snort.conf 文件,但这并不是最方便或最实际的使用这个文件的方法。

# include $SO_RULE_PATH/exploit.rules

# include $SO_RULE_PATH/exploit.rules

# include $SO_RULE_PATH/exploit.rules

# include $SO_RULE_PATH/exploit.rules

# include $SO_RULE_PATH/exploit.rules

--snip--

# event thresholding or suppressions commands...

kali >

在接下来的两个小章节,我将向你展示headtail 命令。这是两种只显示部分文件内容的方法,用来更简单地查看关键点。

查看开头

如果你只是想查看文件开头,你可以使用head命令,这个命令默认打印文件的前 10 行。例如,下面这条命令会打印 snort.conf 的前 10 行。

kali >head /etc/snort/snort.conf

#----------------------------------------------

# VRT Rules Packages Snort.conf

#

# For more information visit us at:

--snip--

#Snort bugs:bugs\@snort.org

如果你想看多于或少于默认的 10 行,在head命令后和文件前输入连接符(-)和你想要的数量。例如,如果你想看文件的前 20 行,你需要输入如清单 2-2 上面的命令。

kali >head -20 /etc/snort/snort.conf

#--------------------------------------------

#VRT Rule Packages Snort.conf

#

#For more information visit us at:

#.

#.

#.

#Options : ­­enable­gre ­­enable­mpls ­­enable­targetbased

­­enable­ppm ­­enable­perfprofiling enable­zlib ­­enable­act live­response ­­enable­normalizer ­­enable­reload ­­enable­react

清单 2-2: 在终端中打印 snort.conf 的前 20 行

你应该能在终端中看到 snort.conf 的前 20 行。

查看结尾

tail命令 和head命令相似。只是tail命令用于查看文件最后几行。使用tail查看 snort.conf:

kali >tail /etc/snort/snort.conf

#include $SO_RULE_PATH/smtp.rules

#include $SO_RULE_PATH/specific¬threats.rules

#include $SO_RULE_PATH/web¬activex.rules

#include $SO_RULE_PATH/web¬client.rules

#include $SO_RULE_PATH/web¬iis.rules

#include $SO_RULE_PATH/web¬miscp.rules

#Event thresholding and suppression commands. See threshold.conf

注意这个命令打印了最后的一些 include 行,但没有打印所有的 include 行。因为和 head 相似,tail 默认也是打印 10 行。你可以打印更多行如 snort.conf 最后 20 行。和使用 head 命令一样,你可以在 tail 命令和文件之间输入连接符(-)和你想要的行数。如以下清单 2-3

kali >tail -20 /etc/snort/snort.conf

#include $SO_RULE_PATH/chat.rules

#include $SO_RULE_PATH/chat.rules #include $SO_RULE_PATH/chat.rules

­­snip­­

#Event thresholding or suppression commands. See theshold.conf

清单 2¬3: 在终端中打印 snort.conf 的后 20 行

现在我们可以一次性看到几乎所有的 include 行。

标显行数

有时-尤其是处理非常长的文件的时候-我们可能希望打印文件行号。因为 snort.conf 超过 600 行,标上行号会有很大帮助,这样可以更容易地引用修改的位置并在以后返回到那个位置。

我们使用nl(number lines)命令打印行号。输入清单 2-4 里的命令。

kali >nl /etc/snort/snort.conf

612 #################################################################

613 #dynamic library rules

614 #include $SO_RULE_PATH/bad¬traffic.rules

615 #include $SO_RULE_PATH/chat.rules

­­snip­­

630 #include $SO_RULE_PATH/web¬iis.rules

631 #include $SO_RULE_PATH/web¬misc.rules

清单 2¬4: 在终端输出中显示行号

现在每一行都有一个数字(代表行号),引用起来更方便。

使用 GREP 过滤文本

命令grep 大概是使用最广泛的文本操作命令。它可以让你过滤打印出来的文件内容。例如,如果你想查看 snort.conf 文件里面所有带有 output 单词的行,你可以使用cat 然后要求只打印那些行。(参见清单 2-5)。

kali >cat /etc/snort/snort.conf | grep output

# 6) Con 图 output plugins

# Step #6: Con 图 output plugins

# output unified2: filename merged.log, limit 128, nostamp, mpls_event_types, vlan_event_types

output unified2: filename merged.log, limit 128, nostamp, mpls_event_types, vlan_event_types

# output alert_unified2: filename merged.log, limit 128, nostamp

# output log_unified2: filename merged.log, limit 128, nostamp

# output alert_syslog: LOG_AUTH LOG_ALERT

# output log_tcpdump: tcpdump.log

清单 2¬5: 打印被 grep 规定含有关键词或段落的行

这个命令或先查看 snort.conf 然后使用管道 (|) 将它传递给 grep, 它将会把文件作为输入,寻找出现单词 output 的行,然后只打印这些行。grep命令是使用 Linux 中的一个非常强大和必要的命令,因为它可以节约搜索文件中每一个词或命令的时间。

挑战: 使用 grep,nl,tail,and head

假设你想使用至少 4 个之前学过的命令打印 # Step #6: Con 图 output plugins 前面 5 行,你该怎么做?(提示:除了我们学过的命令,还有很多其他选择。你可以使用 Linux 内置命令 man 来学习更多命令。例如,man tail 会显示 tail 命令的帮助文档)。

有很多方法可以解决这个问题,我将向你展示通过更改那几行来实现其中一个方法,然后你需要寻找其他方法。

第一步

kali >nl/etc/snort.conf | grep output

34 # 6) Con 图 output plugins

512 # Step #6: Con 图 output plugins

518 # output unified2: filename merged.log, limit 128, nostamp, mpls_event_types, vlan_event_types

521 # output alert_unified2: filename snort.alert, limit 128, nostamp

522 # output log_unified2: filename snort.log, limit 128, nostamp

525 # output alert_syslog: LOG_AUTH LOG_ALERT

528 # output log_tcpdump: tcpdump.log

我们可以看到行 # Step #6: Con 图 output plugins 是第 512 行,然后我们知道我们想要第 512 行前面的 5 行和第 512 行本身 (就是第 507 到 512 行)。

第二步

kali >tail -n+507 /etc/snort/snort.conf | head -n 6

nested_ip inner, \

whitelist $WHITE_LIST_PATH/white_list.rules, \ blacklist $BLACK_LIST_PATH/black_list.rules

###################################################

# Step #6: Con 图 output plugins

在这里,我们使用tail使文本从第 507 行开始,再把文本输出到 head,然后我们返回文本开头的 6 行,从而获得 Step #6 那行前的 5 行和 Step #6 那行本身。

使用 SED 查找和替换

sed命令让你可以搜索出现的单词或字段然后在这些字段上做些什么。命令的名字是 stream editor(流编辑器)的缩写,因为它的概念和流编辑器是一致的。sed 最基本的形式就像 Windows 系统里的查找和替换功能。

使用grep在 snort.conf 里查找单词 mysql,像这样:

kali >cat /etc/snort/snort.conf | grep mysql

include $RULE_PATH/mysql.rules #include $RULE_PATH/server¬mysql.rules

你可以看到 grep 命令查找到 mysql 出现过两次。

假设你想要sed 将每一个出现的 mysql 替换成 MySQL(记住,Linux 大小写敏感)然后保存到文件 snort2.conf。你可以输入清单 2-6 中的命令 :

kali >sed s/mysql/MySQL/g /etc/snort/snort.conf > snort2.conf

清单 2¬6: 使用 sed 查找替换关键词或字段

s参数提供搜索,你先提供想要搜索的关键词 (mysql) 然后提供想要替换成的关键词 (MySQL), 用斜杠 (/)分开。g参数告诉 Linux 你希望全局替换,然后将结果保存到一个新文件 snort2.conf。

现在,当你使用grep查找 snort2.conf 中的 mysql,你将看到没有找到 mysql,但是当你搜索 MySQL 时,你将看到它出现了两次。

kali >cat snort2.conf | grep MySQL

#include $RULE_PATH/server¬MySQL.rules

如果你只想替换第一个出现的 mysql,你需要去掉末尾的 g 参数。

kali >sed s/mysql/MySQL/ snort.conf > snort2.conf

你也可以使用 sed 命令查找替换第一个出现字段以外的任意位置出现的字段。例如,如果你想只替换第二个出现的 mysql,只需要在命令末尾加上出现的次数(这里是 2)。

kali >sed s/mysql/MySQL/2 snort.conf > snort2.conf

这个命令值影响第二个出现的 mysql。

使用 MORE 和 LESS 查看文件

尽管cat是个打开文件和创建小文件的好工具,在打开大文件时它依然有它的限制。当你用 cat 打开 snort.conf,时,文件将一直被打印直到文件结束。如果你想要收集任何信息,这就变得很不实用。

为了打开大文件,我们有另外两个查看工具:moreless

使用 more 控制显示文件

more 命令一次只显示一页文件,并且让你可以使用ENTER 键翻页。这是man命令使用的工具,现在我们来使用它。使用more命令打开 snort.conf (参见清单 2-7) 。

kali >more /etc/snort/snort.conf

­­snip­­

# Snort build options:

# Options: ­­enable­gre ­­enable­mpls ­­enable­targetbased

­­enable­ppm ­­enable­perfprofiling enable­zlib ­­enable­active

­response ­­enable­normalizer ­­enable­reload ­­enable­react

­­enable­flexresp3 #

­­More­­(2%)

清单 2-7: 使用 more 命令在终端里一次显示一页

注意more 命令只显示一页然后就停止了,并且它会在左下角显示已经显示了多少内容(这里是 2%)。按ENTER键查看额外的行或页。按q键(quit)退出 more。

使用 less 显示和过滤文件

less命令和more命令非常相似,但是 less 有额外的功能,有句话叫 “Less is more。” 使用 less,你不但可以滚动查看一个文件,还可以过滤这个文件,清单 2-8,使用 less 打开 snort.conf :

kali >less /etc/snort/snort.conf

­­snip­­

# Snort build options:

# Options: ­­enable­gre ­­enable­mpls ­­enable­targetbased

­­enable­ppm ­­enable­perfprofiling enable­zlib ­­enable­active

­response ­­enable­normalizer ­­enable­reload ­­enable­react

/etc/snort/snort.conf

清单 2-8: 使用 less 命令在终端里一次显示一页和过滤内容

注意less在屏幕左下角高亮了文件的路径。如果你按下斜杠键(/),less 会让你搜索文件里的字段。例如,当你开始设置 Snort 时,你需要先确定你想在何时向何处发送攻击警告输出。要想从配置文件中找到这一段,你只需要搜索 output,像这样:

# Snort build options:

# Options: ­­enable­gre ­­enable­mpls ­­enable­targetbased

­­enable­ppm ­­enable­perfprofiling enable­zlib ­­enable­active

­response ­­enable­normalizer ­­enable­reload ­­enable­react

/output

这会立即将你带到第一个出现 output 的地方,并且高亮了 output。然后你可以按n键(next)到下一个出现 output 的地方。

# Step #6: Con 图 output plugins

# For more information, see Snort Manual, Configuring Snort - Output Modules

###################################################################

unified2

# Recommended for most installs

# output unified2: filename merged.log, limit 128, nostamp, mpls_event_types,

Vlan_event_types

output unified2: filename snort.log, limit 128, nostamp, mpls_event_types, vlan_event_types

# Additional configuration for specific types of installs

# output alert_unified2: filename snort.alert, limit 128, nostamp

# output log_unified2: filename snort.log, limit 128, nostamp

# syslog

# output alert_syslog: LOG_AUTH LOG_ALERT

:

如你所见,less 去掉了接下来出现的 output 并且高亮了所有搜到的字段。在这里, 它直接跳到 Snort 的输出段,真是方便啊!

总结

Linux 系统有许多操纵文本的方法,每种方法都有其优缺点。在本章中,我们已经接触了一些最有用的方法,但是我建议您尝试每一种方法,并建立您自己的感觉和偏好。例如,我认为grep是不可缺少的,并且我广泛的使用less,但是您可能会有不同的观点。