当前位置: 首页 > news >正文

19. Linux free命令、awk命令

一、free 命令:详细解析系统内存状态

free 命令用于实时查看 Linux 系统的 物理内存交换分区(Swap) 使用情况,是系统监控和性能排查的核心工具。

1. 基本语法与核心选项
free [选项]

常用选项:

选项作用示例
-h以人类可读格式(K/M/G)显示free -h(最常用)
-b以字节(Byte)为单位free -b
-k以 KB(1024 字节)为单位(默认)free -k
-m以 MB 为单位free -m
-g以 GB 为单位free -g
-s <秒数>持续刷新,间隔指定秒数free -s 2(每 2 秒刷新一次)
-t在输出末尾增加一行“总计”(Mem + Swap)free -t
-w显示更详细的缓冲区(buffers)和缓存(cache)拆分free -w
2. 输出详解(以 free -h 为例)
              total        used        free      shared  buff/cache   available
Mem:           15Gi       5.2Gi       3.1Gi       982Mi       7.1Gi       9.3Gi
Swap:          10Gi          0B        10Gi

Mem 行(物理内存)

  • total:总物理内存容量(系统可识别的内存总和,可能略小于硬件实际内存,因部分被 BIOS/内核占用)。
  • used:已使用的内存(total - free - buff/cache)。
  • free:完全空闲的内存(未被任何进程使用,直接可用)。
  • shared:被多个进程共享的内存(如 tmpfs 临时文件系统使用的内存)。
  • buff/cache
    • buffers:内核用于缓存磁盘块的内存(临时存储即将写入磁盘的数据,减少磁盘 I/O)。
    • cache:内核用于缓存文件内容的内存(临时存储从磁盘读取的数据,下次访问可直接从内存获取)。
    • 这部分内存可被系统“回收”给新进程使用,因此不算“真正占用”。
  • available最关键的指标,表示系统可立即分配给新进程的内存(约等于 free + buff/cache 中可回收的部分),比 free 更能反映实际可用内存。

Swap 行(交换分区)

  • 虚拟内存的一种,当物理内存不足时,系统会将部分不常用的内存数据写入磁盘的 Swap 分区,释放物理内存。
  • used 过高(如超过 50%)通常意味着物理内存不足,可能导致系统卡顿(磁盘速度远慢于内存)。
3. 实用场景示例
  • 快速查看内存整体状态

    free -h  # 直观了解总内存、已用、可用及 Swap 情况
    
  • 持续监控内存变化(如观察程序运行时的内存占用):

    free -s 1 -h  # 每 1 秒刷新一次,以人类可读格式显示
    
  • 查看内存和 Swap 总计

    free -th  # 末尾增加一行 "Total",显示 Mem + Swap 的总和
    

二、awk 命令:全能文本处理工具

awk 是一种编程语言,专注于结构化文本处理,能按行读取文本、按字段拆分内容,并支持条件判断、循环、计算等复杂操作,被称为“文本处理瑞士军刀”。

1. 基本语法与工作原理
awk [选项] '模式 {动作}' 文件名

工作原理

  1. 按行读取输入(文件或标准输入)。
  2. 对每行执行“模式匹配”(可选,不写模式则匹配所有行)。
  3. 对匹配成功的行执行“动作”(用 {} 包裹,通常是 print 输出或计算)。
