在学习使用python处理日志开始阶段,对我阻力最大的莫过于对linux的不熟悉了,有种寸步难行的感觉。

在之后乱学一通之后,发现有点对我颇有益处:

  1. 学《鸟哥linux私房菜基础学习篇》,内容不多,但是对linux文件系统和基本组成有个基本的认识很有必要;
  2. 熟悉使用vim。开始的时候每次都下载到windowns再编辑实在太傻 了~;
  3. 使用ls -l + 通配符查找文件,复杂的查找使用find;
  4. 按自己需要学习linux文本领域的三大利器:grep(查找)、sed(编辑)、awk(分析)

大概整理下之前常用的命令:

一、find命令

1、查找当前目录下非空且满足命名要求的文件

find ./ ! -empty -name "*20160228*"

(注意空格)

2、在一堆文件中查询关键字所在的行

find ./-name "*20160228*" | xargs cat | grep ""

也可以直接使用

cat "*20160228*" | grep ""

cat一堆文件首先会把一堆文件合并为一个大文件。

3、查找并复制

find ./ -name "*201504101446*" | xargs  -i cp {}  ./yourDir

4、查找并删除

$find ./ -name "*201502*.log" -exec rm {} \;

【注】exec与xargs差异

在使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。
但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现 溢出错误。
错误信息通常是“参数列太长”或“参数列溢出”。
5、查询当前目录下每个文件的行数
find . -type f | xargs wc -l

仅获取当个文件行数

cat tcpSocketSer.py | wc -l

仅获取所有文件的总行数

find . -type f -exec wc -l {} \; | awk '{sum+=$1}END{print sum}'

二、awk命令

6、将某一列的值累加

cat flowgw_billing.log. | awk '{sum +=$5} END {print sum}'

7、更改文件列顺序

cat daily_partner_bill.log. | awk '{print $4"\t"$1"\t"$2"\t"$3}' > test2;mv test2 daily_partner_bill.log.

比较笨拙的做法,暂时想不到其他的了。

8、指定列条件并累加

cat .log | awk '$2=="hengDa" {sum +=$4} END {print sum}'

指定条件分开累计

cat .log |  awk '$3=="selectName" {a[$2]+=$5;} END {for(i in a) print i,a[i]}'

9、分运营商初步统计

cat ??.log |  \
awk '$3=="selectName" {a[$2]+=$5;} END {for(i in a) print i,a[i]}' | \
awk --re-interval '{if($1 ~/(133|153|180|181|189|177)[0-9]{8}/) print "CTCC",$1,$2;\
else if($ ~/(||||||||||||||||||)[-]{}/) print "CMCC",$,$;\
else if($ ~/(|||||||||)[-]{}/) print "CUCC",$,$;\
else print "None",$,$}END{}'

三、压缩文件

10、不解压查询压缩文件列表

gzip -dc fff.tar.gz | tar tvf -

如果压缩文件内带有文件夹则不行

11、不解压查看文件内容

zcat fff.tar.gz | cut -f -

输入内容会附带文件属性信息,可以用cut -f 按字段截取部分想要的

12、查询已打包文件内容

zcat *201504_30*.log | grep --binary-files=text  | cut -f -

若需要匹配文件复杂,可以使用find命令衔接

find . -type f -name  "201504_30" | xargs  zcat {} \; | grep --binary-files=text  ""

13、将当前文件夹所有压缩文件解压,并删除原文件

for tar in *.tar.gz;  do tar xvf $tar; done
find ./ -name "*.gz" | xargs rm -rf

四、排序去重

由于uniq只是针对相邻行去重,所以通常和sort配合使用。

sort参数简要说明

-n     按数值
-k 按第二列
-r 反序
-t: 以冒号分隔

uniq参数简要说明

-i  忽略大小写字符的不同
-c  进行计数
-u  只显示唯一的行
-d  仅显示存在重复的行

14、查询累计用户数(每条记录包含一个电话号码)

cat ?????.log | cut -f  | sort | uniq | wc -l

15、查询非电信累计用户数(添加正则匹配条件)

cat ?????.log | cut -f  | sort | uniq | egrep -v '^1(33|53|77|8[019]|700).{7,8}$' | wc -l

五、文件合并

  • 行合并
  • cat file1 file2
  • 列合并
  • paste file1 file2
  • 取文件交集
  • cat file1 file2 | sort | uniq -d
  • 取文件并集
  • cat file1 file2 | sort | uniq

六、其他

16、查询进程是否存在

ps -ef | grep test.py | grep -v grep

grep本身存在一进程,容易误导

查询并杀死进程

ps -ef | grep test.py| grep -v grep | awk '{print $2}' | xargs kill -

17、查询端口占用情况

lsof -i:

18、查找文件并打包,以当前时间命名

find ./ -name "*log"| xargs tar -zvcf logs.`date +%Y-%m-%d`

其中,`date +%Y-%m-%d-%H%M%S`为可嵌入命令时间格式

19、在后台运行程序

nohup python test.py &

这种方式运行不稳定,可以使用Linux下的脚本管理工具supervior来统一管理。

20、标准输出和标准错误输出

find ./ -name *.log >& all_result

21、启动简易http服务器,实现简单的文件访问

$ python -m SimpleHTTPServer  

在你想要启用访问的目录下执行

22、格式化json

