linux下磁盘配额


<span style="font-weight: bold">什么是 Quota?</span><br/><br/>  Quota 让你可以从两方面指定磁盘的储存限制: 使用者所能够支配的索引<br/>  节点(inodes)数量;以及使用者可以取用的磁盘区块数量。<br/><br/>  Quota 背後的含意是强制使用者在大部分的时间中保持在他们的磁盘使用<br/>  限制之下,取消他们在系统上无限制地使用磁盘空间的能力。<br/><br/>  Quota 是以每一使用者,每一文件系统为基础的.如果使用者可能在超过<br/>  一个以上的文件系统上建立文件,那么必须在每一文件系统上分别设定<br/>  quota.

建立quota:

一:内核中支持QUOTA:

检查当前内核是否支持quota,当前内核配置文件在/boot下

[root@LFS ~]#grep CONFIG_QUOTA /boot/config-[version]

CONFIG_QUOTA=y

CONFIG_QUOTACTL=y

[root@LFS ~]#

如果有上列输出,则表示当前内核已经支持quota。

如果当前内核不支持quota,需要重新编译内核将quota support编译进核心:

File systems —>

[*] Quota support

二:安装QUOTA工具:

http://distro.ibiblio.org/pub/linux/distributions/sorcerer/sources/quota/3.12/

下载quota-3.12.tar.bz2 解压后使用如下命令编译安装:

[root@LFS quota-tools]#./configure –prefix=/usr

[root@LFS quota-tools]#make

[root@LFS quota-tools]#make install

三:修改/etc/fstab加入QUOTA支持:

/dev/hda7 /mnt/lfs    ext3     defaults,usrquota,grpquota   1      2

四:使用quotacheck初始化QUOTA数据库:

因为quotacheck依据/etc/mtab搜索文件系统,所以要将刚刚修改的hda7重新挂载

[root@LFS quota-tools]#mount /mnt/lfs/ -o remount

[root@LFS quota-tools]#mount

……略

/dev/hda7 on /mnt/lfs type ext3 (rw,usrquota,grpquota)


[root@LFS quota-tools]#quotacheck -avug

quotacheck: Scanning /dev/hda7 [/mnt/lfs] quotacheck: Cannot stat old user quota file: No such file or directory

quotacheck: Cannot stat old group quota file: No such file or directory

quotacheck: Cannot stat old user quota file: No such file or directory

quotacheck: Cannot stat old group quota file: No such file or directory

done

quotacheck: Checked 6316 directories and 85861 files

quotacheck: Old file not found.

quotacheck: Old file not found.

[root@LFS quota-tools]#

这里因为搜索不到旧版本的quota文件,所以有错误信息,但不影响。

-a : 扫描所有在/etc/mtab中开启quota的文件系统

-v : 显示扫描过程

-u : 扫描所有user quotas   (usrquota)

-g : 扫描所有group quotas (grpquota)


检查完毕后生成quota的信息文件:

[root@LFS lfs]#ls -l /mnt/lfs/aquota.*

-rw——- 1 root root 11264 Mar 18 20:56 aquota.group

-rw——- 1 root root 12288 Mar 18 20:56 aquota.user

[root@LFS lfs]#

五:启动QUOTA:

[root@LFS lfs]#quotaon -av

/dev/hda7 [/mnt/lfs]: group quotas turned on

/dev/hda7 [/mnt/lfs]: user quotas turned on

[root@LFS lfs]#

-a : 开启所有quota设定,根据/etc/mtab设定

-v : 当开启quota时显示信息

六:编辑用户磁盘限额:

这里设定用户quota最大使用容量为20M,当使用到10M时会得到警告要求降低到10M

最多可以创建10个文件,当创建5个文件时会得到警告要求降低到5个文件 :-)

[root@LFS lfs]#edquota -u quota

Disk quotas for user quota (uid 5011):

Filesystem         blocks       soft       hard     inodes     soft     hard

/dev/hda7             0         10240      20480        0        5        10

-u : 编辑user的quota

-g : 编辑group的quota

-t : 编辑宽限时间

-p : 复制quota资料到另一用户上


blocks :目前使用者(quota:uid=5011)在/dev/hda7所使用的空间,单位:KB (不要修改)

soft   :soft limit 磁盘空间限定值 单位:KB (需要设定)

hard   :hard limit 磁盘空间限定值 单位: KB (需要设定)

inodes :目前使用者使用掉的inodes,由于不容易使用inode控制,所以不要修改它。

soft   :soft limit 文件限制数量 (根据需要修改)

hard   :hard limit 文件限制数量   (根据需要修改)

soft limit :最低限制容量,在宽限期(grace period)之内,使用容量可以超过soft limit,但必须在宽限期之内将使用容量降低到soft limit以下。

hard limit :最终限制容量,如果使用者在宽限期内继续写入数据,到达hard limit将无法再写入。

宽限时间:使用容量超过soft limit,宽限时间自动启动,使用者将容量降低到soft limit以下,宽限时间自动关闭,如果使用者没有在宽限时间内将容量降低到soft limit,那么他将无法再写入数据,即使使用容量没有到达hard limit

设定宽限时间:

[root@LFS lfs]#edquota -t

Grace period before enforcing soft limits for users:

Time units may be: days, hours, minutes, or seconds

Filesystem             Block grace period     Inode grace period

/dev/hda7                    1days                 7days

OK,完成啦,检查一下吧:

[root@LFS lfs]#quota -uv quota

Disk quotas for user quota (uid 5011):

     Filesystem blocks   quota   limit   grace   files   quota   limit   grace

      /dev/hda7       0    1024    2048               0       5      10

[root@LFS lfs]#

-u : 显示user

-v : 显示quota值

使用-p参数复制quota资料到另一个用户:

[root@LFS lfs]#edquota -p quota test

[root@LFS lfs]#quota -uv test

Disk quotas for user test (uid 5012):

     Filesystem blocks   quota   limit   grace   files   quota   limit   grace

      /dev/hda7       0    1024    2048               0       5      10

[root@LFS lfs]#

同时复制给多个用户:

[root@LFS lfs]#edquota -p quota `awk -F: ‘$3 >499 {print $1}’ /etc/passwd`

这样就将quota的磁盘配额资料复制给所有uid >499的用户(uid为500以上的用户通常为真实用户)


OK,最后加在启动脚本里,系统启动时自动激活quota吧!

可以加入到/etc/rc.d/rc.sysinit或/etc/rc.d/rc.local中,在结尾加上一行:
/usr/sbin/quotaon -aug

还要记得在系统关机/重启脚本(/etc/rc.d/rc[0,6]/)中加入关闭quota的语句:
/usr/sbin/quotaoff -aug


通常发行版在系统启动/关闭时都会处理quota,在系统启动信息看到相关信息。

例如RedHat RHEL4,Mandrake 10.1系统启动/关闭时有这样两行:
Turning on user and group quotas for local filesystems: (/etc/rc.d/rc.sysinit)
Turning off quotas:       (/etc/rc.d/rc0.d/S01halt /etc/rc.d/rc6.d/S01reboot)

查询磁盘配额:

root查询所有用户使用情况:

[root@LFS ~]#repquota -a

*** Report for user quotas on device /dev/hda7

Block grace time: 24:00; Inode grace time: 7days

                        Block limits                File limits

User            used    soft    hard grace    used soft hard grace

———————————————————————-

……略

quota     +-    1032    1024    2048 23:59       2     5    10

[root@LFS ~]#

如果有多个分区为quota,可用repquota -u 挂载点 查询单个分区的使用情况

普通用户查询自己使用情况:

[quota@MyLFS ~]$quota

Disk quotas for user quota (uid 5011):

     Filesystem blocks   quota   limit   grace   files   quota   limit   grace

      /dev/hda7    1032*   1024    2048   23:58       2       5      10

[quota@MyLFS ~]$

