Linux文件系统之df,du以及ln命令

df 命令用来查看Linux文件系统的整体磁盘使用量(展示的单位为分区,即分区的磁盘使用量)

1
2
3
4
5
6
7
8
9
[root@www ~]# df [-ahikHTm] [目录或文件名]
选项与参数:
-a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;
-k :以 KBytes 的容量显示各文件系统;
-m :以 MBytes 的容量显示各文件系统;
-h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
-H :以 M=1000K 取代 M=1024K 的进位方式;
-T :连同该 partition 的 filesystem 名称 (例如 ext3) 也列出;
-i :不用硬盘容量,而以 inode的数量来显示

以下列出几个例子:

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
范例一:将系统内所有的 filesystem 列出来!
[root@www ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/hdc2 9920624 3823112 5585444 41% /
/dev/hdc3 4956316 141376 4559108 4% /home
/dev/hdc1 101086 11126 84741 12% /boot
tmpfs 371332 0 371332 0% /dev/shm
# 在 Linux 底下如果 df 没有加任何选顷,那么默认会将系统内所有的
# (不含特殊内存内的文件系统与 swap) 都以 1 Kbytes 癿容量来列出来!
# 至于那个 /dev/shm 是与内存有关的挂载,先不要理他!

范例二:将容量结果以易读的容量格式显示出来
[root@www ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hdc2 9.5G 3.7G 5.4G 41% /
/dev/hdc3 4.8G 139M 4.4G 4% /home
/dev/hdc1 99M 11M 83M 12% /boot
tmpfs 363M 0 363M 0% /dev/shm
# 不同与范例一,这里会以 G/M 等容量格式显示出来,比较容易看啦!

范例三:将系统内的所有特殊文件格式及名称都列出来
[root@www ~]# df -aT
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/hdc2 ext3 9920624 3823112 5585444 41% /
proc proc 0 0 0 - /proc
sysfs sysfs 0 0 0 - /sys
devpts devpts 0 0 0 - /dev/pts
/dev/hdc3 ext3 4956316 141376 4559108 4% /home
/dev/hdc1 ext3 101086 11126 84741 12% /boot
tmpfs tmpfs 371332 0 371332 0% /dev/shm
none binfmt_misc 0 0 0 - /proc/sys/fs/binfmt_misc
sunrpc rpc_pipefs 0 0 0 - /var/lib/nfs/rpc_pipefs
# 系统里面其实还有很多特殊的文件系统存在。那些比较特殊的文件系统几乎
# 都是在内存当中,例如 /proc 这个挂载点。因此,这些特殊的文件系统
# 都不会占据硬盘空间!

范例四:将 /etc 底下的可用磁盘容量以易读容量格式显示
[root@www ~]# df -h /etc
Filesystem Size Used Avail Use% Mounted on
/dev/hdc2 9.5G 3.7G 5.4G 41% /
# 在 df 后面加上目录或者是档案时, df 会自动的分析该目录或档案所在的 partition ,
# 并将该 partition 容量显示出来, 所以,您就可以知道某个目录底下还有多少容量可以使用了!

范例五:将目前各个 partition 当中可用的 inode 数量列出
[root@www ~]# df -ih
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/hdc2 2.5M 147K 2.3M 6% /
/dev/hdc3 1.3M 46 1.3M 1% /home
/dev/hdc1 26K 34 26K 1% /boot
tmpfs 91K 1 91K 1% /dev/shm
# 这个范例则主要列出可用的 inode 剩余量不总容量。分析一下与范例一的关系,
# 你可以清楚的发现到,通常 inode 的数量剩余都比 block 还要多。

由于 df 主要读取的数据几乎都是针对一整个文件系统,因此读取的范围主要是在 Superblock 内的信息, 所以这个指令显示结果的速度非帯的快速。

du:评估文件系统癿磁盘使用量(帯用在推估目彔所占容量)

1
2
3
4
5
6
7
8
[root@www ~]# du [-ahskm] 档案或目录名称
选项与参数:
-a :列出所有的档案与目录容量,因为默认仅统计目录底下的子目录容量而已。
-h :以人们较易读的容量格式 (G/M) 显示;
-s :列出总量而已,而不列出每个各别的目录占用容量;(即目录占用量)
-S :不包括子目录下的总计,与 -s 有点差别。
-k :以 KBytes 列出容量显示;
-m :以 MBytes 列出容量显示;

使用例子如下:

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
[root@www ~]# du [-ahskm] 档案或目录名称
选项与参数:
-a :列出所有的档案与目录容量,因为默认仅统计目录底下的子目录占用量而已。
-h :以人们较易读的容量格式 (G/M) 显示;
-s :列出总量而已,而不列出每个各别的目录占用容量;
-S :不包括子目录下的总计,与 -s 有点差别。
-k :以 KBytes 列出容量显示;
-m :以 MBytes 列出容量显示;

范例一:列出目前目录下的所有档案容量
[root@www ~]# du
8 ./test4 <==每个目录都会列出来
8 ./test2
....中间省略....
12 ./.gconfd <==包括隐藏文件的目录
220 . <==这个目录(.)所占用的总量
# 直接输入 du 没有加任何选项时,则 du 会分析『目前所在目录』 的档案不目彔所占用癿硬盘空间。
# 但是,实际显示时,仅会显示目录容量(不显示档案),
# 因此 . 目录有很多档案没有被列出来,所以全部的目录相加不会等于 .的容量!
# 此外,输出的数值数据为 1K 大小的容量单位。

范例二:同范例一,但是将档案的容量也列出来
[root@www ~]# du -a
12 ./install.log.syslog <==有档案的列表了
8 ./.bash_logout
8 ./test4
8 ./test2
....中间省略....
12 ./.gconfd
220 .

范例三:检查根目录底下每个目录所占用的容量
[root@www ~]# du -sm /*
7 /bin 6 /boot
.....中间省略....
0 /proc
.....中间省略....
1 /tmp 3859 /usr <==系统初期最大就是他了啦!
77 /var
# 这是个很常被使用的功能~利用通配符 * 来代表每个目录,
# 如果想要检查某个目录下,那个次目录占用最大的容量,可以用这个方法找出来
# 值得注意的是,如果刚刚安装好 Linux 时,那么整个系统容量最大的应该是 /usr
# 而 /proc 虽然有列出容量,但是那个容量是在内存中,不占硬盘空间。

实体链接与符号链接 ln

实体链接(硬式链接)

实体链接,只能链接文件,不能链接目录,不能跨 Filesystem,创建实体链接时,只是在某个目录下的block多写入一条关联数据而已,不会增加inode也不会耗用block的数量。任一个档案删除了,另外一个档案都可以将数据完整的读取出来。

1
2
3
4
[root@www ~]# ln /etc/crontab /root/crontab <==建立实体链接的指令
[root@www ~]# ll -i /etc/crontab /root/crontab
1912701 -rw-r--r-- 2 root root 255 Jan 6 2007 /etc/crontab
1912701 -rw-r--r-- 2 root root 255 Jan 6 2007 /root/crontab

基本上, Symbolic link 就是在建立一个独立的档案,而这个档案会将数据的读取指向他 link 的那个档案的档名!由于只是利用档案来做为指向的动作,所以,当来源档被删除之后,symbolic link 的档案会『开不了』, 会一直说『无法开起某档案!』。实际上就是找不到原始『档名』而已。

1
2
3
4
5
6
7
8
9
[root@www ~]# ln -s /etc/crontab crontab2
[root@www ~]# ll -i /etc/crontab /root/crontab2
1912701 -rw-r--r-- 2 root root 255 Jan 6 2007 /etc/crontab
654687 lrwxrwxrwx 1 root root 12 Oct 22 13:58 /root/crontab2 -> /etc/crontab
# /etc/crontab 也就是/root/crontab2文件的内容,所以大小为12bytes

#创建目录链接
[root@www ~]# ln -s /bin /root/bin
#当进入/root/bin目录时,实际上进入的是/bin目录,对其所有的操作都会相当于直接在/bin目录下操作

看起来硬链接会比符号链接安全的多,因为不会因为被链接文件被删除了而导致链接文件打不开,但是由于硬链接的限制比较多,不能链接目录,不能跨文件系统,所以还是符号链接比较受欢迎!

ln指令参数:

1
2
3
4
[root@www ~]# ln [-sf] 来源文件 目标文件
选项与参数:
-s :如果不加任何参数就进行连结,那就是hard link,至于 -s 就是symbolic link
-f :如果 目标文件 存在时,就主动将目标文件直接移除后再建立!