打字猴:1.700436238e+09
1700436238 who命令为每个登录用户输出一行信息,grep查找符合特定模式的所有文本,wc统计行数,所以使用以下管道就能获知登录用户的状态。
1700436239
1700436240     who                     # 谁登录了?    who | wc                # 有多少人登录了?    who | grep joe          # 乔登录了吗?    who | grep joe | wc     # 乔登录过多少次?
1700436241
1700436242
1700436243
1700436244
1700436245
1700436246 要想了解管道提供了怎样的改进,请考虑在没有管道的情况下,使用I/O重定向到文件,最后一个任务(乔登录过多少次)将如何执行:
1700436247
1700436248     who >temp1    grep joe temp2    wc
1700436249
1700436250
1700436251
1700436252
1700436253
1700436254 然后还得删除临时文件。有了管道,一行命令就能完成任务,而且不会产生临时文件。
1700436255
1700436256 肯最喜欢提到的管道范例是语音计算器。这个程序使用了鲍勃·莫里斯的dc计算器程序。肯的number程序将数字输出成单词(“127”变成了“one hundred and twenty seven”),speak程序读入文本并合成发音。肯在2019年接受采访时说:
1700436257
1700436258 “在dc程序中输入1 2 +,计算结果由管道导入number程序,然后再导入speak程序,speak程序就会说出‘four’。
1700436259
1700436260 (听众大笑)
1700436261
1700436262 “我数学一向不好。”
1700436263
1700436264 回头看来,管道是Unix的主要贡献之一。正如丹尼斯1984年在“The Evolution of the Unix Time-sharing System”(Unix分时系统的演进)一文中写到的那样:
1700436265
1700436266 “同样一些命令,以简单方式持续使用,构成了Unix管道,这恰恰是管道的天才之处。实在需要脑洞大开,才能看到这种可能性并创造出这个概念。”
1700436267
1700436268
1700436269
1700436270
1700436271 UNIX传奇:历史与回忆 [:1700434693]
1700436272 UNIX传奇:历史与回忆 4.5 grep命令
1700436273
1700436274
1700436275
1700436276
1700436277
1700436278
1700436279
1700436280 Unix生来就是命令行系统,也就是说,用户通过输入命令来运行程序,而不是像Windows或macOS那样通过鼠标指向和点击图标来运行程序。对于新手来说,命令行界面并不如指向和点击那样简单,但即使在只有中度经验的人手中,它也会高效得多。它能实现图形界面无法实现的自动化功能:命令序列可以从脚本中运行,输入单个指令就能作用于大量文件。
1700436281
1700436282 Unix一向拥有丰富的命令行小工具,也就是处理日常简单任务的程序。有六七个命令用来操作文件系统,如ls用于列出目录中的文件,颇似macOS上的访达或Windows上的资源管理器;cat和cp用于以各种方式复制文件;mv(“移动”,move的简写)用于重命名;rm用于删除文件。有一些命令用于处理文件内容,如wc用于计数,sort用于对文件进行排序;有一些命令用于比较文件,另外一些用于转换,如大小写转换;还有一些用于选择文件的一部分。(Unix用户会想到uniq、cmp、diff、od、dd、tail、tr和comm。)再加上另外十几个其他类别的工具,你就有了20个或30个命令,可以轻松完成各种基本任务。
1700436283
1700436284 实际上,工具如同语言中的动词,而文件则是动词所应用的名词。语言通常是不规则的,每个命令都有可选的参数来修改它的行为。例如,sort通常按字母顺序逐行排序,但加上参数之后,它就能按反序、数值、特定字段等方式排序。
1700436285
1700436286 要想用好Unix,和学习自然语言一样,必须学习类似于不规则动词族系的东西。当然,人们经常抱怨历史遗留的不规则现象,但偶尔试图修正这些不规则现象的努力在大多数情况下并不十分成功。
1700436287
[ 上一页 ]  [ :1.700436238e+09 ]  [ 下一页 ]