5分钟学会使用Linux的 grep、find、ls、wc 命令

01

概述 

本系列主要讲解Linux运行时命令,包括网络、磁盘、内存、CPU相关参数等,主要是为了分享怎么通过常见的 Linux 命令去排查相关问题。比如:

  1. 发现机器的CPU负荷比较高,那么怎么查到是哪个进程CPU占用率比较高?

  2. 磁盘IO的写入很频繁,怎么查到是哪个进程或线程对磁盘IO频繁的操作?等等。

本系列就是分享诸如这类问题的排查技巧。注意,本系列的核心方向不是去讲解Linux的命令查找、显示当前目录等(比如ls、cat等)基础命令操作。本系列的重点分享内容包括:

  1. Linux基础命令和工具。

  2. CPU性能监控。

  3. 内存性能监控。

  4. 文件IO性能监控。

  5. 网络IO性能监控。

强烈推荐:Linux 大牛,Netflix 高级性能架构师 Brendan Gregg的博客http://www.brendangregg.com。《性能之巅》书籍就是他出版的,主要分为:CPU、内存、磁盘、网络四大块。

下面对应的命令大部分都不是专为某一个模块设计的。所以先把基本的命令都掌握,再去细分每个命令的侧重点。

1.1、监控

常用的命令:

工具描述
free 显示系统内存使用情况,包括使用的内存、空闲的内存、缓存和交换区等信息。
ping 用于测试网络连接的工具,通过向目标主机发送 ICMP 回显请求并等待回复来测量网络延迟。
vmstat Virtual Memory Statistics,虚拟内存统计工具,提供系统内存、进程、CPU活动等信息。
iostat 用于报告中央处理器(CPU)统计信息和整个系统、适配器、tty 设备、磁盘和 CD-ROM 的输入/输出统计信息。
dstat 显示了cpu使用情况,磁盘io情况,网络发包情况和换页情况,输出是彩色的,可读性较强,相对于vmstatiostat的输入更加详细且较为直观。
pidstat 监控所有或指定进程的资源占用情况,如CPU、内存、设备IO、任务切换、线程等。
top 动态显示系统性能信息,包括负载、进程状态、CPU 使用率、内存使用及交换分区的信息。
iotop LINUX进程实时监控工具,类似于 top 命令的工具,用于实时监控磁盘 I/O 使用情况及进程的信息。
htop 交互式进程查看器,提供用户友好的界面,支持按键操作以管理进程。一个文本模式的应用程序(在控制台或者X终端中),需要ncurses
mpstat 报告 CPU 的统计信息,显示每个 CPU 的使用情况,有助于分析 CPU 性能。
netstat 显示与 IP、TCP、UDP 和 ICMP 协议相关的网络连接和统计信息。一般用于检验本机各端口的网络连接情况。
ps 显示当前进程的状态和相关信息,类似于 Windows 的任务管理器。
strace 跟踪程序执行过程中产生的系统调用及接收到的信号,用于诊断程序问题。
ltrace 跟踪进程调用的库函数,帮助分析程序的库函数使用情况。
uptime 显示系统当前运行时间和负载信息,为用户提供系统负载状态的一个快照。能够打印系统总共运行了多长时间和系统的平均负载,uptime命令最后输出的三个数字的含义分别是1分钟,5分钟,15分钟内系统的平均负荷。
lsof 列出当前系统中打开的文件及相关进程,帮助识别文件使用情况。
perf Linux kernel 自带的性能分析工具,帮助识别程序性能瓶颈,通过分析 CPU 使用情况及热点函数。是Linux kernel自带的系统性能优化工具。优势在于与Linux Kernel的紧密结合,它可以最先应用到加入Kernel的new feature,用于查看热点函数,查看cashe miss的比率,从而帮助开发者来优化程序性能。
tcpdump 网络抓包工具,捕获和分析网络数据包,常用于网络故障排查和监控。
sar 收集和报告系统活动信息,涵盖 CPU、内存、I/O、网络等性能指标。
blktrace 跟踪块设备 I/O 操作,分析系统的磁盘 I/O 性能及行为。

