揭秘TinyML模型优化瓶颈:如何用C语言将CNN压缩至10KB以内并保持精度

第一章:TinyML与嵌入式AI的演进

随着物联网设备的普及和边缘计算需求的增长,TinyML(微型机器学习)逐渐成为连接人工智能与嵌入式系统的桥梁。它使得在资源极度受限的微控制器上运行机器学习模型成为可能,从而实现低功耗、低延迟的本地化智能决策。

TinyML的核心优势

  • 超低功耗:可在毫瓦级别运行,适合电池供电设备
  • 实时响应:避免云端通信延迟,提升系统反应速度
  • 数据隐私保护:原始数据无需上传至云端处理
  • 成本低廉:支持在廉价MCU上部署,如ARM Cortex-M系列

典型应用场景

应用领域实例
工业预测性维护通过振动传感器检测电机异常
农业物联网土壤湿度+温度模型驱动自动灌溉
可穿戴健康设备心率异常实时预警

从训练到部署的工作流示例

将TensorFlow Lite模型转换为适用于微控制器的C数组是关键步骤之一:
# 将Keras模型转换为TensorFlow Lite格式
import tensorflow as tf

# 假设model已训练完成
converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.optimizations = [tf.lite.Optimize.OPTIMIZE_FOR_SIZE]  # 优化模型大小
tflite_model = converter.convert()

# 保存为.tflite文件
with open('model.tflite', 'wb') as f:
    f.write(tflite_model)

# 使用xxd命令转换为C头文件(在终端执行)
# xxd -i model.tflite > model_data.cc
graph LR A[数据采集] --> B[模型训练] B --> C[模型量化与转换] C --> D[TinyML推理引擎] D --> E[嵌入式设备部署]

第二章:CNN模型轻量化理论基础

2.1 卷积神经网络压缩的核心挑战

在卷积神经网络(CNN)压缩过程中,如何在降低模型复杂度的同时保持高精度是一大核心难题。随着网络深度增加,参数量和计算开销急剧上升,导致难以部署到边缘设备。
精度与效率的权衡
压缩技术如剪枝、量化和知识蒸馏虽能显著减少模型体积,但可能引入精度损失。关键在于识别冗余参数,同时保留对特征提取至关重要的连接。
硬件友好性要求
现代压缩方法还需考虑目标硬件的特性。例如,结构化剪枝比非结构化剪枝更利于GPU并行计算:

# 非结构化剪枝示例(不利于硬件加速)
mask = torch.rand_like(weight) < sparsity_ratio
pruned_weight = weight * mask
上述代码生成随机稀疏模式,导致内存访问不连续,影响推理速度。因此,设计硬件感知的压缩策略成为关键挑战。

2.2 权重共享与参数冗余的数学分析

在深度神经网络中,权重共享机制显著降低了模型参数量。以卷积神经网络为例,同一卷积核在输入特征图上滑动应用,实现参数复用。
参数量对比分析
  • 全连接层:假设输入维度为 $D$,输出为 $N$,参数量为 $D \times N$
  • 卷积层(共享):$k \times k$ 卷积核在 $H \times W$ 特征图上共享,参数仅为 $k^2 \times C_{\text{out}}$
数学表达
设权重矩阵 $W \in \mathbb{R}^{m \times n}$,若存在结构约束使 $W_{ij} = W_{kl}$,则称其具备权重共享。此时有效参数从 $mn$ 减至 $r$,其中 $r \ll mn$。
# 示例:共享权重的线性变换
import torch
W_shared = torch.randn(64, 1)  # 共享向量
output = torch.matmul(x, W_shared.expand_as(x))  # 扩展共享
上述代码通过 expand_as 实现隐式权重共享,减少显存占用并加速训练。

2.3 量化感知训练与低比特表示原理

在深度神经网络压缩中,量化感知训练(Quantization-Aware Training, QAT)通过模拟推理时的低精度计算,在训练阶段引入伪量化操作,使模型适应低位宽表示。
伪量化操作实现

def fake_quant(x, bits=8):
    scale = 1 / (2**(bits-1))
    min_val, max_val = -1, 1 - scale
    clipped = torch.clamp(x, min_val, max_val)
    quantized = torch.round(clipped / scale) * scale
    return clipped + (quantized - clipped).detach()  # 梯度直通
