深入理解 Linux du 命令:用法详解与使用示例

  深入理解 Linux df 命令:用法详解与使用示例
  du 命令是一个非常常用的工具,它用于统计文件和目录的磁盘使用情况。作为 GNU Coreutils 的一部分,du 具备强大的功能,可以递归地计算每个文件或目录的大小,并以各种格式输出。


1. 什么是 `du` 命令?

dudisk usage(磁盘使用量) 的缩写,主要用来显示文件或目录占用的磁盘空间。它会递归地遍历目录,输出每个目录及其子目录的大小。

基本语法

du [选项]... [文件]...

或者:

du [选项]... --files0-from=F
  • [选项]:可选的参数,控制 du 的输出格式和行为。
  • [文件]:要统计的文件或目录。如果不指定文件或目录,du 默认会统计当前目录。

2. `du` 命令的常用选项

du 命令支持许多选项,这些选项可以灵活地控制输出的格式、精度和统计维度。这里主要介绍一些常用以及不常用但有用的选项。

2.1 `-h`:以容易阅读的格式显示

最常用的选项 -h,将大小以更容易理解的格式显示,例如 KB、MB、GB。

du -h /home/example/redis/

输出:

24M	/home/example/redis/data
24M	/home/example/redis/

du 递归遍历当前目录,显示每个子目录的大小, 父目录的大小会包括所有子目录的大小。 -h 选项将大小转换成了更易读的单位,如 KB、MB、GB。

2.2 `-s`:显示总和

如果只关心目录或文件的总大小,可以使用 -s(summarize)选项。它会汇总每个指定目录或文件的大小,而不显示子目录的详细信息。

du -sh /home/example/redis/

输出:

24M	/home/example/redis/

这个命令显示了 /home/example/redis 目录的总大小。

2.3 `-a`:显示所有文件的大小

默认情况下,du 只计算目录的大小,而不会显示每个文件的大小。如果希望显示目录中的每个文件大小,可以使用 -a 选项。

du -ah /home/example/redis/

输出:

4.0K	/home/example/redis/docker-compose.yml
24M	/home/example/redis/data/dump.rdb
24M	/home/example/redis/data
24M	/home/example/redis/

-a 选项会显示目录和文件的大小,而 -h 选项则让输出更易于阅读。

2.4 `--max-depth=N`:限制递归深度

有时不想递归地统计所有子目录的大小,只需要统计当前目录及其直接子目录的大小。这时可以使用 --max-depth 选项来限制递归的深度。

du -ah --max-depth=1  /home/example/redis/

示例输出:

4.0K	/home/example/redis/docker-compose.yml
24M	/home/example/redis/data
24M	/home/example/redis/

--max-depth=1 表示只统计当前目录及其直接子目录的大小,而不再递归到更深的层次。

2.5 `-c`:显示总计

在输出的最后显示一个总计,可以使用 -c 选项。

du -hc --max-depth=1  /home/example/redis/

输出:

24M	/home/example/redis/data
24M	/home/example/redis/
24M	总用量

-c 选项会在输出的最后加上一行,显示所有目录和文件的总和。

2.6 `-b, --bytes`:以字节为单位显示

使用 -b 选项时,du 会以字节为单位显示文件和目录的大小,等效于 --apparent-size --block-size=1

du -b --max-depth=1  /home/example/redis/

输出:

24849411	/home/example/redis/data
24849731	/home/example/redis/

这个命令会以字节为单位显示文件和目录的大小。

2.7 `--apparent-size`:显示表观大小

使用 --apparent-size 可以显示文件的表观大小,即文件名表示的大小,而不是实际占用的磁盘空间。这对于稀疏文件(占用的磁盘空间比文件大小小)特别有用。

du --apparent-size -h  /home/example/redis/docker-compose.yml

这个命令会显示 docker-compose.yml 的表观大小。

  • du -h:显示的是文件在磁盘上的物理大小,即实际分配的存储空间。如果文件是稀疏文件,空白部分不会占用磁盘空间,因此物理大小可能远小于逻辑大小。
  • du --apparent-size -h:显示的是文件的表观大小,即文件的逻辑大小。即使文件中的某些部分未分配物理磁盘空间(如稀疏文件中的空白部分),表观大小仍然会计算这些空白。

2.8 稀疏文件

稀疏文件Sparse File)是一种特殊的文件类型,在很多文件系统中都有支持。稀疏文件的特性在于它允许文件中存在大量的空白(未分配的)空间,而这些空白部分在磁盘上不实际占用物理存储空间。仅在文件中存储了非零数据的部分,而空白部分则以一种高效的方式表示。

这种机制使得稀疏文件在某些应用场景下非常有用,尤其是在需要创建大文件但其中大部分数据为空的场景中,例如数据库、虚拟机磁盘镜像等。

稀疏文件的特性

  • 逻辑大小:稀疏文件的逻辑大小是指文件在存储系统中声明的大小(也就是文件内容大小)。即使文件中有大量空白区域,文件的逻辑大小依然可以非常大。
  • 物理大小:稀疏文件的物理大小是指它在磁盘上实际占用的存储空间。由于空白区域不分配实际磁盘空间,稀疏文件的物理大小往往远小于其逻辑大小。

