迎接伟大的命令行挑战

还没有读者喜欢这个。
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 (未验证)

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

那么我将参加 ;)

回复 作者: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.