linux 下du命令

10:14:00 PM 0 Comments

最近linux的磁盘好像出了点问题,用du显示只占用了1.2G空间,可是在df下显示占用了15G,真可怕.都是那该死的nginx日志惹的祸,两天 占用了我的80G空间,估计是i/o大量读写磁盘系统出问题了,所以详细的查询了一下关于显示文件大小的指令: fsck -r /dev/sdb5

指令:fsck

使用权限 : 超级使用者

使用方式 : fsck [-sACVRP] [-t fstype] [--] [fsck-options] filesys [...]

说明 : 检查与修复 Linux 档案系统,可以同时检查一个或多个 Linux 档案系统
注意:正常情况下使用此指令会对文件系统造成危害,除非系统出现极大问题,否则不建议使用。

参数 :

filesys : device 名称(eg./dev/sda1),mount 点 (eg. / 或 /usr)
-t : 给定档案系统的型式,若在 /etc/fstab 中已有定义或 kernel 本身已支援的则不需加上此参数
-s : 依序一个一个地执行 fsck 的指令来检查
-A : 对/etc/fstab 中所有列出来的 partition 做检查
-C : 显示完整的检查进度
-d : 列印 e2fsck 的 debug 结果
-p : 同时有 -A 条件时,同时有多个 fsck 的检查一起执行
-R : 同时有 -A 条件时,省略 / 不检查
-V : 详细显示模式

-a : 如果检查有错则自动修复
-r : 如果检查有错则由使用者回答是否修复

例子 :
检查 msdos 档案系统的 /dev/hda5 是否正常,如果有异常便自动修复 :
fsck -t msdos -a /dev/hda5

注意 :

此指令可与 /etc/fstab 相互参考操作来加以了解。
du - estimate file space usage
中文解释:

du(disk usage)
功能说明:显示目录或文件的大小。

语法:
du [-abcDhHklmsSx][-L <符号连接>][-X <文件>][--block-size][--exclude=<目录或文件>][--max-depth=<目录层数 >][--help][--version][目录或文件]

补充说明:
du会显示指定的目录或文件所占用的磁盘空间。
-a或-all 显示目录中个别文件的大小。
-b或-bytes 显示目录或文件大小时,以byte为单位。
-c或--total 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。
-D或--dereference-args 显示指定符号连接的源文件大小。
-h或--human-readable 以K,M,G为单位,提高信息的可读性。
-H或--si 与-h参数相同,但是K,M,G是以1000为换算单位。
-k或--kilobytes 以1024 bytes为单位。
-l或--count-links 重复计算硬件连接的文件。
-L<符号连接>或--dereference<符号连接>
显示选项中所指定符号连接的源文件大小。
-m或--megabytes 以1MB为单位。
-s或--summarize 仅显示总计。
-S或--separate-dirs 显示个别目录的大小时,并不含其子目录的大小。
-x或--one-file-xystem 以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
-X<文件>或--exclude-from=<文件> 在<文件>指定目录或文件。
--exclude=<目录或文件> 略过指定的目录或文件。

操作过程:
[root@CentOS4 ~]# cd ok_008 --转到OK_008目录
[root@CentOS4 ok_008]# du -sh --统计OK_008目录的文件大小
32K .
[root@CentOS4 ok_008]# du -sH --统计OK_008目录的文件大小,注意这里的H大写,与上一条命令不同。
du: WARNING: use --si, not -H; the meaning of the -H option will soon
change to be the same as that of --dereference-args (-D)
33k . --由于统计单位的不同,所以显示的大小不一样,其实物理都是都是一样。
[root@CentOS4 ok_008]# du -Sh --统计当前各子目录大小。
8.0K ./ok/008
8.0K ./ok
16K . --细心发现这里是16K,而上面使用du -sh显示的是32k,那么其中的16k哪里去了呢。

[root@CentOS4 ok_008]# cd ..
[root@CentOS4 ~]# du -Sh
16K ./.gstreamer-0.8
8.0K ./.gnome/mime-info
8.0K ./.gnome/application-info
8.0K ./.gnome
52K ./.gconfd

8.0K ./ok_008/ok/008 --这里我们可以发现,原来/ok_008目录就占了16k的大小。
8.0K ./ok_008/ok --由此我们可以区别命令du -Sh 和du -sH的不同之处。
16K ./ok_008
..

--为了更方便的验证命令du -Sh 和du -sH的不同,我们可以这样:
命令du -Sh 和du -sH
[root@CentOS4 ~]# cd ok_008 --除了显示ok_008目录或文件的大小外,同时也显示所有子目录或文件的总和。
[root@CentOS4 ok_008]# du -ch
8.0K ./ok/008
16K ./ok
32K .
32K total --其实就是如数学中的数的累加一样,统计目录或文件的大小。

[root@CentOS4 ok_008]# du -cb --这是以字节为单元大小表示。
4096 ./ok/008
8192 ./ok
12301 .
12301 total

[root@CentOS4 ok_008]# du -ck --这命令与du -ch有点相似点,这里只不过少了单位k。
8 ./ok/008
16 ./ok
32 .
32 total

--为了更好的验证命令du -ck 和命令du -ch的不同,可以使用测试:
[root@CentOS4 ~]# du -ck
16 ./.gstreamer-0.8
8 ./.gnome/mime-info
8 ./.gnome/application-info

24 ./.thumbnails/fail
32 ./.thumbnails
8 ./ok_008/ok/008
16 ./ok_008/ok
32 ./ok_008
1116 .
1116 total

[root@CentOS4 ~]# du -ch
16K ./.gstreamer-0.8
8.0K ./.gnome/mime-info
8.0K ./.gnome/application-info

24K ./.thumbnails/fail
32K ./.thumbnails
8.0K ./ok_008/ok/008
16K ./ok_008/ok
32K ./ok_008
1.1M .
1.1M total

--不难看出命令du -ck 是以k单位来统计,而du -ch在统计过程中自动根据实际以K,M,G为单位,达到提高信息的可读性。

[root@CentOS4 ok_008]# du -h mytest --查看文件mytest的大小
8.0K mytest
[root@CentOS4 ok_008]# du -h /ok --查看ok目录包含ok所有子目录的大小
8.0K /ok/008
16K /ok
怎么样查多的文件大大小呢?
现在我们使用vi建立一新的文件叫oktest

[root@CentOS4 ok_008]# vi oktest

随便输入一些数据然后保存oktest文件。

[root@CentOS4 ok_008]# ls -l
total 24
-rw-r--r-- 1 root root 13 Sep 13 22:36 mytest
drwxr-xr-x 3 root root 4096 Sep 13 22:51 ok
-rw-r--r-- 1 root root 21 Sep 17 20:45 oktest
现在我们要查询文件mytest和oktest的大小。可以这样:
[root@CentOS4 ok_008]# du -h mytest oktest
8.0K mytest
8.0K oktest

我们还可以同时查文件与目录的大小,如:
[root@CentOS4 ok_008]# du -h mytest /ok
8.0K mytest --文件
8.0K /ok/008 --目录
16K /ok --目录

另外:
[root@CentOS4 ok_008]# du -h ./
8.0K ./ok/008
16K ./ok
40K ./
[root@CentOS4 ok_008]# du -h
8.0K ./ok/008
16K ./ok
40K .
这两个命令等效。习惯du -h 这样写法。
du --max-depth=1
指定只递归层数,只显示目录大小
df -T
显示文件系统类型

Some say he’s half man half fish, others say he’s more of a seventy/thirty split. Either way he’s a fishy bastard.