`

Linux 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分析任务了,完全不需要用脚本语言写程序来处理它们。

转载地址:http://www.vaikan.com/8-linux-commands-every-developer-should-know/?_biz=MjM5OTA1MDUyMA==&mid=407358558&idx=2&sn=b21877f23bf4063fa311185009c1f0b7&scene=0#wechat_redirect1463619155519
分享到:
评论

相关推荐

    nginx-log-analysis:用于分析 nginx 日志文件的很棒的 linux shell 命令的精选列表

    本篇文章将详细介绍如何利用Linux shell命令来分析Nginx的日志文件。 首先,了解Nginx的日志格式至关重要。默认情况下,Nginx的主要访问日志文件通常位于`/var/log/nginx/access.log`,采用combined日志格式,内容...

    log4j2漏洞检测工具

    2. **深度分析**: 工具会深入分析代码,找出所有使用Log4j2的地方,特别是那些可能接收用户输入或网络数据的地方,这些地方是漏洞可能被触发的关键点。 3. **风险评估**: 工具能够评估每个检测到的实例的风险等级,...

    Linux文件查找命令find

    ### Linux 文件查找命令 find 在Linux系统中,`find`命令是极其强大的工具,用于在文件系统中搜索和定位特定的文件或目录。通过灵活的选项设置,`find`能够根据文件名、权限、所有者、修改时间等多种条件进行精确...

    Linux系统命令及Shell脚本实践指南.pdf 高清

    《Linux系统命令及Shell脚本实践指南》是一本深度探讨Linux操作系统中常用命令与Shell脚本编程的实用手册。本书旨在帮助用户熟练掌握在Linux环境中进行日常操作、系统管理以及自动化任务执行的方法。 Linux命令是...

    LINUX命令 帮助文档

    ### Linux Find 命令详解 #### 概述 `find` 命令是 Linux 系统中一个非常强大的工具,用于在指定目录及其子目录下查找文件或目录。与 Windows 中的文件搜索功能不同,`find` 命令提供了更多的灵活性和选项,使用户...

    Linux实验指导书

    总之,Linux实验指导书将引导你逐步探索这个开源操作系统的深度和广度,无论是日常使用还是进一步的系统管理员工作,这些知识都将为你的Linux之旅打下坚实基础。不断实践和学习,你将逐渐掌握这个强大而灵活的平台。

    linux基本命令指南

    Linux操作系统是开源的类Unix系统,它提供了丰富的命令行工具供用户进行系统管理和任务执行。本文将详细介绍几个关键的Linux命令,包括`grep`、正则表达式(Regular Expression)、`find`以及Shell编程中的管道(`|`)。...

    linux常用命令.pdf

    以上内容涵盖了Linux操作系统中常用的命令及其基本用法,这些命令对于初学者来说是必备的基础知识,也是深入学习Linux操作系统不可或缺的部分。掌握这些命令将有助于提高工作效率,更好地利用Linux的强大功能。

    linux下find命令大全

    在Linux操作系统中,文件管理是一项基础且至关重要的任务。`find`命令是Linux环境下查找文件的强大工具,尤其对新手来说,它是理解和学习Linux文件系统特性的关键。由于Linux文件系统结构复杂,不像Windows那样有...

    linux 课件 linux全套学习资料.zip

    "linux课件 Linux全套学习资料.zip"提供了全面的资源,帮助初学者和进阶者提升技能,可能是大学教学内部使用的资料,确保了内容的专业性和深度。 这个压缩包可能包含了一系列的PPT(PowerPoint演示文稿),这种格式...

    入门学习Linux常用必会60个命令实例详解doc/txt

    Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作、文件存取、目录操作、进程管理、文件权限设定等。所以,在Linux系统上工作离不开使用系统提供的命令。要想真正理解Linux系统,就必须从Linux...

    Linux下海康监控JAVA源码demo

    12. **Linux系统调用**:对于Linux平台,可能需要使用JNI(Java Native Interface)调用C/C++库,实现与Linux系统的深度集成,例如获取设备信息、优化性能等。 13. **Maven或Gradle构建**:现代Java项目通常使用...

    linux下find命令实例

    ### Linux 下 find 命令实例详解 #### 概述 `find` 是 Linux 和类 Unix 系统中一个非常强大的文件查找工具。通过 `find` 命令,用户可以基于多种条件来搜索文件系统中的文件或目录,如名称、权限、所有者、组、...

    深度系统IIS组件 用于恢复深度系统IIS组件

    深度系统IIS组件是专为深度Linux系统设计的,旨在为这个开源操作系统提供与Windows类似的Web服务功能。在Windows环境下,IIS广泛用于托管网站、Web应用程序和服务,而在深度系统中,它提供了类似的功能,使得用户...

    linux常用命令

    本文将围绕“Linux常用命令”这一主题,深度解析标题、描述以及部分示例代码中涉及的关键知识点,帮助读者更好地理解和应用这些命令。 ### 一、时间日期管理:date命令 在Linux系统中,`date`命令用于显示或设置...

    Linux初学者入门优秀教程

    Linux初学者入门优秀教程 在当今的科技世界中,Linux操作系统扮演着越来越重要的角色,尤其在服务器、云计算、物联网等领域。...无论是为了职业发展还是个人兴趣,学习Linux都将打开一扇通向技术深度和广度的大门。

    多层面“把脉”Linux运行状态.pdf

    在Linux操作系统中,系统维护和管理是至关重要的任务,尤其是对于服务器环境而言。"多层面“把脉”Linux运行状态"这一主题旨在帮助系统管理员深入理解如何从多个维度监测和评估Linux系统的健康状况。以下是一些关键...

    Ubuntu Linux 指南

    《Ubuntu Linux 指南:基础篇+管理篇》是一本深入浅出、全面解析Ubuntu Linux操作系统的专业书籍。本书由技术写作大师Mark Sobell撰写,他以其独特的教学风格和丰富的实战经验,将复杂的概念与操作流程化繁为简,为...

    log4j-tutorial-en.pdf

    在 Linux 下可以通过命令 `md5sum logging-log4j-1.2.14.zip` 来获取 MD5 值;Windows 用户可以使用第三方工具或浏览器插件(如 Firefox 的 mdhash 工具)来完成此操作。 - **集成到项目**:将 log4j.jar 添加到项目...

Global site tag (gtag.js) - Google Analytics