该函数模拟8比特量化过程,detach()确保反向传播时梯度绕过离散化操作,保留连续梯度流。
常见量化位宽对比
位宽表示范围典型用途
8-bit256级端侧推理
4-bit16级极轻量部署
低比特表示显著降低存储与计算开销,结合QAT可缓解精度损失。

2.4 网络剪枝与结构稀疏化的工程实现

剪枝策略的选择与实现
在实际工程中,结构化剪枝更适用于硬件加速。常用方法包括通道剪枝(Channel Pruning)和层间稀疏化。以PyTorch为例,可通过正则化引导稀疏训练:

import torch.nn.utils.prune as prune

# 对卷积层进行L1范数非结构化剪枝
prune.l1_unstructured(conv_layer, name='weight', amount=0.3)
该代码将卷积层权重中幅值最小的30%参数置零,amount参数控制剪枝比例。L1范数剪枝实现简单,适合初步稀疏化实验。
结构稀疏模式优化
为提升推理效率,需采用结构化稀疏。常见模式如下表所示:
稀疏模式硬件友好性精度损失
通道级剪枝
滤波器组剪枝
块状稀疏(Block 4x4)

2.5 知识蒸馏在微型模型中的迁移策略

软标签引导训练
知识蒸馏通过将大型教师模型的输出作为“软标签”指导小型学生模型训练,提升其泛化能力。相较于硬标签,软标签包含类别间的概率分布信息,传递更丰富的语义知识。
温度加权响应
关键步骤是引入温度参数 $T$ 调节教师模型输出的概率分布:
import torch
import torch.nn.functional as F

def distillation_loss(student_logits, teacher_logits, labels, T=5.0, alpha=0.7):
    soft_loss = F.kl_div(
        F.log_softmax(student_logits / T, dim=1),
        F.softmax(teacher_logits / T, dim=1),
        reduction='batchmean'
    ) * T * T
    hard_loss = F.cross_entropy(student_logits, labels)
    return alpha * soft_loss + (1 - alpha) * hard_loss
其中,T 控制概率平滑程度,alpha 平衡软损失与真实标签的交叉熵损失,实现知识的有效迁移。
多阶段微调策略
  • 第一阶段:固定教师模型,仅更新学生网络参数
  • 第二阶段:解冻部分学生层,联合优化特征对齐
  • 第三阶段:引入注意力转移机制,增强中间层表示一致性

第三章:C语言部署的关键技术突破

3.1 固定点运算替代浮点计算的精度控制

在资源受限的嵌入式系统中,浮点运算成本高昂。固定点运算是通过将实数缩放为整数进行计算,从而避免使用浮点单元(FPU)的有效手段。
表示方法与精度权衡
固定点数通常采用 Q 格式表示,如 Q15.16 表示 15 位整数、16 位小数。缩放因子决定了精度与动态范围的平衡。
格式整数位小数位最小步长
Q7.8781/256 ≈ 0.0039
Q15.1615161/65536 ≈ 0.000015
代码实现示例

// Q15.16 格式乘法:需右移16位补偿
int32_t fixed_mul(int32_t a, int32_t b) {
    int64_t temp = (int64_t)a * b; // 防止溢出
    return (int32_t)(temp >> 16);
}
上述函数通过 64 位中间变量防止溢出,右移 16 位完成缩放补偿,确保结果仍在 Q15.16 范围内,兼顾精度与效率。

3.2 内存池设计与栈空间优化实践

内存池的核心优势
在高频内存分配场景中,频繁调用 malloc/free 会引发内存碎片和性能下降。内存池通过预分配大块内存并按需切分,显著降低系统调用开销。
  • 减少动态分配次数,提升分配效率
  • 提高内存局部性,优化缓存命中率
  • 避免外部碎片,增强系统稳定性
固定大小内存池实现

typedef struct MemBlock {
    struct MemBlock* next;
} MemBlock;

typedef struct MemoryPool {
    MemBlock* free_list;
    size_t block_size;
    int block_count;
} MemoryPool;
该结构体定义了一个基于空闲链表的内存池。每个空闲块通过 next 指针串联,分配时从链表头部取出,释放时重新挂回,时间复杂度为 O(1)。
栈空间优化策略
通过将短生命周期对象分配在栈上,并结合内存池管理堆对象,可有效减少堆压力。对于嵌入式系统或协程场景,栈空间复用尤为关键。

