第五章 文件系统管理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第五章文件系统管理
文件系统指文件存在的物理空间,Linux系统中每个分区都是一个文件系统,都有自己的目录层次结构。
Linux会将这些分属不同分区的、单独的文件系统按一定的方式形成一个系统的,总的目录层次结构。
一个操作系统的运行离不开对文件的操作,因此必然要拥有并维护自己的文件系统。
Linux文件系统使用索引节点来记录文件信息,作用像Windows的文件分配表。
索引节点是一个结构,它包含了一个文件的长度、创建及修改时间、许可权、所属关系、磁盘中的位置等信息。
一个文件系统维护了一个索引节点的阵列,每个文件或目录都与索引节点阵列中的惟一一个元素对应。
系统给每个索引节点分配了一个号码,也就是该节点在阵列中的索引号,称为索引节点号。
Linux文件系统将文件索引节点号和文件名同时保存在目录中。
所以,目录只是将文件的名称和它的索引节点号结合在一起的一张表,目录中每一对文件名称和索引节点号称为一个连接。
对于一个文件来说,有惟一的索引节点号与之对应,而对于一个索引节点号,却可以有多个文件名与之对应。
因此,在磁盘上的同一个文件可以通过不同的路径去访问它。
可以用ln命令对一个已经存在的文件再创建一个新的连接,而不复制文件的内容。
连接有软连接和硬连接之分,软连接又叫符号连接。
它们各自的特点如下。
硬连接:
(1)原文件名和链接文件名都指向相同的物理位址。
(2)目录不能有硬连接;硬连接不能跨越文件系统(不能跨越不同的分区)。
(3)文件在磁盘中只有一个复制,以节省硬盘空间。
(4)由于删除文件要在同一个索引节点属于惟一的连接时才能成功,因此可以防止不必要的误删除。
符号连接:
(1)用ln -s命令创建文件的符号连接;
(2)符号连接是Linux特殊文件的一种,作为一个文件,它的资料是它所连接的文件的路径名。
类似于Windows下的快捷方式。
(3)可以删除原有的文件而保存链接文件,没有防止误删除功能。
5.1 装载文件系统
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 命令时,挂接点已经存在。
(即你要把文件系统装载到哪,首先要先建立这个目录。
)
例5-1:Windows 2003装在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 2003目录里有中文文件名,使用上面的命令装载后,显示的是一堆乱码。
这就要用到 -o 参数里的codepage iocharset选项。
codepage
指定文件系统的内码表,简体中文代码是936;iocharset指定字符集,简体中文一般用cp936或gb2312或utf8。
当装载的文件系统Linux不支持时,mount一定会报错,如Windows 2003的NTFS文件系统。
可以重新编译Linux内核以获得对该文件系统的支持。
5.2 自动装载
每次开机访问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。
(如果你非要设成自动装载,您要确保每次开机时你的光驱和软驱里都要有光盘或软盘。
)
5.3 磁盘与文件结构
文件结构是文件存放在磁盘等存储设备上的组织方法,主要体现在对文件和目录的组织上。
目录提供了管理文件的一个方便而有效的途径。
我们能够从一个目录切换到另一个目录,而且可以设置目录和文件的许可权,设置文件的共用程度。
使用Linux,用户可以设置目录和文件的许可权,以便允许或拒绝其他人对其进行访问。
Linux目录采用多级树形结构,用户可以浏览整个系统,可以进入任何一个已授权进入的目录,访问那里的文件。
文件结构的相互关联性使共用资料变得容易,几个用户可以访问同一个文件。
Linux 是一个多用户系统,操作系统本身的驻留程序存放在以根目录开始的专用目录中,有时被指定为系统目录。
内核、Shell和文件结构一起形成了基本的操作系统结构。
它们使得用户可以运行程序、管理文件以及使用系统。
此外,Linux操作系统还有许多被称为实用工具的程序,可以辅助用户完成一些特定的任务。
5.4 硬盘分区
1.MBR(主引导记录)、启动扇区和分区表
一个硬盘如何分区的信息存在它的第一个扇区(即第一面第一轨第一扇区)。
这个第一扇区是硬盘的主引导记录(MBR);这是电脑启动时BIOS读入和启动的扇区。
主引导记录包括一段小程序,读入分区表,检查哪个分区是活动分区(即启动分区),并读入活动分区的第一个扇区,即该分区的启动扇区(MBR 也是启动扇区,只不过因为其特殊地位,所以使用特殊的名字)。
这个启动扇区包括另一个小程序,读入这个分区(假设是可启动的)上操作系统的第一个部分,然后启动它。
这个分区方案不是内置于硬件和BIOS的,只是许多操作系统遵循的约定。
但并非所有的操作系统都遵循这个约定。
有些操作系统支持分区,但它们占领硬盘上的一个分区,然后使用它们自己的内部分区方法管理这个分区。
较新的操作系统可以和其他操作系统和平共处(包括Linux),而无需特殊的措施,但不支持分区的操作系统无法在同一硬盘上与其他操作系统共存。
为安全预防,最好先在纸上写下分区表,这样在错误发生时不会丢失你的文件。
(可以使用fdisk修复坏的分区表)。
相关信息可用fdisk -l 命令给出:
$ fdisk -l /dev/hda
Disk /dev/hda: 15 heads, 57 sectors, 790 cylinders
Units = cylinders of 855 * 512 bytes
Device Boot Begin Start End Blocks Id System
/dev/hda1 1 1 24 10231+ 82 Linux swap
/dev/hda2 25 25 48 10260 83 Linux native
/dev/hda3 49 49 408 153900 83 Linux native
/dev/hda4 409 409 790 163305 5 Extended
/dev/hda5 409 409 744 143611+ 83 Linux native
/dev/hda6 745 745 790 19636+ 83 Linux native
$
2.扩展和逻辑分区
PC硬盘的最初分区方案只允许4个分区。
实际使用中这太少了,比如有人
想装多于4个操作系统(Linux, MS-DOS, OS/2, Minix, FreeBSD, NetBSD, Windows/NT等),或有时一个操作系统有多个分区更好,例如由于速度的原因,Linux的对换区最好单独使用自己的分区,而不是在主Linux分区中(下文详述)。
为克服这个设计问题,发明了扩展分区。
这个方法允许将基本分区分为若干子分区,因而被进行子分区的基本分区称为扩展分区,而子分区称为逻辑分区。
它们的表现类似基本分割区,但产生方法不同。
它们之间没有速度差别。
3.分区种类
分区表(MBR和扩展分区里都有)中,对每个分区都有一个字节指出分区种类。
这试图确定使用该分区的操作系统,或用于何操作系统。
其目的是避免两个操作系统使用同一分区。
可实际上,操作系统并不真的注意分区种类字节,例如,Linux根本不管它是什么。
较坏的情况是,有些操作系统错误地使用它,例如有些版本的DR-DOS忽略了它的最高位(MSB),而其他一些系统则不是。
没有一个标准化组织定义分区种类字节每个值的意义,但存在一些共同接受的值。
相同的列表可以通过Linux的fdisk 命令得到。
5.5 管理软驱和光驱
1.软盘
如同硬盘,一张软盘也分为磁道和扇区(软盘两面上的相同的磁道组成柱面),但数量要比硬盘少得多。
软驱通常可以使用几种不同的软盘,例如,一个 3.5英寸软驱可以使用720KB和1.44MB的软盘。
因为软驱操作有些不同,而操作系统必须知道软盘的容量,所以软驱有许多设备文件,每个都与软驱和软盘种类有关。
因此,/dev/fd0H1440 是第一个软驱(fd0),必须是3.5英寸,使用3.5英寸高密度软盘(H),容量是1440KB(1440),即普通的3.5英寸HD软盘。
软驱的名字是复杂的,因此Linux有一个特定的软驱设备类型,能自动检测软驱中软盘的种类。
它使用不同的软盘类型,试图读取新插入的软盘的第一个扇区,直到找到正确的一个。
这自然要求软盘是已经格式化过的。
Linux除了能处理所有标准的软盘,还能处理许多非标准的软盘格式。
这有时需要特殊的格式化程序。
我们现在先跳过这些软盘格式,同时你可以查看/etc/fdprm文件,它定义了setfdprm 识别的设置。
2.格式化软盘
软盘格式化使用fdformat命令。
软盘设备使用给定的参数,例如下面的命令是在第一个软驱中格式化一张高密度3.5英寸软盘:
$ fdformat /dev/fd0H1440
Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB. Formatting ... done
Verifying ... done
$
注意,如果想使用自动检测设备(如/dev/fd0),必须先用setfdprm 设置参数。
要得到与上面一样的结果,可以这样:
$ setfdprm /dev/fd0 1440/1440
$ fdformat /dev/fd0
Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB. Formatting ... done
Verifying ... done
$
选择与软盘类型相符的正确的设备文件通常更方便。
注意,比软盘设计格式化更多的信息容量是没有意义的。
3.CD-ROM
CD-ROM 驱动器使用一个光学可读的塑胶涂布的碟片。
信息记录在盘表面的从中心到边沿的螺旋型小坑上。
驱动器发出一束激光来读盘。
当激光射到小坑上,激光以一种方式反射;当它射到光滑表面上,它以另一种方式反射。
这很容易地编码成bit,组成信息。
CD-ROM驱动器比硬盘慢。
典型的硬盘的平均寻道(seek)时间小于15ms,而快速的CD-ROM驱动器要花零点几秒。
实际资料传输率则相当快,在数百KB/s。
速度慢使CD-ROM驱动器不能代替硬盘使用(有些Linux distributions提供“live”CD-ROM文件系统,使之不必复制文件到硬盘,使安装简单并节约了许多硬盘空间),虽然是可能的。
要安装新软件,CD-ROM很好用,因为在安装时速度并非最重要的。
不同UNIX不能使用ISO9660文件系统,因此开发了对这个标准的一个增强,叫Rock Ridge增强。
Rock Ridge允许长文件名、符号连接和许多其他优点,使CD-ROM更像UNIX文件系统。
同时,Rock Ridge文件系统仍然是一个有效的ISO9660文件系统,使非UNIX用户一样可以使用。
Linux同时支持ISO9660和Rock Ridge增强,增强被自动识别和使用。
文件系统只是一部分,许多CD-ROM包含的资料需要特定的程序存取,而多数程序不能运行在Linux下(当然,可能运行在Linux的MS-DOS模拟器dosemu 下)。
5.6 管理用户的磁盘空间
1.为普通用户和用户组加入磁盘配额限制
Linux的Quota程序允许为系统上每一用户或用户组指定所能使用的磁盘配额。
目前Quota仅能工作在ext2和ext3类型的文件系统上。
使用Quota需要确定以下两点:
(1)当前的系统内核支持Quota。
(2)系统已正确安装Quota套装程序。
如果你当前的系统内核不支持Quota,请重新编译你的内核,当系统提示:Quota support(CONFIG—QUOTA)[n]
回答y,生成新的系统内核。
如果没有Quota套装程序,请到以下地址下载Quota的源程序并编译:ftp://ftp.funet.fi/pub/l
inux/PEOPLE/Linus/subsystems/Quota/all.tar.gz
一般Linux的发行版本的内核都默认包含了Quota支持,也附带了Quota 套装程序,只需安装Quota 并加以设置便可让Quota工作。
Quota的具体设置步骤:
(1)编辑系统初始脚本让它检查Quota并启动。
# Check Quota and then turn Quota on.
if [ -x /usr/sbin/Quotacheck ]
then
echo ″Checking Quotas. This may take some time.″
/usr/sbin/Quotacheck -avug
echo ″Done.″
fi
if [ -x /usr/sbin/Quotaon ]
then
echo ″Turning on Quota.″
/usr/sbin/Quotaon -avug
fi
(2)编辑/etc/fstab。
你的 /etc/fstab文件可能会是如下的形式:
/dev/hda1 / ext2 defaults 1 1
/dev/hda2 /home ext2 defaults 1 1
选择用户所在分区的行的第4个域,为用户加入Quota支持,如下:
/dev/hda1 / ext2 defaults 1 1
/dev/hda2 /home ext2 defaults,usrQuota 1 1
如为用户组加入Quota支持,可将usrQuota替换为grpQuota。
如两者兼而有之,可将这两项一并写入,如下:
/dev/hda1 / ext2 defaults 1 1
/dev/hda2 /home ext2 defaults,usrQuota,grpQuota 1 1
(3)创建Quota记录文件er和Quota.group。
进入用户所在分区根目录,如在上例中输入cd /home即可,按下面命令创建文件:
touch er
touch Quota.group
chmod 600 er Quota.group
完成上面几步以后,重新启动电脑以使设置生效。
(4)为用户或用户组设置磁盘配额限制。
假设在你的系统上有一名为bob 的用户,现在想给他10MB的硬盘配额限制,他所拥有的最大文件数不得超过100个。
执行edQuota -u dquo,系统将进入编辑环境(具体编辑环境视editor 变量设置而定),将如下3行
Quotas for user bob:
/dev/hda2: blocks in use: 14, limits (soft=0, hard=0)
inodes in use: 12, limits (soft=0, hard=0)
改为
Quotas for user bob:
/dev/hda2: blocks in use: 14, limits (soft=0, hard=10240)
inodes in use: 12, limits (soft=0, hard=100)
其中,
blocks in use:用户已使用块的大小,单位是KB。
inodes in use:用户现有文件的大小。
这两项都是系统自动给出的,不必改动。
2.软限制(soft limits)
通常设置软限制为一个接近硬限制的值,超越此限制时,系统将警告用户将到达最大磁盘配额限制。
软限制为0 时没有软限制。
结合宽限期使用时,只要用户超越了软限制,一过宽限期,任何对磁盘空间的额外需求将被立即拒绝。
3.硬限制(hard limits)
硬限制磁盘配额的绝对限制,设置了Quota的用户不能超越此限制。
4.宽限期(Grace Period)
宽限期是用户超越了软限制而没有到达硬限制时的一段放宽期,在这段时间内,用户可以在硬限制范围内自由地使用磁盘空间,超过这段时间,所有对磁盘空间的额外需求将被拒绝,即使用户还在硬限制之内。
宽限期的单位可以是秒、分、时、天。
执行edQuota -t命令可设置宽限期。
执行该命令后,将系统提示中的两个0 days 改成你认为合适的值即可。
有时想给一批用户加上同样的限制,比如,给系统上所有100个用户加上与bob同样的限制,可手工先给bob加上限制,然后执行下面命令:
edQuota -p bob ′awk -F: ′$3 499 {print $1}′/etc/passwd′ 给用户组设置磁盘配额限制与普通用户类似,假设有一用户组game,执行edQuota -g game即可。
5.控制用户的登录地点
文件/etc/secruity/access.conf可控制用户登录地点,为了使用access.conf,必须在文件/etc/pam.d/login中加入下面的行:
account required /lib/security/pam-access.so
access.conf文件的格式:
permission : users : origins
其中,
permission:可以是+或-,表示允许或拒绝。
user:可以是用户名、用户组名,如果是all则表示所有用户。
origins:登录地点。
local表示本地,all表示所有地点,console表示控制台。
另外,origins也可以是某一个网络。
后面两个域中加上 except是“除了”的意思。
例如,除了用户 wheel, shutdown, sync禁止所有的控制台登录:
-:ALL EXCEPT wheel shutdown sync:console
root账户的登录地点不在access.conf文件中控制,而是由/etc/securetty文件控制。
6.限制用户每次所发邮件大小
Linux系统使用sendmail发送邮件,配置文件是/etc/sendmail.cf,默认使用TCP/IP协定。
我们的Linux机器上往往会有多个用户同时工作,或者干脆就用它作为邮件服务器,在同一时刻,系统可能要收发很多邮件,因此不能让某一用户过多地占用sendmail的时间。
sendmail的默认配置对每次收发邮件的大小没有限制,更改配置文件/etc/sendmail.cf,找到O MaxMessageSize,去掉行首的#号,并将其后的数值改为合适的数值,单位为字节。
如:
O MaxMessageSize = 1048576
意思为每次收发邮件最大为1MB,任何超过这个值的邮件将被拒绝。