下面这张图是 Brendan Gregg 提供的一个性能优化命令集。可以看到有很多命令可以监控系统的性能,比如文件系统相关、调用栈相关、网络相关等的命令。
图片

1.2、测试

图片
sysbench是一个模块化、跨平台、多线程基准测试工具,可用于以下性能测试:

  1. CPU性能。

  2. 磁盘IO性能。

  3. 调度程序性能。

  4. 内存分配及传输速度。

  5. POSIX线程性能。

  6. 数据库性能(OLTP基准测试)。

Linux CPU使用率主要是从以下几个维度进行统计:

指标描述
%usr 普通进程在用户模式下执行的时间
%sys 进程在内核模式下的执行时间
%nice 被提高优先级的进程在用户模式下的执行时间
%idle 空闲时间
%iowait 等待I/O完成的时间
%irp 处理硬中断请求花费的时间
%soft 处理软中断请求花费的时间
%steal 是衡量虚拟机CPU的指标,是指分配给本虚拟机的时间片被同一宿主机别的虚拟机占用,一般%steal值较高时,说明宿主机的资源使用已达到瓶颈。

一般情况下,CPU大部分的时间片都是消耗在用户态和内核态上。

sysuser间的比例是相互影响的,%sys比例高意味着被测服务频繁的进行用户态和系统态之间的切换,会带来一定的CPU开销,这样分配处理业务的时间片就会较少,造成系统性能的下降。对于IO密集型系统,无论是网络IO还是磁盘IO,一般都会产生大量的中断,从而导致%sys相对升高,其中磁盘IO密集型系统,对磁盘的读写需要占用大量的CPU,会导致%iowait的值一定比例的升高,所以当出现%iowait较高时,需排查是否存在大量的不合理的日志操作,或者频繁的数据载入等情况;

1.3、优化

Linux Performance Tuning Tools的示意图,展示了Linux系统中不同的工具及其对应的组件。
图片

02

grep 搜索字符 

grep 命令用于在文件中执行关键词搜索,并显示匹配的效果。

基本语法:

grep [选项] 模式 [文件...]

部分常用选项:

参数作用
-c 仅显示找到的行数
-i 忽略大小写
-n 显示行号
-v 反向选择,仅列出没有关键词的行。v 是 invert 的缩写。
-r 递归搜索文件目录
-C n 打印匹配行的前后n行
-E 使用扩展正则表达式。
-l 仅显示包含匹配行的文件名。
-h 不显示文件名。
-w 仅匹配整个单词。
-o 仅显示匹配的模式。
-q 静默模式,不输出任何内容。
-A n 显示匹配行及其后面的 n 行。
-B n 显示匹配行及其前面的 n 行。
-f 文件名 从文件中读取模式。

基本正则表达式:

  • .:匹配任意单个字符。

  • *:匹配前一个字符零次或多次。

  • []:匹配括号内的任意一个字符。

  • [^]:匹配括号内以外的任意一个字符。

  • \: 转义字符,用于匹配特殊字符。

  • ^:匹配行首。

  • $:匹配行尾。

  • |:或运算符。

  • ():分组运算符。

扩展正则表达式:

  • +:匹配前一个字符一次或多次。

  • ?:匹配前一个字符零次或一次。

  • {}:匹配前一个字符指定次数。