quotcheck :
quotcheck用来扫描文件系统的磁盘用量
,更新aquota.user,aquota.group

保持quota记录档到最新的状态。

因此最好在系统启动时执行或通过cron定期执行:
每周六早七点执行一次:
0 7 * * 6 /sbin/quotacheck -avug

你是不是想在跟分区做配额?这样是可以的。

首先,你要修改你的/etc/fstab文件:

LABEL=/ / ext3 defaults 1 1

改为:

LABEL=/ / ext3 defaults,usrquota 1 1

或者改为:

LABEL=/ / ext3 defaults,grpquota 1 1

usrquota是基于用户的磁盘配额,grpquota是基于组的磁盘配额,怎么改就看你需要了。

之后你或者重新启动一下,或者remount一下(mount -o remount / 。


第二,在 / 中建立aquota.user或aquota.grup,这两个文件要建立在你要实现配额的顶级目录,所谓定级目录,就是 ̄ ̄咋解释呢?就是比如你要在 / 上实现配额,就要在 / 下建立aquota.user或者aquota.grup;如果你要在/home上实现配额(当然你的/home应该是一个独立的磁盘分区),就在 /home下建立这两个文件中的一个。用touch命令建立就可以了,touch aquota.user 或aquota.srup。但这时建立好的文件是空的,不符和系统的需要。所以执行下一步。


第三,用quotacheck -mc / 将这两个文件(aquota.user或aquota.grup)格式化。

注意一下,除非是/分区,一般不用加-m参数,比如你要在/home上实现配额(当然你的/home应该是一个独立的磁盘分区)就:quotacheck -c /home 就可以了。

-m的意思是强迫在“读、写”模式下检查硬盘的配额。


第四,quotaon / 启动磁盘配额。


第五,edquota 用户名/组名 设置用户/组的配额

例如:edquota user_name

edquota -g group_name (对于用户组)

执行后会打开一个vi编辑窗口。可以设置磁盘空间和节点数目的配额。其中soft只是起到警告的作用,并不会真正的限制用户/组。hard就会强制限制用户/组的磁盘空间和节点数目了。


第六,设定soft quota和hard quota之间的时间:

edquota -t

出现一个 vi 窗口:

Grace period before enforcing soft limits for users:

Time units may be: days, hours, minutes, or seconds

Filesystem Block grace period Inode grace period

/dev/hda7 7days 7days

按照自己的需要修改吧。重新启动就可以了。磁盘限额就生效了。


第七,如果要成批的复制相同的磁盘配额给不通用户:

edquota -p user user1 user2 user3

edquota -g -p group group1 group2 group3


第八,取消磁盘限额:

quotaoff /


大家觉得好就顶一下,这可是我辛辛苦苦写出来的原创品呀。

Linux下挂载硬盘分区的几种方法

Linux下挂载硬盘分区的几种方法

1、使用Autofs自动挂载分区

2、修改/etc/fstab

3、编写shell脚本,开机自动运行mount命令

方法一、使用Autofs

1、Autofs的特点:Autofs与Mount/Umount的不同之处在于,它是一种看守程序(deamon)。如果它检测到用户正试图访问一个尚未挂接的文件系统,它就会自动检测该文件系 统,如果该文件系统存在,那么Autofs会自动将其挂接。另一方面,如果它检测到某个已挂接的文件系统在一段时间内没有被使用,那么Autofs会自动 将其卸载。因此一旦运行了Autofs后,用户就不在需要手动完成文件系统的挂接和卸载。

2、Autofs的安装: 只需执行以下一条命令:rpm -ivh autofs-3.1.3-10.i386.rpm。安装完成后,以后每次启动Linux,Autofs都会自动运行。

3、Autofs的配置:首先, Autofs需要从/etc/auto.master这个文件中读取配置信息。该文件中 可以同时指定多个挂接点,每个挂接点单独用一行来定义,每一行可包括3个部分,分别用于指定挂接点位置,挂接时需使用的配置文件(即:所谓的map file)及所挂接文件系统在空闲多长时间后自动被卸载。例如,auto.master文件中包括如下一行: /auto /etc/auto.misc --timeout 60。 其 中第一部分指定一个安装点为/auto,第二部分指定/auto的map文件为/etc/auto.misc,第三部分指定文件系统在其空闲60秒后自动 被卸载。其次,从/etc/auto.misc这个文件读取挂接时需要使用的配置信息。例如,auto.misc文件包括如下内容

cd              -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom

Windows_C -fstype=auto,iocharset=cp936 :/dev/hda1

Windows_D -fstype=auto,iocharset=cp936 :/dev/hda5

Windows_E -fstype=auto,iocharset=cp936 :/dev/hda6

其中第一行指定将设备/dev/cdrom挂接在/auto的cd子目录中,第二行指定 将硬盘的Windows分区挂接在/auto的Windows_*子目录中。每一行的第二个值-fstype是一个可选项,用来表明所挂接的文件系统的类型和挂接选项,在 mount命令能使用挂接选项同样适用于-fstype。 修改了配置文件后,可通过执行命令“/etc/init.d/autofs restart”,使新的配置生效。 现在输入命令“ls /auto/cd”,Autofs会自动检测光驱中是否有光盘,如果有,它会自动将其挂接在/auto/cd中,这样ls就会列出其中的内容。如果我们在 60秒内没有再次访问/auto/cd时,Autofs会自动将其卸载掉。

转载自:http://family.chinaok.com/showcontent.php?articleid=1674

方法二

1、fstab文件的作用

文件/etc/fstab存放的是系统中的文件系统信息。当正确的设置了该文件,则可以通过”mount  /directoryname”命令来加载一个文件系统,每种文件系统都对应一个独立的行,每行中的字段都有空格或tab键分开。同时fsck、 mount、umount的等命令都利用该程序。

2、下面是/etc/fatab文件的一个示例行:

fs_spec fs_file fs_type fs_options fs_dump fs_pass 

/dev/hda1   /   ext2     defaults    1    1 

fs_spec  - 该字段定义希望加载的文件系统所在的设备或远程文件系统,对于一般的本地块设备情况来说:IDE设备一般描述为 /dev/hdaXN,X是IDE 设备通道(a, b, or c),N代表分区号;SCSI设备一描述为/dev/sdaXN。对于NFS情况,格式一般为:,例如: `knuth.aeb.nl:/’。对于procfs,使用`proc’来定义。

fs_file - 该字段描述希望的文件系统加载的目录点,对于swap设备,该字段为none;对于加载目录名包含空格的情况,用40来表示空格。

fs_type - 定义了该设备上的文件系统,一般常见的文件类型为ext2 (Linux设备的常用文件类型)、vfat(Windows系统的fat32格式)、NTFS、iso9600等。

fs_options - 指定加载该设备的文件系统是需要使用的特定参数选项,多个参数是由逗号分隔开来。对于大多数系统使用”defaults”就可以满足需要。其他常见的选项包括:

选项              含义

ro      以只读模式加载该文件系统

sync    不对该设备的写操作进行缓冲处理,这可以防止在非正常关机时情况下破坏文件系统,但是却降低了计算机速度

user    允许普通用户加载该文件系统

quota   强制在该文件系统上进行磁盘定额限制

noauto  不再使用mount -a命令(例如系统启动时)加载该文件系统

fs_dump - 该选项被”dump”命令使用来检查一个文件系统应该以多快频率进行转储,若不需要转储就设置该字段为0

fs_pass - 该字段被fsck命令用来决定在启动时需要被扫描的文件系统的顺序,根文件系统”/”对应该字段的值应该为1,其他文件系统应该为2。若该文件系统无需在启动时扫描则设置该字段为0

3、修改/etc/fstab实现自动挂载Windows分区,并显示中文目录

LABEL=/ / ext3 defaults 1 1

none /dev/pts devpts gid=5,mode=620 0 0

none /proc proc defaults 0 0

none /dev/shm tmpfs defaults 0 0

LABEL=/usr /usr ext3 defaults 1 2

/dev/hda9 swap swap defaults 0 0

#添加如下几行

/dev/hda1 /mnt/win_c vfat codepage=936,iocharset=cp936 0 0

/dev/hda5 /mnt/win_d vfat codepage=936,iocharset=cp936 0 0

/dev/hda6 /mnt/win_e vfat codepage=936,iocharset=cp936 0 0

4、对部分分区格式的支持需要编译相关的支持到内核了来实现,如NTFS。

方法三

首先,以root身份登陆,在/mnt下,你要有win_c win_d win_e这几个目录,如果没有可以通过在虚拟终端分别输入mkdir /mnt/win_c,mkdir /mnt/win_d,mkdir /mnt/win_e来建立。接着打开虚拟终端,,输入 vi mymount,然后按insert输入如下代码:

#!/bin/bash

case $1 in

m)

