1、不同的操作系统需要使用不同类型的文件系统,为了与其他操作系统兼容,以相互交换数据,通常操作系统都能支持多种类型的文件系统,比如Windows 2000 Server,系统默认或推荐采用的文件系统是NTFS,但同时也支持 FAT32 或 FAT16 文件系统;DOS 和 Windows 9x 一般采用 FAT16 或 FAT32,不支持NTFS 文件系统。Linux内核支持十多种不同类型的文件系统,对于 Red Hat Linux,系统默认使用 ext2或 ext3和 swap文件系统,下面对 Linux 常用的文件系统作一个简单介绍。1、ext2 与ext3 文件系统 ext 是第一个专门为
2、Linux 设计的文件系统类型,称为扩展文件系统,在 Linux 发展的早期,起过重要的作用。由于稳定性,速度和兼容性方面存在许多缺陷,ext 现已很少使用。ext2 是为解决 ext 文件系统存在的缺陷而设计的可扩展、高性能的文件系统,称为二级扩展文件系统。ext2 于1993 年发布,在速度和 CPU 利用率上具有较突出的优势,是 GNU/Linux系统中标准的文件系统,支持 256个字节的长文件名,文件存取性能极好。ext3 是 ext2的升级版本,兼容 ext2,在 ext2的基础上,增加了文件系统日志记录功能,称为日志式文件系统,是目妆 Linux 默认采用的文件系统。日志 式文件系
3、统在因断电或其他异常事件而停机重启后,操作系统会根据文件系统的日志,快速检测并恢复文件系统到正常的状态,并可提高系统的恢复时间,提高数据 的安全性。若对数据有较高安全性要求,建议使用 ext3 文件系统。日志文件系统是目前 Linux 文 件系统发展的方向,常用的还用reiserfs 和 jfs 等日志文件系统。2、swap 文件系统 swap 文件系统用于Linux的交换分区。在 Linux 中,使用整个交换分区来提供虚拟内存,其分区大小一般应是系统物理内存的 2 倍,在安装 Linux 操作系统时,就应创分交换分区,它是 Linux 正常运行所必需的,其类型必须是 swap,交换分区由操作
4、系统自行管理。3、vfat 文件系统vfat 是Linux 对 DOS,Windows 系统下的 FAT(包括 fat16 和 Fat32)文件系统的一个统称。4、NFS 文件系统NFS 即网络文件系统 ,用于在 UNIX 系统间通过网络进行文件共享 ,用户可将网络中 NFS服务器提供的共享目录 挂载到本地的文件目录中,从而实现操作和访问 NFS 文件系统中的内容。5、ISO 9660 文件系统 该文件系统中光盘所使用的标准文件系统,Linux对该文件系统也有很好的支持,不仅能读取光盘和光盘ISO 映像文件,而且还支持在 Linux 环境中刻录光盘。Red Hat Linux支持的文件系统很多
5、,在些就不逐一介绍,要想了解其支持的文件系统类型,可通过以下命令来查看: # ls /lib/modules/2.4.20.8/kernel/fs以下是 Linux 支持的文件系统 汇总 1.minix:是 Minix 操作系统使用的文件系统,是 Linux 最先使用的文件系统。它有许多缺点:分区只能小于 64MB,只支持短文件名,单一的时间戳,等等。在软盘和动态磁盘领域仍然有用。2.ext 是对 Minix 的扩展。已完全被 ext2 取代,内核最终将不会支持它。3.ext2是 Linux 使用的,性能很好的文件系统,用于固定文件系统和可活动文件系统。它是作为 ext 文件系统的扩展而设计的
6、。ext2 在Linux所支持的文件系统中,提供最好的性能(在速度和 CPU 使用方面),简短的说,ext2 是Linux的主要文件系统。4.ext3是对 ext2 增加日志功能后的扩展。它向前,向后兼容 ext2。意为 ext2 不用丢失数据和格式化就可以转换为 ext3,ext3 也可以转换为ext2 而不用丢失数据(只要重新安装该分区就行了 )。我从 2001 年 10 月就使用 ext3,它简单且稳定。在 RedHat7.2 和 Mandrake8.0,中作 为一个选项。强烈推荐使用这种文件系统。5.xiafs 作为 Minix 文件系统的一个稳定,安全的扩展, 提供基本的 最常用的特
7、点。目前已经停止开发和维护了。不太常使用。6.msdos是 DOS, Windows 和一些os/2 计算机使用的文件系统。文件名不能 超过 8 个字符,然后跟一个3 个字符的后缀。7.umsdos 是 Linux 使用的扩展的 DOS文件系统。增加了长文件名支持,UID/GID,POSIX权限, 特殊文件等而依然保持和 DOS 文件系统兼容。8.vfat 是 Windows95,Windows NT 使用的扩展的 DOS 文件系统。增加长文件名支持。9.proc 是一种假的文件系统, 用于和内核数据结构接口, 它不占用磁盘空间,参考 man proc。10.iso9660 是一种针对ISO9
8、660 标准的CD-ROM 文件系统。自动支持两种扩展( 看下面)。11.High Sierra 是 ISO9660 标准的前身。Linux 自动支持它。Rock Ridge 是 Rock Ridge interchange Protocol 协议的一个产品,用于进一步向 Unix系统描述 ISO9660 文件系统下的文件。另外提供诸如长文件名,UID/GID,POSIX权 限,等信息。Linux自动支持它。12.hpfs 是 OS/2 使用的高性能的文件系统。在 Linux 系统中是只读的,因为缺乏相应的文档资料。13.sysv 是 SystemV/Coherent 文件系统在 Linux
9、上的实现。它实现了所有的 Xenix,SystemV/386,和 Coherent 文件系统。14.nfs 是用于存取远方计算机硬盘的文件 系统。15.smb 是支持 SMB 协议的网 络文件系统 ,Windows 用它来实现工作组共享。16.ncpfs 是 Novell NetWare 使用的,支持 NCP协议的网络文件系统。17.Devpts是一个虚拟的文件系统, 一般安装在/dev/pts。为了得到一个虚拟终端,进程打开/dev/ptmx, 然后就可使用虚拟终端。18.fat 不是一个单独的文件系统, 而是 msdos, umsdos 和 vfat 文件系统的常用部分。19.UFS 是一
10、个广泛使用于各种操作系统的 文件系统20.swap 是一种特殊的分区,用于在内存和硬盘间交换数据的文件系统。21.raiserfs 是 Linux 内核 2.4.1 以后(2001 年1 月) 支持的, 一种全新的日志文件系统。22.hfs hfs(=hierarchical files system)是苹果文件系统。23.ntfsWindows NT 文件系统。文件系统是linux 的一个十分基础的知识,同时也是学习 linux 的必备知识。本文将站在一个较高的视图来了解linux的文件系统,主要包括了linux磁盘分区和目录、挂载基本原 理、文件存储结构、软链接硬链接、和常见目录的介绍。相
11、信有了这些知识对于深入的学习linux会有一定的帮助。文章例子主 要是基于 ubuntu发行版。如有不对之处请大家多多指出。1.Linux磁盘分区和目录 Linux发行版本之间的差别很少,差别主要表现在系统管理的特色工具以及软件包管理方式的不同。目录结构基本上都是一样的。 Windows 的文件结构是多个并列的树状结构,最顶部的是不同的磁盘(分区),如:C,D,E,F 等。Linux的文件结构 是单个的树 状结构.可以用 tree 进行展示。 在 Ubuntu 下安装tree (sudo apt-get install tree),并可通过命令来查看。每次安装系统的时候我们都会进行分区,Lin
12、ux下磁盘分区 和目录的关系如下: 任何一个分区都必须挂载到某个目录上。 目录是逻辑上的区分。分区是物理上的区分。 磁盘 Linux 分区都必须挂载到目录树中的某个具体的目录上才能进行读写操作。 根目录是所有 Linux 的文件和目录所在的 地方,需要挂载上一个磁盘分区。 以下是我们可能存在的一种目录和分区关系:图 1:目录和分区关系Q:如何查看分区和目录及使用情况? fdisk查看硬盘分区表 df:查看分区使用情况 du: 查看文件占用空间情况 Q: 为什么要分区,如何分区? 可以把不同资料,分别放入不同分区中管理,降低风险。 大硬盘搜索范围大,效率低 磁盘配合只能对分区做设定 /home
13、/var /usr/local经常是单独分区,因为经常会操作,容易产生碎片 2.Mount挂载和 NFS 简介 挂载的概念 :当要使用某个设备时,例如要读取硬盘中的一个格式化好的分区、光盘或软件等设备时,必须先把这些设备对应到某个目录上,而这个目录就称为“挂载点(mount point)”,这样才可以读取这些设备,而这些对应的动作就是 “挂载”。 将物理分区细节屏蔽掉。用户只有统一的逻辑概念。所有的东西都是文件。Mount命令可以实现挂载:mount -fnrsvw -t vfstype -o options device dirQ:所有的磁盘分区都必须被挂载上才能使用,那么我们机器上的硬盘分
14、区是如何被挂载的?A:这主要是它利用了/etc/fstab文件。每次内核加 载它知道从这里开始 mount 文件系统。每次系统启动会根据该文件定义自动挂载。若没有被自动挂载,分区将不能使用。 如下是我的/etc/fstab的定义,主要是根据装机的分区来的:# proc /proc proc defaults 0 0#/dev/sda1 被 自动挂载到 /UUID=cb1934d0-4b72-4bbf-9fad-885d2a8eeeb1 / ext3 relatime,errors=remount-ro 0 1# /dev/sda5 被自动挂载到分区/homeUUID=c40f813b-bb0e
15、-463e-aa85-5092a17c9b94 /home ext3 relatime 0 2#/dev/sda7 被自动挂载 到 /workUUID=0f918e7e-721a-41c6-af82-f92352a568af /work ext3 relatime 0 2#分区 /dev/sda6 被自动挂载到 swapUUID=2f8bdd05-6f8e-4a6b-b166-12bb52591a1f none swap sw 0 0Q:移动硬盘如何挂载?如何挂载一个新的分区?移动硬盘有驱动模块会自动挂载,如果有个新硬盘,要先进行分区,并通过 mount 命令挂载到某个文件夹。如果要自动挂载则
16、可以修改/etc/fstab文件.NFS 简介:NFS 相信在很多地方都有广泛使用,是一个非常好的文件共享方式。我们公司所使用的上传服务就是把文件上传到某台网络服务器上,中间就是通过 NFS 实现。使用 NFS客户端可以透明的地访问服务器端的文件。NFS 也是通过 mount 来实现,底层是通过NFS 通信协议实现。基本原理:图 2:NFS 基本原理Ubuntu 下面 Ubuntu 下的例子服务端:$apt-get install nfs-kernel-servervi /etc/exports 添加 nfs目录: /personal/nfs_share10.1.60.34(rw,sync,n
17、o_root_squash)$sudo exportfs -r$sudo /etc/init.d/portmap start$sudo /etc/init.d/nfs-kernel-server start客户端:$sudo apt-get install nfs-common$sudo mount 10.19.34.76:/personal/nfs_share /nfsshare 例子:3.文件类型 Linux下面的文件 类型主要有 :a) 普通文件:C 语言元代码、SHELL脚本、二进制的可执行文件等。分为纯文本和二进制。 b) 目录文件:目录,存储文件的唯一地方。 c) 链接文件:指向同
18、一个文件或目录的的文件。 d) 特殊文件:与系统外设相关的,通常在/dev 下面。分为块设备和字符设备。 可以通过 ls l, file, stat 几个命令来查看文件的类型等相关信息。4.文件存储结构 Linux正统的文件系统(如 ext2、ext3)一个文件由目录项、inode和数据块组成。目录项:包括文件名和 inode 节点号。Inode:又称文件索引节点,是文件基本信息的存放地和数据块指针存放地。数据块:文件的具体内容存放地。Linux正统的文件 系统(如 ext2、3 等)将硬盘分区时会划分出目录块、inode Table区块和 data block数据区域。一个文件由一个目录项、
19、inode和数据区域块组成。Inode包含文件的属性(如读写属性、owner等,以及指向数据块的指针),数据区域块则是文件内容。当查看某个文件时,会先从 inode table中查出文件属性及数据存放点,再从数据块中读取数据。 站在 2w 英尺视图,文件存储结构大概如下:图 3:文件存储结构 2w 英尺视图其中目录项的结构如下(每个文件的目录项存储在改文件所属目录的文件内容里):图 4:目录项结构 其中文件的inode结构如下(inode里所包含的文件信息可以通过 stat filename 查看得到):图 5:inode结构以上只反映大体的结构,linux文件系统本身在不断发展。但是以上概念
20、基本是不变的。且如 ext2、ext3、ext4 文件系统也存在很大差别,如果要了解可以查看专门的文件系统介绍。5.软连接、硬链接 软链接和硬链接是我们常见的两种概念:硬连接:是给文件一个副本,同时建立两者之间的连接关系。修改其中一个,与其连接的文件同时被修改。如果删除其中color=red任意一个/color 其余的文件将不受影响。软连接:也叫符号连接,他只是对源文件在新的位置建立一 个“快捷(借用一下 wondows 常用词)”,所以,当源文件删除时,符号连接的文件将成为无源之水-仅仅剩下个文件名了,当然删除这个连接,也不会影响到源文件,但对连接文件的使用、引用都是直接调用源文件的。具体关
21、系可以看下图:图 5:软链接和硬链接从图上可以看出硬链接和软链接的区别:1:硬链接原文件和新文件的 inode 编号一致。而软链接不 一样。2:对原文件删除,会导致软链接不可用,而硬链接不受影响。3:对原文件的修改,软、硬链接文件内容也一样的修改,因为都是指向同一个文件内容的。6.文件目录管理命令 磁盘和文件空间 fdisk df du文件目录与管理 cd pwd mkdir rmdir ls cp rm mv 查看文件内容 cat:cat file查看文件的内容。全程式 concatenate 的意思,将文件内容连续输出到屏幕上。第一行到最后一行显示。tac:tac file和 cat 刚好
22、相反 是从最后一行到第一行的方式查看。cat 有个比较不好的地方时当文件比较大时候没办法看清楚,这个时候可以用 more 或者 Less 命令。more:more file如果使用 grep 或者find 等命令时,可以配合使用 more一页一页的查看。如果看到一半想退出,则敲入q即可退出。less:less fileless 比more 更有弹性,可以上下翻页。如果只想读取文件的头几行或者文件的末尾几行,可以用 head 或 tail.head n file:读取文件的前 n 行。tail n file:读取文件末尾 n 行。以上命令都是用于查看字符文件,二进制文件出来的都是乱码,要看二进制
23、文件的内容,可以用 od命令,如查看一个MP3 文件里面的内容:od shijiemori.mp3文件目录与权限 chmod chown chgrp umask 文件查找 which:which filename该命令用于查询通过 PATH 路径到该路径内查找可执行 文件。如:Which passwd:查找可执行文件 passwdwhereis:whereis -bmsu keyword该命令用于把相关字的文件和目录都列出来。(Linux 会将文件都记录在一个文件数据库里面,该命令式从数据库去查询,所以速度比较快,Linux每天会更新该数据库)locate:locate filename该命令
24、用于把相关字的文件和目录都列出来。查找数据特别快,也是通过数据库方式来查询。但是数据库一周更新一次,所以可能有些存在数据查不到。可以去修改配置文件。find:find path 参数 keyword该命令用于在指定路径下查找文件。不是通过数据来查询,所以速度会比较慢。 7.常见目录解释 Linux各种发行版 的目录结构 基本一致,各个目录简 单介绍如下:目录 描述 / 根目录 /bin 做为基础系统所需要的最基础的命令就是放在这里。比如 ls、cp、mkdir等命令;功能和/usr/bin类似,这个目录中的文件都是可执行的,普通用户都可以使用的命令。 /boot Linux的内核及引导系统程序
25、所需要的文件,比如 vmlinuz initrd.img 文件都位于这个目录中。在一般情况下,GRUB 或LILO 系统引导管理器也位于这个目录;启动装载文件存放位置,如kernels,initrd,grub。一般是一个独立的分区。 /dev 一些必要的设备,声卡、磁盘等。还有如 /dev/null. /dev/console /dev/zero /dev/full 等。 /etc 系统的配置文件存放地. 一些服务器的配置文件也在这里;比如用户帐号及密码配置文件; /etc/opt:/opt 对应的配置文件 /etc/X11:Xwindows 系统配置文件 /etc/xml:XML 配置文件
26、/home 用户工作目录,和个人配置文件,如个人环境变量等,所有的账号分配一个工作目录。一般是一个独立的分区。 /lib 库文件存放地。bin 和 sbin 需要的库文件。类似 windows 的DLL。 /media 可拆卸的媒介挂载点,如 CD-ROMs、移动硬盘、U 盘,系统默认会挂载到这里来。 /mnt 临时挂载文件系统。这个目录一般是用于存放挂载储存设备的挂载目录的,比如有 cdrom 等目录。可以参看/etc/fstab的定义。 /opt 可选的应用程序包。 /proc 操作系统运行时,进程(正在运行中的程序)信息及内核信息(比如 cpu、硬盘分区、内存信息等)存放在这里。/pro
27、c 目录伪装的文件系统 proc 的挂载目录,proc 并不是真正的文件系统,它的定义可以参见 /etc/fstab 。 /root Root 用户的工作目录/sbin 和 bin 类似,是一些可执行文件,不过不是所有用户都需要的,一般是系统管理所需要使用得到的。 /tmp 系统的临时文件,一般系统重启不会被保存。 /usr 包含了系统用户工具和程序。 /usr/bin:非必须的普通用户可执行命令 /usr/include:标准头文件 /usr/lib:/usr/bin/ 和 /usr/sbin/的库文件/usr/sbin:非必须的可执行文件/usr/src:内核源码/usr/X11R6:X
28、Window System, Version 11, Release 6. /srv 该目录存放一些服务启动之后需要提取的数据 想要安装 Linux 的新手在分区这个环节可能会碰到这样的问题,明明硬盘还 有好多 G 的剩余空间,却提示你因为空间不够而无法继续安装 Linux。这完全是因为你的电脑由于先前安装了 Windows 而全部使用了FAT 或者 是 NTFS的文件系统类型。而 Linux 使用的是ext 的文件系统类型,因为你的硬盘没有给 ext 文件系统划分任何空间,所以它自然会提示你空间不够。Linux的文件系统类型概述Linux的默认文件系统类型为ext3,Linux 的文件系统是
29、从 Unix 的发展而来的。Unix 文件系统的设计在当时有许多创新,其设计思想对于后来的许多操作系统都有着极为深远的影响。这也是 Unix 对计算机技术的主要贡献之一。Linux没有盘符这个概念,它就是一个树型的目录结构。一棵大树从根部开始长可以长出许多枝条,枝条上可以再长枝条或者是叶子。在这里,枝条就好比文件夹,叶子就是文件。由于三级扩展文件系统类型(ext3)是一种高性能的文件系统类型,所以 Linux 不像 Windows,几乎不需要 用一段时间就进行碎片整理的工作,因为 ext3 很好地减少了磁盘碎 片化。作了以上基础的介绍后,大家可以了解到,一个好的文 件系统对于管理好们存储在电脑
30、里的文件以及信息是多么的重要。文件系统不只有一种, Linux与Windows 使用的是两种工作原理不同 的文件系统类型所以互 不兼容,但只要你合理地对硬盘进行分区,Linux 完全可以与Windo ws 共存于一台电脑。下面的内容是详细的对Linux的文件系统进行介绍,有兴趣的可以继续往下看。Linux的文件系统目前 Linux 系统都提供了几个标准的文件系统,如根文件系 统,/usr 文件系统等。值得一提的是,这些文件系统可以放在一个分区上,也可以放在多个分区上。最好的例子就是,许多网站常常将/home 独立放在一个分区,遇到系统崩溃时,用户的信息不会丢失。下面就分别介绍这几个文件系统的功
31、能及其主要目录。1、根文件系统(/)根文件系统含有引导和运行 Linux 系统必需的文件。如果以单用 户维护模式启动系统时,只能安装此文件系统,根文件系统主要包括以下目录:/bin:存放常用的系统命令/dev:存放与硬件设备驱动程序有关的文件/etc:许多系统配 置文件存放于此/lib:存放常用程序的库函数文件/mnt: 用于挂载移 动存储设备 的临时文件系统的目录/sbin:存放系统自举和恢复时所用的程序/tmp: 暂存区2、/usr 文件 系统/usr 文件系统含有可以被共享的命令和系统管理数据库 ,其中包括机器特定的可共享文件和与机器无关的共享文件,前者是在某一类机器上可以执行的文件,后
32、者则是可以在网络上的任何类型的机器上共享的文件,该文件可以在网络上共享以节省本地硬盘的空间。/usr 文件 系统主要包括以下目录:/usr/bin:存放一般用户的常用命令以及实用程序/usr/include:存放 C 语言的头文件/usr/lib:存放拥护程序的库函数,与目录/lib 相比,更专用些/usr/sbin:存放系统管理命令/usr/share:存放不同体系结构可共享的文件/usr/loacl:通常存放为本地用户共享使用的文件3、/var 文件 系统/var 文件系统包括用于管理和维护本地计算机文件,这些主要是 一些进程频繁变动的文件,如系统活动日志,邮箱文件,应用软件包 等。/va
33、r 文件系统主要包括以下目录:/var/log:存放系统日志和记帐文件/var/cron:存放 cron 日志文件/var/lp:存放打印活动的日志文 件/var/mail:存放用户的邮件文件/var/spool:存放临时假脱机缓冲文件/var/uucp:存放 uucp 系统日志 和状态文件4、/home 文件系统/home 文件系统主要用于存放用户文件,每新建一个用户,就会创建一个“/home/用户名”的文件夹5、/boot 文件系统/boot 文件系统包含了系统引导内核以及相关的工具,启动文件,核心程序,都在这个目录下面,它们是 Linux 必需的部分Linux重要目录介绍/bin:存放
34、SHELL 常用命令或者实用程序/dev:存放设备文件的特殊目录/etc:存放系统管 理与配置文 件的目录/lib:C 语言程序 或其他语言 运行库文件存放目录/mnt:安装可以动 文件系统的 目录/opt:该目录包括一系列实际系统软件/slib:包括系统使 用的共享库/usr:用户服务例程和用户主目录的存放目录,/usr/sbin/messages 和/usr/sbin/syslog 文件包含系统错误消息的记录,对于系统诊断相当有用/boot:该目录是引导文件系统的安装点/tmp:临时目录/var:该目录包括指定给某一单独可户或服务器的非共享 SSO文件以上这些目录都是 Linux 必需的,每一个目录里的每一个文件都起着一颗螺丝钉的作用