3.3 Keras到C代码的手动映射范式

在嵌入式深度学习部署中,将Keras模型手动映射为C代码是一种精细控制推理过程的有效方式。该方法适用于资源受限设备,允许开发者精确管理内存布局与计算流程。
权重提取与数据排布
首先从训练好的Keras模型中导出权重和偏置,并将其转换为静态数组:

// 示例:全连接层权重(3x2)与偏置
float dense_weights[6] = {0.1f, -0.2f, 0.3f, 0.4f, -0.5f, 0.6f};
float dense_bias[2] = {0.0f, 0.1f};
上述数组按行主序存储,确保C语言访问时缓存友好。浮点数使用单精度以平衡精度与性能。
推理函数结构
推理逻辑需手动实现前向传播:
  • 输入数据归一化处理
  • 逐层执行矩阵乘加与激活函数(如ReLU)
  • 避免动态内存分配,全部使用栈变量
此范式虽开发成本高,但可实现极致优化,适合对延迟敏感的应用场景。

第四章:10KB内CNN模型实战压缩流程

4.1 基于MNIST的小型CNN架构设计与训练

网络结构设计原则
针对MNIST手写数字识别任务,输入图像为28×28灰度图,设计轻量级卷积神经网络。采用逐步下采样策略,提升特征抽象能力,同时控制参数量以避免过拟合。
模型实现代码

import torch.nn as nn

class SimpleCNN(nn.Module):
    def __init__(self):
        super(SimpleCNN, self).__init__()
        self.conv1 = nn.Conv2d(1, 16, kernel_size=3, stride=1, padding=1)
        self.pool = nn.MaxPool2d(2, 2)
        self.conv2 = nn.Conv2d(16, 32, kernel_size=3, padding=1)
        self.fc1 = nn.Linear(32 * 7 * 7, 128)
        self.fc2 = nn.Linear(128, 10)

    def forward(self, x):
        x = self.pool(torch.relu(self.conv1(x)))
        x = self.pool(torch.relu(self.conv2(x)))
        x = x.view(-1, 32 * 7 * 7)
        x = torch.relu(self.fc1(x))
        return self.fc2(x)
该网络包含两个卷积块,每个块后接最大池化层。第一层卷积提取边缘和纹理特征,第二层构建更高阶语义。全连接层将展平特征映射到10类输出。
关键参数说明
  • Conv2d(1, 16):输入通道1(灰度图),输出16个特征图,增强表达能力
  • MaxPool2d(2,2):每层空间尺寸减半,保留显著特征
  • Linear(32*7*7, 128):经两次池化后特征图尺寸为7×7,作为分类头输入

4.2 模型量化与权重重排列的C实现

定点化权重存储
在嵌入式设备上部署神经网络时,将浮点权重转换为8位整型可显著降低内存占用。以下代码实现将浮点数组线性映射到int8范围:

void quantize_weights(float* src, int8_t* dst, int len, float scale) {
    for (int i = 0; i < len; ++i) {
        dst[i] = (int8_t)(src[i] / scale);
    }
}
其中,scale 表示量化因子,通常取权重绝对值的最大值除以127,确保数值落在[-127,127]区间内。
重排列提升访存效率
为优化SIMD加载性能,按通道分组重排权重。采用列主序存储使连续内存访问对应同一卷积核,提升缓存命中率。
  • 原始布局:[filter0_ch0, filter0_ch1, ...]
  • 重排后:[filter0_ch0, filter1_ch0, ...]

4.3 层融合与算子优化减少运行时开销

在深度学习推理过程中,频繁的内存访问和算子调度会显著增加运行时开销。层融合技术通过将多个相邻算子合并为单一计算内核,有效减少了内核启动次数和中间数据驻留。
算子融合示例:卷积+ReLU

// 融合Conv2D与ReLU,避免中间特征图写回全局内存
__global__ void fused_conv_relu(float* output, const float* input, 
                                const float* weight, int N, int C, int H, int W) {
    int idx = blockIdx.x * blockDim.x + threadIdx.x;
    float sum = 0.0f;
    for (int c = 0; c < C; ++c)
        sum += input[idx + c] * weight[c];
    output[idx] = fmaxf(0.0f, sum); // 内联ReLU激活
}
该内核将卷积计算与ReLU激活函数融合,消除了单独激活层的内存读写开销。线程级并行处理输入元素,利用共享内存缓存权重以提升访存效率。
常见融合策略对比
融合类型收益适用场景
Conv + BN + ReLU降低延迟30%CNN前向推理
GEMM + Bias + GeLU提升吞吐18%Transformer FFN