示例:

  1. 在指定文件查找,查找login关键字。

    grep  login  ImUser.cpp
  2. 多个文件中搜索。

    grep  login  ImUser.cpp MsgConn.cpp
  3. 在多个文件搜索的时候,可以使用通配符。在以 cpp结尾的文件中,搜索包含login 的行

    grep  login  *.cpp
  4. 递归搜索目录下所有文件, 搜索 msg_server目录下所有文件,打印出包含 login的行。

    grep login -r msg_server/
  5. 反向查找,查找文件中,不包含 CImUser 的行。

    grep -v CImUser ImUser.cpp
  6. 找出文件中包含 login的行,并打印出行号。

    grep  -n login  ImUser.cpp
  7. 找出文件中包含 login的行,打印出行号,并显示前后3行。

    grep -C 3 -n login  ImUser.cpp
  8. 找出文件中包含 login的行,打印出行号,并显示前后3行,并忽略大小写。

    grep -C 3 -i -n login  ImUser.cpp

注意事项:

  • grep 命令通常用于处理文本文件,但也支持从标准输入读取数据。

  • grep 命令的效率取决于模式的复杂度和文件的大小。

  • grep 命令可以与其他命令结合使用,例如 管道 和 重定向

其他相关命令:

  • egrep:等价于 grep -E,使用扩展正则表达式。

  • fgrep:等价于 grep -F,使用固定字符串匹配。

  • ag:更快更强大的搜索工具。

 

03

find 查找文件 

find 命令用于在文件系统中搜索文件和目录,并对找到的项目执行操作。通过文件名查找文件的所在位置,文件名查找支持模糊匹配。

基本语法:

find [起始目录] [选项] [表达式]

参数:

  • 起始目录: 指定搜索的起始目录。如果省略,则默认从当前目录开始搜索。

  • 选项: 用于控制搜索行为和输出结果。

  • 表达式: 用于描述要搜索的目标文件或目录。

主要选项:

选项作用
-name 模式 根据文件名匹配模式搜索。支持通配符 * 和 ?
-iname 模式 根据文件名匹配模式搜索,忽略大小写。
-type 类型 根据文件类型搜索。例如 f 表示文件,d 表示目录,l 表示符号链接。
-size +n 搜索大小大于 n 个块的文件。
-size -n 搜索大小小于 n 个块的文件。
-size n 搜索大小等于 n 个块的文件。
-mtime +n 搜索修改时间距离现在超过 n 天的文件。
-mtime -n 搜索修改时间距离现在少于 n 天的文件。
-mtime n 搜索修改时间距离现在正好 n 天的文件。
-atime 根据访问时间进行搜索。用法与 -mtime 相同。
-ctime 根据文件创建时间进行搜索。用法与 -mtime 相同。
-user 用户名 搜索属于特定用户的文件。
-group 组名 搜索属于特定组的文件。
-perm 模式 根据权限模式搜索文件。例如 -perm 644 搜索权限为 -rw-r--r-- 的文件。
-exec 命令 {} \; 对找到的文件执行指定的命令。
-ok 命令 {} \; 对找到的文件执行指定的命令,并在执行前提示用户确认。
-print 打印找到的文件的路径。
-print0 打印找到的文件的路径,并使用空字符作为分隔符。
-depth 先搜索子目录再搜索当前目录。
-maxdepth n 设置最大搜索深度。
-mindepth n 设置最小搜索深度。
! 取反运算符,用于排除某些文件或目录。
-o 或运算符,用于组合多个搜索条件。
-a 与运算符,用于组合多个搜索条件。
() 括号用于分组搜索条件。

示例:

  1. 查找当前目录下所有以 .txt 结尾的文件:

    find . -name "*.txt"
  2. 查找 /home 目录下所有大于 10M 的文件:

    find /home -size +10M
  3. 查找 /tmp 目录下修改时间距离现在超过 7 天的文件:

    find /tmp -mtime +7
  4. 查找当前目录下所有权限为 755 的文件:

    find . -perm 755
  5. 查找 /var/log 目录下所有以 .log 结尾的文件,并删除它们:

    find /var/log -name "*.log" -delete
  6. 查找当前目录下所有目录,并打印它们的路径:

    find . -type d -print
  7. 查找当前目录下所有以 .txt 结尾的文件,并把它们复制到 /backup 目录:

    find . -name "*.txt" -exec cp {} /backup \;
  8. 查找当前目录下所有以 .txt 结尾的文件,并提示用户是否删除它们:

    find . -name "*.txt" -ok rm {} \;

 

