文章目录

  • 1.命令简介
  • 2.命令格式
  • 3.选项说明
  • 4.常用示例
  • 5.注意事项
  • 6.小结
  • 参考文献

1.命令简介

du(disk usage)用于查看指定的目录或文件所占用的磁盘空间。

2.命令格式

du [OPTIONS] [FILES]
du [OPTIONS] --files0-from=F

3.选项说明

-a, --all递归显示目录与其包含的所有文件及子目录的大小,默认仅显示目录及其子目录的大小。
--apparent-size显示文件或目录自身大小,而不是它们占用的磁盘空间大小。文件或目录占用磁盘空间的大小与它们自身大小有时候并非完全一致,有可能比较大,原因可能是稀疏文件中存在空洞,内部碎片,间接blocks等。大小等同与使用命令"wc -c"或"ls --blokc-size=1"查看的字节大小。
-B, --block-size=SIZE定文件大小的统计单位,SIZE 可取如下字符串: KB(1000)、K(1024)、MB(1000*1000)、M(1024*1024)以及G, T, P, E, Z, Y等
-b, -bytes显示目录或文件大小时,以byte为单位,等同于选项 --apparent-size --block-size=1。
-c, --total显示占用磁盘空间大小的总和。
-D, --dereference-args显示指定符号连接的源文件大小。
--files0-from=F列出在文件F中指出的文件名称,如果F等于连字符-,则从标准输入读取文件名称。
-H等同于 -D, --dereference-args。
-h, --human-readable以易读的单位显示大小,例如以 K,M,G 等为单位进行显示。
--si等同于 -h,但是 K,M,G 等以 1000 而非 2014 为换算单位。
-k以 K 为单位显示,等同于--block-size=1K。
-l, --count-links多次计算硬链接文件。
-m以 M 为单位显示,等同于--block-size=1M。
-L, --dereference显示符号链接的源文件大小。
-P, --no-dereference默认选项,不显示符号链接源文件大小。
-0, --null以 NULL 字符取代输出的换行符。
-S, --separate-dirs不显示子目录大小(不太明白,为何使用时仍然显示子目录大小)。
-s, --summarize只显示给定的文件或目录的总大小。
-x, --one-file-system以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
-X, --exclude-from=FILE跳过符合指定的文件。
--exclude=PATTERN跳过符合指定模式的文件或目录。
--max-depth=N指定递归显示的最大目录深度,--max-depth=0 等同于 --summarize。
--time显示文件或目录最后修改时间。
--time=WORD显示指定类型的时间,而非默认的最后修改时间。WORD 可取值为 atime、access、use(访问时间),或者ctime、status(状态改变时间)。
--time-style=STYLE使用指定的时间格式显示时间,STYLE 可取值为 full-iso, long-iso, iso, +FORMAT,其中 FORMAT 解析方式等同于 date 命令。
--help显示帮助信息。
--version显示版本信息。

4.常用示例

(1)显示指定文件或目录占用磁盘空间大小。

du -sh [file or directory]

(2)显示指定目录及其所有子目录的大小。

du -h [directory]

5.注意事项

(1)文件大小与占用磁盘空间大小的区别。

文件大小(又名 apparent size)是文件自身实际大小,与占用磁盘空间大小(又名 occupied space size)有本质的区别。举个例子,创建一个 1 字节的文件,使用 du 命令显示的为 4KB,使用 ls 命令显示为 1 字节。

$ echo -n 1 > 1B.txt
$ ls -l 1B.txt
-rw-rw-r-- 1 dablelv dablelv 1 Apr  4 19:14 1B.txt$ du -h 1B.txt
4.0K    1B.txt

我们先创建一个文件1B.txt,大小是一个字节,ls显示出的size就是1Byte,而1B.txt这个文件在硬盘上会占用1个block,因为Linux文件系统存储最小单位为block,不足1个block大小的文件也要占用1个block大小。这里的一个block等于4K。

(2)稀疏文件(sparse file)。

稀疏文件就是在文件中留有很多空余空间,称为空洞(hole),留备将来插入数据使用,这些空洞被填充为NULL字符,特点是文件系统并不会为空余空间分配磁盘空间。

使用如下代码创建稀疏文件:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>int main(int argc, char *argv[]) {int fd = open("sparse.file", O_RDWR|O_CREAT);lseek(fd, 10240, SEEK_CUR);write(fd, "\0", 1);return 0;
}

编译生成后执行,创建稀疏文件sparse.file,偏移10240字节后写入一个空字符,使得文件sparse.file内容全为空字符。使用ls命令查看文件大小为10241B,这是文件的大小。使用du命令查看文件占用磁盘空间大小时,发现稀疏文件空洞部分并不占用磁盘空间,被文件系统压缩存储。

