Linux文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有Linux 用户和程序看到的文件、目录、软连接及文件保护信息等都存储在其中。
它采用的是树形结构,与windows不同(每个分区都是一棵文件树,根节点为盘符),它是单一的一棵树,无论有多少分区,都包含在以/为根节点的树结构上。这里特别说明一下,分区是物理上的区分,目录则是逻辑上的区分;Linux中每个分区都要挂载到目录树中一个具体的目录下才能访问,其中根目录必须挂载一个分区。
这里可能对挂载这个词非常陌生,Linux里这就是文件系统与一个存储设备关联起来的过程。后面会着重介绍。
因为linux是一个多用户系统,制定一个固定的目录规划有助于对系统文件和不同的用户文件进行统一管理。
以下就是主要的目录和它对应的功用:
/bin :二进制可执行命令
/dev :设备特殊文件
/etc :系统管理和配置文件
/etc/rc.d :启动的配置文件和脚本
/home: 用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示
/lib :标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件
/sbin :系统管理命令,这里存放的是系统管理员使用的管理程序
/tmp :公用的临时文件存储点
/root :系统管理员的主目录
/mnt :系统提供这个目录是让用户临时挂载其他的文件系统。
/lost+found :这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里
/proc :虚拟的目录,是系统内存的映射。可直接访问这个目录来获取系统信 息。
/var :某些大文件的溢出区,比方说各种服务的日志文件
/usr :最庞大的目录,要用到的应用程序和文件几乎都在这个目录。其中包 含:
/usr/X11R6 :存放X window的目录
/usr/bin :众多的应用程序
/usr/sbin :超级用户的一些管理程序
/usr/doc :linux文档
/usr/include :linux下开发和编译应用程序所需要的头文件
/usr/lib :常用的动态链接库和软件包的配置文件
/usr/man :帮助文档
/usr/src :源代码,linux内核的源代码就放在/usr/src/linux里
/usr/local/bin :本地增加的命令
/usr/local/lib :本地增加的库
挂载
前面已经提到过挂载,它是将一个存储设备的文件系统的顶级目录挂到目录树上的一个具体目录下。
这里注意两点:
1、挂载点必须是一个目录。
2、一个分区挂载在一个已存在的目录上,这个目录可以不为空,但挂载后这个目录下以前的内容将不可用。
挂载使用mount命令,但挂载前需要先了解Linux是否支持该类型的文件系统。
其格式为: mount [参数] dev dir
dev代表设备名,dir代表要挂载点。
参数常用的有
-t :指定设备的文件系统类型,常见的有:
minix linux最早使用的文件系统
ext2 linux目前常用的文件系统
msdos MS-DOS的fat,就是fat16
vfat windows98常用的fat32
nfs 网络文件系统
iso9660 CD-ROM光盘标准文件系统
ntfs windows NT 2000的文件系统
hpfs OS/2文件系统
auto 自动检测文件系统
-o:指定挂载文件系统时的选项。有些也可用在/etc/fstab(设置自动挂载的文件)中。常用的有:
codepage=XXX 代码页
iocharset=XXX 字符集
ro 以只读方式挂载
rw 以读写方式挂载
nouser 使一般用户无法挂载
user 可以让一般用户挂载设备
例如:挂载一个CD设备——
mk /mnt/cdrom #建立挂载点
mount -t iso9660 /dev/cdrom /mnt/cdrom #挂载到挂载点
文件存储结构
Linux 正统的文件系统将硬盘分区时会划分出目录块、 inode Table 区块和 data block 数据区域。该系统下的一个文件由一个目录项、 inode 和数据区域块组成。 Inode 包含文件的属性 ( 如读写属性、 owner 等,以及指向数据块的指针 ) ,数据区域块则是文件内容。 当查看某个文件时,会先从 inode table 中查出文件属性及数据存放点,再从数据块中读取数据。
一个目录文件的内容是由该目录下目录项文件组成。
而目录项文件由文件名和Inode编号组成。
Inode则由以下项组成:
对于一个文件来说有唯一的Inode编号与之对应,对于一个Inode编号,却可以有多个文件名与之对应。因此,在磁盘上的同一个文件可以通过不同的路径去访问它。这就是链接的概念所在。
可以用ln命令对文件再建一个新的链接,这样就可一使用一个新的路径去访问它而不用再复制文件。这里链接又分为硬链接和软链接两种:
软链接:也叫符号连接 , 他只是相当于对源文件在新的位置建立一个“快捷方式”,所以,当源文件删除时,符号连接的文件将成为无源之水, 仅仅剩下个文件名了,当然删除这个连接,也不会影响到源文件,但对连接文件的使用、引用都是直接调用源文件的。它建立的是一个指向,即链接文件内的内容是指向原文件的指针,它们是两个文件。
硬链接:原文件名和连接文件名都指向相同的物理地址。所以修改任一个硬链接的文件,都会对其他文件造成一样的修改。硬连接是不会建立inode的,他只是在文件原来的inode link count域再增加1而已,也因此硬链接是不可以跨越文件系统的。相反都是软连接会重新建立一个inode,当然inode的结构跟其他的不一样,他只是一个指明源文件的字符串信息。一旦删除源文件,那么软连接将变得毫无意义。而硬链接删除的时候,系统调用会检查inode link count的数值,如果他大于等于1,那么inode不会被回收。因此文件的内容不会被删除。
下面是建立链接的命令(加-s就是建立软链接):
ln [options] existingfile newfile(existingfile 待建立链接文件的文件,newfile是新创建的链接文件)
ln [options] existingfile-list directory (把指令目录下的文件全建链接到目标目录)
-f 建立时,将同档案名覆盖(不询问).
-i 覆盖前进行询问.