04

ls 显示文件 

ls 命令用于列出目录的内容。它可以显示文件和目录的名称、大小、修改时间、权限等信息。

基本语法:

ls [选项] [文件或目录...]
选项描述类别
-a 显示所有文件,包括隐藏文件(以 . 开头的文件)。 列出文件信息
-l 以长格式列出文件信息,包括文件权限、文件大小、文件所有者、修改时间等。 列出文件信息
-h 以易于阅读的格式显示文件大小,例如 1K、2M、3G 等。 列出文件信息
-t 按修改时间排序。 列出文件信息
-r 反转排序顺序。 列出文件信息
-S 按文件大小排序。 列出文件信息
-i 显示文件 inode 号。 列出文件信息
-d 显示目录本身的信息,而不是目录内的文件信息。 列出文件信息
-R 递归列出所有子目录。 列出文件信息
-F 在文件名后添加标记,表示文件类型。例如 / 表示目录,* 表示可执行文件,@ 表示符号链接等。 文件显示格式
-b 将不可打印字符显示为反斜杠转义字符。 文件显示格式
-c 使用数字字符编码显示文件。 文件显示格式
-G 显示颜色,用于区分不同类型的文件。 文件显示格式
-1 单行显示文件名,每个文件名占一行。 其他
-C 多列显示文件名,根据终端宽度自动调整列数。 其他
-m 用逗号分隔显示文件名。 其他
-n 使用数字用户 ID 和组 ID 显示文件信息。 其他
-p 在目录名后添加 / 其他
-q 将不可打印字符显示为 ? 其他
-s 显示文件大小(以块为单位)。 其他

示例:

  1. 列出当前目录下所有文件:

    ls
  2. 以长格式列出当前目录下所有文件:

    ls -l
  3. 列出当前目录下所有文件,包括隐藏文件:

    ls -a
  4. 列出当前目录下所有文件,按修改时间排序:

    ls -lt
  5. 递归列出 /home/user 目录下所有文件:

    ls -R /home/user
  6. 列出当前目录下所有文件,并用颜色区分文件类型:

    ls -G
05

wc 命令

wc 命令用于统计文件中的行数、字数和字节数。利用wc指令我们可以计算文件的Byte数、字数、或是列数,若不指定文件名称、或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据。

基本语法:

wc [选项] [文件...]

主要选项:

  • -l或--lines: 统计行数。

  • -w或--words: 统计字数。

  • -c或--bytes或--chars: 统计字节数。

  • -m: 统计字符数。

  • -L: 统计最长行的长度。

  • -W: 统计单词数。

示例:

  1. 统计文件 test.txt 的行数、字数和字节数:

    wc test.txt
  2. 只统计文件 test.txt 的行数:

    wc -l test.txt
  3. 统计多个文件 test.txt 和 data.log 的行数:

    wc -l test.txt data.log
  4. 统计文件 test.txt 的最长行的长度:

    wc -L test.txt

注意事项:

  • wc 命令默认统计所有三个值(行数、字数和字节数)。

  • wc 命令可以使用多个选项组合,以实现不同的统计功能。

  • wc 命令的输出结果可能会根据文件内容和系统环境有所不同。

其他:

  • wc 命令可以用于统计标准输入的内容,例如:

    cat test.txt | wc -l
  • wc 命令可以与其他命令结合使用,例如:

    # 统计文件 `test.txt` 中包含 "error" 字符串的行数。
    grep "error" test.txt | wc -l
原文链接:https://mp.weixin.qq.com/s/tk7aUyfvEvCVYhvQX3JnNw
posted @ 2024-10-14 16:10  Harda  阅读(4)  评论(0编辑  收藏  举报