我们经常需要用curl访问一个已存在的接口,但是返回结果不易查看,可以简单格式化

cat  jsonString | python -mjson.tool

LINUX学习参考:

http://linuxtools-rst.readthedocs.org/zh_CN/latest/base/index.html

日志处理--高效Linux命令整理的更多相关文章

  1. carson常用linux命令整理

    注:通过日常所用到的一些命令进行整理添加!! 完整的命令可参考:Linux命令大全 1.cp命令 cp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录. 2.mount(挂载)命令 在li ...

  2. Linux 命令整理-tailf

    1.tailf 跟踪日志文件 常用参数格式: tailf -n logfile 动态跟踪日志文件logfile,最初的时候打印文件的最后10行内容. 实例 查看从倒数多少行的日志信息 2.tail 跟 ...

  3. day02.2-常用Linux命令整理

    Linux命令语法格式:   命令    [选项]    [参数] 1). 命令:告诉Linux操作系统执行什么: 2). 选项:说明命令的运行方式.选项部分是以字符‘-’开始的: 3). 参数:说明 ...

  4. 常用快捷键以及linux命令整理

    关于快捷键的使用,网上有很多.自己在使用过程中不断整理用到的知识点.一个项目完成了就把涉及用到的快捷键和命令介绍给大家,都是一些比较基础的,常用的命令.希望大家有好的知识点,命令可以及时交流整理. 一 ...

  5. 操作系统 - Linux命令整理 - Ubuntu

    镜像 http://mirrors.163.com/ubuntu-releases/ 系统相关 Ubuntu14.04相关 安装 - VMware Install Ubuntu Continue In ...

  6. 50条LINUX命令整理

    1. find 基本语法参数如下: find [PATH] [option] [action] # 与时间有关的参数: -mtime n : n为数字,意思为在n天之前的“一天内”被更改过的文件: - ...

  7. Linux命令整理(2018/9/9-2018/9/15)

    根据本周的Linux学习进度,整理了部分Linux知识及常用命令,待完善…… 1.显示默认启动方式(默认启动目标): systemctl get-default 2.设置默认启动方式(默认启动目标): ...

  8. linux命令整理版(拷贝)

    一.文件和目录操作命令 1.pwd 显示当前所在位置 -L 显示逻辑路径,忽略软链接文件 -P 显示物理路径时如果当前目录路径时软链接文件,则会显示软链接对应的源文件 2.cd 切换目录 cd - 回 ...

  9. Linux命令整理,用户管理,用户组管理,系统管理,目录管理常用命令

    知识点梳理 Linux课堂笔记 学习目标 能够知道什么是Linux系统以及它的应用场景 能够独立完成安装VMware虚拟机和网络配置 能够独立完成安装CentOS以及远程终端SecureCRT 能够熟 ...

随机推荐

  1. Codeforces 878A - Short Program(位运算)

    原题链接:http://codeforces.com/problemset/problem/878/A 题意:给出n个位运算操作, 化简这些操作, 使化简后的操作次数不多于5步. 思路:我们可以对二进 ...

  2. Spring Cloud架构教程 (八)消息驱动的微服务(消费组)【Dalston版】

    使用消费组实现消息消费的负载均衡 通常在生产环境,我们的每个服务都不会以单节点的方式运行在生产环境,当同一个服务启动多个实例的时候,这些实例都会绑定到同一个消息通道的目标主题(Topic)上. 默认情 ...

  3. 13 November

    [HEOI2015] 定价 BZOJ 4027: 在市场上有很多商品的定价类似于 999 元.4999 元.8999 元这样.它们和 1000 元.5000 元和 9000 元并没有什么本质区别,但是 ...

  4. ES6 Object.setPrototypeOf ()方法和defineProperty()方法的使用

    将一个指定的对象的原型设置为另一个对象或者null(既对象的[[Prototype]]内部属性). 示例: <script type="text/javascript"> ...

  5. #20175201张驰 实验三 敏捷开发与XP实践

    实验步骤 (一)敏捷开发与XP 一.敏捷开发与XP实践-1 ①实验要求: 敏捷开发与XP实践 http://www.cnblogs.com/rocedu/p/4795776.html, Eclipse ...

  6. mui初级入门教程(七)— 基于native.js的文件系统管理功能实现

    文章来源:小青年原创发布时间:2016-08-01关键词:mui,nativejs,android转载需标注本文原始地址: http://zhaomenghuan.github.io... 前言 这段 ...

  7. fedora18 You might need to install dependency packages for libxcb.

    22 down vote The page Qt for X11 Requirements lists some packages required to build Qt on Debian. Th ...

  8. centos 6.x 安装配置 node.js 环境

    下载 可以在本地下载node.js最新版,然后通过ftp工具上传到服务器,或者直接在服务器终端使用wget命令下载(我当时下载的是node-v6.11.3-linux-x64版本,其他版本请查看上面链 ...

  9. 使用 Python 实现多进程

    w 使用 Python 实现多进程https://www.ibm.com/developerworks/cn/aix/library/au-multiprocessing/

  10. 使用spring提供的@Scheduled注解创建定时任务

    使用方法 操作非常简单,只要按如下几个步骤配置即可 1. 导入jar包或添加依赖,其实定时任务只需要spring-context即可,当然起服务还需要spring-web: 2. 编写定时任务类和方法 ...