mount -o iocharset=cp936 -t vfat /dev/hda1 /mnt/win_c

mount -o iocharset=cp936 -t vfat /dev/hda5 /mnt/win_d

mount -o iocharset=cp936 -t vfat /dev/hdc6 /mnt/win_e

u)

umount -o iocharset=cp936 -t vfat /dev/hda1 /mnt/win_c

umount -o iocharset=cp936 -t vfat /dev/hda5 /mnt/win_d

umount -o iocharset=cp936 -t vfat /dev/hda6 /mnt/win_e

esac

然后按Esc输入:wq回车就可以了.第一行#!/bin/bash指定以bash shell执行此文

件.case $1 in 为取的命令行参数.若为m则开始挂载,若为u则卸载.其中-o

iocharset=cp936能够显示中文名.-t vfat 为指定文件系统类型为WINDOWS下的VFAT文件系

统.win_c win_d win_e为目录/mnt下的子目录.

到这里,该程序已经写好了.但是它还没有执行权利.我们只要输入下面这个命令就可以了.

chmod u+x mymount

到这步你只要输入./mymount m,就可以挂载windows分区了.如果在/etc/rc.d/rc.local 文件中添加这一行:

sh ./root/mymount m

重启后linux会自动挂载windows分区。

关于codepage与iocharset[转自sina-blog]

Linux用了这么久,有一点比较郁闷的就是它的中文的字体显示问题了。唉,谁叫这些个操作系统啊,桌面环境啊,应用软件啊都是外国人写的呢?

    以前在Linux下挂载windows的分区都会出现中文字符显示乱码的问题。后来知道要在mount时加上iocharset和codepage这两个参数,但是一直不知道这两个参数的来源。恰好昨天一个同学又问了我这个问题,就上网搜了一下。
    下面转载linuxsir上的FireMeteor的一篇文章,学习一下:

——————————————————————-

作者 FireMeteor

参考资料:内核文档,mount的manpage。windows部分基本上凭自己的记忆--不可靠

由于资料来源与本人理解表述的关系,可能存在错漏之处
     codepage是m$搞出来的东西。早期的操作系统都是直接使用本地语言字符集(nativelanguage character set,NLS),屏幕显示如此,内部表示也如此。dos就是一个典型的例子。m$把这种本地字符集称作codepage。常见的codepage有CP437(美、加),CP850(欧),CP932(日),CP936(简体中文,gbk),CP950(繁体中文BIG5)等。在dos时代,fat文件系统里面存储的文件名也使用codepage。这些东西似乎是unicode出来以前,m$根据一些国家的国家标准搞的,所以相互之间编码冲突比较严重,一旦代码页设置错误,显示结果就乱七八糟。

    windows9x似乎主要还是采用代码页机制,但是对unicode也有了部分支持。其新增的长文件名支持使用unicode存放文件名。在linux中叫做vfat。也就是说,短文件名用codepage,长文件名用unicode。记得以前在windows9x里面打日文游戏的时候还需要日文环境的支持,否则全是乱码。但是不管怎么支持,屏幕中总有一部分乱码,不是中文乱,就是日文乱。这大概就是codepage只支持一种本地语言的缘故。

   到2000以后,系统内核处理字符串的时候总是先转换成unicode,在显示输出的时候,再视情况转回本地字符集,所以情况要好很多。理论上说,所有unicode程序,在2000下都能同时正常显示,也就是说中文、日文、韩文等都可以同屏显示。但是使用本地字符集

的程序还是同时只有一种语言能够正常显示。

   下面摘一段win XP区域和语言选项“对话框里面关于本地语言的说明文字:这个设置启动某些非Unicode程序以便用母语显示菜单和对话。这不会影响到Unicode的程序“以上都是背景资料,也就是说都是废话-_-
   在linux下mount东西的时候,只有在mount和m$有关的东西的时候才需要设置codepage。最典型的就是fat。joliet格式的CDROM可能也要,但是我不用cd好多年,哪位帮忙确认一下……还有就是smbfs,在samba server端配置好dos charset参数,然后mount的时候codepage写成跟server一样即可。关于samba,跑题一句,其实doscharset参数在用smbclient访问的时候根本不用设,因为新的客户端(win2000,xp)都用unicode通信,这个参数只对使用codepage的dos,9x有效,但是因为smbmount也使用codepage,所以……codepage设置以后起的作用是用来在读写文件系统时进行编码与解码。因为在linux内部表示字符串的时候也是用unicode的,这里存在一次unicode到本地字符集之间的转换。
    以上是关于codepage的部分,下面是iocharset部分
    iocharset比较简单,它只与显示输出有关。这里不得不提起locale,因为locale
控制了软件关于输入输出的很多细节。可以分别配置locale的每个选项,但是这跟我现在要说的没多大关系,所以我假设只配置LANG或者LC_ALL。说了那么多废话,其实iocharset控制的就是系统内部unicode表示到显示输出的表示间的转换。也就是说,iocharset要与你使用的locale匹配,否则显示乱码那是理所当然的了。
    总结一下:

   文件系统编码<–codepage—>内部unicode表示<—iocharset/NLS—>显示输出编码其实上面说那么多都是废话。最王道的办法应该是把locale设成utf8(zh_CN.UTF-8或者en_US.UTF-8随便) ,然后在mount fat或者nfts的时候用一个-o utf8参数,整个世界都清静了。codepage?iocharset?那是啥?不过话又说回来locale设成utf8有一点不好的地方,如果文件内容是用本地语言编码的,而且软件不支持编码转换的话,可能会无法正常显示。但是这种情况使用gb2312或者gbk也不能完全避免,只是发生的概率要小一些罢了。实际上即使在utf8下我也只碰到过一个实例:xmms不能处理某些mp3的标签,因为ID3V1是用bgk编码的,所以我单独用bgk编码启动xmms~~

下午遇到的几个不常见而有用的命令。。。

LABEL

如何查看系统中的 LABEL/ UUID

使用 blkid 命令:

用法(LABEL):

# blkid -s LABEL

/dev/hda3: LABEL=”/”

/dev/hda1: LABEL=”/boot1″

/dev/hda2: LABEL=”SWAP-hda2″

/dev/hdc1: LABEL=”/boot9″

/dev/hdc2: LABEL=”/vm”

/dev/hdc3: LABEL=”/home9″

/dev/hdc5: LABEL=”/9″

/dev/hdc6: LABEL=”/var/ftp/pub9″

/dev/hdc8: LABEL=”/boot”

/dev/hdc9: LABEL=”/1″

用法(UUID):

# blkid -s UUID

/dev/hda3: UUID=”440612e0-9cea-4751-8e59-07ebffc589c2″

/dev/hda1: UUID=”027ecc62-d346-411d-ae6c-c3eaa87fb195″

/dev/hdc1: UUID=”fdbe6b52-755f-4e14-b970-b3be01543acc”

/dev/hdc2: UUID=”e61f4197-5f00-4f4f-917c-290922a85339″

