对你无用请揍我系列必会 Linux 技巧

Posted vcmq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对你无用请揍我系列必会 Linux 技巧相关的知识,希望对你有一定的参考价值。

前言

本文非单纯网上介绍 Linux 命令及参数的雷同文章,而是真正在实际工作中能派上用场的 Linux 实用技巧。主要介绍日志排查相关的技巧,捎带常见的其他 Linux 操作以及 vim 技巧。

本文首发于个人博客:http://nullpointer.pw/linux-command.html

日志相关:

在日常工作中,经常需要在服务器上通过查看日志的方式来定位 bug 问题,掌握一定的日志排查技巧则是很有必要的。明明有些可以通过很基础的命令就可以实现,但网上有些人偏偏喜欢炫技,故作高深弄出一些特别复杂的用法来完成,其实真的没有那种必要。本文只讲最常用实用的用法。

笔者截取了一些日志作为示例,以供读者练习。

Tips: 命令中包含于双引号 " " 中的都是关键字

示例日志点我下载

静态日志查找

  1. 根据关键字查找日志
grep "1584345069121" info.log
  1. 根据关键字查找日志,并显示查找结果附近 5 行(前5行与后5行)日志
  grep "1584345069121" info.log -C5
  ```
3. 根据关键字查找日志,并显示查找结果后 (After)5 行日志
  ```sh
  grep "1584345069121" info.log -A5
  ```
4. 根据关键字查找日志,并显示查找结果前 (Before)5 行日志
  ```sh
  grep "1584345069121" info.log -B5
  ```
5. 根据多个关键字查找日志,多个关键字为或关系,满足其中一个条件则匹配,关键字之间用`|`分隔,表示或
```sh
  grep "1584345069121|1584345066236" info.log
  ```
6. 根据多个关键字查找日志,需要满足其中全部条件才匹配
```sh
grep "76953334" info.log | grep "1584349673402"
  ```
7. 查找不包含关键字的日志,支持多个关键字,关键字之间用`|`分隔,表示或
  ```sh
  grep -v "handle" info.log
  ```
8. 根据关键字 A 查找,并且过滤包含关键字 B 的日志
```sh
grep "76953334" info.log | grep -v "handle"

滚动日志查找

除了以上在静态日志中查找之外,有时候调试需要看指定日志,而日志又存在滚动刷新较快的情况,此时就可以通过 grep 相关技巧对刷新的滚动日志进行过滤筛选,来达到我们的目的。

  1. 滚动日志中根据关键字搜索日志
tail -300f info.log | grep "76953334"
  1. 滚动日志中根据【关键字 A】搜索日志,且过滤掉包含【关键字 B】的日志
tail -300f info.log | grep "76953334" | grep -v "2450"

解压缩

压缩解压也是比较常用的一些操作,常见的压缩包就是tar.gzzip两种,下文分别介绍这两种格式的压缩与解压方式。

  1. gzip 压缩文件或目录,具体参数含义见参考链接
    tar zcvf tempdir/ fileName.tar.gz
    
  2. 解压 tar.gz 格式 (gzip) 压缩包 (与压缩命令比较只是参数 c 改成了 x)
    tar zxvf fileName.tar.gz
    
  3. zip 压缩文件或目录(-r 表示包含子目录)
    zip -r fileName.zip tempdir/
    
  4. zip 解压到指定目录(-o 表示重名文件覆盖时不提示,可选参数)
    unzip -o fileName.zip -d tempdir2/
    

进程相关

工作中偶尔会需要看一下应用进程的信息,比如什么时候启动的,启动了多久这些信息,以下命令可以告诉你答案。

  1. 查看端口是否被占用
    netstat -l | grep 8080
    
  2. 查看进程启动时间
    ps -p 8080 -o lstart
    
  3. 查看进程运行多长时间
    ps -p 8080 -o etime
    

VIM 小技巧

列举了几个 VIM 小技巧,批量注释行、替换操作
技术图片

  1. 批量注释行

    1. control + v 进入列模式
    2. 选择要注释的列
    3. shift + i 进入 INSERT 模式
    4. 输入# 或其他你想要插入的文字
    5. 连续按两次 ESC
  2. 批量取消注释行

    1. control + v 进入列模式
    2. 选中要删除的文字
    3. d 键进行删除
  3. 搜索并替换关键字 (INFO 替换为 ERROR)
    全文替换: vim 正常模式下 :%s/INFO/ERROR 回车确定
    当前行替换:vim 正常模式下 :s/INFO/ERROR 回车确定
    技术图片

  4. 拷贝与清空全文内容
    拷贝全文内容:vim 正常模式下 :%y
    清空全文内容:vim 正常模式下 :%d

系统相关

  1. 从路径 /home 下开始向下遍历查找名称包含 nginx.conf 的文件
    find /home -name nginx.conf
    
  2. 查看磁盘占用
    df -h 
    
  3. 查看当前目录下文件或目录占用空间
    du -h --max-depth=1
    

其他文章

笔者写的一些在 Spring 容器中关于设计模式的实践文章

参考

以上是关于对你无用请揍我系列必会 Linux 技巧的主要内容,如果未能解决你的问题,请参考以下文章

测试必知必会系列- Linux常用命令 - tar

必知必会系列_机器学习开发者需要掌握的Linux命令

6 个必知必会高效 Python 编程技巧

6 个必知必会高效 Python 编程技巧

你知道的Go切片扩容机制可能是错的

LFS 系列从零开始 DIY Linux 系统:构建 LFS 系统 - 再次清理无用内容