`
xpp02
  • 浏览: 1012434 次
社区版块
存档分类
最新评论

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

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

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

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

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

  1. order.out.log
  2. 8:22:19111,1,PatternsofEnterpriseArchitecture,Kindleedition,39.99
  3. 8:23:45112,1,JoyofClojure,Hardcover,29.99
  4. 8:24:19113,-1,PatternsofEnterpriseArchitecture,Kindleedition,39.99
  5. order.in.log
  6. 8:22:20111,OrderComplete
  7. 8:23:50112,Ordersenttofulfillment
  8. 8:24:20113,Refundsenttoprocessing

cat

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

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

  1. jfields$catorder.out.log
  2. 8:22:19111,1,PatternsofEnterpriseArchitecture,Kindleedition,39.99
  3. 8:23:45112,1,JoyofClojure,Hardcover,29.99
  4. 8:24:19113,-1,PatternsofEnterpriseArchitecture,Kindleedition,39.99

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

  1. jfields$catorder.*
  2. 8:22:20111,OrderComplete
  3. 8:23:50112,Ordersenttofulfillment
  4. 8:24:20113,Refundsenttoprocessing
  5. 8:22:19111,1,PatternsofEnterpriseArchitecture,Kindleedition,39.99
  6. 8:23:45112,1,JoyofClojure,Hardcover,29.99
  7. 8:24:19113,-1,PatternsofEnterpriseArchitecture,Kindleedition,39.99

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

sort

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

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

  1. jfields$catorder.*|sort
  2. 8:22:19111,1,PatternsofEnterpriseArchitecture,Kindleedition,39.99
  3. 8:22:20111,OrderComplete
  4. 8:23:45112,1,JoyofClojure,Hardcover,29.99
  5. 8:23:50112,Ordersenttofulfillment
  6. 8:24:19113,-1,PatternsofEnterpriseArchitecture,Kindleedition,39.99
  7. 8:24:20113,Refundsenttoprocessing

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

grep

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

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

  1. jfields$catorder.*|sort|grepPatterns
  2. 8:22:19111,1,PatternsofEnterpriseArchitecture,Kindleedition,39.99
  3. 8:24:19113,-1,PatternsofEnterpriseArchitecture,Kindleedition,39.99

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

  1. jfields$catorder.*|sort|grep":\d\d113,"
  2. 8:24:19113,-1,PatternsofEnterpriseArchitecture,Kindleedition,39.99
  3. 8:24:20113,Refundsenttoprocessing

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

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

cut

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

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

  1. jfields$catorder.*|sort|grepPatterns
  2. 8:22:19111,1,PatternsofEnterpriseArchitecture,Kindleedition,39.99
  3. 8:24:19113,-1,PatternsofEnterpriseArchitecture,Kindleedition,39.99
  4. jfields$catorder.*|sort|grepPatterns|cut-d","-f2,5
  5. 1,39.99
  6. -1,39.99

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

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

sed

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

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

  1. jfields$catorder.*|sort|grepPatterns\
  2. >|seds/"[0-9\:]*\([0-9]*\)\,\(.*\)"/"\2,'\1'"/
  3. 1,PatternsofEnterpriseArchitecture,Kindleedition,39.99,'111'
  4. -1,PatternsofEnterpriseArchitecture,Kindleedition,39.99,'113'
  5. lmp-jfields01:~jfields$catorder.*|sort|grepPatterns\
  6. >|seds/"[0-9\:]*\([0-9]*\)\,\(.*\)"/"\2,'\1'"/|cut-d","-f1,4,5
  7. 1,39.99,'111'
  8. -1,39.99,'113'

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

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

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

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

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

uniq

uniq– 删除重复的行

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

  1. jfields$catorder.out.log|grep"\(Kindle\|Hardcover\)"|cut-d","-f3|sort|uniq-c
  2. 1JoyofClojure
  3. 2PatternsofEnterpriseArchitecture

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

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

find

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

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

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

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

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

less

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

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

  1. jfields$catorder*|sort|less

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

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


分享到:
评论

相关推荐

    linux基础资料

    Linux是每一个程序员都应该掌握的操作系统。本套课程主要介绍Linux的基础知识、常用Shell命令和系统管理,帮助开发者熟练掌握Linux系统的使用和管理。

    linux系统分析与高级编程技术

    第二,每个软件都有确定的用途。其中第一条详细来讲就是系统中的所有都归结为一个文件,包括命令、硬件和软件设备、操作系统、进程等等对于操作系统内核而言,都被视为拥有各自特性或类型的文件。至于说Linux是基于...

    linux程序设计(第三版)

    在编写本书时,我们假设读者以前不了解LINUXUNIX及编程知识,对所涉及编程工具的深度和广度进行了恰当安排,使初学者或有经验的程序员都可从中获益。 读者对象 本书可用作LINUX或UNIX平台上介绍编程和数据结构课程...

    Linux Shell 脚本编程入门教程

    深入地了解和熟练地掌握Shell编程,是每一个Linux用户的必修 功课之一。 Linux的Shell种类众多,常见的有:Bourne Shell(/usr/bin/sh或/bin/sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh)、K ...

    12本精彩的Linux书籍

    对于每个系统管理员,这本书都是必读书籍。这本书中的例子直接给出了该如何根据需求(SHH1,SHH2和OpenSSH)来量身定制SSH的不同口味。 5. HUEssential System AdministratorUH,作者Æleen Frisch。对于想成为UNIX...

    非常实用并且难得的Red hat linux 9 课件

    Red Hat Linux 操作系统是每个程序员必须掌握的操作系统,正是因为它的安全性、稳定性,得到广大软件公司的青睐。而学习Linux操作系统最重要的是学习Linux命令,该课件可谓总结常见Linux使用操作和命令,使Linux广大...

    easyexplore linux 增强 打开terminal ,editor and filemanager

    安装方法:将其中的一个jar 文件,copy 到eclipse/plugins 目录里 本人下载了easyexplore1.2.1 的...另外点工具栏上的四个图标(其中一个留给你自定义命令) 右键有一个Easy..菜单,里面有四个选项 点菜单栏上的Navigate

    Linux C编程一站式学习.chm

    尽量做到每个知识点直到要用的时候才引入。过早引入一个知识点,讲完了又不用它,读者很快就会遗忘,这是不符合认知规律的。 这是一本从零基础开始学习编程的书,不要求读者有任何编程经验,但读者至少需要具备以下...

    Linux常用命令之chmod修改文件权限777和754

    常用下面这条命令: chmod 777 文件或目录 示例:chmod 777 /etc/squid 运行命令后,squid文件夹(目录)的权限就被修改为777...Linux系统中,每个用户的角色和权限划分的很细致也很严格,每个文件(目录)都设有访

    .C语言程序中的文件包含命令是-文件包含.pdf

    ⼀个⼤的程序可以分为多个模块,由多个程序员分别编程,有 些公⽤的符号常量或宏定义等可单独组成⼀个⽂件,在其他⽂件的开头⽤包含命令包含该⽂件即可使⽤。 这样,可避免在每个⽂件开头都去书写那些公⽤量,从⽽节省...

    Linux循序渐进的基础学习

    每个应用程序的软件包都为特定的操作系统和机器编写。使用者无权修改这些应用程序。使用Linux,可以将操作系统变成一种操作环境。  由于Linux是一套自由软件,用户可以无偿地得到它及其源代码,可以无偿地获得...

    GNU_makefile中文手册.pdf

    GNU_makefile 中文译本,每章都有目录 Linux 环境下的程序员如果不会使用 GNU make 来构建和管理自己的工程,应该 不能算是一个合格的专业程序员,至少不能称得上是 Unix 程序员。在 Linux(unix)环 境下使用 GNU ...

    玩转Linux:常用命令实例指南

    人工智能、物联网、大数据时代,Linux正有着一统天下的趋势,几乎每个程序员岗位,都要求掌握Linux。本课程零基础也能轻松入门。 本课程以简洁易懂的语言手把手教你系统掌握日常所需的Linux知识,每个知识点都会配合...

    PureBasic 4.3 Linux 版

    外部库是充分优化了的汇编程序,每个程序非常快,命令常常比C/C++还快或等同. PureBasic主要特色: - 支持486, Pentium (Pro, II, III) 以及更高,支持所有最新系统,支持微软的Vista! - 内嵌数组, 动态表, 复合体...

    四种操作系统的区别.doc

    第二,每个软件都有确定的用途。 其中第一条详细来讲就是系统中的所有内容都归结为一个文件,包括命令、硬件和软件 设备、操作系统、进程等等。对于操作系统内核而言,都被视为拥有各自特性或类型的 文件。至于说...

    Linux 程序设计权威指南

    正如世上每件事物都有自己的时尚,今天的计算机世界倾向于越来越多地使用自由软件,即使 是用于商业用途.最流行的自由软件项目是Linux。大家普遍认为Linux(和其他项目如Apache服 务器、Perl语言、GNU工具程序)证明了...

    linuxtools_rst:Linux工具快速教程

    同时,这个教程也可以考虑Linux命令手册使用,使用左侧栏的目录和搜索栏可以很方便的查阅;写作方式我将会遵循以下写作方式:首先介绍工具的使用范围;工具的快速上手教程;包含最常用的范例和最常用的选项;使用...

    程序员考试刷题-FinalPack:最终包装

    的第一眼看到它是每个 linux 大师日常生活中使用的基本魔法命令它很有用,有时当我回顾我这样的旧脚本时,它会让我的生活变得轻松我发布的一个我来自远方。 这是我的第二个脚本 第 3 周 本周是我生命中另一个重要的...

    程序员为什么还要刷题-cryptomnesia:基于硬件USB触发器Linux可否认密码存储擦除器,用于紧急情况下的自毁

    好吧,我想每个人在 2020 年初都感受到了来自政府的一点压力。 现在,我并不是说赛博朋克反乌托邦就在这里(即使我这么认为),但我们必须为此做好准备。 您可能会说“伙计,别担心,我是 1337 h4x0r,我使用全盘...

    tech-collection:技术收藏

    tech-collection技术方面的文章集合, 记录一些比较好的文章,别人发的或者自己看见的文章。2019-03-102019-03-112019-03-12我所理解的分布式系统2019-03-13使用consul和golang实现互斥锁...每个程序员都应该了解的 CPU

Global site tag (gtag.js) - Google Analytics