2. 核心选项
选项作用示例
-F <分隔符>指定字段分隔符(默认以空格/制表符为分隔符,连续空白视为一个分隔符)awk -F: '{print $1}' /etc/passwd(以冒号分隔)
-v <变量名=值>定义 awk 变量awk -v n=3 '{print $n}' file.txt(打印第 3 个字段)
-f <脚本文件>从文件中读取 awk 脚本(适合复杂逻辑)awk -f script.awk data.txt
3. 关键概念与内置变量
  • 字段(Field):每行被分隔符拆分后的片段,用 $n 表示第 n 个字段($1 第一个字段,$0 表示整行)。
  • 内置变量
    变量含义
    NR当前处理的行号(从 1 开始)
    NF当前行的字段总数(最后一个字段可表示为 $NF
    FS输入字段分隔符(同 -F 选项,可在脚本中用 BEGIN{FS=":"} 设置)
    OFS输出字段分隔符(默认是空格,可自定义,如 `BEGIN{OFS="
    FILENAME当前处理的文件名
4. 实用示例(从基础到进阶)
(1)基础字段提取
  • 打印文件 data.txt 的所有内容(等价于 cat data.txt):

    awk '{print $0}' data.txt
    
  • 打印 data.txt 每行的第 1 和第 3 个字段:

    awk '{print $1, $3}' data.txt
    
  • 处理 CSV 文件(以逗号分隔),打印第 2 个字段:

    awk -F',' '{print $2}' data.csv
    
(2)条件过滤与匹配
  • 打印 /etc/passwd 中 UID 为 0 的用户(root 用户,第 3 个字段为 0):

    awk -F: '$3 == 0 {print $1, $3}' /etc/passwd  # 输出:root 0
    
  • 打印 access.log 中包含“404”错误的行(模式为 /404/,正则匹配):

    awk '/404/ {print $0}' access.log
    
  • 打印 scores.txt 中分数(第 2 字段)大于 90 的记录:

    awk '$2 > 90 {print $1, $2}' scores.txt
    
(3)统计与计算
  • 统计 /etc/passwd 中的用户总数(NR 是行号,最后一行的行号即总条数):

    awk -F: 'END {print "用户总数:", NR}' /etc/passwd
    
  • 计算 sales.txt 中第 3 字段(销售额)的总和:

    awk '{sum += $3} END {print "总销售额:", sum}' sales.txt
    
  • 计算平均值(如学生平均分):

    awk '{sum += $2; count++} END {print "平均分:", sum/count}' scores.txt
    
(4)自定义分隔符与格式化输出
  • | 分隔输出字段,并添加标题行:
    awk -F: 'BEGIN {print "用户名|UID"; OFS="|"} {print $1, $3}' /etc/passwd
    
    输出:
    用户名|UID
    root|0
    daemon|1
    ...
    
(5)结合管道处理其他命令输出
  • 查看内存使用时,仅提取物理内存的 available 数值(配合 free -h):

    free -h | awk 'NR==2 {print "可用内存:", $7}'  # NR==2 表示第 2 行(Mem 行),$7 是 available 字段
    
  • 统计当前登录的用户数(配合 who 命令):

    who | awk 'END {print "当前登录用户数:", NR}'
    
(6)复杂逻辑脚本(-f 选项)

创建 script.awk 文件,实现“筛选并计算”功能:

# script.awk:筛选第2字段>80的行,计算这些行第3字段的总和
BEGIN {sum = 0count = 0print "符合条件的记录:"
}
$2 > 80 {print $0  # 打印符合条件的行sum += $3count++
}
END {print "总共有", count, "条记录,第3字段总和为:", sum
}

执行:

awk -f script.awk data.txt

总结

  • free 命令是内存监控的核心,重点关注 available 字段判断系统内存是否充足。
  • awk 命令适合处理结构化文本(如日志、配置文件、CSV),通过“模式+动作”实现灵活的提取、过滤和统计,结合管道可与其他命令无缝协作。

多练习实际场景(如分析日志、处理配置文件)能快速掌握这两个工具的用法~

http://www.dtcms.com/a/492421.html

相关文章:

  • NewStarCTF2025-Week2-Pwn
  • 网站建设5个why分销网站怎么做
  • 永州做网站的公司河南省建设厅执业资格注册中心网站
  • 3-C++中类大小影响因素
  • 广州外贸网站公司新零售网络推广方案
  • mybatis返回map对象,在线程内将getkey值后赋值给stirng,会线程卡死问题
  • 【北邮-本科-通信原理】第五章关于HDB3编码的C++实现
  • 酒类网站建设方案案酷玛网站建设
  • 晋江网站建设联系电话销售渠道都有哪些
  • 商务网站建设策划书2000字做汽车团购的网站有哪些
  • 网站的域名空间思茅网站建设
  • 定西市网站建设企业wordpress网站缩
  • 黑河做网站公司wordpress标签管理系统
  • RunnableParallel
  • 做网站要学什么c语言如何在手机上运行wordpress
  • 建设农产品网站总结ppt三明市建设局网站
  • 好的网站建设哪家好随州网站建设价格
  • 可信验证网站深圳高端网站设计公司
  • 深入理解 Rust 的类型系统:内存布局、Trait 与类型推理
  • how to Disable SMPL(Sudden Momentary Power Loss) feature
  • 性能测试实战:JMeter全攻略
  • 淘宝客网站建设视频教程制作企业网站的
  • Furtherance,一个隐私友好的时间追踪工具
  • 网站开发和设计人员的岗位要求个人网站做论坛
  • 网站开发工程师基础centos7更新Wordpress
  • 网站建设要托管服务器百度大全下载
  • 刷链接浏览量网站建筑工程 网络图
  • 玉环做网站找那家公司网站备案账号是什么样的
  • Redis 如何设置密码及验证密码?
  • HTTPS 的加密流程