每个程序员都应该知道的8个Linux命令

上一篇 / 下一篇  2012-09-18 14:10:07 / 个人分类:Linux

51Testing软件测试网HU5i-n.C#\V

  摘要:Linux里有很丰富的各种命令,有些是很难用的。然而,学会了前面说的这8个命令,你已经能处理大量的log分析任务了,完全不需要用脚本语言写程序来处理它们。51Testing软件测试网A Hp+A(IM;B

51Testing软件测试网6HZX7d$EEcuUD

  每个程序员,在职业生涯的某个时刻,总会发现自己需要知道一些Linux方面的知识。我并不是说你应该成为一个Linux专家,我的意思是,当面对Linux命令行任务时,你应该能很熟练的完成。事实上,学会了下面8个命令,我基本上能完成任何需要完成的任务。51Testing软件测试网Bb+CTs5P.g+h"O ?0DA

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

lw"aA:[AFJVD051Testing软件测试网 s3UL g^QBY4pZ

  让我们从处理一些数据开始。假设我们有两个文件,分别记录的订单清单和订单处理结果。51Testing软件测试网+A0o!E"a3K0F

  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. 3x4Lf;f'jX [0
  6.   order.in.log  
  7.   8:22:20 111, Order Complete  
  8.   8:23:50 112, Order sent to fulfillment  
  9.   8:24:20 113, Refund sent to processing

)ra]5c*Y/}0  cat51Testing软件测试网(K9]\a-_

51Testing软件测试网WH ?w r n1x

  cat – 连接文件,并输出结果

p0F*I,IU0cKX-M o0