/dev/hdc3: UUID=”06679282-4973-476a-98ae-4986f504816f”

/dev/hdc5: UUID=”51f7e9a4-5154-4e29-a7a6-208417290b85″

/dev/hdc6: UUID=”4bf4855e-96b9-43c4-89d7-b3d0087560e1″

/dev/hdc8: UUID=”5a15d9d7-5a17-4d71-a2b6-eb978e6905cd”

/dev/hdc9: UUID=”dc348785-9acb-4484-b52a-da000ffba601″

[编辑]改变LABEL名称

打「e2label 设备 [新label]」,例如把 /dev/hda1 命名为 /boot:

e2label /dev/hda1 /boot

[编辑]在 mount 命令中使用 LABEL/UUID

mount LABEL=/boot1 /boot

mount UUID=”51f7e9a4-5154-4e29-a7a6-208417290b85″ /mnt/

[编辑]在 /etc/fstab 中使用 LABEL/UUID

档案/etc/fstab

LABEL=/                                        /        ext3    defaults   1   1

LABEL=/boot1                                   /boot    ext3    defaults   1   2

UUID=”e61f4197-5f00-4f4f-917c-290922a85339″   /usr     ext3    defaults   1   12

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

指令:e2fsck
  
  使用权限 : 超级使用者
  
  使用方式 : e2fsck [-pacnydfvFV] [-b superblock] [-B blocksize] [-l|-L bad_blocks_file] [-C fd] device
  
  说明 检查使用 Linux ext2 档案系统的 partition 是否正常工作
  
  参数
  
  device 预备检查的硬盘 partition,例如:/dev/sda1
  -a : partition 做检查,若有问题便自动修复,等同 -p 的功能
  -b : 设定存放 superblock 的位置
  -B : 设定单位 block 的大小
  -c : 检查该partition 是否有坏轨
  -C file : 将检查的结果存到 file 中以便查看
  -d : 列印 e2fsck debug 结果
   >-f : 强制检查
  -F : 在开始检查前,将device buffer cache 清空,避免有错误发生
  -l bad_blocks_file : 将有坏轨的block资料加到 bad_blocks_file 里面
  -L bad_blocks_file : 设定坏轨的block资料存到 bad_blocks_file 里面,若无该档则自动产生
  -n : 将档案系统以[唯读]方式开启
  -p : partition 做检查,若有问题便自动修复
  -v : 详细显示模式
  -V : 显示出目前 e2fsck 的版本
  -y : 预先设定所有检查时的问题均回答[]
  
  例子 :
  检查 /dev/hda5 是否正常,如果有异常便自动修复,并且设定若有问答,均回答[] :
   e2fsck -a -y /dev/hda5
  
  注意 :
  
  大部份使用 e2fsck 来检查硬盘 partition 的情况时,通常都是情形特殊

Linux启动各项服务说明

anacron,类似于cron,定时执行任务

atd,定时批处理,即at的守护进程

xfs,X Windows的字体服务器

gpm,linux text模式下鼠标支持

portmap,用于支持RPC连接,用在NFS、NIS等服务

nscd,负责密码和组的查询,在有NIS服务时需要

ypbind,用于连接NIS/YP服务器

network,激活和关闭网络接口

netfs,NFS、SAMBA等服务使用

apmd,电源管理

acpid,先进电源管理

autofs,光盘软盘自动加载

cpuspeed,降低或加快CPU速度

cups,Unix公共打印支持

irda,红外线标准服务

mdmonitor,与RAID有关的服务

mdmpd,与RAID有关的守护进程

isdn,ISDN设备支持

kudzu,硬件自动监测程序

messagebus,为多个程序之间提供一对一通讯

netdump,远程备份服务器

nfslock,NFS文件锁定功能

ntpd,网络时间服务

pcmcia,笔记本设备支持

rhnsd,RedHat网络服务,系统补丁

rpcgssd、rpcidmapd、rpcsrcgssd,RPC新服务,一般不需要启动
yum,一个自动更新、安装和删除RPM软件包的管理程序
networkmanager,减少网络手动设定
saslauthd,SASL认证服务
psacct,ac,lastcomm, accton 和sa进程监控工具
winbind,使用Windows 2000 PDC系统进行认证
netplugd,网卡监控程序
rdisc,ICMP寻径协议
nifd、mdnsresponder,HOWL程序,用于连接APPLE
auditd,用户空间监控程序

DHCP详细解释。。。[经典]

什么是 DHCP?


DHCP 是 Dynamic Host Configuration Protocol(动态主机分配协议)缩写,它的前身是 BOOTP。BOOTP 原本是用于无磁盘主机连接的网络上面的:网络主机使用 BOOT ROM 而不是磁盘起动并连接上网络,BOOTP 则可以自动地为那些主机设定 TCP/IP 环境。但 BOOTP 有一个缺点:您在设定前须事先获得客户端的硬件地址,而且,与 IP 的对应是静态的。换而言之,BOOTP 非常缺乏 “动态性” ,若在有限的 IP 资源环境中,BOOTP 的一对一对应会造成非常可观的浪费。




DHCP 可以说是 BOOTP 的增强版本,它分为两个部份:一个是服务器端,而另一个是客户端。所有的 IP 网络设定数据都由 DHCP 服务器集中管理,并负责处理客户端的 DHCP 要求;而客户端则会使用从服务器分配下来的IP环境数据。比较起 BOOTP ,DHCP 透过 “租约” 的概念,有效且动态的分配客户端的 TCP/IP 设定,而且,作为兼容考虑,DHCP 也完全照顾了 BOOTP Client 的需求。


DHCP 的分配形式


首先,必须至少有一台 DHCP 工作在网络上面,它会监听网络的 DHCP 请求,并与客户端搓商 TCP/IP 的设定环境。它提供两种 IP 定位方式:



Automatic Allocation

自动分配,其情形是:一旦 DHCP 客户端第一次成功的从 DHCP 服务器端租用到 IP 地址之后,就永远使用这个地址。



Dynamic Allocation

动态分配,当 DHCP 第一次从 HDCP 服务器端租用到 IP 地址之后,并非永久的使用该地址,只要租约到期,客户端就得释放(release)这个 IP 地址,以给其它工作站使用。当然,客户端可以比其它主机更优先的更新(renew)租约,或是租用其它的 IP 地址。


动态分配显然比自动分配更加灵活,尤其是当您的实际 IP 地址不足的时候,例如:您是一家 ISP ,只能提供 200 个IP地址用来给拨接客户,但并不意味着您的客户最多只能有 200 个。因为要知道,您的客户们不可能全部同一时间上网的,除了他们各自的行为习惯的不同,也有可能是电话线路的限制。这样,您就可以将这 200 个地址,轮流的租用给拨接上来的客户使用了。这也是为什么当您查看 IP 地址的时候,会因每次拨接而不同的原因了(除非您申请的是一个固定 IP ,通常的 ISP 都可以满足这样的要求,这或许要另外收费)。当然,ISP 不一定使用 DHCP 来分配地址,但这个概念和使用 IP Pool 的原理是一样的。


DHCP 除了能动态的设定 IP 地址之外,还可以将一些 IP 保留下来给一些特殊用途的机器使用,它可以按照硬件地址来固定的分配 IP 地址,这样可以给您更大的设计空间。同时,DHCP 还可以帮客户端指定 router、netmask、DNS Server、WINS Server、等等项目,您在客户端上面,除了将 DHCP 选项打勾之外,几乎无需做任何的 IP 环境设定。


DHCP 的工作原理


根据客户端是否第一次登录网络,DHCP 的工作形式会有所不同。


第一次登录的时候:



寻找 Server。当 DHCP 客户端第一次登录网络的时候,也就是客户发现本机上没有任何 IP 数据设定,它会向网络发出一个 DHCP DISCOVER 封包。因为客户端还不知道自己属于哪一个网络,所以封包的来源地址会为 0.0.0.0 ,而目的地址则为 255.255.255.255 ,然后再附上 DHCP discover 的信息,向网络进行广播。


在 Windows 的预设情形下,DHCP discover 的等待时间预设为 1 秒,也就是当客户端将第一个 DHCP discover 封包送出去之后,在 1 秒之内没有得到响应的话,就会进行第二次 DHCP discover 广播。若一直得不到响应的情况下,客户端一共会有四次 DHCP discover 广播(包括第一次在内),除了第一次会等待 1 秒之外,其余三次的等待时间分别是 9、13、16 秒。如果都没有得到 DHCP 服务器的响应,客户端则会显示错误信息,宣告 DHCP discover 的失败。之后,基于使用者的选择,系统会继续在 5 分钟之后再重复一次 DHCP discover 的过程。



提供 IP 租用地址。当 DHCP 服务器监听到客户端发出的 DHCP discover 广播后,它会从那些还没有租出的地址范围内,选择最前面的空置 IP ,连同其它 TCP/IP 设定,响应给客户端一个 DHCP OFFER 封包。


由于客户端在开始的时候还没有 IP 地址,所以在其 DHCP discover 封包内会带有其 MAC 地址信息,并且有一个 XID 编号来辨别该封包,DHCP 服务器响应的 DHCP offer 封包则会根据这些资料传递给要求租约的客户。根据服务器端的设定,DHCP offer 封包会包含一个租约期限的信息。



接受 IP 租约。如果客户端收到网络上多台 DHCP 服务器的响应,只会挑选其中一个 DHCP offer 而已(通常是最先抵达的那个),并且会向网络发送一个DHCP request广播封包,告诉所有 DHCP 服务器它将指定接受哪一台服务器提供的 IP 地址。


同时,客户端还会向网络发送一个 ARP 封包,查询网络上面有没有其它机器使用该 IP 地址;如果发现该 IP 已经被占用,客户端则会送出一个 DHCPDECLINE 封包给 DHCP 服务器,拒绝接受其 DHCP offer ,并重新发送 DHCP discover 信息。


事实上,并不是所有 DHCP 客户端都会无条件接受 DHCP 服务器的 offer ,尤其这些主机安装有其它 TCP/IP 相关的客户软件。客户端也可以用 DHCP request 向服务器提出 DHCP 选择,而这些选择会以不同的号码填写在 DHCP Option Field 里面:





换一句话说,在 DHCP 服务器上面的设定,未必是客户端全都接受,客户端可以保留自己的一些 TCP/IP 设定。而主动权永远在客户端这边。



租约确认。当 DHCP 服务器接收到客户端的 DHCP request 之后,会向客户端发出一个 DHCPACK 响应,以确认 IP 租约的正式生效,也就结束了一个完整的 DHCP 工作过程。


DHCP 发放流程


第一次登录之后:


一旦 DHCP 客户端成功地从服务器哪里取得 DHCP 租约之后,除非其租约已经失效并且 IP 地址也重新设定回 0.0.0.0 ,否则就无需再发送 DHCP discover 信息了,而会直接使用已经租用到的 IP 地址向之前之 DHCP 服务器发出 DHCP request 信息,DHCP 服务器会尽量让客户端使用原来的 IP 地址,如果没问题的话,直接响应 DHCPack 来确认则可。如果该地址已经失效或已经被其它机器使用了,服务器则会响应一个 DHCPNACK 封包给客户端,要求其从新执行 DHCP discover。


至于 IP 的租约期限却是非常考究的,并非如我们租房子那样简单, 以 NT 为例子:DHCP 工作站除了在开机的时候发出 DHCP request 请求之外,在租约期限一半的时候也会发出 DHCP request ,如果此时得不到 DHCP 服务器的确认的话,工作站还可以继续使用该 IP ;然后在剩下的租约期限的再一半的时候(即租约的75%),还得不到确认的话,那么工作站就不能拥有这个 IP 了。至于为什么不是到租约期限完全结束才放弃 IP 呢?,对不起,小弟也是不学无术之人,没有去深究了,只知道要回答 MCSE 题目的时候,您一定要记得 NT 是这么工作的就是了。


要是您想退租,可以随时送出 DHCPLEREASE 命令解约,就算您的租约在前一秒钟才获得的。



跨网络的 DHCP 运作


从前面描述的过程中,我们不难发现:DHCDISCOVER 是以广播方式进行的,其情形只能在同一网络之内进行,因为 router 是不会将广播传送出去的。但如果 DHCP 服务器安设在其它的网络上面呢?由于 DHCP 客户端还没有 IP 环境设定,所以也不知道 Router 地址,而且有些 Router 也不会将 DHCP 广播封包传递出去,因此这情形下 DHCP DISCOVER 是永远没办法抵达 DHCP 服务器那端的,当然也不会发生 OFFER 及其它动作了。要解决这个问题,我们可以用 DHCP Agent (或 DHCP Proxy )主机来接管客户的 DHCP 请求,然后将此请求传递给真正的 DHCP 服务器,然后将服务器的回复传给客户。这里,Proxy 主机必须自己具有路由能力,且能将双方的封包互传对方。


若不使用 Proxy,您也可以在每一个网络之中安装 DHCP 服务器,但这样的话,一来设备成本会增加,而且,管理上面也比较分散。当然喽,如果在一个十分大型的网络中,这样的均衡式架构还是可取的。端视您的实际情况而定了。


DHCP封包格式





以下为各字段的简要说明:


OP

若是 client 送给 server 的封包,设为 1 ,反向为 2 。


HTYPE

硬件类别,Ethernet 为 1 。



HLEN

硬件地址长度, Ethernet 为 6 。



HOPS

若封包需经过 router 传送,每站加 1 ,若在同一网内,为 0 。



TRANSACTION ID

DHCP REQUEST 时产生的数值,以作 DHCPREPLY 时的依据。



SECONDS

Client 端启动时间(秒)。



FLAGS

从 0 到 15 共 16 bits ,最左一 bit 为 1 时表示 server 将以广播方式传送封包给 client ,其余尚未使用。



ciaddr

要是 client 端想继续使用之前取得之 IP 地址,则列于这里。



yiaddr

从 server 送回 client 之 DHCP OFFER 与 DHCPACK 封包中,此栏填写分配给 client 的 IP 地址。



siaddr

若 client 需要透过网络开机,从 server 送出之 DHCP OFFER、DHCPACK、DHCPNACK 封包中,此栏填写开机程序代码所在 server 之地址。



giaddr

若需跨网域进行 DHCP 发放,此栏为 relay agent 的地址,否则为 0 。



chaddr

Client 之硬件地址。



sname

Server 之名称字符串,以 0x00 结尾。



file

若 client 需要透过网络开机,此栏将指出开机程序名称,稍后以 TFTP 传送。



options

允许厂商定议选项(Vendor-Specific Area),以提供更多的设定信息(如:Netmask、Gateway、DNS、等等)。其长度可变,同时可携带多个选项,每一选项之第一个 byte 为信息代码,其后一个 byte 为该项数据长度,最后为项目内容。


CODE LEN VALUE




此字段完全兼容 BOOTP ,同时扩充了更多选项。其中,DHCP 封包可利用编码为 0x53 之选项来设定封包类别:


项值 类别

1 DHCP DISCOVER

2 DHCP OFFER

3 DHCP REQUEST

4 DHCPDECLINE

5 DHCPACK

6 DHCPNACK

7 DHCPRELEASE




DHCP 的选项非常多,有空请查阅 RFC 或相关文献,并好好理解,这里不再叙述了。



DHCP 协议之 RFC 文件


RFC-951、RFC-1084、RFC-1123、RFC-1533、RFC-1534、RFC-1497、RFC-1541

CD boot loader : SYSLINUX, PXELINUX, ISOLINUX, and EXTLINUX

