00. 目录
01. 命令概述
du - 报告磁盘空间使用情况
du命令**的英文全称是“Disk Usage”,即用于查看磁盘占用空间的意思。但是与df命令不同的是du命令是对文件和目录磁盘使用的空间的查看,而不是某个分区。
02. 命令格式
用法:du [选项]... [文件]...
或:du [选项]... --files0-from=F
- 1
- 2
03. 常用选项
POSIX 选项
-a 显示对涉及到的所有文件的统计,而不只是包含子目录。
-k 用1024字节作为计数单位,替代缺省时512字节的计数单位。
-x 只输出指定参数的实际使用空间,而不包括其下的子目录。
-s 只统计指定参数的在同一设备上所使用的空间。
GNU 选项
-a, --all
显示对所有文件的统计,而不只是包含子目录。
-b, --bytes
输出以字节为单位的大小,替代缺省时1024字节的计数单位。
--block-size=size
输出以块为单位的大小,块的大小为 size 字节。( file- utils-4.0
的新选项)
-c, --total
在处理完所有参数后给出所有这些参数的总计。这个选项被
用给出指定的一组文件或目录使用的空间的总和。
-D, --dereference-args
引用命令行参数的符号连接。但不影响其他的符号连接。 这对找出象
/usr/tmp 这样的目录的磁盘使用量有用, /usr/tmp
等通常是符号连接。 译住:例如在 /var/tmp 下建立一个目录test,
而/usr/tmp 是指向 /var/tmp 的符号连接。du /usr/tmp 返回一项
/usr/tmp , 而 du - D /usr/tmp 返回两项 /usr/tmp,/usr/tmp/test。
--exclude=pattern
在递归时,忽略与指定模式相匹配的文件或子目录。模式 可以是任何
Bourne shell 的文件 glob 模式。( file- utils-4.0 的新选项)
-h, --human-readable
为每个数附加一个表示大小单位的字母,象用M表示二进制 的兆字节。
-H, --si
与 -h 参数起同样的作用,只是使用法定的 SI 单位( 用
1000的幂而不是 1024 的幂,这样 M 代表的就是1000000 而不是
1048576)。(fileutils-4.0 的新选项)
-k, --kilobytes
输出以1024字节为计数单位的大小。
-l, --count-links
统计所有文件的大小,包括已经被统计过的(作为一个硬连接)。
-L, --dereference
引用符号连接(不是显示连接点本身而是连接指向的文件或
目录所使用的磁盘空间)。
-m, --megabytes
输出以兆字节的块为计数单位的大小(就是 1,048,576 字节)。
--max-depth=n
只输出命令行参数的小于等于第n层的目录的总计。--max-depth=0的作用同于-s选项。(fileutils-4.0的新选项)
-s, --summarize
对每个参数只显示总和。
-S, --separate-dirs
单独报告每一个目录的大小,不包括子目录的大小。
-x, --one-file-system
忽略与被处理的参数不在同一个文件系统的目录。
-X file, --exclude-from=file
除了从指定的文件中得到模式之外与 --exclude 一样。
模式以行的形式列出。如果指定的文件是'-',那么从标准输
入中读出模式。(fileutils-4.0 的新选项) GNU 标准选项
--help 在标准输出上输出帮助信息后正常退出。
--version
在标准输出上输出版本信息后正常退出。
-- 终结选项列表
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
04. 参考示例
4.1 显示当前目录所使用的磁盘空间
[deng@redhat test]$ du
4 .
[deng@redhat test]$
- 1
- 2
- 3
**说明:**只显示当前目录下面的子目录的目录大小和当前目录的总的大小,最下面的1288为当前目录的总大小
4.2 显示指定文件所占空间
[deng@redhat ~]$ du oracle_client_11gR2.tar.gz
56280 oracle_client_11gR2.tar.gz
[deng@redhat ~]$
- 1
- 2
- 3
4.3 查看指定目录的所占空间
[deng@redhat ~]$ du -sh bak
4.3M bak
[deng@redhat ~]$
- 1
- 2
- 3
4.4 显示多个文件所占空间
[deng@redhat ~]$ du scott_data.sql oracle_client_11gR2.tar.gz
4 scott_data.sql
56280 oracle_client_11gR2.tar.gz
[deng@redhat ~]$
- 1
- 2
- 3
- 4
4.5 只显示总和的大小
[deng@redhat ~]$ du -s bj34
5976 bj34
[deng@redhat ~]$ du -s bak
4348 bak
[deng@redhat ~]$
- 1
- 2
- 3
- 4
- 5
4.6 方便阅读的格式显示
[deng@redhat ~]$ du -h oracle_client_11gR2.tar.gz
55M oracle_client_11gR2.tar.gz
[deng@redhat ~]$
- 1
- 2
- 3
4.7 文件和目录都显示
[deng@redhat ~]$ du -ah bak
12K bak/5th/1client/poolsocket.c
4.0K bak/5th/1client/socketlog.c
4.0K bak/5th/1client/socketlog.h
20K bak/5th/1client/socketutil.c
4.0K bak/5th/1client/socketutil.h
4.0K bak/5th/1client/Makefile
4.0K bak/5th/1client/client.c
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
4.8 显示几个文件或目录各自占用磁盘空间的大小,还统计它们的总和
[deng@redhat ~]$ du -c test
4 test
4 总用量
[deng@redhat ~]$
- 1
- 2
- 3
- 4
说明:加上-c选项后,du不仅显示两个目录各自占用磁盘空间的大小,还在最后一行统计它们的总和。
4.9 按照空间大小排序
[deng@redhat ~]$ du bak/ | sort -nr
- 1
4.10 输出当前目录下各个子目录所使用的空间
[deng@redhat ~]$ du -h bak --max-depth=1
204K bak/5th
284K bak/6th
1.0M bak/7th
1.4M bak/8th
1.4M bak/9th
4.3M bak
[deng@redhat ~]$
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
4.11 显示最后的修改时间
[deng@redhat ~]$ du --time test.c
4 2019-07-30 10:04 test.c
[deng@redhat ~]$
- 1
- 2
- 3
4.12 显示最后访问时间
[deng@redhat ~]$ du --time=use test.c
4 2019-07-30 10:04 test.c
[deng@redhat ~]$
- 1
- 2
- 3
4.13 显示最后状态修改时间
[deng@redhat ~]$ du --time=status test.c
4 2019-07-30 10:04 test.c
[deng@redhat ~]$
- 1
- 2
- 3
4.14 以Mb为单位显示
[deng@redhat ~]$ du -m oracle_client_11gR2.tar.gz
55 oracle_client_11gR2.tar.gz
- 1
- 2
注意:不足1M的按照1M处理。
05. 附录
简介
OpenHarmony 轻量级内核是基于IoT领域轻量级物联网操作系统Huawei LiteOS内核演进发展的新一代内核,包含LiteOS-M和LiteOS-A两类内核。LiteOS-M内核主要应用于轻量系统,面向的MCU(Microprocessor Unit)一般是百K级内存,可支持MPU(Memory Protection Unit)隔离,业界类似的内核有FreeRTOS或ThreadX等;LiteOS-A内核主要应用于小型系统,面向设备一般是M级内存,可支持MMU(Memory Management Unit)隔离,业界类似的内核有Zircon或Darwin等。
说明: OpenHarmony针对不同量级的系统,分别使用了不同形态的内核,小型系统支持LiteOS和Linux,本开发指南适用于LiteOS-A内核,linux内核的相关操作请参考Linux内核概述。
为适应IoT产业的高速发展,OpenHarmony 轻量级内核不断优化和扩展,能够带给应用开发者友好的开发体验和统一开放的生态系统能力。轻量级内核LiteOS-A重要的新特性如下:
-
新增了丰富的内核机制 新增虚拟内存、系统调用、多核、轻量级IPC(Inter-Process Communication,进程间通信)、DAC(Discretionary Access Control,自主访问控制)等机制,丰富了内核能力;为了更好的兼容软件和开发者体验,新增支持多进程,使得应用之间内存隔离、相互不影响,提升系统的健壮性。
-
引入统一驱动框架HDF(Hardware Driver Foundation) 引入统一驱动框架HDF,统一驱动标准,为设备厂商提供了更统一的接入方式,使驱动更加容易移植,力求做到一次开发,多系统部署。
-
支持1200+标准POSIX接口 更加全面的支持POSIX标准接口,使得应用软件易于开发和移植,给应用开发者提供了更友好的开发体验。
-
内核和硬件高解耦 轻量级内核与硬件高度解耦,新增单板,内核代码不用修改。
内核架构
轻量级内核主要由基础内核、扩展组件、HDF框架、POSIX接口组成。轻量级内核的文件系统、网络协议等扩展功能(没有像微内核那样运行在用户态)运行在内核地址空间,主要考虑组件之间直接函数调用比进程间通信或远程过程调用要快得多。
图1 OpenHarmony LiteOS-A内核架构图
- 基础内核主要包括内核的基础机制,如调度、内存管理、中断异常等
- 扩展组件主要包括文件系统、网络协议和安全等扩展功能
- HDF框架是外设驱动统一标准框架
- POSIX接口是为兼容POSIX标准的应用方便移植到OpenHarmony
基础内核
基础内核组件实现精简,主要包括内核的基础机制,如调度、内存管理、中断异常、内核通信等;
- 进程管理:支持进程和线程,基于Task实现进程,进程独立4GiB地址空间
- 多核调度:支持任务和中断亲核性设置,支持绑核运行
- 实时调度:支持高优先级抢占,同优先级时间片轮转
- 虚拟内存:内核空间静态映射到0-1GiB地址,用户空间映射到1-4GiB地址
- 内核通信:事件、信号量、互斥锁、队列
- 时间管理:软件定时器、系统时钟
文件系统
轻量级内核支持FAT,JFFS2,NFS,ramfs,procfs等众多文件系统,并对外提供完整的POSIX标准的操作接口;内部使用VFS层作为统一的适配层框架,方便移植新的文件系统,各个文件系统也能自动利用VFS层提供的丰富的功能。
主要特性有:
- 完整的POSIX接口支持
- 文件级缓存(pagecache)
- 磁盘级缓存(bcache)
- 目录缓存(pathcache)
- DAC能力
- 支持嵌套挂载及文件系统堆叠等
- 支持特性的裁剪和资源占用的灵活配置。
网络协议
轻量级内核网络协议基于开源lwIP(lightweight IP)构建,对lwIP的RAM占用进行优化,同时提高lwIP的传输性能。
- 协议: IP、IPv6、 ICMP、 ND、MLD、 UDP、 TCP、IGMP、ARP、PPPoS、PPPoE
- API:socket API
- 扩展特性:多网络接口IP转发、TCP拥塞控制、RTT估计和快速恢复/快速重传
- 应用程序:HTTP(S)服务、SNTP客户端、SMTP(S)客户端、ping工具、NetBIOS名称服务、mDNS响应程序、MQTT客户端、TFTP服务、DHCP客户端、DNS客户端、AutoIP/APIPA(零配置)、SNMP代理
HDF框架
轻量级内核集成HDF框架,HDF框架旨在为开发者提供更精准、更高效的开发环境,力求做到一次开发,多系统部署。
- 支持多内核平台
- 支持用户态驱动
- 可配置组件化驱动模型
- 基于消息的驱动接口模型
- 基于对象的驱动、设备管理
- HDI(Hardware Device Interface)统一硬件接口
- 支持电源管理、PnP
扩展组件
对内核功能进行扩展,可选但很重要的机制。
- 动态链接:支持标准ELF链接执行、加载地址随机化
- 进程通信:支持轻量级LiteIPC,同时也支持标准的Mqueue、Pipe、Fifo、Signal等机制
- 系统调用:支持170+系统调用,同时有支持VDSO机制
- 权限管理:支持进程粒度的特权划分和管控,UGO三种权限配置
目录
/kernel/liteos_a
├── apps # 用户态的init和shell应用程序
├── arch # 体系架构的目录,如arm等
│ └── arm # arm架构代码
├── bsd # freebsd相关的驱动和适配层模块代码引入,例如USB等
├── compat # 内核接口兼容性目录
│ └── posix # posix相关接口
├── drivers # 内核驱动
│ └── char # 字符设备
│ ├── mem # 访问物理IO设备驱动
│ ├── quickstart # 系统快速启动接口目录
│ ├── random # 随机数设备驱动
│ └── video # framebuffer驱动框架
├── figures # 内核架构图
├── fs # 文件系统模块,主要来源于NuttX开源项目
│ ├── fat # fat文件系统
│ ├── jffs2 # jffs2文件系统
│ ├── include # 对外暴露头文件存放目录
│ ├── nfs # nfs文件系统
│ ├── proc # proc文件系统
│ ├── ramfs # ramfs文件系统
│ └── vfs # vfs层
├── kernel # 进程、内存、IPC等模块
│ ├── base # 基础内核,包括调度、内存等模块
│ ├── common # 内核通用组件
│ ├── extended # 扩展内核,包括动态加载、vdso、liteipc等模块
│ ├── include # 对外暴露头文件存放目录
│ └── user # 加载init进程
├── lib # 内核的lib库
├── net # 网络模块,主要来源于lwip开源项目
├── platform # 支持不同的芯片平台代码,如Hi3516DV300等
│ ├── hw # 时钟与中断相关逻辑代码
│ ├── include # 对外暴露头文件存放目录
│ └── uart # 串口相关逻辑代码
├── security # 安全特性相关的代码,包括进程权限管理和虚拟id映射管理
├── shell # 接收用户输入的命令,内核去执行
├── syscall # 系统调用
├── testsuilts # 测试套件
└── tools # 构建工具及相关配置和代码
text
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
评论记录:
回复评论: