目录
(2)使用 --files0-from=F 选项,进行磁盘分析
一、命令du介绍
`du` 是 Linux 系统中用于估算和显示文件和目录在磁盘上使用的空间的命令。这个命令的名字来源于 "disk usage" 的缩写。
二、 基本语法
du [选项]... [文件或目录]...
或者 du [选项]... --files0-from=F
在linux系统中输入
du --help
出现如下du的语法结构,如下图所示:
三、常用选项
du命令包括如下常用选项:
* `-a` 或 `--all`:显示目录中个别文件的大小。
* `-b` 或 `--bytes`:显示目录或文件大小时,以 byte 为单位。
* `-c` 或 `--total`:除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。
* `-k` 或 `--kilobytes`:以 KB(1024bytes)为单位输出。
* `-m` 或 `--megabytes`:以 MB 为单位输出。
* `-s` 或 `--summarize`:仅显示总计,只列出最后加总的值。
* `-h` 或 `--human-readable`:以 K,M,G 为单位,提高信息的可读性。
* `--max-depth=N`:显示目录的深度最大为 N。
四、命令示例
1. 显示当前目录及其子目录的总磁盘使用情况
du -sh
这里的 `-s` 表示汇总输出,`-h` 表示以人类可读的格式(如 K、M、G)显示。
[root@ecs-52a1 mysql]#
[root@ecs-52a1 mysql]# du -sh
5.6G .
[root@ecs-52a1 mysql]#
2. 显示目录的详细磁盘使用情况
du -ah
这会列出当前目录下所有文件和子目录的磁盘使用情况。
实际操作如下:
[root@ecs-52a1 mysql]# cd lib/
[root@ecs-52a1 lib]# du -ah
4.0K ./mecab/etc/mecabrc
8.0K ./mecab/etc
3.4M ./mecab/dic/ipadic_euc-jp/matrix.bin
260K ./mecab/dic/ipadic_euc-jp/char.bin
8.0K ./mecab/dic/ipadic_euc-jp/unk.dic
56K ./mecab/dic/ipadic_euc-jp/right-id.def
8.0K ./mecab/dic/ipadic_euc-jp/rewrite.def
4.0K ./mecab/dic/ipadic_euc-jp/pos-id.def
4.0K ./mecab/dic/ipadic_euc-jp/dicrc
37M ./mecab/dic/ipadic_euc-jp/sys.dic
56K ./mecab/dic/ipadic_euc-jp/left-id.def
40M ./mecab/dic/ipadic_euc-jp
3.4M ./mecab/dic/ipadic_utf-8/matrix.bin
260K ./mecab/dic/ipadic_utf-8/char.bin
8.0K ./mecab/dic/ipadic_utf-8/unk.dic
56K ./mecab/dic/ipadic_utf-8/right-id.def
8.0K ./mecab/dic/ipadic_utf-8/rewrite.def
4.0K ./mecab/dic/ipadic_utf-8/pos-id.def
4.0K ./mecab/dic/ipadic_utf-8/dicrc
47M ./mecab/dic/ipadic_utf-8/sys.dic
56K ./mecab/dic/ipadic_utf-8/left-id.def
51M ./mecab/dic/ipadic_utf-8
3.4M ./mecab/dic/ipadic_sjis/matrix.bin
260K ./mecab/dic/ipadic_sjis/char.bin
8.0K ./mecab/dic/ipadic_sjis/unk.dic
56K ./mecab/dic/ipadic_sjis/right-id.def
8.0K ./mecab/dic/ipadic_sjis/rewrite.def
4.0K ./mecab/dic/ipadic_sjis/pos-id.def
4.0K ./mecab/dic/ipadic_sjis/dicrc
36M ./mecab/dic/ipadic_sjis/sys.dic
56K ./mecab/dic/ipadic_sjis/left-id.def
40M ./mecab/dic/ipadic_sjis
130M ./mecab/dic
130M ./mecab
384M ./libmysqld-debug.a
9.0M ./libmysqlclient.so.20.3.12
44K ./libmysqlservices.a
557M ./libmysqld.a
20M ./libmysqlclient.a
0 ./libmysqlclient.so
0 ./libmysqlclient.so.20
4.0K ./pkgconfig/mysqlclient.pc
8.0K ./pkgconfig
340K ./plugin/ha_example.so
52K ./plugin/mypluglib.so
900K ./plugin/keyring_file.so
48K ./plugin/test_security_context.so
604K ./plugin/libmemcached.so
152K ./plugin/semisync_slave.so
40K ./plugin/mysql_no_login.so
100K ./plugin/libtest_sql_2_sessions.so
48K ./plugin/rewrite_example.so
44K ./plugin/test_udf_services.so
288K ./plugin/keyring_udf.so
360K ./plugin/authentication_ldap_sasl_client.so
124K ./plugin/libtest_sql_replication.so
696K ./plugin/semisync_master.so
104K ./plugin/libtest_sql_errors.so
104K ./plugin/libtest_sql_all_col_types.so
52K ./plugin/libtest_services.so
100K ./plugin/libtest_sql_lock.so
128K ./plugin/libtest_sql_stored_procedures_functions.so
16M ./plugin/group_replication.so
22M ./plugin/mysqlx.so
348K ./plugin/version_token.so
7.6M ./plugin/libpluginmecab.so
96K ./plugin/libtest_sql_shutdown.so
104K ./plugin/libtest_sql_commit.so
656K ./plugin/connection_control.so
92K ./plugin/libtest_sql_processlist.so
60K ./plugin/libtest_services_threaded.so
128K ./plugin/libtest_sql_views_triggers.so
608K ./plugin/rewriter.so
48K ./plugin/libtest_framework.so
76K ./plugin/libtest_x_sessions_init.so
200K ./plugin/validate_password.so
40K ./plugin/auth_socket.so
60K ./plugin/libtest_session_in_thd.so
356K ./plugin/debug/ha_example.so
48K ./plugin/debug/mypluglib.so
804K ./plugin/debug/keyring_file.so
68K ./plugin/debug/test_security_context.so
460K ./plugin/debug/libmemcached.so
196K ./plugin/debug/semisync_slave.so
40K ./plugin/debug/mysql_no_login.so
116K ./plugin/debug/libtest_sql_2_sessions.so
68K ./plugin/debug/rewrite_example.so
64K ./plugin/debug/test_udf_services.so
296K ./plugin/debug/keyring_udf.so
124K ./plugin/debug/authentication_ldap_sasl_client.so
120K ./plugin/debug/libtest_sql_replication.so
816K ./plugin/debug/semisync_master.so
120K ./plugin/debug/libtest_sql_errors.so
120K ./plugin/debug/libtest_sql_all_col_types.so
72K ./plugin/debug/libtest_services.so
120K ./plugin/debug/libtest_sql_lock.so
124K ./plugin/debug/libtest_sql_stored_procedures_functions.so
13M ./plugin/debug/group_replication.so
17M ./plugin/debug/mysqlx.so
308K ./plugin/debug/version_token.so
7.6M ./plugin/debug/libpluginmecab.so
112K ./plugin/debug/libtest_sql_shutdown.so
120K ./plugin/debug/libtest_sql_commit.so
744K ./plugin/debug/connection_control.so
112K ./plugin/debug/libtest_sql_processlist.so
76K ./plugin/debug/libtest_services_threaded.so
124K ./plugin/debug/libtest_sql_views_triggers.so
448K ./plugin/debug/rewriter.so
68K ./plugin/debug/libtest_framework.so
92K ./plugin/debug/libtest_x_sessions_init.so
180K ./plugin/debug/validate_password.so
40K ./plugin/debug/auth_socket.so
76K ./plugin/debug/libtest_session_in_thd.so
76K ./plugin/debug/libtest_x_sessions_deinit.so
124K ./plugin/debug/libtest_sql_cmds_1.so
128K ./plugin/debug/libtest_sql_sqlmode.so
572K ./plugin/debug/innodb_engine.so
108K ./plugin/debug/libtest_session_detach.so
128K ./plugin/debug/libtest_session_info.so
40K ./plugin/debug/locking_service.so
128K ./plugin/debug/libtest_sql_complex.so
84K ./plugin/debug/adt_null.so
45M ./plugin/debug
60K ./plugin/libtest_x_sessions_deinit.so
180K ./plugin/libtest_sql_cmds_1.so
128K ./plugin/libtest_sql_sqlmode.so
652K ./plugin/innodb_engine.so
88K ./plugin/libtest_session_detach.so
112K ./plugin/libtest_session_info.so
20K ./plugin/locking_service.so
132K ./plugin/libtest_sql_complex.so
96K ./plugin/adt_null.so
98M ./plugin
1.2G .
[root@ecs-52a1 lib]#
3. 显示目录的深度为 1 的磁盘使用情况
du --max-depth=1 -ab ./share/
这会显示指定目录的直接子目录和文件的磁盘使用情况,但不会递归地进入更深层的子目录。
实际操作如下所示:
[root@ecs-52a1 mysql]#
[root@ecs-52a1 mysql]# du --max-depth=1 -ab ./share/
182299 ./share/charsets
811 ./share/mysql_system_tables_data.sql
945542 ./share/fill_help_tables.sql
82642 ./share/norwegian-ny
89965 ./share/japanese
83237 ./share/polish
83278 ./share/danish
84173 ./share/spanish
82771 ./share/bulgarian
1812 ./share/install_rewriter.sql
83160 ./share/hungarian
82518 ./share/english
92431 ./share/ukrainian
82783 ./share/estonian
3999 ./share/innodb_memcached_config.sql
83372 ./share/swedish
85481 ./share/portuguese
89310 ./share/greek
8317 ./share/aclocal
84289 ./share/italian
529032 ./share/errmsg-utf8.txt
84231 ./share/romanian
834 ./share/uninstall_rewriter.sql
287110 ./share/mysql_sys_schema.sql
90240 ./share/german
97856 ./share/russian
154626 ./share/mysql_system_tables.sql
84298 ./share/dutch
25575 ./share/dictionary.txt
1760 ./share/mysql_security_commands.sql
85559 ./share/korean
83045 ./share/slovak
83278 ./share/czech
10410 ./share/mysql_test_data_timezone.sql
82589 ./share/norwegian
84900 ./share/serbian
83926 ./share/french
4205555 ./share/
[root@ecs-52a1 mysql]#
4.对文件列表中列出的文件进行磁盘使用情况分析
(1)生成文件名列表
可以使用 find 命令结合 xargs 或 printf, 来生成一个包含文件名列表的文件,文件名之间用 NUL 字符分隔。例如,从列出 /usr/local/mysql/bin 下所有的文件,并将这些文件名写入一个名为 du-filelist.txt 的文件中:
find /usr/local/mysql/bin/ -type f -print0 > /home/du-filelist.txt
这里 -print0
选项告诉 find
命令使用 NUL 字符作为文件名之间的分隔符。
实际操作如下所示:
[root@ecs-52a1 mysql]#
[root@ecs-52a1 mysql]#
[root@ecs-52a1 mysql]# find /usr/local/mysql/bin/ -type f -print0 > /home/du-filelist.txt
[root@ecs-52a1 mysql]#
[root@ecs-52a1 mysql]#
[root@ecs-52a1 mysql]# ll /home/du-filelist.txt
-rw-r--r-- 1 root root 1315 Mar 24 09:17 /home/du-filelist.txt
[root@ecs-52a1 mysql]#
[root@ecs-52a1 mysql]#
[root@ecs-52a1 mysql]# date
Sun Mar 24 09:17:45 CST 2024
[root@ecs-52a1 mysql]#
(2)使用 --files0-from=F
选项,进行磁盘分析
使用 du
命令的 --files0-from=F
选项来读取这个文件,并计算这些文件的磁盘使用情况:
du --files0-from=/home/du-filelist.txt -ch
实际操作如下所示:
[root@ecs-52a1 mysql]#
[root@ecs-52a1 mysql]# du --files0-from=/home/du-filelist.txt -ch
9.9M /usr/local/mysql/bin/mysql_install_db
12M /usr/local/mysql/bin/mysql_upgrade
197M /usr/local/mysql/bin/mysqld-debug
5.3M /usr/local/mysql/bin/resolveip
209M /usr/local/mysql/bin/mysqltest_embedded
8.4M /usr/local/mysql/bin/innochecksum
11M /usr/local/mysql/bin/mysqlbinlog
28K /usr/local/mysql/bin/mysqld_multi
7.9M /usr/local/mysql/bin/mysql_config_editor
5.7M /usr/local/mysql/bin/mysql_ssl_rsa_setup
209M /usr/local/mysql/bin/mysql_embedded
5.4M /usr/local/mysql/bin/mysql_plugin
5.1M /usr/local/mysql/bin/replace
9.0M /usr/local/mysql/bin/mysqlimport
7.5M /usr/local/mysql/bin/myisampack
8.0K /usr/local/mysql/bin/mysql_config
5.5M /usr/local/mysql/bin/perror
5.4M /usr/local/mysql/bin/resolve_stack_dump
232K /usr/local/mysql/bin/lz4_decompress
4.9M /usr/local/mysql/bin/mysql_tzinfo_to_sql
9.3M /usr/local/mysql/bin/mysqlcheck
210M /usr/local/mysql/bin/mysql_client_test_embedded
8.9M /usr/local/mysql/bin/mysql_secure_installation
9.0M /usr/local/mysql/bin/mysqlslap
112K /usr/local/mysql/bin/zlib_decompress
7.2M /usr/local/mysql/bin/myisamlog
5.3M /usr/local/mysql/bin/my_print_defaults
243M /usr/local/mysql/bin/mysqld
8.0K /usr/local/mysql/bin/mysqldumpslow
9.2M /usr/local/mysql/bin/mysqldump
24M /usr/local/mysql/bin/mysqlxtest
10M /usr/local/mysql/bin/mysql
9.0M /usr/local/mysql/bin/mysqladmin
8.9M /usr/local/mysql/bin/mysqlshow
7.8M /usr/local/mysql/bin/myisamchk
28K /usr/local/mysql/bin/mysqld_safe
17M /usr/local/mysql/bin/mysqlpump
7.4M /usr/local/mysql/bin/myisam_ftdump
1.3G total
[root@ecs-52a1 mysql]#
五、补充解释
`du` 命令扫描的是整个文件系统,因此它可能需要一些时间来运行,特别是在大型文件系统中。
`du` 命令显示的是磁盘使用情况,而不是文件大小。对于某些类型的文件(如稀疏文件),这两者可能有很大的不同。
`du` 命令是一个非常有用的工具,特别是我们在做运维的时候,可以帮助我们了解文件和目录在磁盘上的使用情况,从而进行更有效的磁盘管理。
篇幅有限,文章正下方可以看到我的联系方式。
鼠标“点击” 下面的 “威迪斯特-就是video system 微信名片”字样,就会出现我的二维码,欢迎沟通。