滩头阵地 - 表面之下

作者:Jon “maddog” Hall

我和一只小水黾沿着海滩散步,看到一个小小的潮汐池。我停下来涉水而过,看看岩石下的一些生物。

大多数人从不看潮汐池或淡水溪流的岩石下,但那里有很多非常有趣且必要的生命——这些生命形式是必要的,因为它们填补了世界非常重要的组成部分。大多数人只看到海洋或溪流光亮的表面,仅仅是因为他们从不深入观察。

Linux 也是如此。我注意到最近在图形用户界面方面做了很多工作,包括半透明窗口和显示多个桌面的不同方式——所有这些都很好。

但在我看来,Linux 的真正力量来自于位于这个光亮表面之下的命令行界面,它允许人们编写非常强大的程序来处理大量数据。

我不期望每个人都想学习每种类型的命令行界面或小型语言,但如果你不至少学习一两种,你将永远不知道你的系统有多么强大。

许多年前,我所在的公司需要将其新软件发布给客户。然而,应该接收该软件的客户由来自两个不同系统的两份不同的打印输出表示,我的公司计划让一位职员评估这两份报告以完成这项任务。估计职员完成这项工作的时间为九个月,这意味着该软件在客户收到之前将几乎有一年的历史。

我询问这个过程是否可以以某种方式自动化,因为客户正在等待该软件。“不”,我被告知,“这是不可能的”,因为数据库不兼容且位于不同的机器上。没有程序可以跨系统协调数据。

我让经理们将打印输出放入两个文件,并将这两个文件放在我的(当时)UNIX 系统上。在不到四分之一天的时间里,使用流编辑器 sed(1)、模式匹配程序 grep(1) 和模式匹配、扫描和处理语言 awk(1),我不仅能够关联数据,还能够打印出装运箱的邮寄标签以及每个箱子中应放入的正确软件的指示。经理们简直不敢相信。

有些人认为需要大量学习才能“了解”命令行编程。但是,如果你系统地对待这项任务,你可以随着时间的推移学习它,利用每个学习周期。

你可能应该做的第一件事是获得一本关于 Linux 命令的书。《Linux In A Nutshell: A Desktop Quick Reference》(Linux 快速参考手册:桌面快速参考)(O'Reilly) 是一个好的开始。《Linux Pocket Guide》(Linux 口袋指南)(Barrett 著,同样来自 O'Reilly) 也是一本好书。最后,《Linux For Dummies Quick Reference》(Linux 傻瓜速查手册)(Hughes 和 Navratilova 著,Wiley 出版) 也是一本好的参考书。

阅读你选择的书,但不要痴迷于记住每个命令的功能。在你读完这本书后,想想你必须重复做的一些任务,以及自动化该任务需要什么。你可能会发现一些 Linux 命令行程序可以帮助使事情变得更容易。

当你登录到你的 Linux 系统时,执行一个终端模拟器程序,例如 xterm 或其他程序之一。目前远离超级用户(root)模式,因为你正在尝试学习,有时事情会出错。

通过简单地将命令键入命令行并根据命令的要求向其输入数据,练习一些命令,例如 grep、sed、ls、cd 等。或者,创建一个 ASCII 字符文件,你希望使用这些命令来搜索、排序、过滤或以其他方式更改。

然后,开始使用管道符号 (|) 将命令放在一起。请注意,这不是小写字母 l 或大写字母 i。它通常与 ASCII 键盘上的一些其他特殊字符一起找到,通常在 Enter 键上方。

例如,首先将 ls 和 grep 命令放在一起

ls | grep 'e'

这将显示你的目录中每个名称中带有字母 e 的可见文件。

另一个研究领域应该是正则表达式的概念——描述数据字符串的方式,这些字符串通常用于搜索或与其他字符串匹配。前面提到的书籍也涵盖了正则表达式创建的问题,这可能非常棘手,但也非常强大。

尽管不同的程序可能使用不同的正则表达式方法,但它们往往遵循相同的原则,并且通常你可以对每个命令使用相同类型的特殊字符。

1977 年,我在贝尔实验室工作,试图成为这个名为“UNIX”的有趣系统的系统管理员。几个月以来,我一直因试图学习这个操作系统而感到沮丧,它似乎有数百万个微小的命令、保存它们的多个目录以及“神秘”的名称。一天晚上,我试图使用交互式文本编辑器 ed(1) 修改一个文本文件,我可以看到使用 ed 修改该文件将花费我数小时,如果不是整夜的话。

我记得突然想到,“我不知道 UNIX 中是否有命令可以轻松地完成这项工作,但我愿意打赌有一个。”所以,我开始翻阅手册,只查看“名称”行中给出的每个命令的描述。很快,我遇到了 cut 及其搭档程序 paste,它们允许我用两个命令完成我需要做的事情。从那时起,我遵循了首先寻找正确命令的理念,虽然这种理念有时是错误的,但更多时候这种理念是正确的,并且确实存在合适的命令。

要开始仅使用在线资源学习命令行,请确保你已从你的发行版加载了在线手册和信息页面。然后你可以输入man intro阅读 man(1) 命令的介绍部分,然后输入man <命令名称>—例如,man ls—了解有关 ls(1) 命令的更多信息。命令名称 ls 之后的 (1) 表示它是一个用户级命令,而不是编程接口、系统管理员命令或其他专门功能。

如果你喜欢基于图形、鼠标的阅读器,而不是命令行阅读器,则可以使用 xman。一旦你通过键入xman调用 xman 后,单击小窗口中的“Help”(帮助),然后阅读帮助页面的第一部分。然后你可以单击小控制窗口中的“manual page”(手册页),当文本窗口弹出时,从顶部的“Options”(选项)菜单中选择“show both screens”(显示两个屏幕)。这使你可以在顶部部分看到所有手册命令的索引,并在底部部分看到实际的手册页本身。单击顶部部分中感兴趣的程序,命令将在底部部分中格式化。一个有趣的命令示例是 less(1)。

我无法在一篇文章中触及学习命令行力量的所有问题和需求,但也许我已经激起了你的兴趣,让你发现为什么许多 Linux 用户根本不使用图形窗口系统,而是更喜欢仅使用命令行,而其他人(包括我自己)则大量使用窗口系统和命令行。

并且,也许你会看到表面之下,发现潜在的力量。

Jon “maddog” Hall 是 Linux 国际组织 (www.li.org) 的执行董事,这是一个由希望支持和推广 Linux 操作系统的最终用户组成的非营利性协会。在他的商业计算职业生涯中,该职业生涯始于 1969 年,Hall 先生曾担任程序员、系统设计师、系统管理员、产品经理、技术营销经理和教育家。他曾在 Western Electric Corporation、Aetna Life and Casualty、Bell Laboratories、Digital Equipment Corporation、VA Linux Systems 和 SGI 等公司工作。他现在是自由和开源软件 (FOSS) 业务和技术问题的独立顾问。

加载 Disqus 评论