分类: 嵌入式
2009-10-28 21:20:53
很多使用Linux的用户都是从Windows转过来的,因此,对于他们来说,GNU/Linux上的文件系统组织形式和之前他们所熟悉的形式有很大的不同,最开始上手的时候会感到非常迷茫,往常天天见的C盘D盘哪去了?怎么出来一个/目录?为什么所有其它目录和所有可用资源都位于这个/文件树下?什么是根目录(这个和根用户有着本质不同,别搞混了)?问题接踵而来。本文试图以比较的方式,将你所熟悉的东西和现有Linux文件目录联系起来,给你一个大致的概念,以后再继续在学习过程中深入理解。
在安装了Linux之后,我们的硬盘会拥有一些不同的分区,而要使用它们,前提就是将他们作为目录树下的某个特定文件夹来挂载到系统上。例如,如果我们希望有一个特定的分区来成为我们的home文件夹,就将这个分区挂载为/home即可,以此类推。当然,还有一些外部资源,例如软驱(似乎很少人用了)、光驱或USB设备,它们在从前可能是直接挂载到根目录下,或者是/mnt目录,但按照现在的标准,它们都应该挂载到/media目录下,通常名字都是/media/cdrom0,/media/fd0这种。
另外一个大家很关心的问题,就是被安装的应用程序的位置。习惯了Windows下安装程序的朋友,对 Program Files 文件夹都不会陌生,也知道大多数软件的相关资源,都会在这个文件夹下面找到。但是Linux有很大的不同,由于Linux包的高度模块化,导致很多程序都不是完全独立的,而是在某些功能上对其它程序有一定依赖,因此,程序通常都不是安装在一个独立的文件夹下的。 相反,相关文件都被放到了目录树中预定义的位置里,这样其它程序需要用到时,才能轻易找到它们。这里所指的文件大多是指动态链接库或者可执行文件。
也就是说,在Linux下,我们告别了那著名的 Program Files ,要学会接受把一个软件安装到各个独立的文件夹下:二进制文件进入到bin目录,库文件进入到lib目录,文档进入到doc目录,等等。
好了,空谈了这么多理论,该搞点实际的了。接下来的表格,就说明了Windows下流行的文件系统在Linux下的对应位置:
MS Windows | GNU/Linux | |
---|---|---|
系统根目录 | C:\ | / |
用户目录 | C:\Documents and settings\USER\My documents (XP) 或者 C:\Users\USER (Vista) | /home/USER (np. /home/zdzisiek) |
配置文件 | 隐藏状态, 通过regedit 命令来定制 |
/etc |
系统文件 | C:\Windows | 二进制: /bin, /sbin库: /lib |
安装程序 | C:\Program Files | 二进制: /usr/bin, /usr/local/bin, etc库: /usr/lib, /usr/local/lib, /usr/share/lib, etc文档: /usr/share/doc/, /usr/doc, etc |
光驱 | D:\ (或者其它盘符) | /media/cdrom ( 或者以软链接形式存在的 /mnt/cdrom or /cdrom) |
软驱 | A:\ | /media/fd0 (或者以软链接形式存在的 /mnt/fd0 or /floppy) |
我们在这里不详细介绍如何理解并修改 /etc/fstab 文件,只针对其进行相关介绍。
通常在/etc/fstab中,我们会告诉系统,哪些资源是我们希望使用的,比如哪些驱动器,哪些分区,哪些外部设备,哪些共享文件系统,等等。这些资源能够在系统启动时被自动挂载,当然你也可以手工挂载它们,只需要修改auto/nonauto选项即可。
所有Linux系统的资源,在使用它们之前,都要先挂载它们。同样的,如果是移动设备,不再需要使用它们时,应该卸载它们。在Windows下,这些工作都是后台进行的,对你来说没有什么差别,Linux同样可以自动完成这些工作,只不过在Linux下,你可以拥有自己的选择。在很多人性化的发行版本中,像光驱或者USB设备这些流行的设备都会被系统自动挂载,但是,我们仍然有必要理解挂载的原理,只有这样,一旦我们的系统遇到错误了,我们才能自己手工进行操作。
关键的命令就是mount。比如这个命令
mount /media/cdrom
它会将光驱挂载到/media/cdrom目录下。同样的
umount /media/cdrom
将卸载这个设备。
除了挂载设备外,估计大家最为关心的另一个问题就是,如何挂载一个windows分区?这对于双系统用户来讲尤其重要。Windows环境下最常用的两种文件系统就是FAT和NTFS了,前者较老,更基础,但是在Linux下有比较良好的支持,可读可写;后者较新,更高级,但是过去在Linux下使用存在一些问题,比如不可写,虽然后来在高版本内核编译中能够打开,但是非常不稳定。当然,随着ntfs-3g的推出,这已经成为了历史。现在在很多发行版中都自带ntfs-3g,例如我现在所用的feisty。当然,如果系统不自带,你也可以自行下载安装。之后通过gksu ntfs-config,可以在非常傻瓜化的界面中选择要支持的NTFS分区以及是否打开支持NTFS写入功能。
当然,在操作Windows分区之前,我们需要先挂载它们。我们通过fdisk来看看,Linux下是如何辨识它们的:
# fdisk -l /dev/hda
Disk /dev/hda: 60.0 GB, 60011642880 bytes
255 heads, 63 sectors/track, 7296 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytesDevice Boot Start End Blocks Id System
/dev/hda1 1 1211 9727326 7 HPFS/NTFS
/dev/hda2 1216 7296 48845632+ 5 Extended
/dev/hda5 * 1216 3040 14648224+ 83 Linux
/dev/hda6 3041 3679 5132736 b W95 FAT32
/dev/hda7 3680 4049 2971993+ 83 Linux
/dev/hda8 4050 4319 2168743+ 82 Linux swap
/dev/hda9 4320 7296 23908216+ 83 Linux
这里的输出显示了硬盘上所有的分区和设备信息。我们发现,磁盘上有两个Windows分区,分别是hda1 (NTFS)以及hda6 (FAT32)。如果想挂载它们,只需要使用以下命令即可:
# mount -t ntfs /dev/hda1 /mnt/C
# mount -t vfat /dev/hda1 /mnt/D
注意,你首先要在mnt目录下分别建立/mnt/C 和 /mnt/D两个子目录,才能进行挂载。挂载完成后,我们就有权限通过mnt目录来访问这两个分区了。但是每次想使用它们都要这样做,是不是觉得有点麻烦?而且也只有root权限的用户才能访问它们。怎么办呢?此时,/etc/fstab文件就派上用场了。通过它,系统可以自动挂载你想挂载的资源,只需要注意权限分配即可。和这两个Windows分区相关的挂载命令行如下:
/dev/hda1 /mnt/hda1 ntfs ro,umask=0222,nls=utf8 0 2
/dev/hda6 /mnt/hda6 vfat rw,uid=1000,gid=1000,iocharset=cp936,locale=utf8 0 2
其中,rw和ro选项分别表示可读可写和只读。uid和gid选项则表示只有uid=100的用户或者gid=1000的用户组的成员才能完全访问相应分区。如果你想自行调整这些值,可以参考/etc/group文件。对于FAT32的分区hda6,由于其文件名中包括有unicode字符集,因此我们还指定了特定的编码支持。通常,只要是分区或者设备中有非ASCII字符,就要指定对相关编码的支持。
关于option的的设定,不同的机器环境是不一样的,这个最好是根据个人机器情况制定,如果装了ntfs-3g但是没有安装上面提到的config,可能fstab的写法也不一样,因此有问题请直接留言,我会尽力解答。
在linux系统中,所有的文件系统都包含在一个文件体系下。root文件夹是最顶层的目录,而它下面所有的子文件夹则组成了目录体系,这种组织结构是和 windows等其它操作系统不一样的,它们为每一个设备和分区都单独提供目录体系。下面就是linux中root目录下各个子文件夹进行组织的介绍。更详细的介绍,请参考
* /bin - 二进制应用程序,包括了绝大多数的执行文件。
* /boot - 启动所需要的文件,例如内核文件等。
* /dev - 你所有的设备。
* /etc - 针对你系统的所有配置文件。
* /etc/profile.d - 包括了在登入时通过/etc/profile运行的脚本。
* /etc/rc.d - 包括了很多在不同的运行级别下启动时运行的shell脚本。同时,通常还有用于启动网络的rc.inet1,用于加载模块化设备驱动的 rc.modules,能够被修改用以运行管理员所需要的命令的rc.local脚本(有点类似于DOS下的批处理文件)。
* /etc/rc.d/init.d - 包括了绝大多数基于rpm的系统中的初始化脚本。
* /etc/rc.d/rc*.d - “*’’ 表示是默认运行级别的数字,不同数字对应不同的目录。这些目录包含了用于启动和停止属于当前运行级别的文件。在基于rpm的系统中,这些文件是以它们自己原始脚本的符号链接形式存在的。
* /etc/skel - 包含各种例程或初始化界面的轮廓,通常还包含了很多子文件夹以及文件,它们都是某个新用户刚刚拥有自己的home目录后最先看到的东西。
* /etc/X11 - X Window的配置文件。
* /home - 不用说了吧。用户的本地文件夹。
* /lib - 系统库(有点类似于windows下的program files文件夹)。
* /lost+found - 丢失的文件从这里也许可以找到。
* /media - 诸如cdroms, 数码相机等设备的挂载点。
.
* /mnt - 用于挂载文件系统。
* /opt - 可选的用于安装程序的文件夹。
* /proc - 包含了各种进程信息的动态文件夹。
* /root -root用户的home目录。
* /sbin - 仅用于系统管理的程序。
* /sys - 包含系统信息。
* /tmp - 临时文件。
* /usr - 用户正常情况下使用的应用程序,包括了绝大多数应用程序。
* /var - 主要是登陆信息,数据库信息等等。
* /usr/local/bin - 用于存放你自己程序的地方,它们将不会被升级操作覆盖。
* /usr/share/doc - 文档
参考文章: