读书人

linux的八个务须掌握的指令

发布时间: 2012-09-29 10:30:01 作者: rapoo

linux的八个必须掌握的指令

每个程序员,在职业生涯的某个时刻,总会发现自己需要知道一些Linux方面的知识。我并不是说你应该成为一个Linux专家,我的意思是,当面对Linux命令行任务时,你应该能很熟练的完成。事实上,学会了下面8个命令,我基本上能完成任何需要完成的任务。

注意:下面的每个命令都有十分丰富的文档说明。这篇文章并不是来详尽的展示每个命令的各种功用的。我在这里要讲的是这几个最常用的命令的最常见用法。如果你对linux命令并不是很了解,你想找一些这方面的资料学习,那这篇文章将会给你一个基本的指导。

让我们从处理一些数据开始。假设我们有两个文件,分别记录的订单清单和订单处理结果。

  1. order.out.log
  2. 8:22:19 111, 1, Patterns of Enterprise Architecture, Kindle edition, 39.99
  3. 8:23:45 112, 1, Joy of Clojure, Hardcover, 29.99
  4. 8:24:19 113, -1, Patterns of Enterprise Architecture, Kindle edition, 39.99
  5. order.in.log
  6. 8:22:20 111, Order Complete
  7. 8:23:50 112, Order sent to fulfillment
  8. 8:24:20 113, Refund sent to processing

cat

cat 连接文件,并输出结果

cat 命令非常的简单,你从下面的例子可以看到。

  1. jfields$ cat order.out.log
  2. 8:22:19 111, 1, Patterns of Enterprise Architecture, Kindle edition, 39.99
  3. 8:23:45 112, 1, Joy of Clojure, Hardcover, 29.99
  4. 8:24:19 113, -1, Patterns of Enterprise Architecture, Kindle edition, 39.99

就像它的说明描述的,你可以用它来连接多个文件。

  1. jfields$ cat order.*
  2. 8:22:20 111, Order Complete
  3. 8:23:50 112, Order sent to fulfillment
  4. 8:24:20 113, Refund sent to processing
  5. 8:22:19 111, 1, Patterns of Enterprise Architecture, Kindle edition, 39.99
  6. 8:23:45 112, 1, Joy of Clojure, Hardcover, 29.99
  7. 8:24:19 113, -1, Patterns of Enterprise Architecture, Kindle edition, 39.99

如果你想看这些log文件的内容,你可以把它们连接起来并输出到标准输出上,就是上面的例子展示的。这很有用,但输出的内容可以更有逻辑些。

sort

sort 文件里的文字按行排序

此时sort命令显然是你最佳的选择。

  1. jfields$ cat order.* | sort
  2. 8:22:19 111, 1, Patterns of Enterprise Architecture, Kindle edition, 39.99
  3. 8:22:20 111, Order Complete
  4. 8:23:45 112, 1, Joy of Clojure, Hardcover, 29.99
  5. 8:23:50 112, Order sent to fulfillment
  6. 8:24:19 113, -1, Patterns of Enterprise Architecture, Kindle edition, 39.99
  7. 8:24:20 113, Refund sent to processing

就像上面例子显示的,文件里的数据已经经过排序。对于一些小文件,你可以读取整个文件来处理它们,然而,真正的log文件通常有大量的内容,你不能不考虑这个情况。此时你应该考虑过滤出某些内容,把cat、sort后的内容通过管道传递给过滤工具。

grep

grep, egrep, fgrep 打印出匹配条件的文字行

假设我们只对Patterns of Enterprise Architecture这本书的订单感兴趣。使用grep,我们能限制只输出含有Patterns字符的订单。

  1. jfields$ cat order.* | sort | grep Patterns
  2. 8:22:19 111, 1, Patterns of Enterprise Architecture, Kindle edition, 39.99
  3. 8:24:19 113, -1, Patterns of Enterprise Architecture, Kindle edition, 39.99

假设退款订单113出了一些问题,你希望查看所有相关订单——你又需要使用grep了。

  1. jfields$ cat order.* | sort | grep ":\d\d 113, "
  2. 8:24:19 113, -1, Patterns of Enterprise Architecture, Kindle edition, 39.99
  3. 8:24:20 113, Refund sent to processing

你会发现在grep上的匹配模式除了“113”外还有一些其它的东西。这是因为113还可以匹配上书目或价格,加上额外的字符后,我们可以精确的搜索到我们想要的东西。

现在我们已经知道了退货的详细信息,我们还想知道日销售和退款总额。但我们只关心《Patterns of Enterprise Architecture》这本书的信息,而且只关心数量和价格。我现在要做到是切除我们不关心的任何信息。

cut

cut 删除文件中字符行上的某些区域

又要使用grep,我们用grep过滤出我们想要的行。有了我们想要的行信息,我们就可以把它们切成小段,删除不需要的部分数据。

  1. jfields$ cat order.* | sort | grep Patterns
  2. 8:22:19 111, 1, Patterns of Enterprise Architecture, Kindle edition, 39.99
  3. 8:24:19 113, -1, Patterns of Enterprise Architecture, Kindle edition, 39.99
  4. jfields$ cat order.* | sort | grep Patterns | cut -d"," -f2,5
  5. 1, 39.99
  6. -1, 39.99

现在,我们把数据缩减为我们计算想要的形式,把这些数据粘贴到Excel里立刻就能得到结果了。

cut是用来消减信息、简化任务的,但对于输出内容,我们通常会有更复杂的形式。假设我们还需要知道订单的ID,这样可以用来关联相关的其他信息。我们用cut可以获得ID信息,但我们希望把ID放到行的最后,用单引号包上。

sed

sed 一个流编辑器。它是用来在输入流上执行基本的文本变换。

下面的例子展示了如何用sed命令变换我们的文件行,之后我们在再用cut移除无用的信息。

  1. jfields$ cat order.* | sort | grep Patterns \
  2. >| sed s/"[0-9\:]* \([0-9]*\)\, \(.*\)"/"\2, '\1'"/
  3. 1, Patterns of Enterprise Architecture, Kindle edition, 39.99, '111'
  4. -1, Patterns of Enterprise Architecture, Kindle edition, 39.99, '113'
  5. lmp-jfields01:~ jfields$ cat order.* | sort | grep Patterns \
  6. >| sed s/"[0-9\:]* \([0-9]*\)\, \(.*\)"/"\2, '\1'"/ | cut -d"," -f1,4,5
  7. 1, 39.99, '111'
  8. -1, 39.99, '113'

我们对例子中使用的正则表达式多说几句,不过也没有什么复杂的。正则表达式做了下面几种事情

读书人网 >UNIXLINUX

热点推荐