一 、Linux文件结构
文件结构是文件存放在磁盘等存贮设备上的组织方法。主要体如今对文件和目录的组织上。
目录提供了管理文件的一个方便而有效的途径。
Linux使用标准的目录结构,在安装的时候,安装程序就已经为用户建立了文件系统和完整而固定的目录组成形式,并指定了每一个目录的做用和其中的文件类型。
/根目录
┃
┏━━┳━━━┳━━━┳━━━╋━━━┳━━━┳━━━┳━━━┓
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
bin home dev etc lib sbin tmp usr var
┃ ┃
┏━┻━┓ ┏━━┳━━┳━━┳━┻━┳━━┓
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
rc.d cron.d X11R6 src lib local man bin
┃
┏━━━┳━━┳━┻━┳━━━┓
┃ ┃ ┃ ┃ ┃
init.d rc0.d rc1.d rc2.d …… linux bin lib src
Linux采用的是树型结构。最上层是根目录,其余的全部目录都是从根目录出发而生成的。微软的DOS和windows也是采用树型结构,可是在DOS和 windows中这样的树型结构的根是磁盘分区的盘符,有几个分区就有几个树型结构,他们之间的关系是并列的。可是在linux中,不管操做系统管理几个磁盘分区,这样的目录树只有一个。从结构上讲,各个磁盘分区上的树型目录不必定是并列的。
若是这样讲很差理解的话,我来举个例子:
有一块硬盘,分红了4个分区,分别是/;/boot;/usr和windows下的fat
对于/和/boot或者/和/usr,它们是从属关系;对于/boot和/usr,它们是并列关系。
若是我把windows下的fat分区挂载到/mnt/winc下,(挂载??哦,别急,呵呵,一会就讲,一会就讲。)那么对于/mnt/winc和/usr或/mnt/winc和/boot来讲,它们是从属于目录树上没有任何关系的两个分支。
由于linux是一个多用户系统,制定一个固定的目录规划有助于对系统文件和不一样的用户文件进行统一管理。但就是这一点让不少从windows转到linux的初学者感到头疼。下面列出了linux下一些主要目录的功用。
/bin 二进制可执行命令
/dev 设备特殊文件
/etc 系统管理和配置文件
/etc/rc.d 启动的配置文件和脚本
/home 用户主目录的基点,好比用户user的主目录就是/home/user,能够用~user表示
/lib 标准程序设计库,又叫动态连接共享库,做用相似windows里的.dll文件
/sbin 系统管理命令,这里存放的是系统管理员使用的管理程序
/tmp 公用的临时文件存储点
/root 系统管理员的主目录(呵呵,特权阶级)
/mnt 系统提供这个目录是让用户临时挂载其余的文件系统。
/lost+found 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里
/proc 虚拟的目录,是系统内存的映射。可直接访问这个目录来获取系统信 息。
/var 某些大文件的溢出区,比方说各类服务的日志文件
/usr 最庞大的目录,要用到的应用程序和文件几乎都在这个目录。其中包 含:
/usr/X11R6 存放X window的目录
/usr/bin 众多的应用程序
/usr/sbin 超级用户的一些管理程序
/usr/doc linux文档
/usr/include linux下开发和编译应用程序所须要的头文件
/usr/lib 经常使用的动态连接库和软件包的配置文件
/usr/man 帮助文档
/usr/src 源代码,linux内核的源代码就放在/usr/src/linux里
/usr/local/bin 本地增长的命令
/usr/local/lib 本地增长的库
二 、linux文件系统
文件系统指文件存在的物理空间,linux系统中每一个分区都是一个文件系统,都有本身的目录层次结构。linux会将这些分属不一样分区的、单独的文件系统按必定的方式造成一个系统的总的目录层次结构。一个操做系统的运行离不开对文件的操做,所以必然要拥有并维护本身的文件系统。
Llinux文件系统使用索引节点来记录文件信息,做用像windows的文件分配表。
索引节点是一个结构,它包含了一个文件的长度、建立及修改时间、权限、所属关系、磁盘中的位置等信息。一个文件系统维护了一个索引节点的数组,每一个文件或目录都与索引节点数组中的惟一一个元素对应。系统给每一个索引节点分配了一个号码,也就是该节点在数组中的索引号,称为索引节点号。
linux文件系统将文件索引节点号和文件名同时保存在目录中。因此,目录只是将文件的名称和它的索引节点号结合在一块儿的一张表,目录中每一对文件名称和索引节点号称为一个链接。
对于一个文件来讲有惟一的索引节点号与之对应,对于一个索引节点号,却能够有多个文件名与之对应。所以,在磁盘上的同一个文件能够经过不一样的路径去访问它。
能够用ln命令对一个已经存在的文件再创建一个新的链接,而不复制文件的内容。链接有软链接和硬链接之分,软链接又叫符号链接。它们各自的特色是:
硬链接:原文件名和链接文件名都指向相同的物理地址。
目录不能有硬链接;硬链接不能跨越文件系统(不能跨越不一样的分区)
文件在磁盘中只有一个拷贝,节省硬盘空间;
因为删除文件要在同一个索引节点属于惟一的链接时才能成功,所以能够防止没必要要的误删除。
符号链接:用ln -s命令创建文件的符号链接符号链接是linux特殊文件的一种,做为一个文件,它的数据是它所链接的文件的路径名。相似windows下的快捷方式。
能够删除原有的文件而保存链接文件,没有防止误删除功能。
这一段的的内容过于抽象,又是节点又是数组的,我已经尽可能通俗再通俗了,又很差加例子做演示。你们若是仍是云里雾里的话,我也没有什么办法了,只有先记住,往后在实际应用中慢慢体会、理解了。这也是我学习的一个方法吧。
三 、挂载文件系统
由上一节知道,linux系统中每一个分区都是一个文件系统,都有本身的目录层次结构。linux会将这些分属不一样分区的、单独的文件系统按必定的方式造成一个系统的总的目录层次结构。这里所说的“按必定方式”就是指的挂载。
将一个文件系统的顶层目录挂到另外一个文件系统的子目录上,使它们成为一个总体,称为挂载。把该子目录称为挂载点。
举个例子吧:
根分区:
/根目录
┃
┏━━━━┳━━━━━┳━━━━━┳━━━━━╋━━━━━┳━━━━━┳━━━━━┳━━━━━┓
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
bin home dev etc lib sbin tmp usr var
┃
┏━┻━┓
┃ ┃
rc.d cron.d
┃
┏━━━┳━━━┳━┻━┳━━━━┓
┃ ┃ ┃ ┃ ┃
init.d rc0.d rc1.d rc2.d ……
/usr分区 :
usr
┃
┏━━━━┳━━━╋━━━┳━━━┳━━━┓
┃ ┃ ┃ ┃ ┃ ┃
X11R6 src lib local man bin
┃ ┃
┃ ┏━━━╋━━━┓
┃ ┃ ┃ ┃
linux bin lib src
挂载以后就造成了文章开始时的那个图。像不像挂上去的?
注意:一、挂载点必须是一个目录。
二、一个分区挂载在一个已存在的目录上,这个目录能够不为空,但挂载后这个目录下之前的内容将不可用。
对于其余操做系统创建的文件系统的挂载也是这样。可是须要理解的是:光盘、软盘、其余操做系统使用的文件系统的格式与linux使用的文件系统格式是不同的。光盘是ISO9660;软盘是fat16或ext2;windows NT是fat1六、NTFS;windows98是fat1六、fat32;windows2000和windowsXP是fat1六、fat3二、 NTFS。挂载前要了解linux是否支持所要挂载的文件系统格式。
挂载时使用mount命令:
格式:mount [-参数] [设备名称] [挂载点]
其中经常使用的参数有
-t 指定设备的文件系统类型,常见的有:
minix linux最先使用的文件系统
ext2 linux目前经常使用的文件系统
msdos MS-DOS的fat,就是fat16
vfat windows98经常使用的fat32
nfs 网络文件系统
iso9660 CD-ROM光盘标准文件系统
ntfs windows NT 2000的文件系统
hpfs OS/2文件系统
auto 自动检测文件系统
-o 指定挂载文件系统时的选项。有些也可用在/etc/fstab中。经常使用的 有
codepage=XXX 代码页
iocharset=XXX 字符集
ro 以只读方式挂载
rw 以读写方式挂载
nouser 使通常用户没法挂载
user 可让通常用户挂载设备
提醒一下,mount命令没有创建挂载点的功能,所以你应该确保执行mount命令时,挂载点已经存在。(不懂?说白了点就是你要把文件系统挂载到哪,首先要先建上个目录。这样OK?)
例子:windows98装在hda1分区,同时计算机上还有软盘和光盘须要挂载。
# mk /mnt/winc
# mk /mnt/floppy
# mk /mnt/cdrom
# mount -t vfat /dev/hda1 /mnt/winc
# mount -t msdos /dev/fd0 /mnt/floppy
# mount -t iso9660 /dev/cdrom /mnt/cdrom
如今就能够进入/mnt/winc等目录读写这些文件系统了。
要保证最后两行的命令不出错,要确保软驱和光驱里有盘。(要是硬盘的磁盘片也能够常常随时更换的话,我想就不会犯这样的错误了 :-> )
若是你的windows98目录里有中文文件名,使用上面的命令挂载后,显示的是一堆乱码。这就要用到 -o 参数里的codepage iocharset选项。codepage指定文件系统的代码页,简体中文中文代码是936;iocharset指定字符集,简体中文通常用cp936或 gb2312。
当挂载的文件系统linux不支持时,mount必定报错,如windows2000的ntfs文件系统。能够从新编译linux内核以得到对该文件系统的支持。关于从新编译linux内核,就不在这里说了。
四 、自动挂载
每次开机访问windows分区都要运行mount命令显然太烦琐,为何访问其余的linux分区不用使用mount命令呢?
其实,每次开机时,linux自动将须要挂载的linux分区挂载上了。那么咱们是否是能够设定让linux在启动的时候也挂载咱们但愿挂载的分区,如windows分区,以实现文件系统的自动挂载呢?
这是彻底能够的。在/etc目录下有个fstab文件,它里面列出了linux开机时自动挂载的文件系统的列表。个人/etc/fstab文件以下:
/dev/hda2 / ext3 defaults 1 1
/dev/hda1 /boot ext3 defaults 1 2
none /dev/pts devpts gid=5,mode=620 0 0
none /proc proc defaults 0 0
none /dev/shm tmpfs defaults 0 0
/dev/hda3 swap swap defaults 0 0
/dev/cdrom /mnt/cdrom iso9660 noauto,codepage=936,iocharset=gb2312 0 0
/dev/fd0 /mnt/floppy auto noauto,owner,kudzu 0 0
/dev/hdb1 /mnt/winc vfat defaults,codepage=936,iocharset=cp936 0 0
/dev/hda5 /mnt/wind vfat defaults,codepage=936,iocharset=cp936 0 0
在/etc/fstab文件里,第一列是挂载的文件系统的设备名,第二列是挂载点,第三列是挂载的文件系统类型,第四列是挂载的选项,选项间用逗号分隔。第五六列不知道是什么意思,还望高手指点。
在最后两行是我手工添加的windows下的C;D盘,加了codepage=936和iocharset=cp936参数以支持中文文件名。参数defaults实际上包含了一组默认参数:
rw 以可读写模式挂载
suid 开启用户ID和群组ID设置位
dev 可解读文件系统上的字符或区块设备
exec 可执行二进制文件
auto 自动挂载
nouser 使通常用户没法挂载
async 以非同步方式执行文件系统的输入输出操做
你们能够看到在这个列表里,光驱和软驱是不自动挂载的,参数设置为noauto。(若是你非要设成自动挂载,你要确保每次开机时你的光驱和软驱里都要有盘,呵呵。)
linux