Linux 文件系统类型
磁盘文件系统。
包括硬盘、CD-ROM、DVD、USB存储器、磁盘阵列等。常见文件系统格式有:autofs、coda、Ext(Extended File sytem,扩展文件系统)、Ext2、Ext3、VFAT、ISO9660(通常是CD-ROM)、UFS(Unix File System,Unix文件系统)、FAT(File Allocation Table,文件分配表)、FAT16、FAT32、NTFS(New Technology File System)等。
网络文件系统。
是可以远程访问的文件系统,这种文件系统在服务器端仍是本地的磁盘文件系统,客户机通过网络远程访问数据。常见文件系统格式有:NFS(Network File System,网络文件系统)、Samba(SMB/CIFS)、AFP(Apple Filling Protocol,Apple文件归档协议)和WebDAV等。
专有/虚拟文件系统。
不驻留在磁盘上的文件系统。常见格式有:TMPFS(临时文件系统)、PROCFS(Process File System,进程文件系统)和LOOPBACKFS(Loopback File System,回送文件系统)。
目前Ext3是Linux系统广泛使用的一种文件格式。在Ext2基础上,对有效性保护、数据完整性、数据访问速度、向下兼容性等方面做了改进。Ext3最大特点是:可将整个磁盘的写入动作完整地记录在磁盘的某个区域上,以便在必要时回溯追踪。
FAT16、FAT32、NTFS是Windows NT、Windows 2000、Windows XP系统主要的文件系统格式。Linux系统同样可以很好的支持这些文件系统格式。不过,以往版本的Linux系统需要单独挂载Windows文件系统,而Ubuntu Linux可以自动识别这些文件格式,以只读方式访问计算机磁盘中Windows系统上的文件。
/////////////////////////////////////////////////////////////////////////
文件系统结构
Linux文件系统就是一个树形的分层组织结构,根(/)作为整个文件系统的惟一起点,其他所有目录都从该点出发。Linux的全部文件按照一定的用途归类,合理地挂载到这棵“大树”的“树枝”或“树叶”上,如图7.1所示,而这些全不用考虑文件的实际存储位置是在硬盘上,还是在CD-ROM或USB存储器中,甚至是在某一网络终端里。
在Linux中,将所有硬件都视为文件来处理,包括硬盘分区、CD-ROM、软驱以及其他USB移动设备等。为了能够按照统一的方式和方法访问文件资源,Linux提供了每种硬件设备相应的设备文件。一旦Linux系统可以访问到某种硬件,就将该硬件上的文件系统挂载到目录树中的一个子目录中。例如,用户插入USB移动存储器,Ubuntu Linux自动识别USB存储器后,将其挂载到“/media/disk”目录下,而不像Windows系统将USB存储器作为新驱动器,表示为“F:”盘。
绝对路径和相对路径
Linux文件系统是树形分层的组织结构,且只有一个根节点,在Linux文件系统中查找一个文件,只要知道文件名和路径,就可以惟一确定这个文件。例如“/usr/games/gnect”就是位于“/usr/ games/”路径下的4子连线游戏应用程序文件,其中第一个“/”表示根目录。这样就可以对每个文件进行准确的定位,并由此引出两个概念:
q 绝对路径。指文件在文件系统中的准确位置,通常在本地主机上,以根目录为起点。例如“/usr/games/gnect”就是绝对路径。
q相对路径。指相对于用户当前位置的一个文件或目录的位置。例如用户处在usr目录中时,只需要“games/gnect”就可确定这个文件。
Ubuntu Linux系统是严格区分大小写的,这意味着文件和目录名的大小写是有区别的。例如File.txt、FILE.TXT和file.txt文件是3个完全不同的文件。通常按照惯例,Linux系统大多使用小写。其次,Linux系统中文件类型与文件后缀没有直接关系。这一点与Windows不同,例如Windows将“.txt”作为文本文件的后缀,应用程序依此判断是否可以处理该类型文件。
Ubuntu Linux基本目录 文件层次结构标准(FHS,File Hierarchy Standard)
目 录 名
描 述
/
Linux文件系统根目录
/bin
存放系统中最常用的可执行文件(二进制)
/boot
存放Linux内核和系统启动文件,包括Grub、lilo启动器程序
/dev
存放所有设备文件,包括硬盘、分区、键盘、鼠标、USB、tty等
/etc
存放系统的所有配置文件,例如passwd存放用户账户信息,hostname存放主机名等
/home
用户主目录的默认位置
/initrd
存放启动时挂载initrd.img映像文件的目录,以及载入所需设备模块的目录
/lib
存放共享的库文件,包含许多被/bin和/sbin中程序使用的库文件
/lost+found
存放由fsck放置的零散文件
/media
Ubuntu系统自动挂载CD-ROM、软驱、USB存储器后,存放临时读入的文件
/mnt
该目录通常用于作为被挂载的文件系统的挂载点
/opt
作为可选文件和程序的存放目录,主要被第3方开发者用来简易地安装和卸装他们的软件包
/proc
存放所有标志为文件的进程,它们是通过进程号或其他的系统动态信息进行标识,例如cpuinfo文件存放CPU当前工作状态的数据
/root
根用户(超级用户)的主目录
/sbin
存放更多的可执行文件(二进制),包括系统管理、目录查询等关键命令文件
/srv
存放系统所提供的服务数据
/sys
该目录用于将系统设备组织或层次结构,并向用户程序提供详细的内核数据信息
/tmp
存放用户和程序的临时文件,所有用户对该目录都有读写权限
/usr
用于存放与系统用户直接有关的文件和目录,例如应用程序及支持它们的库文件。以下是/usr中部分重要的目录
/usr/X11R6:
X Window系统
/usr/bin
用户和管理员的标准命令
/usr/include
C/C++等各种开发语言环境的标准include文件
/usr/lib
应用程序及程序包的连接库
/usr/local
系统管理员安装的应用程序目录
/usr/local/share
系统管理员安装的共享文件
/usr/sbin
用户和管理员的标准命令
/usr/share
存放使用手册等共享文件的目录
/usr/share/dict
存放词表的目录
/usr/share/man
系统使用手册
/usr/share/misc
一般数据
/usr/share/sgml
SGML数据
续表
目 录 名
描 述
/usr
/usr/share/xml
XML数据
/var
通常用于存放长度可变的文件,例如日志文件和打印机文件。以下是/var中部分重要的目录
/var/cache
应用程序缓存目录
/var/crash
系统错误信息
/var/games
游戏数据
/var/lib
各种状态数据
/var/lock
文件锁定记录
/var/log
日志记录
/var/mail
电子邮件
/var/opt
/opt目录的变量数据
/var/run
进程的标示数据
/var/spool
存放电子邮件,打印任务等的队列目录。
/var/tmp
临时文件目录
比较项目
Linux文件系统
Windows文件系统
文件格式
使用的主要文件格式有EXT2、EXT3、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\ame”,绝对路径都是以驱动器盘符作为起点
文件与目录权限
Linux最初的定位是多用户的操作系统,因而有完善文件授权机制,所有的文件和目录都有相应的访问权限
Windows最初的定位是单用户的操作系统,内建系统时没有文件权限的概念,后期的Windows逐渐增加了这方面的功能
Linux下文件系统的比较和选择
基本我Linux下一直用的是reiserfs,那大概是从有一次刚开始用linux不久时的突然断电开始的。那次没有正常关机以后,Linux系统就再也启动不了 了。听说reiserfs能在断电以后自动修复,而且速度很快,我就开始了自己的reiserfs旅程。
以前我认为linux的所有的文件系统(ext2,ext3,reiserfs,jfs,xfs等)都没有碎片,但是遇到了 和windows一样的情况:刚装完系统时运行很快,而越用越慢。最近在Arch Linux的论坛上才看到有人说reiserfs有碎片,而且速度比较慢,于是让我开始怀疑我用了多年的reiserfs,于是也就去查找了一下这文面的 文章。
Filesystems (ext3, reiser, xfs, jfs) comparison on Debian Etch是一篇最近才写的在Debian Etch上面对各种文件系统测试的报告,略去一些具体的数据,我把得出的结果放在这里,以备有同样需要的朋友参考:
要尽量最大化地使用分区的容量(也就是少浪费空间),请使用ReiserFS, JFS 或 XFS。
想快速地创建文件系统和快速地挂载分区,请使用 JFS 或 XFS
需要对大文件快速操作,请使用 JFS 或 XFS,若想最小化CPU使用量,JFS会更好。
对于大的目录树,使用EXT3或者XFS。有人建议对于大量小文件使用ReiserFS比较好好,不好对于由10KB到5MB之间的不同大小文件组成的目录树,使用XFS或ext3在现时中会更快一些。JFS虽然能最小化cpu占用率,不过在速度上还是有些慢。
列出目录中的内容和在某一特定的目录树下搜索,有两种情况。(1) 更快但是cpu使用率更高(ReiserFS,XFS);(2)慢一些但是低cpu 使用率(ext3,JFS)。XFS是一个很好的折中,它有比较快的速度,适度的cpu占使用率和可接受范围的页错误。
结论:ext3浪费过多的空间而且格式化比较慢;ReiserFS挂载时间长,而且对于日常操作会产生比较多的页错误;JFS是CPU占用率最低的。XFS应该是用来作家用和小型商用文件服务器综合起来看最合适的文件系统,因为:
它能最大化地使用分区。
它是创建,挂载和卸载最快的。
它是对于500MB以上大文件操作最快的。
它是对于中小文件操作第二快的
它在对于大的目录树的搜索的时间和cpu使用率间找到了一个比较好的平衡点。
它不是cpu使用率最使的但是占用的系统资源在比较老的机子上也是可以接受的。
当然,对于日常应用来说鉴于XFS的速度和可伸缩性,它也是最佳的选择。
linux的文件系统目录说明及Windows文件系统比较
大多数由windows平台转来的用户在使用linux文件系统的时候都会感到困惑。linux文件系统与windows文件系统有很大的差别。本文设身处地的为新手介绍他们的不同点并且向新手介绍linux的文件系统。
作为开端,只有一个单独的顶级目录结构。所有一切都从 '根' 开始,用 '/' 代表, 并且延伸到子目录。DOS/Windows有不同的分区,同时目录都存于分区上。linux则通过 '加载' 的方式把所有分区都放置在 '根' 下制定的目录里。
下最接近于 '根' 的是c:。一句话总结:Windows下,目录结构属于分区;Linux下,分区 '加载' 于目录结构。
在windows下, 启动时检测不同的分区并被赋予一个分区字母。在linux下除非你加载一个分区或设备,否则系统不会知道那个分区的存在。这看上去也许不是访问分区或设备的最方便的方式,但是这种方式提供了伟大的机动性。
这种构建的方式被称为统一的文件系统,超越了windows所使用的方式。举个使用 /usr 的例子。这个目录包含了大多数的系统可执行文件。在 Linux文件系统下,你可以选择把它加载为其他分区甚至网络上的其他计算机。系统不会感知其中的不同,因为它表现出的只是本地目录结构下众多的目录中的一个而已。你是否有妄图在windows下移动可执行文件和数据,而得到的是不得不去修改注册表或干脆蓝屏?你可曾奢望过移动 c: 到其他分区上?
新手容易困惑的另一点是斜杠 '/' 的使用,在DOS/Windows下使用的是反斜杠 '\\' .
在linux中,windows的 c 是用类似 /c/windows/system 来表示的。Linux是免费的系统。在windows之前,Unix已经存在了很久。从DOS开始使用 '/' 选项而 '\\' 作为目录分隔符。
更加麻烦的是Linux同样选择了大小写敏感。这意味着字母的大小写变得非常重要。所以在这种情况下THIS和ThIs是不同的。这个规定会使dos用户遇到很多麻烦。
现在我们来看一看linux文件系统目录结构的规划。下面是在root下 'ls -p' 的结果:
代码:
bin/ dev/ home/ lost+found/ proc/ sbin/ usr/ boot/ etc/ lib/ mnt/ root/ tmp/ var//sbin
这个目录包含了所有使系统运行的关键二进制可执行文件。包含了系统管理和维护硬件配置的程序。你可以在这里找到lilo, fdisk, init, ifconfig等等。
这里有所有用户都需要的关键程序。
/usr/sbin
另一个包含系统可执行文件的目录。这个目录包含了系统管理员使用的一些其他程序。这里你可以找网络守护程序以及一些不需要维护和修理系统的管理员所使用的程序。
/bin
相对于/sbin, bin目录包含一些系统管理员和普通用户都可以使用的命令。这个目录通常包含诸如bash, csh等shell,以及诸如cp, mv, rm, cat, ls等非常有用的命令。这些命令对于用户来说是不可缺少的。
/usr/bin
包含一些其它的用户命令。从另一方面看,这些命令本质上并不是为用户准备的。
/boot
这个目录包含system.map文件以及Linux kernel。Lilo将启动扇区的备份放在这里。
/dev
这是一个非常有趣的目录,是Linux文件系统的一个闪亮的特性 - 所有对象都是文件或目录。仔细观察这个目录你会发现hda1, hda2等, 它们代表系统主硬盘的不同分区。/dev/cdrom和/dev/fd0代表你的CDROM驱动器和floppy驱动器。看上去可能有些奇怪,但比较文件和硬件的特性这却是十分合理的。它们都可以读出和写入。例如/dev/dsp,这个文件代笔你的扬声器。那么写入这个文件的数据都回传送到喇叭。试一试 'cat /etc/lilo.conf > /dev/dsp' 你会听到一些声音。这是你的 lilo.conf 文件的声音!同样,向 /dev/ttyS0 ( COM 1 ) 读出或写入数据你可以和接到上面的设备进行通讯。
/home
是多用户环境,所以每一个用户都有一个只有自己可以访问的目录(当然管理员也可以访问)。它们以 /home/username 的方式存在。这个目录也保存一些应用对于这个用户的配置,比如 IRC, X 等。
/lib
这里包含了系统程序所需要的所有共享库文件,类似于 Windows 的共享库 DLL 文件。
/lost+found
应该正确的关机。但有时你的系统也可能崩溃掉或突然断电使系统意外关机。那么启动的时候 fsch 将会进行长时间的文件系统检查。Fsck 会检测并试图恢复所发现的不正确的文件。被恢复的文件会放置在这个目录中。所恢复的文件也许并不完整或并不合理,但毕竟提供了一些恢复数据的机会。
/mnt
这是一个普通的加载目录,在这里你可以加载你的文件系统或设备。加载是使一个文件系统对于系统可用的过程。在加载后你的文件可以在加载目录下访问。这个目录通常包含加载目录或用于加载软驱和光驱的子目录。如果需要,你也可以在这里建立其它的加载目录。
对于加载目录的位置并没有强制性的要求,你可以在系统的任意位置建立加载目录。建立 /mnt 只是为了使系统更工整的惯例。
/opt
这个目录包含所有默认系统安装之外的软件和添加的包。一般来说你可以在这里找到 KDE 和 StarOffice 。这个目录一般并不会经常被启用,这是Unix系统安装的标准。
/proc
这是系统中极为特殊的一个目录,实际上任何分区上都不存在这个目录。它实际是个实时的、驻留在内存中的文件系统。详细信息请参阅 http://www.freeos.com/articles/2879/
/root
这是root的用户用户目录。
/tmp
这里包含大多数要用到的临时文件。许多程序在这里建立lock文件和存储临时数据。有些系统会在启动或关机时清空此目录。
/usr
这是系统中很重要的一个目录,这里包含所有用户的二进制文件。X,及其库文件,用户程序比如 telnet, ftp 等等都在这里。/usr/doc包含系统文档。/usr/src/linux包含 Linux kernel 的源码。
/var
这里存储假脱机(spooling)数据,比如 mail 以及打印机守护的输出。系统日志也存放在这里。你还可以在/var/named下找到BIND的数据库,在/var/yp下找到NIS的数据库。
这只是个短小基础的Linux文件系统介绍。如果要全面发挥 Linux 的潜能,那么这些Linux文件系统层面的基础知识都是必须了解的。
这里有一篇文档详细介绍了Linux文件系统的标准结构: 下载本文