对话 UNIX:第 2 部分: 做得多不如做得巧

每种技术性劳动都有其自身的秘密 , 这些小窍门、技巧和工具甚至可以处理最复杂的任务 。例如 , 我的邻居是一个熟练的木匠 。他仅凭眼睛就可以非常精确地测量和改变角度、无缝地进行斜接 , 并且他所完成的作品为他在当地报纸上赢得了赞誉 。
但更神奇的是(至少对于我这样一个肯定会出错的外行来说) , 他可以相当轻松地完成工作 。他干这一行大约有 20 多年了 , 并且掌握了所有的快捷方法 。通过这些快捷方法 , 可以在这里节省一点点时间 , 在那里节省一点点劳动 , 然而对于像进行切割、锤钉子和组装框架这样的重复性任务 , 这样的节省最终加起来真的不少 。
程序员、系统管理员和其他的 Unix?计算机专业人员都有他们自己专门的工具:
CPU
RAM
操作系统
应用程序
Shell
就像一个经验丰富的木匠 , 了解一些窍门并应用相应的工具可以节省大量的时间和精力 。第 1 期的对话 UNIX 介绍了 UNIX 命令行的强大功能 。本文向您介绍一些有用的 Shell 快捷方法 , 它们有助于您更好地掌握 Shell 提示符 。让您的手指稍事休息 , 不要让它们过于疲劳
正如第 1 部分所介绍的 , UNIX 命令行的强大功能是无与伦比的 。只需按一些键并使用一些句法粘结剂 , 包括管道 (|)、tee 和重定向 , 您就可以在 Shell 提示符中即兴组装自己的数据转换器 。
例如 , 下面的命令将在您的 home 目录中查找所有包含单词 Monthly Report 的文本文件:
$ find /home/joe -type f -name '*.txt' -print | xargs grep -l "Monthly Report"
该命令将搜索整个 home 目录 (find /home/joe) 以查找所有的常规文件 (-type f) 中具有后缀 .txt 的文件 , 然后运行 grep 命令来搜索字符串 Monthly Report 。如果找到匹配项 , -l 选项将打印出相应的文件名 。因此 , 该命令的输出是匹配文件的列表 。
尽管上面的命令很有用 , 但是要记住这个命令并重新输入 , 这样做很费劲 , 尤其是在您需要经常使用这个命令的情况下 。而且 , 当命令行作为使用电子邮件、文件、工具(如编辑器、编译器、监视器)和远程系统的主要接口时 , 您在命令行中所节省的时间和精力可以更好地用于手头上的其他任务 。毕竟 , 这些短的时间加起来真的不少 。
为了处理这些重复性的任务 , Unix Shell 提供了各种有用的快捷方法 , 具体包括:
符号
通配符
命令历史
环境变量
别名
启动文件
例如 , 您可以使用符号 ~(波浪符号)引用您的 home 目录 。您还可以使用 $HOME 环境变量引用您的 home 目录 , 如清单 1 所示 。
清单 1. UNIX Shell 中的快捷方法
$ whoami
strike
$ echo ~
/Users/strike
$ echo $HOME
/Users/strike
$ !!
echo $HOME
/Users/strike
最后一个命令 !!(两个感叹号) , 可能看起来有些奇怪 , 但它是一种命令历史符号 , 可以一字不差地重复前面的命令 。(许多 Shell 还允许您使用向上箭头键或按 Control P 来浏览以前的命令列表 。)
让我们更仔细地研究 Shell 中的各种快捷方法 。本文主要介绍 Z Shell(zsh , 请参见参考资料部分) , 它通常安装在 /bin/zsh 目录中 。(如果您的系统中没有 Z Shell , 可以请求系统管理员安装它 。)Z Shell 具有一些特别的特性 , 另外 , 这里所介绍的示例适用于所有主流的 UNIX Shell 。
Shell 符号
针对许多频繁使用的命令行参数 , Shell 提供了相应的符号 或记号作为简写 。您只需输入这些符号来代替相应的参数 。
如上所述 , ~ 表示您的 home 目录 。与之类似的简写形式 ~username 表示 username 的 home 目录 。例如 , ~joe 表示 joe 的 home 目录 , 所以 , 要将文件从 joe 的 doc 目录复制到您的 info 目录 , 您可以输入下面的命令:

推荐阅读