免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345下一页
最近访问板块 发新帖
查看: 10726 | 回复: 45
打印 上一主题 下一主题

开始学Linux了,我的学习笔记 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-05 13:37 |只看该作者 |倒序浏览
开始学习LINUX了,

每个星期学一些,打算象以前读书一样做些笔记,

week1  2005/11/1 - 2005/11/6 第一章 安装和bootloader
week2  2005/11/7 - 2005/11/13 第二章 文件系统和RPM (未完)

[ 本帖最后由 sam's 于 2005-11-8 19:47 编辑 ]

Chapter 1.rar

24.95 KB, 下载次数: 301

Chapter 2.rar

18.45 KB, 下载次数: 217

论坛徽章:
0
2 [报告]
发表于 2005-11-05 13:39 |只看该作者
鼓励!!!最好别用附件,贴出来,大家可以帮你看看

论坛徽章:
0
3 [报告]
发表于 2005-11-05 13:57 |只看该作者

好,那就贴出来

第一章:Linux的安装

每次学习我碰到的第一个问题就是环境问题,我总想第一时间搭建一个学习的环境。尤其是Linux这种的企鹅动物类的确是一个需要亲历亲为才能掌握的冬冬。于是我,一个Linux新手,第一件事情就是在自己常去的技术网站和google寻找RHEL的最新的安装盘片了。(我总是喜新厌旧,总想要找到最新的版本,不过也是,最新版本应该也是最简单的版本,因为软件总是在不断进步的,越来越好用才对。)不辞辛苦,你总能找到的,我就在以下网站(http://it.cnlinux.net/iso/)找到iso盘片,下载并安装的。如果在公司使用有盗版问题的话,对于RHEL来说,CentOS是一个很好的替代品,其实就是用redhat源代码重新编译,大家可以去centos.org下载,其实是完全一样的东西,而且是free的,很棒哦。我都开始转向CentOS了,懒得去每次找RHEL的最新版本。

有了安装盘片,就可以开始安装了。可以在自己的家用电脑上安装windows+linux双系统,如果在公司,我想大家最好的办法还是使用VMWare或者是Virtual PC这样的虚拟机。虽然本人觉得VMWare更好用和更健壮,不过Virtual PC没有版权问题,对于我们这种只是用于学习的人来说也是已经足够的了。我个人就在家使用vmware,在公司使用virtual pc。

我以前安装过RHEL3,感觉RHEL4的安装过程更加友好了,不过在virtual pc上却给我带来很多的麻烦。我把我的安装经历和我觉得应该知晓的预备知识document在这里。

一.           预备知识:
        分区
PC的BIOS的工作真的是很简单,做完机器自检之后,如果是从硬盘启动的,只会认定硬盘的0磁面0磁道1扇区,将之读入内存,并将控制权交给它。这个0磁面0磁道1扇区就是我们常常称为硬盘主引导扇区的MBR (Master Boot Record),我们知道一个扇区只有512个字节,还被分成了三个部分:前面部分是启动代码,叫作主引导记录,共446个字节,接着后面的是64个字节是硬盘分区表DPT (Disk Partition Table),用于存放主分区信息,MBR的最后是结束标志2字节。
由于PC硬盘的最初的分区方案只允许4个主分区(Primary Partition )。实际使用中这太少了,为克服这个设计问题,人们发明了扩展分区(Extended Partition)。这个方法允许将基本分区分为若干子分区,这个基本分区被称为扩展分区,而其子分区被称为逻辑分区(Logical Partition)。硬盘是一个整体,每个主分区都有一个启动扇区。
最简单的主引导记录包括一段小程序,读入分区表,检查哪个分区是活动分区(即启动分区),并读入活动分区的第一个扇区:该分区的启动扇区(MBR是整个硬盘的启动扇区)。这个启动扇区包括另一个小程序,读入这个分区(假设是可启动的)上操作系统的第一个部分,然后把控制权交给它。

大家都知道在Linux中一切都是文件,包括我们的硬盘和分区!在Linux 里硬盘和分区都是设备文件,存放在/dev目录下。IDE设备是/dev/hdX,而SCSI设备是/dev/sdX,X是设备标签。IDE设备标签一般从a到d ,为什么,因为我们只有两个IDE接口,而每个IDE接口只能接最多两个硬盘。/dev/hda代表主板上主IDE插口上的主设备,/dev/hdb代表主板上主IDE插口上的从设备,/dev/hdc代表主板上从IDE插口上的主设备,/dev/hdd代表主板上从IDE插口上的从设备。我没有SCSI硬盘,所以不做过多讲述。

如果我们有了一个连接在主板上主IDE插口上的主设备位置的硬盘/dev/hda ,我们开始为硬盘分区,从上面所讲,我们知道硬盘最多可以有4个主分区,而在Linux就这么约定的1-4是主分区(不管实际上有几个主分区),5-8是逻辑分区(不管它在哪个基本分区中),所以从/dev/hda1到/dev/hda4 这4个分区设备文件是为主分区预留的。扩展分区可以是从/dev/hda2到/dev/hda4中的任意一个,但逻辑分区只能是从/dev/hda5开始,而且一定是从/dev/hda5开始的。分区使用的fdisk我想大家应该都会使用吧,而且在Linux安装过程之中可以使用图形化的工具Disk Druid,很容易,使用确省选项就很好。

在windows之中每个硬盘或者分区都有个盘符,好像C:, D:之类的。这一点Linux是与之大不相同的,在Linux之中一切皆文件,我们知道/dev之下的设备文件代表了这个硬盘或者分区,如果分区要能够被我们使用的话,其实最终也需要在其上建立文件系统(就是格式化啊),并最终成为一个目录。所以可能/usr和/boot是在两个不同的分区(甚至硬盘)之下的。不要认为大家都在/之下就认为在一个分区之内。

我把这种目录叫做接挂点(mount point),比如/opt与/不在同一个分区之内,如果我只是把/ mount了,而没有mount /opt,我会发现虽然在/之下有一个/opt目录(怎么发现,使用ls或者dir命令嘛),但是这时候你会发现/opt这时只是一个空目录而已。所有的接挂目录都必须事先存在的,好像我们要mount一个cdrom到/mnt/cdrom,我们必须事先建立一个空的/mnt/cdrom目录。

Note:
e2label又是什么东西呢,我觉得就是我们给分区取的别名。比如我们把hda1分区的mount point设为了/boot,那么我们如果引用/boot的时候,其实也就是在引用hda1。这种资料应该记录在分区的super block之中。在使用fdisk等分区工具创建新的分区的时候,已经帮我们用接挂目录建立了别名。当然我们可以通过e2label命令进行更改,不过最好不要更改,因为如果在Bootloader或者其他什么脚本使用了LABEL=/之类的引用的话,会导致我们的linux的无法正常启动。有兴趣可以做个小实验,启动linux之后,在shell之中打入以下命令,使用fdisk –p /dev/hda 列出分区(不要用swap分区做实验,swap分区没有别名的),然后使用e2label /dev/hda? 逐个查看一下它的别名,找到/boot分区,我知道一般GRUB会用LABEL来引用他们,现在使用e2label /dev/hda? newlabel来更改它的别名,不要再叫/boot。好了, reboot后看看结果吧。
        BootLoader
Bootloader的出现也是因为原来的引导代码只是将控制交给活动分区的启动扇区,这样的代码实在太简单了,现实之中有很多更多的需要,比如我们要实现在多个系统之中选择性的启动某个系统。于是出现了更加强大的启动代码,在Linux之中常用的就是以下两个:LILO和GRUB。现在我们没有必要知道这两个Bootloader的不同之处,反正这两个都可以被安装在MBR之中(直接控制启动过程)或者安装在某个分区(需要是活动分区或者需要其他Bootloader的配合)完成启动的任务,GRUB是更新的产品,所以一定比LILO更好些。
对于启动Linux的主要任务是接手控制,加载指定内核,并最终把控制交给内核。

        PC的Linux启动过程

我简叙我所理解的Linux的启动过程:
1.BIOS读取MBR主引导扇区(LILO或者GRUB的一部分一般已经写入MBR);
2.于是LILO或者GRUB被加载入内存;
3.LILO或者GRUB会负责加载LINUX内核;
4.内核取得控制权之后会接挂根文件系统/,启动init,一切进程的“鼻祖”,读取/etc/inittab文件;
5.允许所有运行级别1指定的脚本程序;
6.在运行级别1的结尾处告诉系统前进到运行级别n(/etc/inittab之中指定);
允许所有运行级别n(/etc/inittab之中指定)指定的脚本程序;系统就绪;

         双系统

通过硬盘分区和相应的BootLoader可以使Windows和Linux在一台电脑上和平共处。

虚拟机的安装
1.        VMWare,我是用的VMWare workstation 5
2.        Virtual PC
详细安装略。

三.           RHEL4的安装

VMWare Workstation V5下的安装:
1.        New一个virtual machine,记得选择redhat的enterprise 4。
2.        将CD-ROM选择用下载的第一张CD
3.        接下来power on这台virtual machine
4.        基本上一切的选用default,中间切换一下CD就搞定了


四.           深入BootLoader

我详细讲解一下两种Linux下的Bootloader:LILO和GRUB。

        Linux的启动方式

基本方式有如下三种:
1、        Bootloader
大多数启动都是通过这种方式。Linux的Bootloader可以安装在MBR或者某个分区(第二Bootloader)。
2、        Loadlin
Loadlin是一个DOS命令,可以在DOS之中启动Linux。
3、        软盘启动
当然可以通过软盘来启动Linux,这样可以将MBR留给其他操作系统的Bootloader。

MBR只是硬盘的第一个扇区,容量只有512k字节,一般来说复杂的bootloader会分2个阶段来执行。Stage 1 / Stage 2
Stage 1:这一阶段必须安装在MBR或者分区的引导扇区。
Stage 2:第二阶段载入bootloader的所有配置文件,好像GRUB是在/boot之下。

Bootloader除了引导系统,另外一个重要的功能是可以指向另外一个分区的引导扇区,也就是另外一个Bootloader。
比如我的hda1分区安装的是windows,hda2分区内安装的是Linux的/boot,那么在MBR内的GRUB就可以实现以下几种开机方法:
•        直接交给Linux的内核开机
•        将控制权交给/dev/hda2的启动扇区,有可能安装的是LILO
•        将控制权交给/dev/hda1的启动扇区,应该是windows的Loader
但是windows的bootloader总是要写入MBR,这样就无法识别Linux的bootloader了,所以一般来说我们需要先安装windows然后再安装Linux。

论坛徽章:
0
4 [报告]
发表于 2005-11-05 13:58 |只看该作者
initrd

在载入内核的过程之中,都只会mount根目录/,而且一般只以readonly的方式挂接。为了更加方便接挂驱动之类,通常会使用虚拟磁盘(Ramdisk)来辅助实现,这就是initrd和linuxrc了。initrd映像会被一起载入,Linux内核系统会设置虚拟磁盘,并使用linuxrc这个程序的功能来进行模块的加载。完成加载驱动的工作之后,initrd所建立的虚拟磁盘就会被从内存之中去除了。Initrd并非必要的,不过现在的版本好像都有initrd。Linuxrc一般要符合以下条件:
•        文件名必须是linuxrc
•        放置在initrd的最顶层目录
•        是可以被内核执行的
        LILO

如果按照之前的default安装,将会选定GRUB作为Bootloader,所以如果要使用LILO的话,需要自己安装LILO包。可以使用rpm命令安装。具体操作如下:
将安装盘4装入CD-ROM
$mount /mnt/cdrom
$cd /mnt/cdrom/RedHat/RPMS
$rpm –Uvh lilo*
记住这只是LILO软件的安装,并不代表LILO已经安装至MBR或者Linux的分区。如果要将LILO安装成真正的Bootloader,(当然Linux安装过程已经帮我们做了这些事情)跟着以下步骤:
第一步,编辑lilo的配置文件
第二步,运行lilo命令。

LILO的stage 1和stage 2的两个部分通过lilo命令都被写入了MBR或者是分区的启动扇区之中。

Notes:
Lilo命令的作用是读取LILO的配置文件(一般是/etc/lilo.conf,可在命令行指定),然后更新MBR或者分区启动扇区的引导纪录,在引导纪录之中包含了诸如内核文件,initrd文件的在硬盘位置之类的寻址资料,所以每次配置文件有变化,或者内核文件和initrd文件的任何可能移动都要重新运行lilo更新MBR或者启动扇区内的LILO引导纪录。Lilo命令和/etc/lilo.conf文件只是安装LILO的辅助工具。其实在PC启动过程之中是完全无用甚至是不可见的。

配置文件的部分参数解释:

全局参数:
boot = /dev/hda           # The boot device is /dev/had
指定LILO安装的设备,如果是硬盘/dev/had这样的没有数字在后面的,会写入硬盘的MBR,如果是分区后面带有数字比如/dev/hda1,则只会写入分区的启动扇区。

map = /boot/map           # Save the map file as /boot/map

指定map文件的位置,预设是 /boot/map

install=boot-sector
使用指定文件作为新的boot sector.预设是/boot/boot.b.
password=password

启动时候进入交互模式的访问密码。并未加密。

default=name
设定预设的启动image,如果没有设定将会按顺序的第一个。
delay=tsecs
进入default image的等待时间。1/10秒为单位,30表示3秒。
message=message-file
指定message文件。最大 65,535 bytes.
prompt
显示boot:命令行模式。
linear
生成并使用liner sector addresses寻址。
Image选项:

image=pathname
指定Linux内核文件。
label=name
为image指定一个名称。如果没有指定就是文件名(不包括路径)
alias=name
还可以再指定一个别名。
loader=chain-loader
对于非Linux系统,可以指定下一个bootloader,预设是/boot/chain.b,这个预设的chain loader会交给other选项指定的设备,或者是第一个硬盘的活动分区的启动扇区。
password=password
image的密码。
other=devicename
非Linux系统,指定该系统的安装分区。
内核Kernel选项:

其中的append, read-only, read-write, root, 和vga 也可以作为全局参数配置。

append=string
会传送给内核的参数,比如BIOS无法识别大于64M内存时可以使用 append = "mem=128M"。
initrd=filename
指定initrd的ramdisk映像文件。
noinitrd
不使用ramdisk?
root=root-device
指定root分区。
vga=mode

VGA模式设定。

read-only

启动时以readonly方式mount根,这个只是启动第二阶段的根,不是最后我们所看到的根,一般都会使用read-only方式

read-write

启动时以read write方式mount根,这个只是启动第二阶段的根,不是最后我们所看到的根


LILO配置文件示例:

1、(摘自RHCE Red Hat Certified Engineer Linux Study Guide (Exam RH302), Fourth Edition):

prompt                               
timeout=50
default=linux
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
message=/boot/message
linear

image=/boot/vmlinuz-2.4.21-3
        label=linux
        initrd=/boot/initrd-2.4.21-3.img
        read-only
        append="hdc=ide-scsi root=LABEL=/"
other=/dev/hda1
        label=Win98
        table=/dev/hda

2、(摘自Linux in a Nutshell, 3rd Edition):

prompt
default=linux
boot=/dev/hda
install=/boot/boot.b
map=/boot/map
image=/boot/vmlinuz
  label=linux
  root=/dev/hda2
  read-only ## Image section: For testing a new Linux kernel image=/testvmlinuz
  label=testlinux
  root=/dev/hda2
  read-only
  optional               # Omit image if not available when map is
                            built ## Image section: For booting DOS
other=/dev/hda1
  label=dos
  loader=/boot/chain.b
  table=/dev/hda         # The current partition table ## Image section:
                              For booting Windows 95
other=/dev/hda1
  label=win95
  loader=/boot/chain.b
  table=/dev/hda

LILO的交互模式:

有必要在这里介绍一下LILO的交互模式。可以进行配置(主要是内核参数)的调试。不过交互模式不会帮你修改配置文件,调试完成后需要自己更改配置文件并重新运行lilo更新MBR或者是相应的分区。
•        如果设定了prompt , LILO总会停留在等待画面,等待用户的输入。如果你选择按CTRL+X进入text的命令行模式,你可以再指定内核参数。
•        如果没有设定prompt,当出现 "LILO"的时候,按 Control, Shift,或者 Alt,就会到 boot:的text命令行模式。
•        在boot:之下,你可以使用tab来选择image,就是之前的label名称,也可以输入。而且可以在后面增加参数。例如:boot:linux single
以下参数可以在这时传送给内核:

debug
打印所有内核消息到console。
hd=cylinders,heads,sectors
指定硬盘参数。
load_ramdisk=n

指定多少个ram disk会传送给内核。

mem=size
指定内存参数。
noinitrd
如果设定后,不会进行the two-stage的启动,而且保留在/dev/initrd的内容,于是启动后还可见。
number
指定runlevel。
ro
Mount根为readonly。
rw
Mount根为read-write。如果没有制定ro或者rw,将会用rw方式。
single
启动单用户模式。对排错很有帮助。

        GRUB

GRUB同样支持菜单和命令行两种方式来控制启动。
GRUB通过filesystem进行寻址并将内核读入内存。
GRUB启动过程:
1、        GRUB启动时会在/boot/grub/中寻找一个名字为menu.lst的配置文件
2、        如果找不到此文件则不进入菜单模式而直接进入命令行模式。
3、        找到文件后根据文件显示菜单
4、        用户选择后,根据配置文件制定的路径加载内核
5、        将控制交给Linux内核

安装到MBR或者分区:

GRUB的软件安装在这里就不做多讲了,这里讲讲如何重新安装GRUB到MBR或者某个分区。好比我一直使用LILO,现在我想换成GRUB了,需要做什么。
方法一:
$grub-install install_device
方法二:
$grub
grub>setup install_device
两种方法都可以有不同的选项。可以自行察看帮助文件。

GRUB的文件系统规范

GRUB支持FAT、FFS、minix、ext2 和 ReiserFS 分区。
GRUB之中的的一些约定与Linux的约定不尽相同,大家需要注意一下。所谓此root不是彼root,很容易搞混淆,所以我打算先说说这一点。hd还是hd的,这点没有区别,接下去就不同了。GRUB使用数字来区别硬盘,不象Linux的had-hdd的字母表示,所以在GRUB之中的对应分别是hd0-hd3,我们也可以看出在GRUB之中一切都是从0开始计数的。分区怎么表示呢,在GRUB完整的分区表示是这样的:(hd0,0)。最后一个位只是需要用Linux的分区规则减一就好了。重点是GRUB的所谓root,GRUB作为一个多系统的bootloader,并不关心启动之后的事情,所以对于GRUB的root通常就是Linux内核文件的放置位置,一般是/boot。当然如果/boot没有自己的分区,就是/了。定义了root之后在之后的配置之中所有的文件将会是相对于这个root的,比如内核是/boot/vmlinuz,而/boot又是一个独立的分区,那么在配置文件里我们应该使用kernel /vmlinuz而不是kernel /boot/vmlinuz。后者会让GRUB去寻找/boot/boot/vmlinuz的。


利用 chain loader 的方式:
Chain loader就是将控制权交给下一个bootloader。启动事也交给下一个bootloader,所以需要知道的只是下一个bootloader的分区和所在的磁盘位置,GRUB可以指定那个扇区。比如我们的windows安装在hda1,Linux安装在hda2,在MBR的GRUB的有关启动windows的设定如下:
title windows partition
   root (hd0,0)
   chainloader +1
这里root就是代表了windows所在的分区hda1,而chainloader的+1就是代表第一个扇区。

配置文件:(/boot/grub/grub.conf或者/boot/grub/menu.lst,后者是前者的链接)

全局选项

default=0
GRUB的计数都是从0开始的。
timeout=3
表示默认等待的时间,这儿是3秒钟。超过3秒,用户还没有作出选 择的话,系统将自动选择默认的操作系统。

root=device
指定GRUB的root,就是stage 2的所在分区。

splashimage=pathname
指定开机画面文件的位置


Title选项

类似LILO的image部分。

title description

为每个启动设定义一个说明

root=device
指定GRUB的root,就是stage 2的所在分区。

kernel=pathname
指定Linux内核文件。
initrd=pathname
指定initrd映像文件。
chainloader +1
指定下一个bootloader的位置。

内核Kernel选项:

同LILO,请参照LILO相应部分。

命令行的交互模式:

GRUB的命令行模式比LILO更加强大,一般用于调试配置。基本命令基本与上面一些配置选项相同:
1、grub>root (hd0,0)                #设置GRUB的root
2、grub>kernel /vmlinuz root=LABEL=/
3、grub>initrd /initrd.img
4、boot
详细命令可以参照help。

GRUB配置文件示例:

# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this # file
# NOTICE: You do not have a /boot partition. This means that
# all kernel and initrd paths are relative to /, eg.
# root (hd0,0)
# kernel /boot/vmlinuz-version ro root=/dev/hda1
# initrd /boot/initrd-version.img
#boot=/dev/hda

default=0
timeout=3
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
title Red Hat Linux (2.4.18-14)
   root (hd0,0)
   kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/
   initrd /boot/initrd-2.4.18-14.img
title Microsoft Windows XP
   map (hd0) (hd1)
   map (hd1) (hd0)
   root (hd1,0)
   chainloader (hd1,0)+1
      boot
        总结

LILO不认识filesystem,所以将相关绝对寻址存入了MBR之中,每次变动都需要运行lilo来更新启动扇区或者MBR。
GRUB可以读取filesystem内(主要是/boot下)的文件,而不必存储内核在硬盘的绝对指针,取而代之的是路径相对路径。所以更改配置文件或者更新移动内核后无需重新安装MBR或者启动扇区部分代码。

论坛徽章:
0
5 [报告]
发表于 2005-11-05 14:11 |只看该作者
不错,可以加精华了!

论坛徽章:
0
6 [报告]
发表于 2005-11-05 14:30 |只看该作者
好像在哪里看过

论坛徽章:
0
7 [报告]
发表于 2005-11-07 13:03 |只看该作者

第二章第一部分

第二章:文件系统和RPM
我们知道在Linux之中一切皆文件,好像硬盘和分区的设备文件,各种串口并口以及USB在Linux之中都是一个文件。

根/
在Linux之中只表现单一的层次结构,所有的其他目录都是根/的子目录。

Mount和umount文件系统
硬盘要在Linux之中使用,必须要分区,然后格式化,我想这一点所有的操作系统应该都一致的。分区格式化之后就可以摆放我们自己或者系统软件的文件了。任何硬盘分区的文件系统只有mount接挂之后才可以被使用,而且是有一定先后顺序的,我们必须先mount接挂根/目录,才能接挂其它的文件系统到/的某个目录下,第一章之中我把它叫做接挂点(mount point)。所以不是因为同在/下就一定在同一分区下。如果某个目录被挂接成另外的文件系统,那么它以前的内容将不可访问,直到被接挂的文件系统被umount。除了硬盘分区之外,我们也可以mount网络文件系统,比如nfs,smb等,以及CDROM和软盘等等。

分区和文件系统类型:
我们知道windows使用的是FAT或者NTFS文件系统。而在Linux里则是ext2和ext3。我想大家知道磁盘的物理结构就是一些磁道,扇区之类了。文件系统的出现当然是为了更好的管理文件,文件系统的主要特征,我想是它的逻辑结构。FAT,NTFS或者ext2都是这样,不过大家的定义总是有一些不同,搞的大家很麻烦。以后不知哪个牛人可以创建一个让微软和其他unix厂商都信服的文件系统呢,一统江湖。
我大致说说ext2的逻辑结构:
Superblock        是分区的第一个Block,比如文件系统的大小,起始扇区地址,以及其他一些重要信息存放于此。如果损坏,整个分区将回天乏术了。
Block group        实际每个ext2分区后都会分成几个block group的,每个group之中都有自己的
superblock / group description / block bitmap / inode bitmap / inode table / data blocks
Group Description        Block group的说明信息
Block bitmap        对应所有Block的使用状况
Inode bitmap        对应所有inode的使用状况
Inode table        类似于以前我们学的文件分配表,文件的各种属性将放于此,而具体内容将放于Block区。同时在inode之中也会有文件的地址信息,从而找到文件。
Block area        sector扇区的2的n次方,是文件系统最小的读写单位。当然在合理范围内越大读写相对越快,不过对于小文件浪费空间。
要点:
1、        Superblock,block bitmap,inode bitmap就是metadata
2、        格式化ext2分区的时候决定了inode table和block area的大小,而且格式化之后再不可改变。一般为每4kb分配一个inode,每个inode的大小是128b,block size一般大小是1024/2048/4096等。
3、        Inode table的大小决定了能够存放文件的多少。
4、        Inode并不存放文件名称,文件名称和相应的inode信息存放于目录的block area之中。
               
做个总结,我们需要编辑/etc/passwd下的一个文件,Linux的基本操作应该大致是这样:
1、        根据/的block area信息找到对应的/etc目录的inode信息
2、        再用/etc的inode信息在inode table之中找到对应/etc项,找到对应的/etc的目录block area区域,找到/etc/passwd的inode信息
3、        再到inode table之中根据/etc/passwd的inode信息找到对应项,这样我们就找到了这个文件的block area地址了。
4、        根据地址读出文件

清楚了吧,其实文件系统的实现原理也基本一样,理解了FAT的文件分区表,也很好理解这个inode table的。

ext3只是ext2的加强,增加了日志功能(journaling)。当然写的时候会慢些,不过恢复的时候会快很多,而且增加了文件系统的稳定性。

Linux所支持的主要的文件系统:
•        Linux的VFS (Virtual Filesystem Switch)
Linux的内核通过这个VFS来管理和读取其他文件系统的。这样的话,其他的应用并不需要知道各种文件系统的存取模式就可以读取不同文件系统之中的文件了,因为所有这些,VFS已经为我们做了。对于软件开发商来说这的确是一件大好事。
•        传统文件系统
ext2 / minix / MS-DOS / FAT / iso9660
•        日志型文件系统
ext3 / ReiserFS / NTFS / JFS / XFS
•        网络型文件系统
NFS / SMBFS
好了,接下来说一说分区和建立文件系统:
使用fdisk建立分区:
$fdisk –l           #可以列出所有设备
$fdisk devicename    #管理指定设备的分区,device是整个硬盘
进入fdisk之后我想大有DOS的fdisk使用经验的话,很容易掌握Linux下的fdisk的使用。改变分区之后,应该要重新启动,才可对新的分区进行操作。
使用mke2fs建立文件系统:
$mke2fs devicename   #这里是分区
可以使用参数-b指定block size
可以使用参数-j创建ext3文件系统
等等…详细请察看man手册


Swap分区和swap文件
在windows95的时候我们就知道了有虚拟内存的概念,Linux世界也是一样,在Linux之中实现虚拟内存可以使用专门的分区,也可以使用swap文件来实现。
一般我们建立我们内存2倍大的swap。
swap分区:
1、        fdisk建立一个新的分区,并将其partition ID设为82。
2、        mkswap devicename   刚才的那个分区
3、        swapon devicename   来启动虚拟内存
swap文件:
1、        建立swap文件,比如dd if=/dev/zero of=/tmp/myswap bs=4k coung=16382会创建一个64k的文件/tmp/swap
2、        mkswap filename将文件变成swap格式
3、        swapon filename来启动这个文件的虚拟内存

LVM和RAID我打算以后找个篇幅专门说说,也有待我再研究。
如果希望可以建立一个可以扩充的文件系统,就必须要使用LVM的有关卷的概念,如果使用partition magic之类的工具调整分区大小,最多也不能超过该硬盘的大小。

论坛徽章:
0
8 [报告]
发表于 2005-11-07 14:17 |只看该作者
偶用安装盘装了个redhat 9,请问与用虚拟机安装的最大区别在哪?
如果用虚拟机安装的话除了用虚拟机软件以外,还需要什么东东,比如安装源文件之类的

论坛徽章:
0
9 [报告]
发表于 2005-11-07 20:25 |只看该作者
没什么区别,有cd就行了

论坛徽章:
0
10 [报告]
发表于 2005-11-07 20:26 |只看该作者
接下来说说文件系统之中的具体的文件。
在Linux之中有以下的文件类型:
使用ls -l命令可以知道文件的类型,在Linux之中有以下7中文件类型:
目录                                                        d
普通文件                                                -
字符设备                                                c
块设备                                                b
本地套接口                                                s
有名管道                                                p
链接(类似windows的快捷方式)                l

文件的属性资料(存储在inode之中的)我想在用户权限的时候再详细说明。

相对路径(relative)和绝对路径(absolute):
以根目录/开头的就是绝对路径,而以其他开头的路径就是相对路径,表示相对当前路径而言,相对路径变成绝对路径会加上pwd命令返回的当前路径。

目录树:
FHS (Filesystem Hierarchy Standard)是一个规范,很多Linux厂商已经开始遵照它了。不过FHS很笼统,只规定了两级目录的规范。其一是根目录/下的主要目录以及应该摆放什么文件,比如/etc应该摆放各种配置文件,而/bin和/sbin应该摆放可执行文件等,第二级则主要针对/usr和/var做出了更深层目录的定义。以下我大致说说每个目录在Linux之中的作用。

/
根目录/,一般建议根目录下只放目录,尽量不要将文件直接放于其中。/是首先加载的文件系统。

/boot
第一章已经提到了,放置内核以及bootloader的文件。主要用于启动。

/dev
设备文件全部在这个目录,硬盘,分区,键盘,鼠标,USB,tty等等。

/bin
最小的系统操作性所需要的执行文件。

/etc
配置文件的集中营。

/home
用户的家。

/lib
C库和C编译器。

/sbin
系统管理所需要的一些命令。包括引导,修复等命令,我想是system admin bin的意思。

/tmp
临时文件目录。每次重新启动就会被系统自动删除。

/usr
次要的文件和命令。由FHS定义的第二层目录,类似windows之中的program files。
•        /usr/bin, /usr/sbin:user和系统管理员的大部分命令
•        /usr/include:c/c++等程序的header
•        /usr/lib:应用软件用到的库
•        /usr/local:用户自行安装的软件
•        /usr/share:共享文件的目录
•        /usr/share/doc:应用软件的说明文件
•        /usr/share/man:manpage
•        /usr/src:Linux的源代码
•        /usr/X11R6:X window的执行文件等
/var
由FHS定义的第二层目录。主要放些一些应用的专用数据和配置文件,比如named的/var/named就放了zone文件,当然一般log日志文件也是在这个目录。
•        /var/cache:系统的缓存
•        /var/lib:执行的运行库
•        /var/log:日志
•        /var/lock:锁
•        /var/run:进程的pid
•        /var/spool:队列的目录,包括邮件,打印和cron的schedule。
/mnt
/media
挂接点,比如CDROM通常在/mnt/cdrom

/opt
类似/usr/local,应用软件的安装点

/lost+found
系统不正常时候,无法在inode table找到的孤儿,就会放在这里,通常是fcsk命令产生,会在每个分区的最高层目录,比如/boot是单独分区的话,会有/boot/lost+found

/srv
一些服务用到的文件,比如www

/root
root的家

/proc
使虚目录,主要是内核等等信息,比如:/proc/cpuinfo, /proc/dma, /proc/interrupts, /proc/ioports, /proc/net 等。

不可单独分区的目录:
因为Linux启动时,一般只有/被挂接,所以启动所需的文件皆不可单独分区。比如/etc,/bin,/sbin,/dev,/lib等。

建议单独分区的目录:
/home, /usr, /var, /tmp,这些目录可能会因应需要不断扩展的,单独分区容易管理。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP