点击上方【蓝字】关注博主
“ 在 Linux 世界中,命令行是不可或缺的一部分,而掌握一些常用的命令可以帮助你更有效率地管理文件和系统。本文将为你介绍四個基礎而强大的 Linux 命令:grep、find、ls 和 wc,带你开启高效文件操作的旅程!”
概述
本系列主要讲解Linux运行时命令,包括网络、磁盘、内存、CPU相关参数等,主要是为了分享怎么通过常见的 Linux 命令去排查相关问题。比如:
发现机器的CPU负荷比较高,那么怎么查到是哪个进程CPU占用率比较高?
磁盘IO的写入很频繁,怎么查到是哪个进程或线程对磁盘IO频繁的操作?等等。
本系列就是分享诸如这类问题的排查技巧。注意,本系列的核心方向不是去讲解Linux的命令查找、显示当前目录等(比如ls、cat等)基础命令操作。本系列的重点分享内容包括:
Linux基础命令和工具。
CPU性能监控。
内存性能监控。
文件IO性能监控。
网络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情况,网络发包情况和换页情况,输出是彩色的,可读性较强,相对于vmstat 和iostat 的输入更加详细且较为直观。 |
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是一个模块化、跨平台、多线程基准测试工具,可用于以下性能测试:
CPU性能。
磁盘IO性能。
调度程序性能。
内存分配及传输速度。
POSIX线程性能。
数据库性能(OLTP基准测试)。
Linux CPU使用率主要是从以下几个维度进行统计:
指标 | 描述 |
---|---|
%usr | 普通进程在用户模式下执行的时间 |
%sys | 进程在内核模式下的执行时间 |
%nice | 被提高优先级的进程在用户模式下的执行时间 |
%idle | 空闲时间 |
%iowait | 等待I/O完成的时间 |
%irp | 处理硬中断请求花费的时间 |
%soft | 处理软中断请求花费的时间 |
%steal | 是衡量虚拟机CPU的指标,是指分配给本虚拟机的时间片被同一宿主机别的虚拟机占用,一般%steal值较高时,说明宿主机的资源使用已达到瓶颈。 |
1.3、优化
Linux Performance Tuning Tools的示意图,展示了Linux系统中不同的工具及其对应的组件。
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 文件名 | 从文件中读取模式。 |
.
:匹配任意单个字符。*
:匹配前一个字符零次或多次。[]
:匹配括号内的任意一个字符。[^]
:匹配括号内以外的任意一个字符。\
: 转义字符,用于匹配特殊字符。^
:匹配行首。$
:匹配行尾。|
:或运算符。()
:分组运算符。
+
:匹配前一个字符一次或多次。?
:匹配前一个字符零次或一次。{}
:匹配前一个字符指定次数。
示例:
在指定文件查找,查找login关键字。
grep login ImUser.cpp
多个文件中搜索。
grep login ImUser.cpp MsgConn.cpp
在多个文件搜索的时候,可以使用通配符。在以 cpp结尾的文件中,搜索包含login 的行
grep login *.cpp
递归搜索目录下所有文件, 搜索 msg_server目录下所有文件,打印出包含 login的行。
grep login -r msg_server/
反向查找,查找文件中,不包含 CImUser 的行。
grep -v CImUser ImUser.cpp
找出文件中包含 login的行,并打印出行号。
grep -n login ImUser.cpp
找出文件中包含 login的行,打印出行号,并显示前后3行。
grep -C 3 -n login ImUser.cpp
找出文件中包含 login的行,打印出行号,并显示前后3行,并忽略大小写。
grep -C 3 -i -n login ImUser.cpp
grep
命令通常用于处理文本文件,但也支持从标准输入读取数据。grep
命令的效率取决于模式的复杂度和文件的大小。grep
命令可以与其他命令结合使用,例如管道
和重定向
。
egrep
:等价于grep -E
,使用扩展正则表达式。fgrep
:等价于grep -F
,使用固定字符串匹配。ag
:更快更强大的搜索工具。
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 | 与运算符,用于组合多个搜索条件。 |
() | 括号用于分组搜索条件。 |
查找当前目录下所有以 .txt 结尾的文件:
find . -name "*.txt"
查找 /home 目录下所有大于 10M 的文件:
find /home -size +10M
查找 /tmp 目录下修改时间距离现在超过 7 天的文件:
find /tmp -mtime +7
查找当前目录下所有权限为 755 的文件:
find . -perm 755
查找 /var/log 目录下所有以 .log 结尾的文件,并删除它们:
find /var/log -name "*.log" -delete
查找当前目录下所有目录,并打印它们的路径:
find . -type d -print
查找当前目录下所有以 .txt 结尾的文件,并把它们复制到 /backup 目录:
find . -name "*.txt" -exec cp {} /backup \;
查找当前目录下所有以 .txt 结尾的文件,并提示用户是否删除它们:
find . -name "*.txt" -ok rm {} \;
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 | 显示文件大小(以块为单位)。 | 其他 |
列出当前目录下所有文件:
ls
以长格式列出当前目录下所有文件:
ls -l
列出当前目录下所有文件,包括隐藏文件:
ls -a
列出当前目录下所有文件,按修改时间排序:
ls -lt
递归列出 /home/user 目录下所有文件:
ls -R /home/user
列出当前目录下所有文件,并用颜色区分文件类型:
ls -G
wc 命令
wc [选项] [文件...]
-l或--lines
: 统计行数。-w或--words
: 统计字数。-c或--bytes或--chars
: 统计字节数。-m
: 统计字符数。-L
: 统计最长行的长度。-W
: 统计单词数。
统计文件 test.txt 的行数、字数和字节数:
wc test.txt
只统计文件 test.txt 的行数:
wc -l test.txt
统计多个文件 test.txt 和 data.log 的行数:
wc -l test.txt data.log
统计文件 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
总结
本文介绍了 grep、find、ls 和 wc 四个常用的 Linux 命令,它们在文件搜索、查找、列出和统计等方面发挥着重要的作用。希望这篇文章能够帮助你更好地理解和运用这些命令,提升 Linux 文件管理的效率。
公众号: Lion 莱恩呀
微信号: 关注获取
扫码关注 了解更多内容
点个 在看 你最好看