为什么80%的码农都做不了架构师?>>>   

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

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

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

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

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

cat

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

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

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

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

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

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

sort

sort – 文件里的文字按行排序

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

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

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

grep

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

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

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

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

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

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

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

cut

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

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

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

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

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

sed

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

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

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

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

  • 删除时间戳
  • 捕捉订单号
  • 删除订单号后的逗号和空格
  • 捕捉余下的行信息

里面的引号和反斜杠有点乱,但使用命令行时必须要用到这些。

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

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

uniq

uniq – 删除重复的行

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

jfields$ cat order.out.log | grep "\(Kindle\|Hardcover\)" | cut -d"," -f3 | sort | uniq -c      1  Joy of Clojure      2  Patterns of Enterprise Architecture 

看起来这是一个很简单的任务。

这都是很好用的命令,但前提是你要能找到你想要的文件。有时候你会发现一些文件藏在很深的文件夹里,你根本不知道它们在哪。但如果你是知道你要寻找的文件的名字的话,这对你就不是个问题了。

find

find – 在文件目录中搜索文件

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

jfields$ find /Users -name "order*"   Users/jfields/order.in.log   Users/jfields/order.out.log 

find命令有很多其它的参数,但99%的时间里我只需要这一个就够了。

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

less

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

让我们再回到简单的 cat | sort 例子中来,下面的命令就是将经过合并、排序后的内容输出到less命令里。在 less 命令,使用“/”来执行向前搜索,使用“?”命令执行向后搜索。搜索条件是一个正则表达式。

jfields$ cat order* | sort | less 

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

Linux里有很丰富的各种命令,有些是很难用的。然而,学会了前面说的这8个命令,你已经能处理大量的log分析任务了,完全不需要用脚本语言写程序来处理它们。

转载于:https://my.oschina.net/neo600/blog/79301

每个程序员都应该知道的8个Linux命令相关推荐

  1. 使用Mono平台前,请牢记产品观点(所有.Net程序员都建议知道的)

    技术领域有很多让人深感困惑的地方,不管是架构师.设计师还是程序员,在完成任务之余,偶尔都有自责的地方:程序员在使用新技术完成任务的时候,有时会觉的自己旧技术都没有完全掌握,使用新技术有些好高骛远:设计 ...

  2. 每个程序员都应该知道的10件事!

    如果你已经编程了一段时间,并且想学习编程,那么你可能在想什么才是一个好的程序员?计算机科学与技术专业毕业生能做些什么,来为软件开发职业生涯做准备? 在本文中,我将分享10件我认为每个程序员都应该知道的 ...

  3. 每个程序员都应该知道的GitHub Repos

    GitHub是领先的Git存储库托管服务,其中包含许多代码存储库,库等的源代码. 在本文中,我将为每个开发人员介绍GitHub存储库从播客到免费书籍再到学习路线图 1.Awesome Resource ...

  4. 每个程序员都必须知道的 8 种数据结构

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 快速介绍8种数据结构 数据结构是一种特殊的组织和存储数据的方式,可 ...

  5. 网优谷程序员都需要知道的8个冷知识

    想要成为一名成功的程序员,我们除了了解不同编程语言的设计思路,也应当了解编程的发展历史,从而判断未来的编程技术将走向何方.接下就为大家普及下计算机发展历程中的8个冷门小知识! 01 第一台电脑为蒸汽驱 ...

  6. 程序员都需要知道的8个冷知识

    " 想要成为一名成功的程序员,我们除了了解不同编程语言的设计思路,也应当了解编程的发展历史,从而判断未来的编程技术将走向何方.接下就为大家普及下计算机发展历程中的8个冷门小知识! " ...

  7. 优秀的程序员都应当知道的11个警句

    1. 技术只是解决问题的选择,而不是解决问题的根本 我们可以因为掌握了最新的 JavaScript 框架 ahem.Angular 的 IoC 容器技术或者某些编程语言甚至操作系统而欢欣雀跃,但是这些 ...

  8. 小黄鸭调试法,每个程序员都要知道的

    花了一下午(或一天)在试图解决某个 Bug,后来才知道解决方案很简单,当时就是没有想到. 有个同事正好路过,看到你愁眉苦脸的,问你"怎么了呀?" "噢,是这样的.我遇到了 ...

  9. web开发程序员有几种_每个程序员都应该知道的10种流行的Web开发工具

    web开发程序员有几种 Are you planning to get into web development? Take a tool with you, it's scary out there ...

最新文章

  1. IBM发布未来五年五大科技预测
  2. 生产者,消费者,CDN
  3. 聊聊base62与tinyURL
  4. Cow Digit Game(博弈论:sg函数)
  5. php 完美防sql注入,PHP 完美的防XSS 防SQL注入的代码
  6. 2018青岛ICPC ZOJ 4062: Plants vs. Zombies(二分)
  7. 中国地图和地方特点介绍
  8. FOXIT PDF SDK 8.1 ALL Crack
  9. AUC(Area under Curve Roc曲线下面积)计算方法总结
  10. win10右键一直转圈_win10 系统 桌面点右键经常转圈圈卡住。
  11. InnoDB怎么解决幻读的?
  12. Biotin-PEG2k-NHS,Biotin-PEG2000-NHS,PEG衍生物
  13. Asp.Net Core3.1-集成Hangfire
  14. python画多个圆_我如何用pythonturtle画一个中间有一个圆的圆圈?
  15. 【学透二叉树-二叉搜索树(二叉树)的最近公共祖先】
  16. web平台使用threejs实现三维视频融合的思路
  17. yolov2 损失函数_深度学习计算机视觉之YOLO,YOLOv2和YOLOv3算法(超详细解析)
  18. 如何高效的学习高等数学
  19. 网络虚拟化NSX学习笔记
  20. Java中的语法树结构

热门文章

  1. 学习笔记101— word 如何给某一页后面所有页增加行号
  2. 51单片机学习笔记(清翔版)(21)——ADDA数模转换
  3. 自主学习之RxSwift(二) -----flatMap
  4. [swift] Async
  5. AngularJS进阶学习
  6. ip_vs实现分析(7)
  7. WebService(1)名词了解
  8. python输入一组身高_一起学Python系列之用户输入
  9. 猜测:引力与空间映射
  10. 用java的io做一个代码计数器,如何制作Java页面计数器_java