本文由马哥教育面授班24期学员推荐,转载自互联网,作者为郭東,内容略经小编改编和加工,观点跟作者无关,最后感谢作者的辛苦贡献与付出。
Linux和Windows操作系统中的文件系统些不同,在学习使用linux之前,能够了解这个不同之处助于后续的学习。本文先对Windows和Linux上面文件系统的一些概念进行区分,然后介绍一些Linux文件系统相关的原理,最后较为详细地介绍了Linux系统的目录结构。
一、Linux和Windows文件系统
下面分别简单介绍一下启动Windows和Linux之后,它们是怎样看待自己世界的。着重介绍Linux。
1、Window上面的文件系统
Windows系统中一切东西都是存放在硬盘上的。启动系统后,先硬盘,再硬盘上的分区和每个分区所对应的文件系统,最后是存放在某个分区特定的文件系统中的文件,也就是说,Windows是通过“某个硬盘-硬盘上的某个分区-分区上的特定文件系统-特定文件系统中的文件”这样的顺序来访问到一个文件的。
具体点说,假设我们的机器上面一个硬盘,硬盘分为个区,那么我们启动系统之后就会看到C,D,E个分区(也就是我们启动系统后看到的”C”盘,”D”盘等),每个分区可以被格式化为各自不同的文件系统(例如NTFS格式,FAT32格式等,文件系统的基本功能就是为了存放文件的,不同文件系统区别一般在于管理其中存放的文件的功能的强弱,分区被格式化成指定格式的文件系统之后,就可以存放任何文件和目录了。这里,我们可以把文件大体分为两种:系统文件和用户文件。一般来说系统文件(例如Windows操作系统本身,一些系统程序,程序运行所需的库文件,以及一些系统配置文件等)存放的默认位置在C盘,当然也可以在安装时候指定在其他盘;其它用户文件,包含用户后来安装的程序以及一些数据文件等,用户可以把它们随意存放在任意的分区。
这样组织优点更缺点。优点是:用户存放东西的位置比较自由,系统结构简单便于新用户上手。缺点很多这里只列出几种:(1由于对“系统文件”和“用户文件”存放位置缺乏细致的规定,数据组织的方式显得比较凌乱,并且两种文件之间很容易相互干扰(例如数据文。(2用户的使用经验对系统的使用效率影响很大。一般来说,我们使用Windows时候合理使用分区会提升的系统效率。例如根据需要设置合理的系统分区(C分区的大小,尽量少往C盘存放数据文件,根据具体情况可以将一些“重要并且常用的” 程序安装在C分区,随时保持系统目录的清洁和大小助于提升系统的运行速度,用户安装的一般软件尽量不要安装在C盘,安装软件时候指定的位置最好采用默认标准目录名称(例如X:\Program Files目录,这里X表示盘符而不要自己定义一些奇怪名字的目录,这样便于软件的维护等等。(3共享不便。Windows上经验的用户们会将自己的目录结构组织好,但是每个用户组织自己内容的方式是不一样的,所以他的机器上哪里存放了什么内容,别人很难知道,为共享带来了麻烦。但是这些在Linux系统中,情况就所不同了。
2、Linux上面的文件系统
在Linux系统中,正好相反,一切东西都是存放在一个唯一的“虚拟文件系统”中的,这个“虚拟文件系统”是树状的结构以一个根目录开始。启动系统后,先有这个虚拟文件系统,再硬盘,再把某个硬盘的某个分区做为这个虚拟文件系统的一部分(用某个子目录表示这个分区,再通过这个虚拟文件系统中对应硬盘分区的那个子目录确定硬盘分区中的特定文件系统,最后的文件就存放在这个特定的文件系统中,也就是说,Linux系统是通过“虚拟文件系统-硬盘-硬盘上的分区-分区上的特定文件系统-特定文件系统中的文件”这样的顺序来访问一个文件的。
可能对习惯了使用Windows的用户来说,这样的组织点不太适应,这里的“虚拟文件系统”,实质就是一颗目录树,最开始的目录叫做根目录,根目录中又有每一级子目录,或者文件,子目录又有子子目录和文件,其中每个子目录都特定的功能这个功能是约定俗成了的后面会详细说明……和Windows中把硬盘分成的C,D,E分区的概念不同了,Linux中最开始根本就没有硬盘的概念,就只有一个纯粹的“虚拟文件系统”。如果想要使用哪个硬盘的某个分区,就把那个分区“挂载”到某个子目录之下,这样硬盘中的分区,文件系统,目录等内容就呈现到了那个子目录里面。也就是说,在Linux中,我们使用硬盘中的数据,实际是先把硬盘“挂载”到某个子目录下,然后通过那个子目录来访问硬盘的。硬盘中原的数据组织结构都反映到了子目录上,成为了整个“虚拟文件系统”根目录下的一颗子树。
也许人会问,没这个“虚拟文件系统”就无法使用硬盘,但是最开始没有硬盘,那么这个“虚拟文件系统”以及相应的组织结构是怎么存放起来的呢?这个问题,就像先鸡还是先蛋这个问题一样看似简单实则……但是在Linux中,很轻易地跳出了这个思维循环,问题的答案并没在“虚拟文件系统”和“硬盘”这两者之间徘徊,而是第者——“内存”,Linux系统启动起来之后,整个“虚拟文件系统”的组织结构,都是随着每次系统的启动自动在内存中建立好了的,根本就不需要硬盘。
Linux这样组织它的目录结构,缺点当然更多的是优点。缺点就是,最开始“虚拟文件系统”中的每个子目录的功能是事先规定好了的,我们需要事先知道那些目录存放哪些文件,然后在相应的位置中创建自己的内容(当然最开始的新手,也可以像Windows那样随意地创建目录和文件,实际上最开始的目录也不多,主要就那么几个,花不了多长时间就会明白它们的作用的,本文后面着重对这些目录进行介绍。而它的优点这里只说几点:(1当我们了解了这些目录的功能之后,我们对整个Linux操作系统的运行机理也会一个大致的了解。(2助于我们以一种最高效的方式组织自己的数据,分类清晰并且不会对系统运行有任何影响,规定了最开始每个目录的功能,并没有限制我们的自由,因为我们知道我们可以在哪里创建自己的子目录并且在子目录中任意创建自己的文件。(3由于一个统一性的目录组织结构,所以Linux上面的用户在共享数据的时候,能够很容易地猜测出他所需要的数据大致存放在什么位置,同时也不会影响到私有数据的保密性(怎么存放自己的私有数据,那是用户自己决定的。
3、Linux文件系统在操作系统中的位置
在Linux系统中,主要两个东西:“虚拟文件系统”中的文件和Linux操作系统内核本身。逻辑上可以认为前者属于上层,后者在下层,前者基于后者,后者依赖前者而存在。
Linux把除了它本身(Linux操作系统内核以外的一切事物都看作是在“虚拟文件系统”中的文件了。无论是键盘,鼠标,数据,程序,CPU,内存,网卡……无论是硬件、软件、数据还是内存中的东西,我们都可以在虚拟文件系统中的相应子目录对他们进行访问和操作,操作统一。而实现这些管理的幕后就是Linux操作系统内核本身:启动Linux系统的时候,首先电脑把操作系统内核加载到内存中,内核本身提供了文件管理,设备管理,内存管理,CPU进程调度管理,网络管理等功能,等内核运行起来之后,就在内存中建立起相应的“虚拟文件系统”,最后就是内核利用它提供的那些功能,来管理虚拟文件系统中的硬件软件等各种资源了。
Linux把提供操作系统本身功能(管理计算机软硬件资源的那些部分划给了操作系统内核,使得操作系统内核成为一个独立的部分,有它自己的源代码;其他的一切(软件,硬件,数据)都根据其特性有自己的源代码或者自由地组织并且存放在那个“虚拟文件系统中”由操作系统内核来管理。这样,将系统本身和系统所管理的资源分开,有助于对系统或者系统所管理的资源进行灵活的定制和扩展,还能按需快速建立起只适合自己使用的操作系统(实际Ubuntu,Fedora,RedHat等各种不同的Linux操作系统简单来说就是对其文件系统和内核进行了不同的配置而产生的“大众化”的操作系统,相比之下,Windows就显得非常地零乱复杂,将系统、软件、硬件都混在了一起。
另外,我们还要注意个问题,就是在我们的角度上,是使用路径来访问一个文件的。表示文件的路径由“文件所在的目录+各级目录的分隔符+文件”个部分组成,这无论在Windows还是Linux上面,都是一样的,所不同的是,Windows下面目录分隔符是“\”,Linux下面是“/”,也许这也是两者之间为了表示其各自立场不同的一个原因吧?^_^
例如:
Window系统上的文件:D:\Program Files\PPStream\PPStream.exe
Linux系统上的文件:/usr/bin/screen
二、Linux上面的虚拟文件系统目录组织
实质上,我们启动系统所看到的“根目录”,逻辑上是Linux虚拟文件系统的根目录中的一个子目录,我们看不到除了这个“根目录”以外的其他的目录,那些目录和操作系统的具体实现相关是被操作系统内核隐藏起来了的,所以这里就介绍我们所能看到的文件系统中的“根目录”的各个子目录中的作用吧。
在Linux文件系统中的每一个子目录都有特定的目的和用途。一般都是根据FHS标准定义一个正式的文件系统结构的,这个标准规定了哪些目录应该哪些作用。这里我们先介绍一些日常经常用到的目录,然后给出FHS相关的内容。
1、常用的重要目录
这里,根据本人的使用经验,给出比较常见重要的一些目录,最开始我们对它们有所了解就可以了。随着对Linux使用的经验的加深,我们会了解越来越多的目录。对目录的功能知道得越多,我们对Linux系统的工作原理就理解的越深刻,理解操作系统的工作原理,更助于我们更为规范地使用和理解系统中每个目录存在的意义,直至最后几乎知道系统中的每个文件……
/
根目录。
包含了几乎所的文件目录。相当于中央系统。进入的最简单方法是:cd /。
/boot
引导程序,内核等存放的目录。
这个目录,包括了在引导过程中所必需的文件,引导程序的相关文件(例如grub,lilo以及相应的配置文件以及Linux操作系统内核相关文件(例如vmlinuz等一般都存放在这里。在最开始的启动阶段,通过引导程序将内核加载到内存,完成内核的启动(这个时候,虚拟文件系统还不存在,加载的内核虽然是从硬盘读取的,但是没经过Linux的虚拟文件系统,这是比较底层的东西来实现的。然后内核自己创建好虚拟文件系统,并且从虚拟文件系统的其他子目录中(例如/sbin 和 /etc加载需要在开机启动的其他程序或者服务或者特定的动作(部分可以由用户自己在相应的目录中修改相应的文件来配制。如果我们的机器中包含多个操作系统,那么可以通过修改这个目录中的某个配置文件(例如grub.conf来调整启动的默认操作系统,系统启动的择菜单,以及启动延迟等参数。
/sbin
超级用户可以使用的命令的存放目录。
存放大多涉及系统管理的命令(例如引导系统的init程序,是超级权限用户root的可执行命令存放地,普通用户无权限执行这个目录下的命令(但是时普通用户也可能会用到。这个目录和/usr/sbin; /usr/X11R6/sbin或/usr/local/sbin等目录是相似的,我们要记住,凡是目录sbin中包含的都是root权限才能执行的,这样就行了。后面会具体区分。
/bin
普通用户可以使用的命令的存放目录。
系统所需要的那些命令位于此目录,比如ls、cp、mkdir等命令;类似的目录还/usr/bin,/usr/local/bin等等。这个目录中的文件都是可执行的、普通用户都可以使用的命令。作为基础系统所需要的最基础的命令就是放在这里。