The SYSLINUX Project covers lightweight bootloaders for MS-DOS FAT filesystems (SYSLINUX), network booting (PXELINUX), bootable “El Torito” CD-ROMs (ISOLINUX), and Linux ext2/ext3 filesystems (EXTLINUX). The project also includes MEMDISK, a tool to boot legacy operating systems (such as DOS) from nontraditional media; it is usually used in conjunction with PXELINUX and ISOLINUX.

More info about SYSLINUX, PXELINUX, ISOLINUX, and EXTLINUX can be found on their respective pages; however, since the three have a lot in common, the common documentation is on the SYSLINUX page for now.

The SYSLINUX Project is now maintained in a public git repository. See Development for details.

  • SYSLINUX 3.62 was released on March 1, 2008. This was a new feature release. See the change log for details.
  • SYSLINUX 3.61 was released on February 3, 2008. This was a bug fix release. See the change log for details.
  • SYSLINUX 3.60 was released on January 10, 2008. This was a new feature release. See the change log for details.
  • SYSLINUX 3.55 was released on January 10, 2008. This was a minor bugfix/enhancement release. See the change log for details.
  • SYSLINUX 3.54 was released on December 12, 2007. This was a minor bugfix release. See the change log for details.
  • SYSLINUX 3.53 was released on November 11, 2007. This was a minor bugfix release. See the change log for details.
  • SYSLINUX 3.52 was released on September 25, 2007. This was a minor bugfix release. See the change log for details.
  • SYSLINUX 3.51 was released on June 11, 2007. This was a minor bugfix release. See the change log for details.
  • SYSLINUX 3.50 was released on June 9, 2007. This is a major new feature release. See the change log for details.
  • SYSLINUX 3.36 was released on February 10, 2007. See the change log for details.
  • SYSLINUX 3.35 was released on January 30, 2007. See the change log for details.
  • SYSLINUX 3.31 was released on September 25, 2006. This is a minor update to the new graphical menu system introduced in 3.30.
  • SYSLINUX 3.30 was released on September 18, 2006. This release offers a brand new graphical version of the Simple Menu System. See the screenshots page to see what it looks like, or the menu page for more information. See the change log for details.

There is a general mailing list that carries SYSLINUX announcements as well as discussion. If you have a problem it is a very good idea to browse the archives for information.

Reference and more:

How a livecd come to life?

Ultimate Boot CD :: View topic – BCDL – Bootable CD Loade

SYSLINUX – The Easy-to-use Linux Bootloader

ISOLINUX Documentation

CD-ROM Installation

Isolinux HowTo for newbie

Isolinux HowTo for newbies2

OpenSourceHowTo.org – TFTP + PXE + syslinux + G4L


PXELINUX Documentation

Quick and dirty PXE boot

Most new Servers or Workstations aren’t equipped with a floppy drive anymore, but from time to time I need to boot from a floppy drive. And I don’t want to burn a CD each time I need to boot from a floppy drive.. so the solution is tftpd32 and PXELINUX. With those 2 tools I’m able to boot disk images from the LAN.


You need tftpd32 from Ph. Jounin (http://tftpd32.jounin.net/) and PXELINUX, which is a part of the SYSLINUX package (http://syslinux.zytor.com).


Tftpd32 act’s as DHCP and TFTP server (of course you can use another DHCP Server) while PXELINUX provide booting Linux from the network.


You can download the ready-for-use package here.


Directory structure of this package:

root dir                –     executable files

bootimages       –    the uncompressed (*.IMA) disk images.

pxelinux.cfg        –    the PXELINUX config file


my simple default pxe configuration:

—————————————————

MENU TITLE ABC Systems AG, PXE BOOT MENU


##

## settings for the simple menu system

##

DEFAULT vesamenu.c32

PROMPT 0

##

## boot options, ^means hotkey

##

    label bart

        MENU LABEL bootdisk#1, this starts the bart disk(*)

        MENU PASSWD password

        kernel memdisk

        append initrd=bootimagesIMAGE1.ima


    label test

        MENU LABEL various, starts the temp. disk image(*)

        MENU PASSWD password

        kernel memdisk

        append initrd=bootimagesIMAGE2.IMA


    label dmitest

        MENU LABEL dmitest, various dmi tests

        kernel dmitest.c32

               

##

## various settings

##

MENU BACKGROUND pxelinux.cfgbg.png

NOESCAPE 1

ALLOWOPTIONS 0

timeout 600


menu color title        1;31;49    #eeff1010 #cc553333 std

menu color sel            7;37;40    #ff000000 #bbaa9999 all

menu color border        30;44      #ffffffff #00000000 std

menu color pwdheader    31;47      #eeff1010 #20ffffff std

—————————————————


Screenshot of the configured DHCP Server:


Change the Current Directory and the IP settings, so that they fit your needs.


The result should look like this menu:

Linux职业认证考试102的必考点

1. /proc/interrupts 文件显示当前系统中正在使用的中断。

    2. Linux支持标准串/并口和游戏棒口。 /dev目录下对应每个设备/端口有一个文件。setserial命令用于显示修改串口配置。

    3. dmesg命令可显示Linux在启动时发现了哪些硬件。

    4. fdisk用于硬盘分区。 newe2fs用于建立文件系统。 mount用于将分区挂在总文件树上。

    5. ifconfig是最常用的网络配置工具。 ping通过发送ICMP消息观察一台网上机器是否可被连通。 RedHat的sndconfig用于配置声卡。 minicom用于配置modem.

    6. PPP协议是最通用的串行通讯协议。 /etc/ppp/options中有PPP的配置信息。

    PAP(Password Authentication Protocol)和CHAP(Challenge Handshake Authentication Protocol)是PPP下最流行的两个认证协议。

    系统安装和软件包安装

    7. hda 表示第一个IDE盘, hda1是它的第一个分区。 sda表示第一个SCSI盘, sda1是它的第一个分区。

    8. swap分区的大小应至少和内存大小一样。 root分区应尽量小。data/user等分区越细, 备份就越容易。

    9. 分区完成后, 可以用mke2fs建立文件系统。

    10. /etc/lilo.conf 中有Lilo的配置信息。 编辑完此文件后必须运行/sbin/lilo安装LILO bootloader.

    11. tarball是最方便的打包工具。 “x”选项用于解包, “c” 选项用于打包, “v”选项提供更多过程信息。 “f”选项用于指明包文件名。

    12. make使用Makefile文件提供的编译参数命令编译系统。 “configure”脚本用于软件的环境配置。

    13. 动态共享库方便不同的软件共享库函数, 而且在库升级时, 使用它的软件无需重新编译。 ldd命令用于显示软件的共享库使用情况。 ldconfig命令用于更新维护系统的共享库数据缓存(cache of shared library data)。

    “ldconfig -p”显示当前的共享库缓存。

    14. 软件包管理工具有RedHat的RPM和Debian的dpkg.

    15. rpm选项包括:

    -i 安装包-e 卸载包-V 验证包的安装情况 (-Va验证所有包的安装情况)

    -q 查寻哪个包有哪个文件 (-qf 查寻哪个文件属于哪个包 )

    -b 建立包-p 显示包的信息。

    16. dpkg (略)

    内核

    17. lsmod命令显示系统中已装载的模块。 insmod命令用于装载模块。rmmod命令用于卸载模块。 modinfo用于显示模块的有关信息。

    18. modprobe工具可根据模块的依赖情况装载模块。 depmod 显示模块的依赖情况。

    19. conf.modules 和 modules.conf 没有任何区别。 不同的Linux发布商使用不同的文件。

    20. 内核通常使用linux-x.y.z命名, x.y.z 代表版本号。

    21. “make config” 提供一字符界面用于配置内核。

    22. “make xconfig”提供一X图形界面用于配置内核。

    23. “make dep” 用于建立内核文件的依赖关系。 编好新内核后, 要修改/etc/lilo.conf, 以使用新内核。

    文本编辑,处理和打印

    24. vi的方向键:

    h ——左

    l ——右

    j ——下

    k ——上

    25. vi的命令:

    c -修改文本

    d -删除文本

    i -插入文本

    o -在当前行下插入一新行

    O -在当前行上插入一新行

    p -将缓冲区内容插入

    r -字符替换

    R -替换模式

    u – undo

    x -删除字符

    y -拷贝入缓冲区

26. The lpc utility is the main one used to manage the print service,while lpq is the primary tool for looking at and interacting with the print queue.

  27. The lpr command is used to submit jobs to the print service, and there are a wide number of options that can be used with it, including:

  -b to suppress a banner

  -K to specify a number of copies to print

  -# the same as -K

  -m to send error messages via mail

  -T to signify a title page

  -w to define the width

  28. The /etc/printcap file is a database defining what each known printer is capable of. It is read once by lpd at starup.

  29. The lpd.perms file hods the permissions for the lpd service and can affect the operation as such utilities as lpc and lpq.

  30. The lpd.conf file is used to configure the actual lpd service. There are 180 options that can be configured.

  31. The lprm command is used to remove print jobs, and lprm -a will attempt to remove all spooled jobs.

32. /etc/profile在用户登陆时被执行,然后不同的SHELL会执行用户home下的对应配置文件.如bash依次查找.bash_profile, .bash_login和.profile.

  33. .bashrc在SHELL运行开始时被执行. .inputrc用于键盘配置.

  34. SHELL脚本必须有可执行权限,或是直接被SHELL读入执行. 0代表正常退出.

  35. SHELL脚本中应用”#!”说明解释器位置(如#!/usr/bin/perl)

  36. $1代表第一个命令行参数. shift命令将$2变为$1,依此类推.

  37. test或者[]可用于进行逻辑测试. if-fi构成判断块.

  X窗口

  38. “X -showconfig”显示X的配置情况. startx用于启动X窗口.

  39. xterm参数:

  -bd设置边界颜色

  -bg设置后景色

  -fg设置前景色

  -fn设置字体

  网络

  40. /etc/services 提供端口号与服务名的对应. 如 80 – http, 23 – telnet…

  41. DHCP用于自动分配IP. IP地址有32位, 8位一组. 通过前8位将IP地址分为不同类组:

  1-126 A 类

  128-191 B 类

  192-223 C 类

  在Internet上的IP地址必须独立(UNIQUE).

  42. 一些IP地址可用于内部网络:

  10.x.x.x A 类

  172.16.x.x B 类

  192.168.x.x C 类

  43. netmask用于识别一个主机是否属于当前网络. 缺省netmask为:

  A 类 255.0.0.0

  B 类 255.255.0.0

  C 类 255.255.255.0

网络服务

  44. inetd 是超级daemon, 调用其他服务. 它使用/etc/inetd.conf配置文件决定应管理哪些服务.

  45. hosts.allow 和 hosts.deny 用于访问控制. NFS 使用/etc/exports提供的配置决定export那些文件系统. SMB用于与WINDOWS主机通讯. NMB用于识别WINDOWS主机提供的资源.

  46. sendmail.cf 是 sendmail的主要配置文件. /etc/aliases 提供mail地址别名. /var/spool/mqueue 中存有mail的消息队列. mailq用于检查mail的消息队列. newaliases 用于建立新的别名文件.

  47. Apache提供WEB服务. access.conf, httpd.conf和srm.conf是它的配置文件.

安全

  48. /etc/profile 中的umask值应小心配置, 尽量减小新文件的权限.

  49. 对于SUID和SGID程序要特别小心, 尽量用权限最小的user和group.

  50. shadow password用于提高 /etc/passwd的安全性. 应使用quotas对用户的磁盘空间进行限制. 应有对密码的安全性检查, 保证密码至少有6-8个字符, 并定期更换密码.

  注:102为考试代号,并非是指有102个考点

Linux下Tomcat与Apache Web服务器整合

基于Web技术的Internet/Intranet近年来已经得到了广泛的应用,Intranet是以TCP/IP协议为基础、以Web为核心的企业内部网,用户通过低成本、简单易用的客户浏览器就能随时随地到企业的Web站点上查阅自己所需的数据。浏览器客户端操作界面的一致性避免了C/S模式客户端程序的多样性,而服务器端的开放和基于标准的连接方案使企业很方便地通过Internet同外界联系;同时,Web信息动态的、交互式的发布方式从根本上改变了企业的服务质量,增加了企业的商业机会。


     在许多用户看来,一个Web网站的成败主要在于它所提供的内容和功能,而支持这些内容和功能的Web服务器起着非常重要的作用。

2、Tomcat容器


     Tomcat是一个免费的开源的Serlvet容器,它是Apache基金会的Jakarta项目中的一个核心项目,由Apache,Sun和其它一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的Servlet和Jsp规范总能在Tomcat中得到体现。


     Tomcat是稳固的独立的Web服务器与Servlet Container,不过,其Web服务器的功能则不如许多更健全的Web服务器完整,如Apache Web服务器(举例来说,Tomcat没有大量的选择性模块)。不过,Tomcat是自由的开源软件,而且有许多高手致力于其发展。

2.1 Linux下安装Tomcat


     在安装Tomcat之前需要安装j2sdk(Java 2 Software Development Kit),安装j2sdk的步骤如下:


1)到http://www.java.sun.com下载j2sdk ,如j2sdk-1_4_2_04-linux-i586-rpm.bin。


2)在终端中转到j2sdk-1_4_2_04-linux-i586-rpm.bin所在的目录,输入命令chmod +x j2sdk-1_4_2_04-linux-i586-rpm.bin,添加执行的权限。


3)执行命令./j2sdk-1_4_2_04-linux-i586-rpm.bin,生成j2sdk-1_4_2_04-linux-i586.rpm的文件。


4)执行命令chmod +x j2sdk-1_4_2_04-linux-i586.rpm,给j2sdk-1_4_2_04-linux-i586.rpm添加执行的权限。


5)执行命令 rpm –ivh j2sdk-1_4_2_04-linux-i586.rpm ,安装j2sdk。


6)安装界面会出现授权协议,按Enter键接受,把j2sd安装在/usr/java/j2sdk1.4.2_04。


7)设置环境变量,在 /etc/profile.d/目录下建立文件java.sh,文件的内容如下:

#set java environment

export JAVA_HOME=/usr/java/j2sdk1.4.2_04

export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:/usr/java/jdbc

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH


8)执行命令chmod 755 /etc/profile.d/java.sh,给java.sh分配权限。


9)在终端中分别执行命令javac –help和java –version,如果看到有关的信息,则表示j2sdk已成功安装。


     接下来安装tomcat,安装tomcat的步骤如下:


1)访问http://jakarta.apache.org/tomcat/index.html,下载二进制版的tomcat,如jakarta-tomcat-5.5.10.tar.gz,解压到/usr/local目录:

cd /usr/local

gzip –zxvf jakarta-tomcat-5.5.10.tar.gz


2)修改$tomcat/bin/startup.sh和shutdown.sh文件,

export JAVA_HOME=/usr/java/j2sdk1.4.2_04

export CATALINA_HOME=/usr/local/tomcat-5.5.10

export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:/usr/java/jdbc

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH


3)执行startup.sh即可在http://localhost:8080/ 访问到tomcat的缺省面页.

2.2单独运行Tomcat的优点


1)容易架设。下载Tomcat,设定一些配置,就完成了。不需要花费时间将Web服务器的连接器整合至其它的Web服务器中。


2)不需要担心连接器。永远不需要排除在其它Web服务器与Tomcat之间的任何性能或联机方面的问题。


3)有较佳的安全防护。相对于其它以C、C++所编写的Web服务器,Tomcat比较能忍受远程缓冲区溢位的攻击。因为Tomcat的Java虚拟机是位于网络及操作系统之间,它可以防止几乎所有类型的缓冲区溢位攻击。使用Tomcat的安全防护领域,可以指定对各个资源的访问。


