迎接伟大的命令行挑战

尚无读者喜欢这个。
An intersection of pipes.

Opensource.com

管道非常重要,甚至对于我们在命令行上执行惊人操作的能力至关重要。

首先,重要的是要认识到管道是由 Douglas McIlroy 在 Unix 的早期发明的。谢谢你,Doug!接下来,在这个上下文中,管道 是什么?请注意在这个简单的命令行程序中管道的使用,该程序列出每个已登录的用户一次,无论他们有多少个活动登录。

who | awk '{print $1}' | sort | uniq

管道是将这些命令行程序粘合在一起的胶水。管道允许将一个命令的标准输出“管道”传输到下一个命令的标准输入。

想想看,如果我们不能将数据流从一个命令管道传输到下一个命令,这个程序将如何工作。第一个命令将对数据执行其任务,然后该命令的输出将不得不保存在一个文件中。下一个命令将不得不从中间文件中读取数据流,并对数据流进行修改,将其自身的输出发送到一个新的临时数据文件中。第三个命令将不得不从第二个临时数据文件中获取其数据,并对数据流执行其自身的操作,然后将结果数据流存储在另一个临时文件中。在每个步骤中,数据文件名都必须以某种方式从一个命令传输到下一个命令。

我简直无法想象,这太复杂了。

Linux 哲学

只有通过使用管道,Linux 哲学 的几个原则才变得有意义。

这些程序中的每一个都很小[很美],并且每个程序都做好一件事。它们也是过滤器;它们接受标准输入,以某种方式处理它,然后将输出发送到标准输出。

使用标准 I/O 进行输入和输出是 Linux 哲学的次要原则之一。只有通过使用管道,才有可能将这些程序实现为过滤器,以将其自身的标准输出的处理数据流发送到上面程序的标准输入。

伟大的命令行挑战

请注意:此竞赛现已截止提交。DPB,2015年8月1日

正如我在一篇 之前的文章 中承诺的那样,我给你们带来了一个挑战。这是一个将管道作为解决方案一部分的挑战——这是一个简单的问题,我几乎每天都使用它的解决方案。

我配置了我自己的所有计算机以及我为其他人管理的几台计算机,以将电子邮件发送到我自己的电子邮件帐户。我已配置我的电子邮件客户端将大多数这些管理电子邮件移动到一个文件夹中,以便于查找它们。在过去一年中,我在此文件夹中收集了超过 50,000 封电子邮件。

这些电子邮件包含来自 rkhunter (Rootkit Hunter)、logwatch、cron 作业和 Fail2ban 等的输出。

Fail2ban 是一款开源软件,它可以动态禁止尝试恶意访问我在 Internet 上的主机的 IP 地址。Fail2ban 通过向 iptables 添加规则来实现这一点。每次 IP 地址被禁止时,Fail2ban 都会发送一封电子邮件。

为了快速分析 Fail2Ban 消息,我使用我的电子邮件客户端导出到一个 CSV 文件中,这些电子邮件的主题行包含已被禁止的主机的 IP 地址。此导出包含所有电子邮件的所有主题,而不仅仅是来自 Fail2Ban 的主题。

您的任务(如果您接受的话)是创建一个单行命令行程序,以计算来自每个尝试使用 SSH 访问我的主机的 IP 地址的电子邮件数量。 下载文件 来尝试一下。请注意,此文件包含超过 50,000 行,大小超过 6MB。而且,这不是您想手动完成的任务。我已经更改了向我发送电子邮件的主机的域名,但攻击主机的 IP 地址尚未修改。

为了清楚起见,您创建的用于执行此操作的命令行程序应该只有一行长,并且必须使用管道来引导数据从一个命令到下一个命令的流动。换行是可以的。而且,您的“一行”可以换行以适合您的终端宽度。

参与挑战: 给我发送电子邮件,邮件主题为“Great Command-Line Challenge”,然后在邮件正文中写下您的答案(一行代码)。 将根据以下每个标准选择一名获胜者:第一个正确答案、最短的正确答案和最具创意的答案。每位获胜者将获得一件 Opensource.com T 恤。挑战赛的提交截止日期为美国东部时间 2015 年 7 月 31 日晚上 11:59。阅读有关 官方规则 的更多信息。

额外加分项:包括每个 IP 地址的国家/地区名称。

祝你好运!

标签
David Both
David Both 是一位开源软件和 GNU/Linux 倡导者、培训师、作家和演讲者。自 1996 年以来,他一直从事 Linux 和开源软件方面的工作,自 1969 年以来一直从事计算机方面的工作。他是“系统管理员 Linux 哲学”的坚定支持者和传播者。

11 条评论

为什么只有列出的少数几个国家可以参与?

出于法律目的,只有某些国家/地区有资格获得奖品,因为本次竞赛由上市公司 Red Hat, Inc. 提供,并且必须遵守某些规则和法规以保持合规性。感谢您对本次竞赛的关注。

Jason

回复 ,作者:teresaejunior (未验证)

竞赛的法律要求在国际上各不相同。您需要查看您所在国家/地区的竞赛法律以获取更多信息。

我的一行代码缩减到 76 个字符了 :-)

无法连接到服务器以下载文件????
我理解乌拉圭不是符合条件的国家/地区,但为什么要阻止下载文件????

很抱歉听到您遇到问题。我们正在调查此事,一旦我们找到答案,就会尽快回复您。

回复 ,作者:Eduardo (未验证)

向西班牙语社区传播关于这个有趣竞赛的消息!
- https://victorhckinthefreeworld.wordpress.com/2015/07/14/hackeando-con-la-linea-de-comandos-te-atreves-a-un-reto/

玩得开心!! ;)

你们删除了我之前的评论吗?

是的。我们更新了文章中的链接,使其更容易访问(竞赛 GitHub 存储库),并删除了您的链接以避免任何混淆。

回复 ,作者:MarxBro (未验证)

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 许可。
© . All rights reserved.