什么时候物理大小会大于逻辑大小?

在普通文件(非稀疏文件)的情况下,物理大小可能大于或等于逻辑大小,因为文件系统的块大小决定了文件占用的最小磁盘空间。

  • 大多数 Linux 文件系统(如 ext4)的默认块大小为 4 KB,即使文件只包含 1 字节的数据,它也会占用至少 4 KB 的物理磁盘空间。
  • 如果文件的大小不是块大小的整数倍(例如,文件大小为 276 字节),文件系统仍然会为它分配一个完整的块(4 KB),这会导致物理大小大于逻辑大小。

3. `du` 命令的其他选项

3.1 `-0, --null`:以 NUL 结尾

-0 选项会让每行的输出以 NUL 字符(而不是换行符)结束,这在处理包含换行符的文件名时很有用。

du -h -0  /home/example/redis/

输出:

24M	/home/example/redis/data24M	/home/example/redis/

如果文件名中包含特殊字符或换行符,-0 可以避免输出被错误解析。

3.2 `--inodes`:显示 inode 信息

--inodes 选项会显示每个目录或文件的 inode 使用信息,而不是块使用情况。

du --inodes  /home/example/redis/

输出:

2	/home/example/redis/data
4	/home/example/redis/

3.3 `-S, --separate-dirs`:不包括子目录的大小

-S 选项用于统计一个目录的大小,不包括其子目录的大小。 不会将子目录的大小加到父目录中 。

du -S -h /home/example/redis/

3.4 `-t, --threshold=SIZE`:按大小过滤

-t 选项允许根据文件大小进行过滤,排除比某个阈值更小或更大的文件。

du -h --threshold=20M /home/example/redis/

这个命令会只显示 /home/example/redis/目录下大于 20MB 的文件或目录。

3.5 `-X, --exclude-from=FILE`:从文件中读取排除模式

使用 -X 选项可以从指定文件中读取要排除的文件模式,排除符合模式的文件或目录

du -h --exclude-from=patterns.txt /home/example/redis

这个命令会排除 patterns.txt 中指定的模式,并显示 /home/example/redis 的磁盘使用情况。

txt文件示例(排除以txt和yml结尾的文件):

*.txt
*.yml

4. `du` 命令的常见使用场景

4.1 检查磁盘使用情况

当磁盘空间不足时,du 是一个非常有用的工具。可以快速找出哪些目录占用了最多的磁盘空间。