4.4 在STM32上验证推理性能与功耗表现

在嵌入式边缘计算场景中,评估模型在真实硬件上的运行效率至关重要。本节基于STM32H743微控制器,对轻量级神经网络模型进行推理延迟与功耗测试。
测试平台配置
  • 开发板:STM32H743II6
  • CPU主频:480 MHz
  • 工具链:ARM CMSIS-NN + STM32CubeMX
  • 测量设备:Keysight N6705B直流电源分析仪
推理性能数据
模型类型推理时间 (ms)峰值功耗 (mW)内存占用 (KB)
MobileNetV1-Quantized42.3185296
Custom CNN (8-bit)18.7163112
关键代码实现
  
// 启动定时器测量推理时间
DWT->CYCCNT = 0;
start_cycle = DWT->CYCCNT;

tflite::MicroInterpreter interpreter(model, tensor_arena, kTensorArenaSize, &error_reporter);
interpreter.Invoke();

uint32_t end_cycle = DWT->CYCCNT;
uint32_t inference_time_us = (end_cycle - start_cycle) / SystemCoreClock_Hz * 1000;
上述代码利用DWT周期计数器实现高精度时间测量,系统时钟为480MHz,可精确到微秒级,确保性能数据可靠。

第五章:未来展望:TinyML的边界拓展与生态构建

跨平台模型部署实践
在资源受限设备间实现统一推理能力,是TinyML生态发展的关键方向。以TensorFlow Lite for Microcontrollers为例,开发者可通过Python脚本将训练好的模型转换为C数组:

import tensorflow as tf
converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.optimizations = [tf.lite.Optimize.OPTIMIZE_FOR_SIZE]
tflite_model = converter.convert()

with open("model.tflite", "wb") as f:
    f.write(tflite_model)
该模型可直接嵌入STM32或ESP32等MCU中,结合CMSIS-NN加速库,在 Cortex-M4 上实现每秒15帧的手势识别推理。
开源工具链协同演进
现代TinyML开发依赖于模块化工具集成,典型工作流包括:
  • 使用Edge Impulse进行传感器数据采集与标注
  • 在Federated Learning框架下完成分布式模型训练
  • 通过ONNX Runtime Micro生成跨架构可执行代码
  • 利用Zephyr RTOS实现低功耗调度策略
边缘-云协同架构设计
某工业预测性维护系统采用分层推理机制,其部署结构如下表所示:
层级设备类型模型功能响应延迟
边缘端STM32U5异常振动初筛<10ms
网关层Raspberry Pi 4故障分类聚合~80ms
云端GPU集群根因分析与模型更新分钟级
[Sensor Node] --(MQTT)--> [Edge Gateway] --(HTTPS)--> [Cloud Inference Engine]
已经博主授权,源码转载自 https://pan.quark.cn/s/fb533687a163 《C++经典代码大全》是一部专门针对C++入门者的重要参考资料,其核心目标在于提供易于理解的C++编程范例,旨在协助新学者迅速领会C++语言的关键概念与技术要点。此压缩文件所包含的信息或许涵盖了从基础到高级的各类C++编程技巧,涉及面向对象编程中的类与对象、函数的应用、程序流程控制、数据结构设计、模板技术以及异常管理等多个关键领域。 1. **基础语法** - 变量声明与初始化:掌握如何声明初始化不同数据类型的变量,例如整型(int)、浮点型(float)、字符型(char)等。 - 基本输入输出:学习运用`std::cin`和`std::cout`执行标准数据输入与输出操作。 - 控制流语句:熟练运用条件语句(if、if-else、switch-case)以及循环语句(for、while、do-while)来控制程序流程。 2. **类与对象** - 类的定义:学会如何构建类,包含其成员变量与成员函数的设定。 - 对象的创建与使用:掌握如何实例化对象,经由对象访问类的成员函数。 - 封装:理解封装的理念,学习使用private和public访问修饰符来保护数据。 - 构造函数与析构函数:掌握如何为类定义自定义的构造过程与析构过程。 3. **函数** - 函数的定义与调用:理解函数的功能与作用,以及如何进行函数的定义和调用。 - 函数参数:精通不同类型的参数传递方法,包括值传递和引用传递。 - 函数重载:学习在同一作用域内定义多个具有相同名称但参数列表不同的函数。 - 函数指针:了解函数指针的运用方法,及其在回调函数和模板中的应用场景。 4. **数组与字符串** -...
内容概要:本文研究了一种计及自适应预测修正的微电网模型预测控制(MPC)优化调度方法,提供了Matlab代码实现。该方法针对微电网中风电出力等可再生能源的强不确定性,引入自适应预测修正机制,动态调整预测模型以提升短期功率预测精度,从而增强调度决策的准确性与系统运行的鲁棒性。研究构建了完整的MPC滚动优化框架,涵盖预测模型建立、多时间尺度优化求解、实时反馈校正等关键环节,实现了系统运行成本最小化、能源高效利用与功率平衡的多重目标。所提方法有效应对了负荷波动与新能源出力随机性带来的调度挑战,提升了微电网能量管理系统的智能化水平。; 适合人群:具备电力系统、自动化、控制理论或相关领域基础知识的研究生、科研人员及工程技术人员,尤其适合从事微电网优化、可再生能源集成、模型预测控制研究的专业人士,熟悉Matlab编程与优化算法者更佳。; 使用场景及目标:①应用于高比例可再生能源接入的微电网能量管理系统,提升调度方案的实时性与鲁棒性;②为不确定性环境下电力系统动态优化控制策略的研究提供仿真验证平台;③支持学术论文复现、科研课题攻关及实际工程项目的前期技术验证与方案预研。; 阅读建议:建议结合Matlab代码逐模块分析算法实现细节,重点关注预测模型构建与反馈修正机制的设计逻辑,通过调整风电出力、负荷需求等场景参数进行仿真实验,深入理解MPC在微电网调度中的滚动优化特性与自适应修正能力。
代码下载链接: https://pan.quark.cn/s/a4b39357ea24 在信息技术领域中,字符编码扮演着处理文本数据的核心角色。本文着重研究在微控制器系统中,运用C语言如何将UTF-8编码格式转换为GBK编码格式,旨在处理串口通信、TF卡存储或LCD显示屏上可能出现的中文显示错误问题。我们将详细剖析UTF-8与GBK编码的运作机制,研究基于Keil开发平台的C语言实现流程。 UTF-8是一种被广泛接纳的Unicode字符编码方案,它采用可变长度的字节序列来表示字符,每个Unicode字符都对应一个独一无二的数字标识,即码点。UTF-8的一个显著特点是对ASCII字符(英文文本)保持不变,因此在网络传输和文件存储方面展现出优秀的兼容性。 GBK编码,正式名称为“汉字内码扩展规范”,是中国大陆的标准化编码,是对GB2312编码的延伸,总共涵盖了20902个汉字及其他符号,每个字符使用两个字节来表示。GBK在GB2312的基础上扩充了许多繁体字、少数民族文字以及特殊符号,目的是满足更广泛的语言需求。 将UTF-8转换为GBK的主要难点在于GBK是一种固定长度的双字节编码,而UTF-8则是可变长度的编码。转换过程中需要将UTF-8的多字节序列解析为相应的Unicode码点,然后依据GBK的编码规则查找匹配的编码。这一过程通常借助查表法完成,即建立一个从Unicode码点到GBK编码的映射库。 在Keil开发环境中,使用C语言实现UTF-8到GBK的转换可以遵循以下步骤: 1. **构建查表法所需的GBK编码库**:需要准备一个包含所有GBK字符二进制形式的GBK编码库。这个库通常是一个二进制文件,其大小大约为41KB。 2. **解析UTF-8编码**...
内容概要:本文提出一种基于CNN-BiGRU-Attention混合神经网络模型的风电功率预测方法,旨在提升风力发电功率预测的精度。该模型面向多变量输入的单步预测任务,首先利用卷积神经网络(CNN)提取风速、风向、温度等气象因素的局部时空特征,再通过双向门控循环单元(BiGRU)充分捕捉时间序列数据的前后向时序依赖关系,最终引入注意力(Attention)机制对关键历史时刻的特征进行自适应加权,强化对预测结果贡献更大的时间步信息,从而显著提高预测准确性。整个模型在Matlab平台上实现,特别适用于处理风电数据固有的强随机性与剧烈波动性,能够有效应对复杂多变气象条件下的功率预测挑战,为电网调度提供高精度的数据支撑。; 适合人群:具备一定机器学习和深度学习理论基础,熟悉Matlab编程语言,从事新能源发电预测、电力系统调度、智能算法开发与应用等相关领域的科研人员、工程技术人员及高校研究生。; 使用场景及目标:①应用于风电场实际运行中的短期功率预测,为电网的安全稳定调度与经济运行提供可靠依据;②作为深度学习在可再生能源预测领域应用的典型案例,帮助学习者深入理解CNN、RNN变体(BiGRU)及Attention机制的协同建模原理与实现方法;③为后续研究多步预测、模型轻量化或网络结构优化等方向提供坚实的技术参考和可复用的代码基础。; 阅读建议:学习者应重点关注模型各组件的设计思路与集成方式,结合提供的Matlab代码,系统掌握数据预处理、模型搭建、训练流程及性能验证的完整环节,建议通过调整输入变量组合、优化网络超参数或替换数据集等方式,观察模型性能变化,以深入理解该混合架构的核心优势与调优策略。
内容概要:本文系统阐述了基于多种改进型灰狼优化算法(包括GWO、MP-GWO、灰狼-布谷鸟混合优化算法及CS-GWO多种群算法)实现的无人机路径规划技术,配套提供完整的Matlab代码实现方案。研究聚焦于在复杂地形与动态环境中,利用智能优化算法模拟灰狼群体的等级结构与协作捕食机制,以高效搜索全局最优飞行路径,提升无人机避障能力与路径规划精度。相较于传统方法,所采用的混合与多策略改进算法有效缓解了早熟收敛与陷入局部最优的问题,显著增强了算法的探索与开发平衡能力。此外,文档还展示了该技术在多学科交叉领域的广泛应用前景,涵盖路径规划、机器学习、信号处理、电力系统优化等科研方向,体现了较强的技术通用性与工程实用价值。; 适合人群:具备一定编程基础与Matlab使用经验,从事智能优化算法研究、无人机控制、自动导航、路径规划及相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于城市密集区、山区或存在动态障碍物的复杂场景下的无人机三维路径规划与实时避障;②为科研项目提供可复现的智能优化算法实现案例,支撑算法性能对比与创新改进;③服务于学术论文复现、毕业设计、课题开发等实际科研与教学需求,加速研究成果落地。; 阅读建议:建议结合Matlab代码与算法理论同步研习,重点分析各算法的参数设置、收敛特性及路径规划效果图,深入理解其优化机制差异,可进一步拓展至多无人机协同规划、动态环境适应等高级应用场景进行实践验证与创新研究。
已经博主授权,源码转载自 https://pan.quark.cn/s/7d6084144924 Linux系统管理员经常遭遇磁盘空间不足的挑战,这会导致磁盘读写操作受阻,同时使得应用程序无法正常运行。磁盘满载的原因多种多样,包括系统安装规划不当、日志文件急剧膨胀以及网络通信故障等。应对这一问题需要对磁盘空间进行清理和优化。本文将介绍十种磁盘清理策略,旨在帮助用户解决磁盘空间不足的困境。 1. 定期对关键文件系统进行扫描,进行对比,以分析哪些文件频繁被访问 通过执行 `#IS-IR/home > files.txt` 和 `#diff filesold.txt files.txt` 命令,对重要文件系统实施扫描和对比,识别那些经常被读取和写入的文件,从而预判空间增长趋势,考虑对不常访问的文件实施压缩,以减少其占用的存储空间。 2. 检查文件系统的 inodes 消耗情况 使用 `#df -i /home` 命令来检查空间文件系统的 inodes 消耗情况,如果仍有大量的 inodes 可用,表明是大文件占用了空间,否则可能是许多小文件占用了空间。 3. 识别占用空间较大的目录 使用 `#du -hs /home` 命令查看 `/home` 所占用的空间,借助 `#du /awk $1 > 2000` 命令找出 `/home` 下占用空间超过 1000m 的目录。 4. 确定占用空间较大的文件 通过 `#find /home -size +2000K` 命令来找出占用空间较大的文件。 5. 查找最近修改或创建的文件 使用 `#TOUCH -t 08190800 test` 命令为某个文件设定一个特定的时间,然后运用 `#find /home -newer test -...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值