K([ew \Dp,C?0  cat 命令非常的简单,你从下面的例子可以看到。

a4Ce"oy)d#[B0
  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,

n![j.I`:y J d,j0  就像它的说明描述的,你可以用它来连接多个文件。

~N0?8x/X1}(P e0
  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,
51Testing软件测试网 s|*y,fo.u0k"j;x

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

51Testing软件测试网 z&h~7d'~,K$@"N[

  sort51Testing软件测试网 q(n ]!H&r0T Xp

h]:\;@9V0  sort – 文件里的文字按行排序

`p%x{ A8|z&N9Qt0

AwO&Y I0  此时sort命令显然是你最佳的选择。

Y r RZUW~0
  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

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

\_B;Yf%@051Testing软件测试网3A$cA&hh7I

  grep

.pdc UP0

@q[*f'u'T0  grep, egrep, fgrep – 打印出匹配条件的文字行

\*zLaz!g*\2y0

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

Y$ZoQri4XV@0

(nhw&R sYH.H"`&j0

k5Fb'O2N"W5U0
  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,

{*~9bTVV {?+R0XX0  假设退款订单113出了一些问题,你希望查看所有相关订单——你又需要使用grep了。51Testing软件测试网l1``'y6m2[

)_O \%[E(G-c0

E7d%I~3\5s [$G%e0
  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

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

Rk.l1A4^051Testing软件测试网&i6|"A g)mG

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

_(N!D(zv e4G"A0  cut51Testing软件测试网c M w q[ F4Or

51Testing软件测试网*NC+r xM:@AR

  cut – 删除文件中字符行上的某些区域51Testing软件测试网 z3[(d)|[8z_

;r^p R Kf$_#v0  又要使用grep,我们用grep过滤出我们想要的行。有了我们想要的行信息,我们就可以把它们切成小段,删除不需要的部分数据。

9G"~s3VH:e051Testing软件测试网7?^HW[ o*S

51Testing软件测试网;~Yb_b!H!C0^1}gO

  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.  
  5. jfields$ cat order.* | sort | grep Patterns | cut -d"," -f2,5  
  6.  1, 39.99  
  7.  -1, 39.99

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

!qUp+SM5}i0

-W,w;h0P0`0  cut是用来消减信息、简化任务的,但对于输出内容,我们通常会有更复杂的形式。假设我们还需要知道订单的ID,这样可以用来关联相关的其他信息。我们用cut可以获得ID信息,但我们希望把ID放到行的最后,用单引号包上。51Testing软件测试网2kv;o-EFZ@Y}

$uX%o C2M7H{.tf0  sed51Testing软件测试网;lM1mDuQk

51Testing软件测试网Dd7^$L"^1[

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

"cF#ZL4F"@051Testing软件测试网$a3M3ca5RxF2x

  下面的例子展示了如何用sed命令变换我们的文件行,之后我们在再用cut移除无用的信息。51Testing软件测试网%S+F1t yg

51Testing软件测试网BI+K&w)w)Z;Y$GkD

yn5X` d5MS e'mqL0
  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.  
  6. lmp-jfields01:~ jfields$ cat order.* | sort | grep Patterns \  
  7. >| sed s/"[0-9\:]* \([0-9]*\)\, \(.*\)"/"\2, '\1'"/ | cut -d"," -f1,4,5  
  8. 1, 39.99, '111'  
  9. -1, 39.99, '113'

-i.x uu ?'L2@0  我们对例子中使用的正则表达式多说几句,不过也没有什么复杂的。正则表达式做了下面几种事情

uR-[Xk$F&?f051Testing软件测试网5L [dw*DW'jw

  ● 删除时间戳

5k7llEy"| @!Vx!v051Testing软件测试网!hD1\:K6o#TFc eV

  ● 捕捉订单号51Testing软件测试网@%J7X3SqL@\)|

51Testing软件测试网9M"k.NL,Cjz mA

  ● 删除订单号后的逗号和空格

+}*i l x P b0

&WT F+W_3k0  ● 捕捉余下的行信息51Testing软件测试网;k2i'A}hF c\

*ZkE~i7},f0  里面的引号和反斜杠有点乱,但使用命令行时必须要用到这些。51Testing软件测试网M#qIVmI

L Jy ROpL8G1_8kW?0  一旦捕捉到了我们想要的数据,我们可以使用 \1 & \2 来存储它们,并把它们输出成我们想要的格式。我们还在其中加入了要求的单引号,为了保持格式统一,我们还加入了逗号。最后,用cut命令把不必要的数据删除。

n ed/j#]%j0

rJw4b6J%h]F8i{n0  现在我们有麻烦了。我们上面已经演示了如何把log文件消减成更简洁的订单形式,但我们的财务部门需要知道订单里一共有哪些书。

-MQA/f:@]:b!O0

~'ZJ5~[~ v0  uniq51Testing软件测试网,u(U,X-|4}M

-{ hVr6^4o0  uniq – 删除重复的行51Testing软件测试网&`k PDepB6Q

51Testing软件测试网 D8D;ET-O%f Y}w8Vi

  下面的例子展示了如何过滤出跟书相关的交易,删除不需要的信息,获得一个不重复的信息。

d1U@vvHb v5As051Testing软件测试网'bKcej1tx k'ya8`]u

8`My-],X~+Q Jf0
  1. jfields$ cat order.out.log | grep "\(Kindle\|Hardcover\)" | cut -d"," -f3 | sort | uniq -c  
  2.    1  Joy of Clojure  
  3.    2  Patterns of Enterprise Architecture
51Testing软件测试网P*V l;h d V$H/j

  看起来这是一个很简单的任务。51Testing软件测试网 AaEplD yBa6B

d)_@T.sJ0  这都是很好用的命令,但前提是你要能找到你想要的文件。有时候你会发现一些文件藏在很深的文件夹里,你根本不知道它们在哪。但如果你是知道你要寻找的文件的名字的话,这对你就不是个问题了。51Testing软件测试网I b(Xae1r|q2L.~

51Testing软件测试网$o!snvx)]q?0S

  find

.}#Jd3r8Qe0

j CKcV0  find – 在文件目录中搜索文件51Testing软件测试网q'HT+^0R|IQ(v

51Testing软件测试网+n7yc PBmJ/x

  在上面的例子中我们处理了order.in.log和order.out.log这两个文件。这两个文件放在我的home目录里的。下面了例子将向大家展示如何在一个很深的目录结构里找到这样的文件。

(nV6f5OB6p&n(M0

D8A8J#XIM[kpPb0

+b P+bVl{0
  1. jfields$ find /Users -name "order*"  
  2. Users/jfields/order.in.log  
  3. Users/jfields/order.out.log
51Testing软件测试网(vuJ(TD4T;zF O

  find命令有很多其它的参数,但99%的时间里我只需要这一个就够了。51Testing软件测试网(h\$T y6EI(od

51Testing软件测试网0d-b5c9E|;MH b!~

  简单的一行,你就能找到你想要的文件,然后你可以用cat查看它,用cut修剪它。但文件很小时,你用管道把它们输出到屏幕上是可以的,但当文件大到超出屏幕时,你也许应该用管道把它们输出给less命令。

)D.g_%M9~t-K.x051Testing软件测试网 GJ/JCU8G7f

  less

X-Wdo6S0Am)F&p:c051Testing软件测试网;`$]"QncJz#TN)`

  less – 在文件里向前或向后移动

*S6z:gag1Rbg:m0

&E xGg&Av3O0  让我们再回到简单的 cat | sort 例子中来,下面的命令就是将经过合并、排序后的内容输出到less命令里。在 less 命令,使用“/”来执行向前搜索,使用“?”命令执行向后搜索。搜索条件是一个正则表达式。51Testing软件测试网-`;H)B;@7\rPSM9?

51Testing软件测试网IT"v:M5J8i!U*P4G;W ^

Bvr6h7Ug D0
jfields$ cat order* | sort | less

H(oG~:kV"W SHl0  如果你在 less 命令里使用 /113.*,所有113订单的信息都会高亮。你也可以试试?.*112,所有跟订单112相关的时间戳都会高亮。最后你可以用 ‘q’ 来退出less命令。

l1E:~(t}8Kfp0

)tF,s O&k+Pg,m9C B0  Linux里有很丰富的各种命令,有些是很难用的。然而,学会了前面说的这8个命令,你已经能处理大量的log分析任务了,完全不需要用脚本语言写程序来处理它们。51Testing软件测试网5}R;X d0v,D8d


TAG:

 

评分:0

我来说两句

Open Toolbar