LUPA首页 | 资讯 | 教程 | 下载 | 求职 | 方案 | 博客 | 交易 | 英文版
LUPA论坛


 
标题: linux文件系统详细讲解
风雷
特约撰稿人
Rank: 8Rank: 8



宣传大使奖  
UID 23572
精华 3
积分 845
帖子 154
LUPA币 762 点
阅读权限 100
注册 2006-8-3
发表于 2007-5-29 00:47  资料 主页 文集 短消息 
linux文件系统详细讲解

本文链接: http://www.forwind.cn/2007/05/29/linux-filesystem/
很多使用Linux的用户都是从Windows转过来的,因此,对于他们来说,GNU/Linux上的文件系统组织形式和之前他们所熟悉的形式有很大的不同,最开始上手的时候会感到非常迷茫,往常天天见的C盘D盘哪去了?怎么出来一个/目录?为什么所有其它目录和所有可用资源都位于这个/文件树下?什么是根目录(这个和根用户有着本质不同,别搞混了)?问题接踵而来。本文试图以比较的方式,将你所熟悉的东西和现有Linux文件目录联系起来,给你一个大致的概念,以后再继续在学习过程中深入理解。

Table of Contents


  1. 基本问题 - 我的文件夹在哪里?
  2. 管理分区和驱动器(/etc/fstab)
  3. 附录: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 WindowsGNU/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 文件,只针对其进行相关介绍。
通常在/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。当然,如果系统不自带,你也可以自行下载安装。之后通过gksuntfs-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 bytes
Device 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,uid=1000,gid=1000 0 2
/dev/hda6       /mnt/hda6       vfat    rw,codepage=852,uid=1000,gid=1000, iocharset=iso8859-2 0 2
其中,rw和ro选项分别表示可读可写和只读。uid和gid选项则表示只有uid=100的用户或者gid=1000的用户组的成员才能完全访问相应分区。如果你想自行调整这些值,可以参考/etc/group文件。对于FAT32的分区hda6,由于其文件名中包括有东欧字符集,因此我们还指定了特定的编码支持。通常,只要是分区或者设备中有非ASCII字符,就要指定对相关编码的支持。
附录:linux文件系统层次简单介绍在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 - 文档
参考文章:Linux file system and disks
顶部
[广告] 推荐个超酷的web2.0相册
风雷
特约撰稿人
Rank: 8Rank: 8



宣传大使奖  
UID 23572
精华 3
积分 845
帖子 154
LUPA币 762 点
阅读权限 100
注册 2006-8-3
发表于 2007-5-29 00:48  资料 主页 文集 短消息 
有一个问题一直没有搞明白

为什么网站上的内容复制过来,所有的换行都消失了,内容完全挤在一起了?
顶部
[广告] 推荐个超酷的web2.0相册
cooldgjk
开源主力军
Rank: 3Rank: 3



UID 30303
精华 0
积分 626
帖子 68
LUPA币 592 点
阅读权限 30
注册 2007-1-28
发表于 2007-5-29 08:05  资料 短消息 
复制的有问题的吧。




顶部
[广告] 推荐个超酷的web2.0相册
josonchen
开源主力军
Rank: 3Rank: 3
HUMAN CORE


UID 24775
精华 0
积分 1075
帖子 302
LUPA币 924 点
阅读权限 30
注册 2006-9-15
来自 广东省
发表于 2007-5-29 08:57  资料 主页 个人空间 短消息  QQ
博客复制的时候也有点问题!这稿不错!




邮箱:quanyan.chen@hotmail.com
博客:http://joson.lupaworld.com
生命满希望,前路由我创!
顶部
 


当前时区 GMT+8, 现在时间是 2008-7-24 16:03
浙ICP备06002895号

    本论坛支付平台由支付宝提供
携手打造安全诚信的交易社区 Powered by Discuz! 5.0.0  © 2001-2006 Comsenz Inc.
Processed in 0.060126 second(s), 6 queries , Gzip enabled

清除 Cookies - 联系我们 - LUPA开源社区 - Archiver - WAP