文件系统指文件存在的物理空间,Linux系统中每个分区都是一个文件系统,都有自己的目录层次结构。Linux会将这些分属不同分区的、单独的文件系统按一定的方式形成一个系统的,总的目录层次结构。一个操作系统的运行离不开对文件的操作,因此必然要拥有并维护自己的文件系统。
Linux文件系统使用索引节点来记录文件信息,作用像Windows的文件分配表。
索引节点是一个结构,它包含了一个文件的长度、创建及修改时间、许可权、所属关系、磁盘中的位置等信息。一个文件系统维护了一个索引节点的阵列,每个文件或目录都与索引节点阵列中的惟一一个元素对应。系统给每个索引节点分配了一个号码,也就是该节点在阵列中的索引号,称为索引节点号。
Linux文件系统将文件索引节点号和文件名同时保存在目录中。所以,目录只是将文件的名称和它的索引节点号结合在一起的一张表,目录中每一对文件名称和索引节点号称为一个连接。
对于一个文件来说,有惟一的索引节点号与之对应,而对于一个索引节点号,却可以有多个文件名与之对应。因此,在磁盘上的同一个文件可以通过不同的路径去访问它。
可以用ln命令对一个已经存在的文件再创建一个新的连接,而不复制文件的内容。
连接有软连接和硬连接之分,软连接又叫符号连接。它们各自的特点如下。
硬连接:
(1)原文件名和链接文件名都指向相同的物理位址。
(2)目录不能有硬连接;硬连接不能跨越文件系统(不能跨越不同的分区)。
(3)文件在磁盘中只有一个复制,以节省硬盘空间。
(4)由于删除文件要在同一个索引节点属于惟一的连接时才能成功,因此可以防止不必要的误删除。
符号连接:
(1)用ln -s命令创建文件的符号连接;
(2)符号连接是Linux特殊文件的一种,作为一个文件,它的资料是它所连接的文件的路径名。类似于Windows下的快捷方式。
(3)可以删除原有的文件而保存链接文件,没有防止误删除功能。
装载文件系统
由上一节知道,Linux系统中每个分区都是一个文件系统,都有自己的目录层次结构。Linux会将这些分属不同分区的、单独的文件系统按一定的方式形成一个系统的总的目录层次结构。这里所说的“按一定方式”就是指的装载。
将一个文件系统的顶层目录挂到另一个文件系统的子目录上,使它们成为一个整体,称为装载。把该子目录称为挂接点。
注意:挂接点必须是一个目录。
一个分区装载在一个已存在的目录上,这个目录可以不为空,但装载后这个目录下以前的内容将不可用。
对于其他操作系统创建的文件系统的装载也是这样。但是需要理解的是,光盘、软盘、其他操作系统使用的文件系统的格式与Linux使用的文件系统格式是不一样的。光盘是ISO9660;软盘是FAT16或ext2;Windows NT是FAT16, NTFS, Windows 98是FAT16, FAT32;Windows 2000和Windows XP是FAT16, FAT32, NTFS。装载前要了解Linux是否支持所要装载的文件系统格式。
装载时使用mount命令。格式:mount [-参数] [设备名称] [挂接点]
其中常用的参数有:
-t<文件系统类型> 指定设备的文件系统类型,常见的有:
minix Linux 最早使用的文件系统;
ext2 Linux 目前常用的文件系统;
msdos MS-DOS的FAT,就是FAT16;
vfat Windows 98常用的FAT32;
nfs 网络文件系统;
iso9660 CD-ROM光盘标准文件系统;
ntfs Windows NT/2000的文件系统;
hpfs OS/2文件系统;
auto 自动检测文件系统。
-o<选项> 指定装载文件系统时的选项,有些也可用在/etc/fstab中。常用的有:
codepage=XXX 内码表;
iocharset=XXX 字符集;
ro 以只读方式装载;
rw 以读写方式装载;
nouser 使一般用户无法装载;
user 可以让一般用户装载设备。
提醒一下,mount命令没有创建挂接点的功能,因此您应该确保执行mount命令时,挂接点已经存在。(即你要把文件系统装载到哪,首先要先建立这个目录。)
例:Windows 98装在hda1分区,同时电脑上还有软盘和光盘需要装载。
# mk /mnt/winc
# mk /mnt/floppy
# mk /mnt/cdrom
# mount -t vfat /dev/hda1 /mnt/winc
# mount -t msdos /dev/fd0 /mnt/floppy
# mount -t iso9660 /dev/cdrom /mnt/cdrom
现在就可以进入/mnt/winc等目录读写这些文件系统了。
要保证最后两行的命令不出错,就要确保软驱和光驱里有盘。
如果你的Windows 98目录里有中文文件名,使用上面的命令装载后,显示的是一堆乱码。这就要用到 -o 参数里的codepage iocharset选项。codepage指定文件系统的内码表,简体中文代码是936;iocharset指定字符集,简体中文一般用cp936或gb2312。
当装载的文件系统Linux不支持时,mount一定会报错,如Windows 2000的NTFS文件系统。可以重新编译Linux内核以获得对该文件系统的支持。
自动装载
每次开机访问Windows分区都要运行mount命令,这显然太烦琐。为什么访问其他的Linux分区不用使用mount命令呢?
其实,每次开机时,Linux自动将需要装载的Linux分区装载上了。那么我们是不是可以设置让Linux在启动的时候也装载我们希望装载的分区,如Windows分区,以实现文件系统的自动装载呢?
这是完全可以的。在/etc目录下有个fstab文件,它里面列出了Linux开机时自动装载的文件系统的列表。比如 /etc/fstab文件如下:
/dev/hda2 / ext3 defaults 1 1
/dev/hda1 /boot ext3 defaults 1 2
none /dev/pts devpts gid=5,mode=620 0 0
none /proc proc defaults 0 0
none /dev/shm tmpfs defaults 0 0
/dev/hda3 swap swap defaults 0 0
/dev/cdrom /mnt/cdrom iso9660 noauto,codepage=936,iocharset=gb2312 0 0
/dev/fd0 /mnt/floppy auto noauto,owner,kudzu 0 0
/dev/hdb1 /mnt/winc vfat defaults,codepage=936,iocharset=cp936 0 0
/dev/hda5 /mnt/wind vfat defaults,codepage=936,iocharset=cp936 0 0
在/etc/fstab文件里,第1列是装载的文件系统的设备名,第2列是挂接点,第3列是装载的文件系统类型,第4列是装载的选项,选项间用逗号分隔。
最后两行是我手工添加的Windows下的C, D盘,加了codepage=936和ocharset=cp936参数以支持中文文件名。参数defaults实际上包含了一组默认参数:
rw 以可读写模式装载;
suid 开启用户 ID和用户组ID设置位;
dev 可解读文件系统上的字符或块设备;
exec 可执行二进位文件;
auto 自动装载;
nouser 使一般用户无法装载;
async 以非同步方式执行文件系统的输入输出操作。
大家可以看到,在这个列表里,光驱和软驱是不自动装载的,参数设置为noauto。(如果你非要设成自动装载,您要确保每次开机时你的光驱和软驱里都要有光盘或软盘。)
没有评论:
发表评论