挑战伟大的命令行

尚无读者喜欢这个。
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 是一款开源软件,可以动态禁止尝试恶意访问我在互联网上的主机的 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 (未验证)

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

那么我将要参加 ;)

回复 作者 dboth

我已经简化到一个 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本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.