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

2024-08-25 10:36

本文主要是介绍5分钟学会使用Linux的 grep、find、ls、wc 命令,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Linux基础命令和工具

  • 一、前导:概述
    • 1.1、监控
    • 1.2、测试
    • 1.3、优化
  • 二、grep 搜索字符
  • 三、find 查找文件
  • 四、ls 显示文件
  • 五、wc 命令
  • 六、总结

一、前导:概述

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

  1. 发现机器的CPU负荷比较高,那么怎么查到是哪个进程CPU占用率比较高?
  2. 磁盘IO的写入很频繁,怎么查到是哪个进程或线程对磁盘IO频繁的操作?
  3. 等等。

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

  1. Linux基础命令和工具。
  2. CPU性能监控
  3. 内存性能监控。
  4. 文件IO性能监控
  5. 网络IO性能监控

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

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

1.1、监控

常用的命令:

工具描述
free显示系统内存使用情况,包括使用的内存、空闲的内存、缓存和交换区等信息。
ping用于测试网络连接的工具,通过向目标主机发送 ICMP 回显请求并等待回复来测量网络延迟。
vmstatVirtual Memory Statistics,虚拟内存统计工具,提供系统内存、进程、CPU活动等信息。
iostat用于报告中央处理器(CPU)统计信息和整个系统、适配器、tty 设备、磁盘和 CD-ROM 的输入/输出统计信息。
dstat显示了cpu使用情况,磁盘io情况,网络发包情况和换页情况,输出是彩色的,可读性较强,相对于vmstatiostat的输入更加详细且较为直观。
pidstat监控所有或指定进程的资源占用情况,如CPU、内存、设备IO、任务切换、线程等。
top动态显示系统性能信息,包括负载、进程状态、CPU 使用率、内存使用及交换分区的信息。
iotopLINUX进程实时监控工具,类似于 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列出当前系统中打开的文件及相关进程,帮助识别文件使用情况。
perfLinux 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系统中不同的工具及其对应的组件。
在这里插入图片描述

  • 操作系统: 应用程序,系统库,系统调用接口,设备驱动程序。

  • env: 环境变量。

  • 硬件: CPU,内存总线,DRAM。

  • Linux内核: VFS,文件系统,卷管理器,块设备接口

  • I/O总线: I/O桥接。

  • 互联: CPU互联,网络控制器。

  • 应用配置: tune2fs,应用配置

  • Linux内核: stap, kpatch, ionice, ip route, sysctl

  • 互联: nice、taskset、/dev/cpuset、ulimit、numactl、ethtool、tc、ip

  • 存储: hdparm, blockdev, swapon

  • 网络: ethtool, etc

二、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:更快更强大的搜索工具。

三、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 {} \;
    

实用示例:

find . -name FILE_NAME
find . -iname FILE_NAME 忽略文件名称大小写##查找/etc/下名称中带有passwd的文件,查找一层
find /etc -maxdepth 1 -name passwd     find /mnt -size 20K       ##查找/mnt文件大小近似20k的文件
find /mnt -size +20K      ##查找/mnt文件大小大于20k的文件
find /mnt -size -20K      ##查找/mnt文件大小小于20k的文件##查找/etc/下名称中带有.conf的文件,且只查找第二层
find /etc -maxdepth 2 -mindepth 2 -name .conf find /mnt -type d         ##按type查找/mnt中目录
find /mnt -type f         ##按type查找/mnt中文件
find /mnt -cmin 10        ##查找/mnt中十分钟左右修改的
find /mnt -cmin +10       ##查找/mnt中十分钟以上修改的
find /mnt -cmin -10       ##查找/mnt中十分钟以内修改的
find /mnt -ctime 10       ##查找/mnt中十天左右修改的
find /mnt -ctime +10      ##查找/mnt中十天以上修改的
find /mnt -ctime -10      ##查找/mnt中十天以内修改的

注意事项:

  • find 命令是一个功能强大的工具,需要谨慎使用,以免误删重要文件。
  • 可以使用 man find 命令查看 find 命令的详细帮助信息。

四、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
    

实用示例:

# 按最新修改的时间排序,新修改的在前面显示。
ls -lt  
# 按最新修改的时间排序,新修改的在前面显示,并显示子目录的文件信息
ls -ltR 
# 以单位显示文件大小
ls -lh 

注意事项:

  • ls 命令通常用于查看当前目录下的文件和目录,也可以指定其他目录进行查看。
  • ls 命令可以使用多种选项组合,以实现不同的显示效果。
  • ls 命令的输出结果可能会根据终端设置和系统环境有所不同。
  • 除了上述常用选项外,ls 命令还有其他一些较少使用的选项,可以通过 man ls 命令查看详细帮助信息。

五、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.txtdata.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
    

六、总结

本文介绍了 grep、find、ls 和 wc 四个常用的 Linux 命令,它们在文件搜索、查找、列出和统计等方面发挥着重要的作用。希望这篇文章能够帮助你更好地理解和运用这些命令,提升 Linux 文件管理的效率。

在这里插入图片描述

这篇关于5分钟学会使用Linux的 grep、find、ls、wc 命令的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1105321

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma