程序人生 | UNIX环境高级编程技巧之 du 指令实现

2012年Mac技术写作的生存手记:从命令行到数字哲学 Mac技巧本质上是人与操作系统交互的认知实践,其底层依托于OS X三大抽象层——图形界面(Aqua)、命令行(Unix Shell)和系统服务(Darwin Core)。理解`du`、`sips`、`scp`等命令,不只是记忆语法,更是掌握文件系统inode机制、图像重采样原理与网络传输协议的工程入口。这类技术实践的价值,在于缩短用户与工具之间的心理距离,将‘魔法快捷键’转化为可解释、可调试、可协作的系统能力。典型应用场景包括开发环境搭建、远程协作、磁盘分析与批量媒体处理。而真正让这些技巧历久弥新的,是其背 阅读详情

本文首发于 2014-07-10 10:00:41

代码

#include <stdio.h>
#include <stdlib.h>
#include <glob.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

#define PATHSIZE 1024

static int path_noloop(const char *path)
{
    char *pos;

    pos = strrchr(path,'/');//定位最右边的'/'的位置

    if(strcmp(pos+1,".") == 0 || (strcmp(pos+1,"..") == 0))
        return 0;
    return 1;

}

static int64_t mydu(const char *path)
{
    int i;
    glob_t globres;
    int64_t sum;
    static struct stat statres;
    static char nextpath[PATHSIZE];

    if(lstat(path, &statres) < 0)
    {
        perror("lstat()");
        return 0;//exit(1);
    }

    if(!S_ISDIR(statres.st_mode))
        return statres.st_blocks;

    strncpy(nextpath, path,PATHSIZE);
    strncat(nextpath, "/*" , PATHSIZE);
    glob(nextpath,GLOB_NOSORT, NULL, &globres);

    strncpy(nextpath, path,PATHSIZE);
    strncat(nextpath, "/.*" , PATHSIZE);
    glob(nextpath,GLOB_NOSORT|GLOB_APPEND, NULL, &globres);

    sum = statres.st_blocks;

    for(i = 0 ;i < globres.gl_pathc ; i++)
    {
        if(path_noloop(globres.gl_pathv[i]))
            sum += mydu(globres.gl_pathv[i]);
    }

    return sum;
}

int main(int argc,char **argv)
{
    if(argc < 2)
    {
        fprintf(stderr,"Usage...\n");
        exit(1);
    }
    printf("%lld 512B blocks\n", (long long int)mydu(argv[1]));
    return 0;
}

编译

$ gcc -g -Wall testdu.c -o testdu

运行

  • testdf执行效果:
$ ./testdu /usr/bin
1766184 512B blocks
  • 原生df执行效果:
$ du -sh /usr/bin
859M	/usr/bin

欢迎关注我的微信公众号【数据库内核】:分享主流开源数据库和存储引擎相关技术。

标题网址
GitHubhttps://dbkernel.github.io
知乎https://www.zhihu.com/people/…
思否(SegmentFault)https://segmentfault.com/u/db…
掘金https://juejin.im/user/5e9d3e…
开源中国(oschina)https://my.oschina.net/dbkernel
博客园(cnblogs)https://www.cnblogs.com/dbkernel
从环境变量到自动化脚本:彻底解决“命令无法识别”并编写实用Shell脚本 在计算机操作与系统管理中,脚本是一系列命令的集合,通过解释器逐行执行,实现自动化任务。其核心原理在于将重复性手动操作转化为可靠的自动化流程,依赖正确的解释器与环境配置(如PATH变量)才能运行。这项技术的价值在于显著提升效率、减少人为错误,广泛应用于系统管理、数据处理、部署运维及特定场景自动化。本文以Shell脚本为例,深入解析从解决“无法识别”报错到编写实用备份脚本的全过程,涵盖环境变量配置、Shebang原理、脚本编写与排错等关键实践,帮助你掌握自动化工具,让计算机可靠地为你服务。 阅读详情

相关推荐

brew install tree 执行原理深度解析:从命令到系统底层