du -sh /*

这个命令会显示每个一级目录的总大小,帮助定位占用空间过大的目录。

4.2 排除无关文件

在统计磁盘使用情况时,某些类型的文件可能并不重要,例如日志文件。可以使用 --exclude 选项来排除这些文件。

du -sh --exclude="*.log" /var/log

这个命令会统计 /var/log 目录的大小,但会排除 .log 文件。

4.3 分析大目录

如果怀疑某个目录占用了过多的磁盘空间,可以使用 du 来分析它的大小,包括每个子目录的大小。

du -h --max-depth=1 /home

这个命令会显示 /home 目录下每个子目录的大小,帮助快速找到占用空间最多的子目录。


希望这篇文章能帮助到你,如果有其他问题或建议,欢迎留言讨论!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/59361.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

yolov8涨点系列之C2f模块改进主分支

文章目录 C2F 模块介绍定义与基本原理应用场景 C2f模块修改步骤(1) C2f_up模块编辑(2)在__init_.pyblock.py中声明(3)在task.py中声明yolov8引入C2f_up模块yolov8.yamlyolov8.yaml引入C2f_up模块 C2f改进对YOLOv8检测具有多方面的好处 C2F 模块介绍 定义…

数字IC后端实现Innovus 时钟树综合(Clock Tree Synthesis)典型案例

对于如下所示电路,要求以下几路做到等长,clock skew控制在50ps以内,clock tree insertion delay做到800ps! from FF/Q to FF1_1/D through the FF1 CK from FF/Q to FF2_1/D through the FF2 CK from FF/Q to FF3_1/D through the FF3 CK fr…

STM32F030中断言的使用分享

前言 最近在写一个程序中,想对存到FLASH中的结构体分配的大小做控制,希望分配的大小偶数字节大小。(因为读时是按16位读,如果奇数就可能读超了)如果结构体大小为奇数,就跳到断言处。 分析 STM32F030的标…

什么是Java的线程(Thread)?

Java的线程(Thread)是Java程序中执行的最小单位。线程是操作系统调度的基本单位,它可以独立执行一段代码,并拥有自己的程序计数器、栈和局部变量。Java中的线程通过使用Thread类来实现,可以通过继承Thread类或实现Runn…

Flutter使用share_plus是提示发现了重复的类

问题描述 我现在下载了share_plus包后发现代码编译不通过,并提示Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt found in modules jetified-kotlin-stdlib-1.8.22 (org.jetbrains.kotlin:kotlin-stdlib:1.8.22) and jetified-kotlin-stdlib-jdk8-1.7…

基于STM32的远距离遥控自动避障小车设计

引言 本项目基于STM32微控制器设计一个远距离遥控自动避障小车系统。该系统通过蓝牙或Wi-Fi模块实现远程控制,同时结合超声波传感器和红外传感器,实现自主避障功能。小车支持多种操作模式,包括手动遥控、自动避障和路径跟踪,适用…

Web Broker(Web服务应用程序)入门教程(2)

1. Web 调度器(Web Dispatcher) 如果您使用的是 Web 模块,它就充当 Web 调度器的角色。如果您使用的是现成的数据模块,则必须向该数据模块中添加一个单一的调度器组件(Web.HTTPApp.TWebDispatcher)。调度器维护着一个动作项集合,这些动作项知道如何处理特定类型的请求消息…

gitee 使用 webhoot 触发 Jenkins 自动构建

一、插件下载和配置 Manage Jenkins>Plugin Manager 搜索 gitee 进行安装 插件配置 1、前往Jenkins -> Manage Jenkins -> System -> Gitee Configuration -> Gitee connections 2、在 Connection name 中输入 Gitee 或者你想要的名字 3、Gitee host URL 中…

springboot yml文件数据源出现警告/报黄/数据库配置警告问题

1、看一下数据源的依赖是不是都引入完整了 2、看一下数据源是否有拼写错误 上图就是数据源拼写错误

局部路径规划——frenet坐标系

零、参考资料 轨迹规划1:Frenet坐标转化公式推导_笛卡尔坐标系转化为frenet坐标系-CSDN博客曲率、切向量、法向量 一、概念 二、深度理解 2-1 参数曲线的向量值函数和弧长函数 a. r(t)参数曲线的向量值函数:表示空间曲线在 x、y、z 方向上的分量随时…

Spring Validation数据校检

文章目录 Spring Validation1 关于Spring Validation2 使用流程3 快速入门4 运行异常处理4.1 说明4.2 处理异常4.3 明确提示消息 5 常用注解5.1 NotNull注解5.2 NotEmpty 注解5.3 NotBlank 注解5.4 Size 注解5.5 Range 注解 6 非POJO参数校验6.1 使用流程6.2 使用示例 Spring V…

python和C数据互转

C -> Python 从C返回的地址获得一个int value ctypes.c_int.from_address(addr)得到一个c_int。 再调用c_int.value属性得到python int。 从C返回的地址获得一个struct 比如下面的结构: class DynamicListType(ctypes.Structure):_fields_ [("count&q…

数据集成技术:聚水潭与金蝶云星空的成功对接

聚水潭数据集成到金蝶云星空的技术案例分享 在企业信息化管理中,数据的高效流动和准确对接是确保业务顺畅运行的关键。本文将聚焦于一个具体的系统对接集成案例:如何通过轻易云数据集成平台,将聚水潭的采购入库数据无缝集成到金蝶云星空&…

Linux网络命令:它用于实时监控网络接口的状态变化的命令 ip monitor详解

目录 一、概述 二、使用 1、语法 2、对象类型 3、常用选项 4、获取帮助 三、 示例 1. 监视链路层变化 2. 监视所有的网络变化 3. 仅监视路由表的变化 4. 监视特定网络接口的状态变化: 5. 监视网络接口地址的变化 四、实际应用 五、其他事项 一、概述 …

仿微信项目-2-Socket模拟聊天室

利用 Socket 模拟一个服务器来统一接收和发送消息 再用 Socket 模拟若干的客户端 服务端代码: package com.wfChat.test;import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.util.HashMap; import java.util.Map;public clas…

Hive学习笔记

1 Hive基本概念 1.1 Hive定义 Hive:由 Facebook 开源用于解决海量结构化日志的数据统计工具。 Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并 提供类 SQL 查询功能。 利用MapReduce去查询数据文件中的某些内…

ESRALLY安装与使用

ESRALLY安装与使用 geonames、geopoint:都是和地理位置相关的,如果需要测试ES在地理位置处理的性能可以选用 http_logs:是http_server的,如果要测服务器日志、redis日志、apache日志可以选用 说明:esrally 自带的测试数据即为 rally_track 文件夹中的内容,主要包括: Ge…

默认路由:实现内网所有网段流量走一条默认路由访问外网

默认路由 Tip&#xff1a;默认路由一般指出口网关设备的出口路由。实现所有网段流量都走一条路由。 实验模拟&#xff1a;公司内部pc 通过出口网关 访问运营商内部 baidu服务 isp网关配置&#xff1a; <Huawei>sy Enter system view, return user view with CtrlZ. …

算法工程师重生之第四十四天(岛屿数量 深搜 广搜 岛屿的最大面积)

参考文献 代码随想录 一、岛屿数量 题目描述 给定一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的矩阵&#xff0c;你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成&#xff0c;并且四周都是水域。你可以假设矩阵外均被水包…

搭建你的私人云盘:使用File Browser与cpolar实现公网传输文件

文章目录 前言1.下载安装File Browser2.启动访问File Browser3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 File Browser是一个开源的文件管理器和文件共享工具&#xff0c;它可以帮助用户轻…