$ ll sparse.file
-rw---x--- 1 dablelv dablelv 10241 Apr  4 20:16 sparse.file
[dablelv@TENCENT64 ~]$ du -h sparse.file
4.0K    sparse.file

6.小结

文件大小与实际占用磁盘空间大小是两个不同的概念,所以使用 du 和 ls 命令来查看同一个文件得到的大小是不一样的,查看文件大小时需要注意区分。

注意,稀疏文件是指存在空洞的文件,其空洞部分是不占用磁盘空间的,但是使用 ls 查看其大小时,包含空洞部分。


参考文献

du(1) - Linux manual page - man7.org
为什么用ls和du显示出来的文件大小有差别?

du command相关推荐

  1. android shell du,Linux du 命令 command not found du 命令详解 du 命令未找到 du 命令安装 - CommandNotFound ⚡️ 坑否...

    显示行号 | 选择喜欢的代码风格 默认 GitHub Dune LakeSide Plateau Vibrant Blue Eighties Tranquil du 命令显示每个文件和目录的磁盘使用空 ...

  2. linux ls in*,35 ls Command Examples in Linux (The Complete Guide)

    Do you know how to list contents (files/directories) in Linux? It's straightforward. In this article ...

  3. 【转载】10个有用的du命令行

    10 Useful du (Disk Usage) Commands to Find Disk Usage of Files and Directories The Linux "du&qu ...

  4. 如何开始使用PostgreSQL

    by Akul Tomar 通过Akul Tomar 如何开始使用PostgreSQL (How to get started with PostgreSQL) PostgreSQL is an op ...

  5. 在Linux上按大小列出文件和目录

    This page will show us how to create a list of files and folders ordered by size using standard Linu ...

  6. Linux的ext4文件系统学习笔记

    补充:设备独立性 Linux中,设备驱动以文件形式表示,用户操作逻辑设备就是操作文件,而不是具体的物理设备,也就是说,用户操作的是功能,是黑箱,而不是真正的实体. APP操作的都是逻辑设备,而逻辑设备 ...

  7. linux扩展磁盘空间命令_在Linux上监视磁盘空间– SQL Server DBA的有用命令

    linux扩展磁盘空间命令 In this article, we will explore the different Linux commands related to the disk spac ...

  8. 第二十一章 : 文本处理

    文本处理 All Unix-like operating systems rely heavily on text files for several types of datastorage. So ...

  9. 60 Linux 常用 命令

    特别提示:本文出自 http://www.tecmint.com/60-commands-of-linux-a-guide-from-newbies-to-system-administrator/ ...

最新文章

  1. 批量修改数据映射_Docker 数据卷操作「Docker 系列-6」
  2. 我什么都没做,文章就自动变成了视频?AI神器解放视频编辑丨百度研究院出品...
  3. python花萼长度表_Python 数据分析答疑 5:Pandas入门
  4. [JZOJ6075]【GDOI2019模拟2019.3.20】桥【DP】【线段树】
  5. SASS简介及使用方法
  6. wins系统flask绑定mysql_flask如何连接mssql,网上大多是sqlite和mysql教程?
  7. Flink的Table API 与SQL的流处理
  8. 如何写dblink?
  9. 召唤AI大神与病毒作战!Kaggle发起CORD-19数据集文本挖掘竞赛
  10. 数据结构课程设计:顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现...
  11. C语言中怎么自动生成时间,在C语言中转换时间的基本方法介绍
  12. mysql 数据库军规_用尽洪荒之力整理的Mysql数据库32条军规(转)
  13. 【超级综述】BERT、GPT-3们有了新名字:Percy Liang、李飞飞等发布200多页综述,阐述大模型机遇与风险...
  14. android 图片上传图片 报Socket: Broken pipe
  15. c语言库函数大全文库,C语言库函数源代码
  16. 计算机软硬件逻辑等价性是指,南航计算机组成原理复习ppt.ppt
  17. 工业相机软件参数介绍
  18. task manager memory meaning
  19. 打造员工能力(组织能力杨三角系列三)
  20. https证书可以保护二级域名吗

热门文章

  1. bzoj 3155 Preprefix sum
  2. The device ‘/dev/sdd1‘ doesn‘t seem to have a valid NTFS
  3. 【方法】pyautogui入门学习(python自动脚本)
  4. 5.1HotSpot VM 介绍
  5. 图形识别-基于opencv+java简单程序
  6. java万年日历_Java日历查询程序(万年历)
  7. 社群营销的三个商业阶段
  8. JS实现淘宝商品图片放大效果(放大镜)
  9. 还在一个个写规则?来了解下爬虫的智能化解析吧!
  10. ios教程开发 合集~ 从此不上ios培训班