Homebrew 是 macOS/Linux 上主流的包管理器,其核心价值在于将软件分发抽象为可复现、可验证、跨平台的自动化流程。理解 `brew install` 的执行机制,需从包管理概念出发,深入其 Ruby 实现原理、Formula 声明式定义、Bottle 预编译分发、SHA256 源码校验等关键技术环节;它不仅解决依赖安装问题,更承载了安全分发、架构适配(如 Apple Silicon)、环境隔离等工程价值。典型应用场景包括开发者环境初始化、CI/CD 构建稳定性保障、终端工具链故障诊断等。本文

huqiyes的专栏 479

apue编程之参考du代码利用递归写的一个简单的du命令的源代码

#include <stdio.h> #include <stdlib.h> #include <glob.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #def...

weixin_30825199的博客 221

Java获取文件大小的7大陷阱与生产级解决方案

文件大小是操作系统中最基础的元数据概念,其本质是inode中st_size字段的值,通过stat系统调用获取。不同API(如File.length、Files.size、getAttribute)在符号链接处理、错误语义、权限反馈和跨平台行为上存在根本性差异,导致静默失败、NFS阻塞、Docker路径幻影等高频故障。理解逻辑大小与物理大小、软硬链接语义、文件系统配额及JVM内存模型限制,是构建高可用文件处理能力的前提。本文聚焦Java I/O底层原理与真实生产边界问题,提供可落地的健壮获取方案。

weixin_34082789的博客 414

du命令

du命令:disk usage,顾名思义,是关于目录使用情况的。对了~ 它的作用就是计算目录大小的。 1.  想看当前目录下所有目录以及子目录的大小:   # du -h . “.”代表当前目录下。也可以换成一个明确的路径 -h表示用K、M、G的人性化形式显示 2. 只想看当前目录下abc目录的大小,并不想看其他目录以及其子目录: # du -ch abc | tail -n 1...

K0521k的专栏 402

Linux基础知识点总结

目录前言Linux安装系统:服务管理:控制类型:管道符和重定向rpm [选项] 包用户管理相关命令passwd 用户名7.组账户相关命令:8.设置文件/目录权限9.更改文件或目录归属10:磁盘管理进程的前后台调度:计划任务故障排查12.ip地址管理Linux基础干货,干货满满,喜欢就点个赞吧 Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·本纳第克特·托瓦兹(Linus Benedict Torvalds)于1991年10月5日首次发布,它主要受到M

一起努力共同进步,为了未来一起奋斗吧! 2070

智慧学堂公众号版1.8.1部署全攻略:从环境配置到微信对接

在公众号生态中,基于PHP与MySQL构建的业务系统始终是内容付费与在线教育的主流技术方案。理解LNMP环境下的部署原理,是保障服务稳定运行的基础。这类系统依赖服务器与微信服务器之间的双向通信,通过URL、Token和EncodingAESKey完成签名校验,进而实现用户身份识别、网页授权及支付回调等核心功能。合理配置Nginx伪静态规则、目录权限与数据库字符集(如utf8mb4),直接决定了课程展示、图片上传和订单写入的成败。在实际运维中,从旧版本升级时需优先处理SQL增量脚本与数据备份,避免表结构变更导

weixin_34392435的博客 401

df和du命令详解

df命令详细用法a:显示全部的档案系统和各分割区的磁盘使用情形 i:显示i -nodes的使用量 k:大小用k来表示 (默认值) t:显示某一个档案系统的所有分割区磁盘使用量 x:显示不是某一个档案系统的所有分割区磁盘使用量 T:显示每个分割区所属的档案系统名称 常用命令:df -hi操作详解引用指令 df 可以显示目前所有档案系统的最大可用空间及使用情形,请看下列这个例子:# df

lxholding的专栏 2165

du

du

Linux 下du命令详解及代码实现

关于du 命令,这是一个用于估计文件空间使用情况的 UNIX 和 Linux 命令。du命令报告目录树​​的大小,包括其所有内容和单个文件的大小。 这使得它可用于追踪占用大量空间的文件,即在硬盘驱动器或其他存储介质上消耗大量或过多空间的目录和文件。 什么是目录树? 目录树是由单个目录(称为父目录或顶级目录)及其所有级别的子目录(即目录中的目录)组成的目录层次结构。任何目录都可以看作是它自己的目录树的开始,至少如果它包含子目录的话。因此,典型的计算机包含大量目录树。 大部分Linux系统是默认不安装该命令的

chen1415886044的博客 1万+

ENSP:小型企业网络拓扑设计

包含的技术:ospf、dhcp中继、ac+ap、vrrp+mstp、acl、浮动路由、静态路由、vlan划分

weixin_45921302的博客 1万+

宜搭,高级认证实操2,FaaS连接器指导教程

找到FaasEntry.java将如下代码整体替换,注意引包。如图所示在util下新建EDSUtil.java代码如下。回到连接器界面点击右上角测试-->测试。连接器工厂-->新建FaaS连接器。保存-->前往云IDE开发。返回如图所示代码,部署成功。

2301_80286061的博客 3343

工作中经常用到的unix命令

一、背景 工作中积累了好多关于服务器相关的命令,都是平时常用的,记录一下分享给大家,希望有帮助。 二、常用命令 1、vim进入文件,退出编辑模式,执行dd就可以删除一整行,20dd删除光标下面的20行 2、bash执行完成后,输入 $? 可以查看返回值0或1. 3、bash脚本开头加这句。 #!/bin/bash 4、执行bash文件提示权限不足,执行命令 chmod +x ./你的程序 5、当执行bash脚本时,如何退出bash? (1)打开新的cmd,执行 ...

jiankang66的博客 2075

Unity开源游戏源码精选:17个亲测可运行教学项目

Unity游戏开发中,掌握真实项目结构与工程实践远比熟记API更重要。本文围绕‘Unity开源项目’和‘游戏源码’两大核心概念,解析高质量开源资源的本质特征——结构清晰、逻辑可溯、修改即时反馈。从基础的MonoBehaviour生命周期组织,到进阶的ScriptableObject数据驱动、事件总线解耦,再到架构级的DOTS ECS设计与网络同步模式,技术价值在于将抽象原理落地为可调试、可验证、可迁移的代码范式。适用于新手建立开发直觉、中级开发者突破系统设计瓶颈,以及团队构建可维护框架。所有项目均基于Uni

weixin_31528001的博客 722

SFTPGo 虚拟文件夹完整指南:一份 S3 桶,切出多个隔离的文件视图

SFTPGo 虚拟文件夹能把任意云存储路径映射进用户主目录,让不同用户登录后看到不同的文件视图。本文带你完成 SFTPGo 挂载 S3 等后端的配置,并独立控制每个用户的 SFTPGo 用户配额。 ## 痛点:一个 S3 桶,三条业务线都想用 假设你们公司把数据集放在同一个 S3 桶里:数仓团队要读 `dwh/` 前缀,市场部要在 `mkt/` 前缀下发布和回收素材,运维要从 `logs/`

gitblog_00022的博客 298

从零到一:基于Docker与OSM数据构建Valhalla路径规划服务及Mapbox风格可视化

本文详细介绍了如何从零开始,基于Docker容器技术快速部署开源的Valhalla路径规划服务。通过获取免费的OSM地图数据并构建路网,最终实现服务调用与Mapbox风格的地图可视化,为出行应用原型开发或本地化路径规划服务提供了一套完整、高效的实践方案。

weixin_29297127的博客 166

信奥赛csp初赛高频考点【位运算】(详细解析)

信奥赛csp初赛高频考点【位运算】(详细解析)

王老师青少年编程 375

零基础掌握Linux核心命令:20个命令解决80%开发问题

你是不是也遇到过这样的场景:刚接触编程,满怀热情地打开教程,第一步就卡在了“打开终端,输入命令”上?看着屏幕上闪烁的光标和一堆看不懂的字母,瞬间感觉自己和“大神”之间隔着一座 Linux 命令的大山。 别慌,这种感觉每个程序员都经历过。Linux 命令不是洪水猛兽,它更像是一套高效的“键盘快捷键”,让你能直接和计算机对话,完成文件管理、程序运行、网络调试等所有操作。对于开发者而言,无论你是做后端、前端、数据科学还是运维,Linux 命令行都是绕不开的必备技能。它决定了你解决问题的效率上限。 网上有很多“Li