4)容易移植。可以将Tomcat服务器(以及应用程序)移植到不同的服务器、操作系统甚至架构上。因为Tomcat是以Java编写的,因此可以将其整个目录结构的内容复制到其它计算机上运行,而完全不需要任何改变,甚至于新的计算机的架构与原来的不同也一样。

2.3单独运行Tomcat的缺点


1)Tomcat的支持软件比较少。Tomcat内建Web服务器的支持软件比Apache httpd Web服务器少。


2)Tomcat的Web服务器功能少。相对于Tomcat Web服务器,Apache httpd服务器有更完整的功能。


3)虽然Tomcat运行速度快,但还没有Apache httpd快。Tomcat服务器比Apache httpd慢,不过,它还在改进中,而且仍然非常快,快到足以运行今日大多数的企业网站,只是在提供静态页面内容上没有Apache快。

3、Apache Web服务器


     Apache是根据NCSA的服务器发展而来的,NCSA是最早出现的Web服务器程序之一,由伊利诺斯大学Urbana-Champaign分校的美国国家超级计算应用中心开发。在发展初期,Apache主要是一个基于UNIX系统的服务器,它的宗旨就是建成一个基于UNIX系统的、功能更强、效率更高并且速度更快的WWW服务器,这就决定了它是从其他的服务器演变而来的,并且添加了大量补丁来增强它在某一方面的性能,所以它就被命名为“APA+CHy Server(一个补丁组成的服务器)”。发展到今天,Apache已经被移植到很多平台上了。

Apache的开发遵循GPL协议,由全球的志愿者一起开发和维护。在保持强大的功能及不断更新的同时,它仍然是免费的,并且公开源代码。

3.1 安装Apache服务器


     可以通过以下三种方法安装Apache服务器。


1)如果安装的Linux版本中带用Apache的话,就在选择所要安装的服务器的时候,将httpd这个服务选上,Linux安装程序将自动完成Apache的安装工作,并做好基本的配置。


2)使用可执行文件软件包,这比较适合那些对编译工作不是太熟悉的初级用户,因为它相对比较简单。下载软件包apache_1.2.4.e.tar.gz ,执行命令tar xvzf apache_1.2.4.e.tar.gz 完成安装工作。如果使用的是RedHat Linux的话,也可以下载apache_1.2.4.rpm软件安装包,然后使用rpm –ivh apache_1.2.4.rpm命令安装。


3)如果想把Apache服务器充分利用起来的话,就一定要自己编译Apache 定制其功能。 下载包含Apache源代码的软件包apache_1.2.4.tar.gz;然后用tar命令将它解开;将当前目录改变为Apache源代码发行版的src目录;将配置样本文件(Configuration.tmpl)复制为Configuration文件;编辑Configuration文件中的配置选项:

Makefile配置选项:一些编译选项:

. “CC=”一行指定用什么编译软件编译,一般为“CC=gcc”;如果需要将额外的标志(参数)指定给C编译软件,可以使用:

EXTRA_CFLAGS=

EXTRA_LFLAGS=

如果系统需要特殊的库和包含文件,可以在这里指定它们:

EXTRA_LIBS=

EXTRA_INCLUDES=

如果要改变代码优化设置的话,须将下面一句去掉注释,然后改成所需要的值:

#OPTIM=-O2


     Rule配置选项:用来决定需要什么功能,一般情况下无需改变。


     模块配置:模块是Apache的组成部分,它为Apache内核增加新功能。通过使用模块配置,可以自定义在Apache服务器中需要什么功能,这个部分也是Apache灵活性的表现。模块配置行如下所示:


AddModule modules/standard/mod_env.o

     如果需要Apache服务器具备什么功能,就将那个模块用AddModule语句加到配置文件Configuration中去。

下面列出了Apache的模块功能:


模块名                          功能                                 缺省

mod_access                  提供基于主机的访问控制命令          y

mod_actions                 能够运行基于MIME类型的CGI脚本或HTTP请求方法        y

mod_alias                 能执行URL重定向服务                          y

mod_asis                  使文档能在没有HTTP头标的情况下被发送到客户端   y

mod_auth                  支持使用存储在文本文件中的用户名、口令实现认证        y

mod_auth_dbm                    支持使用DBM文件存储基本HTTP认证           n

mod_auth_mysql                        支持使用MySQL数据库实现基本HTTP认证              n

mod_auth_anon                        允许以匿名方式访问需要认证的区域                 y

mod_auth_external                 支持使用第三方认证                   n

mod_autoindex                        当缺少索引文件时,自动生成动态目录列表             y

mod_cern_meta                        提供对元信息的支持                  n

mod_cgi                          支持CGI                  y

mod_dir                          能够重定向任何对不包括尾部斜杠字符命令的请求      y

mod_env                                  使你能够将环境变量传递给CGI或SSI脚本             n

mod_expires                  让你确定Apache在服务器响应请求时如何处理Expires          y

mod_headers                  能够操作HTTP应答头标            y

mod_imap                  提供图形映射支持                       n

mod_include                  使支持SSI                        n

mod_info                                  对服务器配置提供了全面的描述            y

mod_log_agent                          允许在单独的日志文件中存储用户代理的信息        n

mod_log_config                        支持记录日志                      y

mod_log_referer                          提供了将请求中的Referer头标写入日志的功能                  n

mod_mime                  用来向客户端提供有关文档的元信息              y

mod_negotiation                        提供了对内容协商的支持               y

mod_setenvif                  使你能够创建定制环境变量      y

mod_speling                  使你能够处理含有拼写错误或大小写错误的URL请求       n

mod_status                  允许管理员通过WEB管理Apache           y

mod_unique_id          为每个请求提供在非常特殊的条件下保证是唯一的标识          n

在src目录下执行:“. /configure”;

编译Apache:执行命令“make”;


     将编译好的可执行文件httpd复制到/etc/httpd/bin目录下;将Apache发行版的配置文件:access.conf、httpd.conf、mime.types、srm.conf文件复制到/etc/httpd/conf目录下。到此为止,安装完成。

3.1单独运行Apache httpd的优点


   1)Apache httpd比Tomcat内建的Web服务器快。

   2)较多的软件支持。Apache httpd有庞大的支持软件链接库。

   3)启动与停止快。一般来说,Apache httpd的启动与停止时间都比Tomcat短。

3.2单独运行Apache httpd的缺点


   1)架设比较困难。比起单独运行Tomcat,安装Apache Web服务器并让它与Tomcat协同运行要复杂很多。

   2)会拖慢动态网页内容的服务。

   3)安全漏洞。Apache httpd比较容易受到缓冲区溢位的攻击。

   4)升级比较复杂。

4、Tomcat与Apache的整合


有几种将Tomcat整合到Apache httpd Web服务器的方法:


1)架使用不同的端口号分担负载。


该方法是最容易实现的,只需要在现成的网页目录中假如URL以连接到在同一台Web服务器机器上的Tomcat Web服务器端口(如8080)。实际上还是执行两个完整的Web服务器程序,彼此之间并没有真正的整合。


2)从Apache将请求发送至Tomcat的代理服务器。


该方法会在主服务器中使用HTTP的代理机制。代理机制常会用来将来自网关上运行的Web服务器的Web信息流重新路由至外部因特网上的网站。不过,也可以用来将网站区域或目录的信息流重导至Tomcat Web服务器。


3)使用mod_jk2连接器。


该方法使用运行于现有的Apache httpd Web服务器之内的连接器模块(如mod_jk),并经由特定的协议快速地将请求转送至Tomcat。这是将Tomcat连接至Apache httpd的标准方式。


4)单一进程中执行两个程序。


该方法通过让JVM在Apache httpd的进程空间中运行的方式,可以提供“完全整合”的功能。这是最有效的办法,但也是最依赖于服务器的实现。