linux课件 第4章 linux文件系统管理.docx
《linux课件 第4章 linux文件系统管理.docx》由会员分享,可在线阅读,更多相关《linux课件 第4章 linux文件系统管理.docx(62页珍藏版)》请在冰豆网上搜索。
linux课件第4章linux文件系统管理
第4章文件系统管理
4.1.1Linux文件系统概述
文件系统对于任何一种操作系统来说都是非常关键的。
Linux中的文件系统是Linux下所有文件和目录的集合。
Linux系统中把CPU、内存之外所有其他设备都抽象为文件处理。
文件系统的优劣与否和操作系统的效率、稳定性及可靠性密切相关。
从系统角度看,文件系统实现了对文件存储空间的组织和分配,并规定了如何访问存储在设备上的数据。
文件系统在逻辑上是独立的实体,它可以被操作系统管理和使用。
Linux系统自身的文件系统称为ext2,它是Linux默认的文件系统。
通常把ext2及Linux支持的文件系统称为逻辑文件系统。
系统中所有的设备,包括字符设备、块设备和网络设备,都按照某种方式由逻辑文件系统统一管理。
一般不同的逻辑文件系统具有不同的组织结构和文件操作函数,相互之间差别很大。
Linux的内核使用了虚拟文件系统VFS(VirtualFileSystem)技术,即在传统的逻辑文件系统的基础上,增加了一个称为虚拟文件系统的接口层,如图4-1所示。
虚拟文件系统用于管理各种逻辑文件系统,屏蔽了它们之间的差异,为用户命令、函数调用和内核其他部分提供访问文件和设备的统一接口,使得不同的逻辑文件系统按照同样的模式呈现在使用者面前。
对于普通用户来讲,觉察不到逻辑文件系统之间的差异,可以使用同样的命令来操作不同逻辑文件系统所管理的文件。
图4-1Linux文件系统结构示意图
从用户角度看,文件系统也是操作系统中最重要的组成部分。
因为Linux系统中所有的程序、库文件、系统和用户文件都存放在文件系统中,文件系统要对这些数据文件进行组织管理。
Linux下的文件系统主要可分为三大块:
一是上层的文件系统的系统调用,二是虚拟文件系统VFS,三是挂载到VFS中的各种实际文件系统,例如ext2,jffs等。
VFS是一种软件机制,称它为Linux的文件系统管理者更确切,与它相关的数据结构只存在于物理内存当中。
所以在每次系统初始化期间,Linux都首先要在内存当中构造一棵VFS的目录树(在Linux的源代码里称之为namespace),实际上便是在内存中建立相应的数据结构。
VFS目录树在Linux的文件系统模块中是个很重要的概念,VFS中的各目录其主要用途是用来提供实际文件系统的挂载点。
Linux不使用设备标志符来访问独立文件系统,而是通过一个将整个文件系统表示成单一实体的层次树结构来访问它。
Linux在使用一个文件系统时都要将它加入到文件系统层次树中。
不管是文件系统属于什么类型,都被连接到一个目录上且此文件系统上的文件将取代此目录中已存在的文件。
这个目录被称为挂载点或者安装目录。
当卸载此文件系统时这个安装目录中原有的文件将再次出现。
磁盘初始化时(fdisk),磁盘中将添加一个描述物理磁盘逻辑构成的分区结构。
每个分区可以拥有一个独立文件系统如EXT2。
文件系统将文件组织成包含目录、软连接等存在于物理块设备中的逻辑层次结构。
包含文件系统的设备叫块设备。
Linux文件系统认为这些块设备是简单的线性块集合,它并不关心或理解底层的物理磁盘结构。
这个工作由块设备驱动来完成,由它将对某个特定块的请求映射到正确的设备上去。
每个实际文件系统从操作系统和系统服务中分离出来,它们之间通过一个接口层:
虚拟文件系统或VFS来通讯。
Linux核心的其它部分及系统中运行的程序将看到统一的文件系统。
Linux的VFS允许用户透明地安装许多不同的文件系统。
虚拟文件系统的设计目标是为Linux用户提供快速且高效的文件访问服务。
同时它必须保证文件及其数据的正确性。
这两个目标相互间可能存在冲突。
当安装一个文件系统并使用时,LinuxVFS为其缓存相关信息。
此缓存中数据在创建、写入和删除文件与目录时如果被修改,则必须谨慎地更新文件系统中对应内容。
4.1.2Linux文件系统类型
Linux是一种兼容性很高的操作系统,支持的文件系统格式很多,大体可分以下几类。
●磁盘文件系统。
指本地主机中实际可以访问到的文件系统,包括硬盘、CD-ROM、DVD、USB存储器、磁盘阵列等。
常见文件系统格式有:
autofs、coda、Ext(ExtendedFilesytem,扩展文件系统)、Ext2、Ext3、Ext4、VFAT、ISO9660(通常是CD-ROM)、UFS(UnixFileSystem,Unix文件系统)、FAT(FileAllocationTable,文件分配表)、FAT16、FAT32、NTFS(NetworkTechnologyFileSystem)等。
●网络文件系统。
是可以远程访问的文件系统,这种文件系统在服务器端仍是本地的磁盘文件系统,客户机通过网络远程访问数据。
常见文件系统格式有:
NFS(NetworkFileSystem,网络文件系统)、Samba(SMB/CIFS)、AFP(AppleFillingProtocol,Apple文件归档协议)和WebDAV等。
●专有/虚拟文件系统。
不驻留在磁盘上的文件系统。
常见格式有:
TMPFS(临时文件系统)、PROCFS(ProcessFileSystem,进程文件系统)和LOOPBACKFS(LoopbackFileSystem,回送文件系统)。
Linux最早的文件系统是Minix,它受限甚大且性能低下。
其文件名最长不能超过14个字符(虽然比8.3文件名要好)且最大文件大小为64M字节。
64M字节看上去很大,但实际上一个中等的数据库将超过这个尺寸。
第一个专门为Linux设计的文件系统被称为扩展文件系统EXT。
它出现于1992年四月,虽然能够解决一些问题但性能依旧不好。
1993年扩展文件系统第二版或EXT2被设计出来并添加到Linux中。
将EXT文件系统添加入Linux产生了重大影响。
每个实际文件系统从操作系统和系统服务中分离出来,它们之间通过一个接口层:
虚拟文件系统或VFS来通讯。
但随着Linux在关键业务中的应用,ext2非日志文件系统的弱点也逐渐显露出来了。
为了弥补其弱点,在ext2文件系统基础上增加日志功能开发了升级的ext3文件系统。
目前Ext3是Linux系统广泛使用的一种文件格式。
在Ext2基础上,对有效性保护、数据完整性、数据访问速度、向下兼容性等方面做了改进。
Ext3最大特点是:
可将整个磁盘的写入动作完整地记录在磁盘的某个区域上,以便在必要时回溯追踪。
从2.6.28版本开始,LinuxKernel开始正式支持新的文件系统EXT4,在EXT3的基础上增加了大量新功能和特性,并能提供更佳的性能和可靠性。
EXT3其实只是在EXT2的基础上增加了一个日志功能,而EXT4的变化可以说是翻天覆地的,比如向下兼容EXT3、最大1EB文件系统和16TB文件、无限数量子目录、Extents连续数据块概念、多块分配、延迟分配、持久预分配、快速FSCK、日志校验、无日志模式、在线碎片整理、inode增强、默认启用barrier等等。
需要说明的是,FAT16、FAT32、NTFS是WindowsNT、Windows2000、WindowsXP系统主要的文件系统格式。
Linux系统同样可以很好的支持这些文件系统格式。
不过,以往版本的Linux系统需要单独挂载Windows文件系统,而RHEL6可以自动识别这些文件格式,以只读方式访问计算机磁盘中Windows系统上的文件。
1.ext3文件系统
由于ext4还未作为标准文件系统,在此先介绍ext3文件系统,其把磁盘划分为4个部分:
引导块:
在文件系统的开头,通常为一个扇区,其中存放引导程序,用于读入并启动操作系统。
超级块:
用来记录文件系统的配置方式,其中包括i-node数量、磁盘区块数量、未使用的磁盘区块,以及i节点表、空闲块表在磁盘中存放的位置信息。
由于超级块保存了极为重要的文件信息,因此系统将超级块冗余保存。
系统在使用fsck等命令修复处于严重瘫痪状态的文件系统时,实际上是在对超级块进行恢复操作。
i-nide(索引节点):
索引节点是一个结构,它包含了文件大小、用户UID、用户组GID、文件存取模式(包括读、写、执行)、链接数(每创建一个连接,链接数加1;删除一个链接,链接数减1)、文件最后修改时间、磁盘中的位置等信息。
一个文件系统维护了一个索引节点的数组,系统给每个索引节点分配了一个索引节点号,就是该节点在数组中的索引号。
一个文件或目录占据一个索引节点。
第一个索引节点是该文件系统的根节点。
索引节点之后的数据块用于存放文件内容。
文件系统采用了一对一映射的方法来实现文件名到i节点的转换。
Linux文件系统将文件索引节点号和文件名同时保存在目录中。
因此,目录只是将文件的名称和它的索引节点号结合在一起的一张表,目录中的每文件,在目录表中都会有一个入口项,入口项中含有文件名和与文件相应的i节点号。
目录中每一对文件名称和索引节点号称为一个链接。
对于一个文件来说,有唯一的索引节点号与之对应,而对于一个索引节点号,却可以有多个文件名与之对应。
因此,在磁盘上的同一个文件可以通过不同的路径去访问它。
可以用ln命令对一个已经存在的文件再创建一个新的链接,而不必复制文件的内容,后面详细介绍ln命令的用法。
链接分为硬链接(hardlink)和符号链接(symboliclink)两种,符号链接又称为软链接(softlink)。
它们各自的特点如下:
●硬链接:
(1)原文件名和链接文件名都指向相同的物理地址。
(2)目录不能有硬链接,硬链接不能跨越文件系统(不能跨越不同的分区)。
(3)文件在磁盘中只有一个复制,以节省硬盘空间。
(4)删除文件时要在同一个索引节点属于唯一的链接时才能完成。
每删除一个硬链接文件只能减少其硬链接数目,只有当硬链接数目为1时才能真正删除,这就防止了误删除。
●符号链接:
(1)用ln–s命令创建文件的符号链接。
(2)可以指向目录或跨越文件系统。
(3)符号链接是Linux特殊文件的一种,作为一个文件,它的内容是它所链接的文件或目录的路径,类似于Windows系统中的快捷方式。
可以删除原有的文件或目录而保存链接文件,这是链接文件就没有应用价值了。
因而它没有防止误删除功能。
2.Linux日志文件系统
日志文件系统是在传统文件系统的基础上,加入文件系统更改的日志记录,它的设计思想是:
跟踪记录文件系统的变化,并将变化内容记录入日志。
日志文件系统在磁盘分区中保存有日志记录,写操作首先是对记录文件进行操作,若整个写操作由于某种原因(如系统掉电)而中断,系统重启时,会根据日志记录来恢复中断前的写操作。
在日志文件系统中,所有的文件系统的变化都被记录到日志,每隔一定时间,文件系统会将更新后的元数据及文件内容写入磁盘。
在对元数据做任何改变以前,文件系统驱动程序会向日志中写入一个条目,这个条目描述了它将要做些什么,然后它修改元数据。
目前Linux的日志文件系统主要有:
在Ext2基础上开发的Ext3,以及在Ext3基础上开发的Ext4,根据面向对象思想设计的ReiserFS,由SGIIRIX系统移植过来的XFS,由IBMAIX系统移植过来的JFS,其中EXT4完全向下兼容Ext3、EXT2。
3.实践指南
(1)在小型系统,如:
邮件系统或小规模的电子商务系统应用时,ReiserFS和Ext3的性能是比较好的。
但由于Ext3的目录项是线型的,而ReiserFS的目录项是树型的,故当目录下文件较多时,ReiserFS的性能更优。
(2)在对于上G的这种大文件做I/O时,各种文件系统间的性能差距很小,性能瓶颈往往在磁盘上。
(3)虽然XFS和JFS在设计结构上都比较好,但它们主要是针对大中型系统的,在小型系统中由于硬件的原因性能发挥不明显。
(4)全日志模式和预定、写回这两种模式相比,性能差距是比较大的;而预定和写回之间的性能差距不大。
所以性能和安全兼顾时,文件系统的缺省安全模式,即预定模式是比较好的选择。
4.2Linux文件组织结构
一直使用微软Windows操作系统的用户似乎已经习惯了将硬盘上的几个分区,并用A、B、C、D等符号标识。
采取这种方式,在存取文件时一定要清楚文件存放在哪个磁盘的哪个目录下。
Linux的文件组织模式犹如一棵倒挂的树。
Linux文件组织模式中所有存储设备作为这棵树的一个子目录,存取文件时只需确定目录就可以了,无需考虑物理存储位置。
这一点其实并不难理解,只是刚刚接触Linux的读者会不太习惯。
4.2.1文件系统结构
计算机中的文件可以说是不计其数,如何组织和管理文件,及时响应用户的访问需求,就需要构建一个合理、高效的文件系统结构。
1.文件系统结构
某所大学的学生可能在一万人到两万左右,通常将学生分配在以学院-系-班为单位的分层组织机构中。
若需要查找一名学生,最笨的办法是依次询问大学中的每一个学生,直到找到为止。
如果按照从学院到系,再到班的层次查询下去,必然可以找到该学生,且查询效率高。
如果把学生看作文件,院-系-班的组织结构看作是Linux文件目录结构,同样可以有效地管理数量庞大的文件。
这种树形的分层结构就提供了一种自顶向下的查询方法。
Linux文件系统就是一个树形的分层组织结构,根(/)作为整个文件系统的惟一起点,其他所有目录都从该点出发。
Linux的全部文件按照一定的用途归类,合理地挂载到这棵“大树”的“树枝”或“树叶”上,如图4-2所示,而这些全不用考虑文件的实际存储位置是在硬盘上,还是在CD-ROM或USB存储器中,甚至是在某一网络终端里。
图4-2文件系统
此时,读者应该明白Linux的文件系统的组织结构类似于一棵倒置的树。
那么如何知道文件存储的具体硬件位置呢?
在Linux中,将所有硬件都视为文件来处理,包括硬盘分区、CD-ROM、软驱以及其他USB移动设备等。
为了能够按照统一的方式和方法访问文件资源,Linux提供了每种硬件设备相应的设备文件。
一旦Linux系统可以访问到某种硬件,就将该硬件上的文件系统挂载到目录树中的一个子目录中。
例如,用户插入USB移动存储器,RHEL6自动识别USB存储器后,将其挂载到“/media/”目录下,而不像Windows系统将USB存储器作为新驱动器,表示为“F:
”盘。
2.绝对路径和相对路径
Linux文件系统是树形分层的组织结构,且只有一个根节点,在Linux文件系统中查找一个文件,只要知道文件名和路径,就可以惟一确定这个文件。
例如“/usr/games/gnect”就是位于“/usr/games/”路径下的4子连线游戏应用程序文件,其中第一个“/”表示根目录。
这样就可以对每个文件进行准确的定位,并由此引出两个概念:
●绝对路径。
指文件在文件系统中的准确位置,通常在本地主机上,以根目录为起点。
例如“/usr/games/gnect”就是绝对路径。
●相对路径。
指相对于用户当前位置的一个文件或目录的位置。
例如用户处在usr目录中时,只需要“games/gnect”就可确定这个文件。
其实,绝对路径和相对路径的概念都是相对的。
就像一位北京人在中国作自我介绍时,不必在强调“中国/北京”。
若这个人身在美国,介绍时就有必要强调“中国/北京”了。
因此,在什么场合使用绝对路径和相对路径,要看用户当前在文件系统所处的位置。
4.2.2基本目录
由于Linux是完全开源的软件,各Linux发行机构都可以按照自己的需求对文件系统进行裁剪,所以众多的Linux发行版本的目录结构也不尽相同。
为了规范文件目录命名和存放标准,颁发了文件层次结构标准(FHS,FileHierarchyStandard),2004年发行最新版本FHS2.3。
RHEL6系统同样遵循这个标准。
表4-1列出了RHEL6基本目录。
表4-1RHEL6基本目录
目录名
描述
/
Linux文件系统根目录
/bin
存放系统中最常用的可执行文件(二进制)
/boot
存放Linux内核和系统启动文件,包括Grub、lilo启动器程序
/cgroup
存放被cgconfig服务控制的资源分配情况,如CPUtime,系统内存,网络带宽等
/dev
存放所有设备文件,包括硬盘、分区、键盘、鼠标、USB、tty等
/etc
存放系统的所有配置文件,例如passwd存放用户账户信息,hostname存放主机名等
/home
用户主目录的默认位置
/lib
存放共享的库文件,包含许多被/bin和/sbin中程序使用的库文件
/lost+found
存放由fsck放置的零散文件
/media
Linux系统自动挂载CD-ROM、软驱、USB存储器后,存放临时读入的文件
/mnt
该目录通常用于作为被挂载的文件系统的挂载点
/opt
作为可选文件和程序的存放目录,主要被第3方开发者用来简易地安装和卸装他们的软件包
/proc
存放所有标志为文件的进程,它们是通过进程号或其他的系统动态信息进行标识。
以下是/proc目录中部分内容
/proc/数字/
每一个进程在/proc下面都有一个以其进程号为名称的目录。
/proc/cpuinfo
有关处理器的信息,如它的类型、制造日期、型号以及性能。
/proc/devices
配置进当前运行内核的设备驱动程序的列表
/proc/meminfo
物理内存和交换区使用情况的信息
/proc/modules
此时哪些内核模块被加载
/proc/net/
网络协议的状态信息
/proc/uptime
系统启动的时间
/proc/version
内核版本
/root
根用户(超级用户)的主目录
/sbin
存放更多的可执行文件(二进制),包括系统管理、目录查询等关键命令文件
/selinux
是SecureEnhanceLinux(SELinux)的执行目录
/srv
存放系统所提供的服务数据
/sys
该目录用于将系统设备组织或层次结构,并向用户程序提供详细的内核数据信息
/tmp
存放用户和程序的临时文件,所有用户对该目录都有读写权限
/usr(unixsoftwareresource)
用于存放与[Unix操作系统软件资源]直接有关的文件和目录,例如应用程序及支持它们的库文件。
以下是/usr中部分重要的目录
/usr/bin/
存放用户和管理员的自行安装的软件
/usr/etc/
存放的系统配置文件
/usr/games/
存放游戏文件
/usr/include/
C/C++等各种开发语言环境的标准include文件
/usr/lib/
应用程序及程序包的连接库、目标文件等
/usr/libexec
可执行的库文件
/usr/local/
系统管理员安装的应用程序目录
/usr/sbin/
存放非系统正常运行所需要的系统命令
/usr/share/
存放使用手册等共享文件的目录
/usr/src/
存放一般的原始二进制文件
/usr/tmp/
存放临时文件
/var
通常用于存放长度可变的文件,例如日志文件和打印机文件。
以下是/var中部分重要的目录
/var/cache/
应用程序缓存目录
/var/crash/
系统错误信息
/var/games/
游戏数据
/var/lib/
各种状态数据
/var/lock/
文件锁定记录
/var/log/
日志记录
/var/mail/
电子邮件
/var/opt/
/opt目录的变量数据
/var/run/
进程的标示数据
/var/spool/
存放电子邮件、打印任务等的队列目录
/var/www
存放网站文件
需要说明两点。
首先,Linux系统是严格区分大小写的,这意味着文件和目录名的大小写是有区别的。
例如File.txt、FILE.TXT和file.txt文件是3个完全不同的文件。
通常按照惯例,Linux系统大多使用小写。
其次,Linux系统中文件类型与文件后缀没有直接关系。
这一点与Windows不同,例如Windows将“.txt”作为文本文件的后缀,应用程序依此判断是否可以处理该类型文件。
4.2.3Linux文件系统与Windows文件系统比较
文件系统是任何操作系统中最重要的核心部分之一。
从UNIX采用树形文件系统结构到Linux的出现,依然延续使用了这种文件系统。
尽管Linux文件系统与Windows文件系统很多方面相似,但两者是各有特点,表4-2将两者进行了比较。
表4-2Linux文件系统与Windows文件系统的比较
比较项目
Linux文件系统
Windows文件系统
文件格式
使用的主要文件格式有EXT2、EXT3、Ext4、RerserFS、ISO9660、vfat等
使用的主要文件格式有FAT16、FAT32、NTFS等
存储结构
逻辑结构犹如一棵倒置的树。
将每个硬件设备视为一个文件,置于树形的文件系统层次结构中。
因此,Linux系统的某一个文件就可能占有一块硬盘,甚至是远端设备,用户访问时非常自然
逻辑结构犹如多棵树(森林)。
将硬盘划分为若个分区,与存储设备一起(例如CD-ROM、USB存储器等),使用驱动器盘符标识,例如A:
代表软驱、C:
代表硬盘中的第一个分区等
文件命名
Linux文件系统中严格区分大小写,MyFile.txt与myfile.txt指不同的文件。
区分文件类型不依赖于文件后缀,可以使用程序file命令判断文件类型
Windows文件系统中不区分大小写,MyFile.txt与myfile.txt是指同一个文件。
使用文件后缀来标识文件类型,例如使用“.txt”表示文本文件
路径分隔符
Linux使用斜杠“/”分隔目录名,例如“/home/usr/share”,其中第一个斜杠是根目录(/),绝对路径都是以根目录作为起点
Windows使用反斜杠“\”分隔目录名,例如“C:
\program\username”,绝对路径都是以驱动器盘符作为起点
文件与目录权限
Linux最初的定位是多用户的操作系统,因而有完善文件授权机制,所有的文件和目录都有相应的访问权限
Windows最初的定位是单用户的操作系统,内建系统时没有文件权限的概念,后期的Windows逐渐增加了这方面的功能
4.3使用Nautilus文件管理器
作为GNOME默认的文件管理器Nautilus,它为用户提供了一个漫游文件系统的图形化工具。
使用Nautilus可以高效地查看文件夹、管理用户文件(剪切、复制、删除、发送到、重命名)、根据文件类型使用正确的应用程序打开,同时,还可以显示网页、访问网络资源(FTP、samba、NFS)。
而其中大部分操作,使用拖拽就可以实现。
4.3.1使用Nautilus浏览文件系统
Nautilus使用左侧栏中的树形目录,帮助用户在文件系统中快速查找目标文件。
单击目录树节点,右侧栏中即可显示该目录中的内容。
图4-3显示了根目录的内容,读者可以与表4-1作对照,建议读者最好能实际打开每个文件夹看一看其中的内容。
图4-3使用Nautilus浏览文件系统
若用户明确要查找的文件夹位置,可以单击位置按钮
打开【位置栏地址框】,在【位置地址框】中输入目录地址,直接打开文件夹。
也可使用【Ctrl】+【L】快捷键打开【位置栏地址框】,如图4-4所示。
图4-4使用位置栏定位文件
表4-3列出其他特殊目录的地址标识符。
表4-3特殊目录标识符
地址
描述
burn:
///
打开CD/DVD刻录机文件夹
computer:
///
装载主机的文件系统、光盘、可移动设备、软盘驱动器
file:
//目录