weixin_33946020的博客 327

备战2025数学建模国赛(算法46):多目标优化

本篇博客将深入浅出地介绍多目标优化的核心概念、主流算法,并重点结合一个数学建模竞赛的经典案例,提供完整的Python代码实现,助你在未来的竞赛中游刃有余。它通过寻找帕累托最优解集,完美地诠释了“鱼与熊掌不可兼得”的权衡思想,为最终决策提供科学依据。这些问题都包含多个相互冲突的目标,传统的单目标优化方法(如梯度下降、单纯形法)对此无能为力,因为它们无法同时优化多个目标。在数学建模竞赛中,我们面临的绝大多数问题都不是单一的“最好”,而是充满权衡与妥协的“最优”。记住,成功的建模不仅在于解出问题,更在于清晰地。

YOLO 286

工作中使用到的单词(软件开发)_第五版

本文摘要: 本文为软件开发相关的术语与技术要点整理,主要包含2020-2025年间四版内容更新(No.01-41)。重点包括: 证书文件格式(PEM/P12)差异 外部API通信注意事项(Accept头设置、HTTPS连接问题) Postman工具使用技巧(Cookie管理、请求头设置) WAS配置相关经验(JVM设置、SSL连接问题) 数据库操作命令(DB2表结构修改) IBM安全管理组件(TAM/iv-user机制) 网络通信细节(chunked传输编码特性) 常用开发工具(curl、Postman)的

sun0322 2521

vue2/3 - H5 移动端网页中调用手机摄像头扫描二维码 / 条形码功能,在h5手机网页里调起相机摄像头进行二维码或条形码扫描效果详细教程(详细示例组件源码,一键复制开箱即用!)

vue扫描二维码条形码,vue网页调用摄像头扫二维码条形码,vue移动端如何实现调用相机扫描二维码,vue移动端扫一扫功能,vue怎么做移动端h5扫一扫功能,vue识别二维码和条形码,vue实现点击按钮调用摄像头扫码,vue调用本地摄像头实现拍照功能,Vue中如何进行二维码生成与扫描,如何实现vue在手机浏览器中调用摄像头实现扫描二维码功能,VUE项目移动端H5调用摄像头扫码,vue项目中实现H5调取摄像头,网页调用摄像头实现二维码扫描功能,vue调用手机摄像头,vue在调用摄像头扫码,vue自定义打开摄像

✅ 精选推荐文章 1万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

工作中使用到的单词(软件开发)

1.エイリアス   alias 别名 powershell使用 get-help 命令时,会得到与此命令 相关(别名)的命令 2.プロキシ proxy 代 理 3.プロモート   promote 促进,提升   开发的系统新功能上线发布,有时会使用到这个词,比如 STプロモート 还有使用リリース这个词的。比如STリリース。个人认为两者含义相同。 4.見逃し み................................................................

sun0322 6万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【APUE】文件系统 — 类 du 命令功能实现

APUE第四章

yangjihua的个人笔记博客 670

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

inux 查看某个文件或目录占用磁盘空间的大小

du查看某个文件或目录占用磁盘空间的大小 常用参数 -h:以人类可读的方式显示    -s:显示目录占用的磁盘空间大小,不要显示其下子目录和文件占用的磁盘空间大小 -c:显示几个目录或文件占用的磁盘空间大小,还要统计它们的总和    –apparent-size:显示目录或文件自身的大小    -l:统计硬链接占用磁盘空间的大小    du -ah –max-depth=1 显示目录下所有的文...

u010783226的专栏 480

du和ls命令查看到的文件占用大小不同的问题

对du和ls打印的文件大小的来源做了简单说明和介绍,顺带说明了查看文件块大小的方法

暗推中... 2367
上一篇: 程序人生 | UNIX环境高级编程技巧之 df 指令实现
下一篇: 程序人生 | C语言字节对齐问题详解 - 对齐/字节序/位序/网络序等(下)
dbkernel
博客等级 码龄4年 60粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值