显示标签为“Linux”的博文。显示所有博文
显示标签为“Linux”的博文。显示所有博文

2007年11月6日星期二

Thinkpad上安装Ubuntu笔记

机器配置

Lenovo/IBM Thinkpad T43 266871U:
Intel Pentium M(Dothan) 760 2.0GHz / Intel 915PM 芯片组 / 512M DDR2 533MHz 内存(我加到了1G) / ATI Mobility Radeon x300 / 14.1" TFT 高分屏1400x1050 / 80G SATA 硬盘 / 24x24x24x/8x 康宝 / Intel 802.11a/b/g无线网卡 / 蓝牙 / 千兆网卡 / 指纹识别

Linux与Laptop

从笔记本的角度上说,IBM对Linux的支持一直都不错,而从Linux发行版的角度上讲,虽然我没用过太多的版本,但Ubuntu安装成功后,不用任何配置机器的Fn+F2、Fn+F3等快捷键以及挂起到内存、挂起到硬盘和CPU的Speed by Step频率自动调节都能正常工作,相信能像Ubuntu这样对本本的如此支持的的发行版估计不多(也许是我见识太少,但当ubuntu安完后你发现笔记本95%以上的功能已经不费任何力气的正常工作了,你会非常感谢Ubuntu社区里的人们为这些便捷付出的努力。)

分区

由于Thinkpad出厂时已经占用了一个隐藏分区来做HPA,而一个硬盘上最多能有四个主分区,其中扩展分区还占去了一个份额,因此分区方案的选择受到一点限制。我的分区方式如下:

代码:
Device Filesystem Size Used Avail Use% Mounted on
/dev/sda1 ntfs 9.8G 2.5G 7.3G 26% /windows
/dev/sda3 ext3 9.7G 2.8G 6.4G 31% /
/dev/sda5 fat32 30G 13G 17G 44% /media/data
/dev/sda6 ext3 21G 4.9G 15G 26% /home


其中sda1是Windows的系统,NTFS格式,sda5是存放一些与Linux共享数据的FAT32盘,而隐藏分区占用的是sda2,没有挂载。/和/home都用的是比较通用的EXT3文件系统,(开始尝试过XFS,但Grub不支持)

Source.list

第一次启动系统后的第一件事就是修改apt的source.list,我的宽带接入是网通的线路,如下两种方案对于网通的用户应该都算比较快的。

* 上海交大的镜像
代码:
deb ftp://ftp.sjtu.edu.cn/sites/archive.ubuntu.com/ breezy main restricted universe multiverse
deb ftp://ftp.sjtu.edu.cn/sites/archive.ubuntu.com/ breezy-security main restricted universe multiverse
deb ftp://ftp.sjtu.edu.cn/sites/archive.ubuntu.com/ breezy-updates main restricted universe multiverse
deb ftp://ftp.sjtu.edu.cn/sites/archive.ubuntu.com/ breezy-backports main restricted universe multiverse


* 台湾的源,网通用着竟然也很快
代码:
deb http://opensource.nchc.org.tw/ubuntu/ breezy main multiverse restricted universe
deb http://opensource.nchc.org.tw/ubuntu/ breezy-updates main multiverse restricted universe
deb http://opensource.nchc.org.tw/ubuntu/ breezy-backports main multiverse restricted universe
deb http://opensource.nchc.org.tw/ubuntu/ breezy-security main multiverse restricted universe


显卡驱动

虽然Ubuntu装好后ATI的显卡已经可以正常工作了,但由于用的是xorg-driver-ati作为驱动,没有3D加速,让人十分不爽。源里的 linux-restricted-modules里有fglrx模块以及xorg-driver-fglrx的驱动,但因为版本过老有Bug,如果用了的话机器会在挂起到内存(待机)唤醒时死住,因此我压根就没安它,而是用的官方的8.20.8版驱动。

在安装ATI官方最新驱动前,先要确定你已经删除了和已安装内核对应的linux-restricted-modules以及xorg-driver-fglrx,并重新配置X使其使用ati或者vesa作为显卡驱动。
代码:
sudo apt-get remove xorg-driver-fglrx
sudo apt-get remove fglrx-control
sudo apt-get remove linux-restricted-modules-$(uname -r)
sudo dpkg-reconfigure xserver-xorg


然后 从ATI官方网站上下载了最新的驱动安装脚本,为了以便于以后的管理,不直接运行脚本而是用它生成一些deb包再安装。
代码:
sudo apt-get install gcc-3.4 module-assistant build-essential fakeroot dh-make debconf libstdc++5 gcc-3.3-base
sudo sh ./ati-driver-installer-8.20.8-i386.run --buildpkg Ubuntu/breezy
sudo dpkg -i xorg-driver-fglrx_8.20.8-1_i386.deb
sudo dpkg -i fglrx-control_8.20.8-1_i386.deb
sudo dpkg -i fglrx-kernel-source_8.20.8-1_i386.deb

然后编译驱动模块并安装
代码:
sudo module-assistant prepare
sudo module-assistant update
sudo module-assistant a-i fglrx


更新xorg.conf
代码:
sudo aticonfig --initial


注意,aticonfig没有在xorg.conf中所建立的monitor部分加入Option "DPMS"从而导致Fn+F3关闭屏幕时LCD的背光不关闭,因此要修正之。

修改合上本本时的动作

Ubuntu 在你合上本本的屏幕时的默认动作竟然是关闭屏幕而不是待机,这个让人觉得挺蹊跷的。修改 /etc/acpi/events/lidbtn,把其中的action=/etc/acpi/lid.sh改成 action/etc/acpi/sleep.sh sleep

安装TPB,为本本增加OSD

sudo apt-get install tpb
sudo addgroup dngpng nvram
sudo vi /etc/modules 在末尾加上一行,写上nvram
sudo vi /etc/tpbrc,按喜好修改,为了让OSD比较清晰以及保持和Win下的一致性,我的设置如下:
代码:
OSDFONT -bitstream-bitstream vera sans-medium-r-*-*-*-240-*-*-*-*-iso10646-1
OSDCOLOR Green
OSDVERTICAL 50
OSDHORIZONTAL 30
OSDALIGN CENTER


这样在Gnome启动后,加减音量、调整亮度这样的操作就会在屏幕上有相应的反应了。

加速本本的启动

Ubuntu的启动过程默认执行了许多脚本,如在线时间同步、LVM、RAID等而我的本本根不用不到这些,而启动脚本中对于即插即用网络的检测会因为你没有插入网线或者周围没有可用的无线接入点而耽误较长时间。从UbuntuForums里找到解决办法:

首先,安装network-manager,在Gnome的启动会话(System>Preferences> Session>Startup Programs)中加入nm-applet并设置其启动顺序为10左右,移除面板上默认的叫Network Monitor的Applet,注销再登入,新的applet就会启用了。插入网线,它会自动启动网络并为机器得到一个DHCP的IP。如果有无线网络,它也会侦测到,左键单击它的图标,会在下拉菜单列出可用无线网络,选择一个,会让你输入一个Keyring,千万选择一个简单的keyring,因为以后每次开机都要输入一次──这个也暂时没有解决办法,够烦人的。

其次,从启动脚本中去除不必要的部分脚本
代码:
sudo update-rc.d -f hotplug-net remove
sudo update-rc.d -f ntpdate remove
sudo update-rc.d -f mdmadm-raid remove
sudo update-rc.d -f lvm remove
sudo update-rc.d -f evms remove


最后,修改/etc/network/interfaces,注释掉从#The primary network interface开始往下的所有行,并确保文件中以auto开头的行只有auto lo

现在机器启动就会快一些了,如果还想再快恐怕只能用InitNG了,这个我还没试。另外,以上禁用的脚本可以通过以下方法恢复:
代码:
sudo update-rc.d hotplug-net start 41 2 S . stop 89 0 6 .
sudo update-rc.d ntpdate start 51 S 2 .
sudo update-rc.d mdadm-raid start 04 S .
sudo update-rc.d mdadm-raid start 50 0 6 .
sudo update-rc.d lvm start 26 S .
sudo update-rc.d lvm start 50 0 6 .
sudo update-rc.d evms start 27 S .
sudo update-rc.d evms start 49 0 6 .


在面板上显示网速、CPU温度和CPU频率

sudo apt-get install netmon-applet sensors-applet
sudo chmod +s /usr/bin/cupfreq-selector,这样不只可以显示CPU频率,还可以选择以使CPU在特定频率上工作。然后在Gnome面板上添加相应的applet

应用特殊键

Thinkpad的键盘上一些专有的键,如Access IBM,前进和后退。可以通过编辑.Xmodmap将它们映射为F19、F20等从而可以Gnome中的将这些键绑定为特定的操作。我的.Xmodmap如下
代码:
keycode 234 = F19
keycode 233 = F20

并把后退和前进分别设置为切换到下一个和上一个Workspace

参考网站

1. ThinkWiki
2. Ubuntuforums: HOW-TO: ATI fglrx driver latest version
3. Ubuntuforums: Tenative how-to for speeding laptop bootup
4. [[linux:t43]]
5. Ubuntu On IBM ThinkPad T43 (2668-HH5)
6. Ubuntu Linux 5.10 Breezy Badger on an IBM ThinkPad T42

原文链接:http://forum.ubuntu.org.cn/about7356.html
Linux联盟收集整理

2007年9月27日星期四

瘦客户机及其应用

近年来,瘦客户机(机群)得到广泛应用。在学校、政府机关和中小企业,都有瘦客户机(机群)应用的实例。所谓“瘦客户机(Thin Clients)”是指,它的所有软件和数据都存储在网络服务器上的计算机。数据和应用软件的集中存储和分配,具有许多优点,能够节约大量的系统购置和管理成本。瘦客户机系统允许人们在不同地点、不同设备、不同时间利用相同数据和应用软件进行协同工作。

由于瘦客户机(机群)的数据和应用软件都集中存储在一台网络服务器上,因而,瘦客户机系统管理起来特别方便,而且抵抗病毒、谍件和流氓软件的能力大大提高,处理应用软件的补丁和升级更加有效,系统维修费用大大降低。简单说来,在瘦客户机上工作,不必担心日常的PC机维护工作,拿来就用,用完走人,下次再用,不用担心(担心数据丢失和应用软件的配置被别人改动)。这就是说,瘦客户机可以被任何人、在任何地方(限于本单位)、随时使用,不会感到不便。瘦客户机本身非常“强壮”,不易损坏。说明白了,瘦客户机就有三件东西:显示器(连带一个很小的数据处理装置)、键盘和鼠标,甚至在瘦客户机里面连散热风扇都没有,耗电极低。根据国外有关统计,企业、学校和机关部门合理采用瘦客户机系统“解决方案”,可以降低IT购置成本高达30%~70%,同时,系统管理维护(人力、物力)费用更为降低,系统的可靠性(抵抗病毒、谍件)大为提高。那么,为什么瘦客户机应用在我国没有得到普及?原因在哪里?根本原因在于驱动瘦客户机(机群)的网络服务器软件没有“过关”,以至严重阻碍了我国瘦客户机产业的发展。

回顾历史,驱动瘦客户机的服务器软件开发计划早已有之,在Windows和Linux平台上都有。由于在软件使用授权方面的复杂性,在Windows平台上的瘦客户机方案没有得到应有的关注和普及。1999年,基于Linux平台上的瘦客户机解决方案(称为“LTSP”,Linux Terminal Server Project)逐步兴起。LTSP的奠基人Jim McQuillan在这方面做了大量的工作。近年来,特别是在2005年年初,Ubuntu计划的领导人Mark Shuttleworth深刻认识到瘦客户机的重要性。Ubuntu的首席技术执行官Matt Zimmerman,经过艰苦努力,把LTSP技术创新性地引入到Ubuntu Linux平台上,从而为瘦客户机在Linux平台上的广泛应用奠定了坚实的基础,其具体表现在所谓“教育Ubuntu”(即“Edubuntu”)计划之中。

近期,在北京地区某个“LTSP实验室”里面,在我的主持下,实现并完成了对LTSP系统的测试、运行以及对其性能的初步评价。目前,正准备进一步完善实验环境,深入挖掘LTSP的全部潜能,探索它在各方面(行业)的应用前景。

利用LTSP技术,构建“电脑教室”、“计算机培训中心”是完全可行的。目前,许多学校的“电脑教室”一般都是名副其实的“电脑”教室,一屋子都是电脑,只是一个让学生“上机”实习的地方,根本谈不上用于正规的教学活动。在电脑教室进行教学活动,一般要事先进行周密准备,使全部电脑处于“准备状态”(Teaching - ready ),在目前情况下,这是非常难于实际做到的。但是,采用LTSP技术,在采用瘦客户机机群组建电脑教室里,一个教员在极短的时间内(几分钟)就能够完全控制整个电脑教室中的所有瘦客户机的运行状态,开始进行正常的教学活动。学生们面对的是非常坚实的瘦客户机,他们运行的软件都运行在一台网络服务器上,而且相互毫不影响。电脑教室采用瘦客户机,提高了对于病毒、谍件和流氓软件的抵抗力,保证了学习内容的健康有益性。由此可见,基于LTSP技术的电脑教室的市场前景必定十分广阔。

2007年2月26日星期一

坎坷的samba-3源码安装二:smb脚本

#!/bin/sh

# description: Starts and stops the Samba smbd and nmbd daemons
# named this script as "smb" and put it into /etc/rc.d/init.d/
# don't forget to change it to executable file with "chmod 755 smb"
# config: /etc/samba/smb.conf
# Check that the Samba configuration file exists
[ -f /usr/local/samba/lib/smb.conf ] exit 0

start( )
{
echo -n "Starting SMB services: "
/usr/local/samba/bin/smbd -D
ERROR=$?
echo

echo -n "Starting NMB services: "
/usr/local/samba/bin/nmbd -D
ERROR2=$?
if [ $ERROR2 -ne 0 ]
then
ERROR=1
fi
echo

return $ERROR
}

stop( )
{
echo -n "Shutting down SMB services: "
/bin/kill -TERM -a smbd
ERROR=$?
echo

echo -n "Shutting down NMB services: "
/bin/kill -TERM -a nmbd
ERROR2=$?
if [ $ERROR2 -ne 0 ]
then
ERROR=1
fi
echo

return $ERROR
}

case "$1" in
start)
start
;;
stop)
stop
;;
*)
echo "Usage: $0 {startstop}"
exit 1
esac

exit $?

----------------------------------------------------------------
还有些话要说
启动
# /etc/rc.d/init.d/smb start
Starting SMB services:
Starting NMB services:
# ps ax | grep mbd
1268 ? S 0:00 /usr/local/samba/bin/smbd -D
1270 ? S 0:00 /usr/local/samba/bin/nmbd -D
1465 pts/2 S 0:00 grep mbd
关闭
# /etc/rc.d/init.d/smb stop
Shutting down SMB services:
Shutting down NMB services:
最后我们还需要把它们添加到/etc/rc.d/rcX.d 目录中去以后就可以自动启动喽
# ln -s /etc/rc.d/init.d/smb /etc/rc.d/rc3.d/S35smb
# ln -s /etc/rc.d/init.d/smb /etc/rc.d/rc5.d/S35smb

# ln -s /etc/rc.d/init.d/smb /etc/rc.d/rc0.d/K35smb
# ln -s /etc/rc.d/init.d/smb /etc/rc.d/rc1.d/K35smb
# ln -s /etc/rc.d/init.d/smb /etc/rc.d/rc2.d/K35smb
# ln -s /etc/rc.d/init.d/smb /etc/rc.d/rc4.d/K35smb
# ln -s /etc/rc.d/init.d/smb /etc/rc.d/rc6.d/K35smb

2007年2月25日星期日

Samba学习笔记

Samba学习笔记
整理:Jims of 肥肥世家


Copyright © 2005 本文遵从GNU的自由文档许可证(Free Document License)的条款,欢迎转载、修改、散布。

发布时间:2005年07月08日

最新更新:2006年09月07日,增加smbfs介绍。

Abstract

Samba是Linux与Windows信息沟通的桥梁。它可使Linux系统变成Windows文件和打印服务器,供Linux用户和Windows用户共同使用。在现在Windows和Linux多操作平台共存的环境下,这种技术就更显得重要,它能帮我们实现信息的跨平台交流和平台的平稳迁移。Samba成功突破了Windows的技术封锁,是自由软件的一面旗枳和典范。


--------------------------------------------------------------------------------

Table of Contents

1. Samba基础
2. 安装配置
2.1. 服务器角色
2.2. 使用openldap目录服务进行samba用户验证
2.3. 回收站功能
3. 小技巧
List of Tables

1.1. NetBIOS节点类型
1.2. NetBIOS资源类型
1.3. NetBIOS组资源类型
Chapter 1. Samba基础
Samba是一套使用SMB/CIFS协议的Unix应用程序,通过该套程序我们可以和Windows服务器共享资源。更进一步,我们还可用Samba服务器替代Windows服务器的一些功能,如Wins,PDC等。

Samba功能介绍

在Linux下使用Windows的共享资源。

作为Windows文件服务器/打印服务器的开源替代

实现Wins服务器功能。

作为Windows环境下的PDC、BDC。

一些基本概念

节点类型----NBT网络中每台机器根据处理名称注册和解析的方式的不同,被指定为以下几种节点类型。

Table 1.1. NetBIOS节点类型

类型 描述
b-node 只使用广播方式的注册和解析。
p-node 只使用点到点的注册和解析。
m-node 先用广播方式注册,一旦成功,则将结果通知NBNS服务器。使用广播方式解析,如果不成功,则使用NBNS服务器。
h-node 使用NBNS服务器进行注册和解析,如果NBNS服务器没有响应或不能操作,则使用广播方式。

Windows系统多数使用b-node或h-node节点类型,h-node提供了更强大的容错能力。用ipconfig/all查询Node Type属性就可知道当前系统的节点类型。

NetBIOS不仅能通告自已的存在,还能告诉其它机器自已能提供的资源类型。下面是一个资源类型的列表。

Table 1.2. NetBIOS资源类型

资源类型 值
标准工作站服务 00
消息服务(WinPopup) 03
RAS服务器服务 06
域主浏览器服务 1B
主浏览器名称 1D
NetDDE服务 1F
文件服务器/打印服务器 20
RAS客户机服务 21
网络监视代理 BE
网络监视工具 BF

网上的机器还可以划分成不同的工作组,下面是NetBIOS的组资源类型。

Table 1.3. NetBIOS组资源类型

类型 描述
标准工作站组 00
登录工作站 1C
主浏览器名称 1D
通用组名称 1E
Internet名称 20
<01><02>__MSBROUSE__<02> 01

Chapter 2. 安装配置
Table of Contents

2.1. 服务器角色
2.2. 使用openldap目录服务进行samba用户验证
2.3. 回收站功能
在Debian中有现成的Samba包,用以命令即可安装,smbclient是客户端软件,用以在Linux下测试和连接samba服务器:

debian:#~ apt-get install samba smbclient

Samba的配置文件是smb.conf,如果是debian系统,则位于/etc/samba目录下,如果从源码编译安装,则位于安装目录的lib目录下。下面是一个示例:

[global]
workgroup = Samba server
server string = Samba server
netbios name = t02

;browser setup
domain master = yes
local master = yes
preferred master = yes
os level = 255

;share charset
unix charset = GB2312
display charset = GB2312
dos charset = GB2312

;security setup
security = user
encrypt passwords = yes
;smb passwd file = /usr/local/samba/private/smbpasswd
ldap admin dn = "cn=admin,dc=com"
passdb backend = ldapsam:ldap://t03
;ldap admin dn = "cn=admin,dc=com"
ldap delete dn = yes
ldap user suffix = dc=samba,dc=tiger
ldap suffix = dc=com

;log setup
log file = /usr/local/samba/var/log.%m
max log size = 50

socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192

dns proxy =no

;start wins server
wins support = yes

[homes]
comment = Home Directories
veto files = /.*/
browseable = no
writable = yes

[linux-app]
comment = share the Linux application software
path = /data/linapp
case sensitive = no
follow symlinks = no
writable = yes
valid users = root +wj
create mask = 0660
directory mask = 0770

2.1. 服务器角色
Samba 3服务器可担任主域控制器、独立域服务器和域成员服务器等角色。设置方法如下:

主域控制器:

[global]
...
......
domain master = yes
preferred master = yes
domain logons = yes
security = user
......
...

使用testparm命令测试一下:

debian:~# testparm
Load smb config files from /etc/samba/smb.conf
Processing section \"[homes]\"
Processing section \"[printers]\"
Loaded services file OK.
Server role: ROLE_DOMAIN_PDC #服务器角色为主域控制器
Press enter to see a dump of your service definitions
......

备份域控制器:

[global]
...
......
domain master = no
preferred master = yes
domain logons = yes
security = user
......
...


运行testparm测试一下:

testparm
Load smb config files from /etc/samba/smb.conf
Processing section \"[homes]\"
Processing section \"[printers]\"
Loaded services file OK.
Server role: ROLE_DOMAIN_BDC #服务器角色为备份域控制器
Press enter to see a dump of your service definitions

独立服务器:

[global]
...
......
domain master = yes
preferred master = yes
domain logon = no
security = user
......
...

再使用testparm命令测试一下。

debian:~# testparm
Load smb config files from /etc/samba/smb.conf
Processing section \"[homes]\"
Processing section \"[printers]\"
Loaded services file OK.
Server role: ROLE_STANDALONE #服务器的角色为独立服务器
Press enter to see a dump of your service definitions
......

域的成员服务器:

[global]
...
......
domain master = yes
preferred master = yes
domain logon = no
security = domain
......
...

运行testparm测试一下:

Load smb config files from /etc/samba/smb.conf
Processing section \"[homes]\"
Processing section \"[printers]\"
Loaded services file OK.
Server role: ROLE_DOMAIN_MEMBER #服务器的角色为域成员服务器
Press enter to see a dump of your service definitions
......

2.2. 使用openldap目录服务进行samba用户验证
samba可把用户信息存放到ldap目录服务器上,使用目录服务器上的用户数据进行用户验证。这样做的好处是:

集中存放用户信息,多台Samba服务器可共用一套用户数据。

当用户数量多时,采用ldap目录服务器可加快用户验证的速度。因为ldap目录服务是专门为读操作而优化的,搜索数据的速度是非常快的。

维护方便,可利用ldap客户端进行可视化维护,如phpldapadmin。

用户可自由更改自已的密码,而不用经过系统管理员,可大大减轻系统管理员的工作量。

要使samba能够使用ldap目录服务器作为用户验证的后台数据库,需在编译samba时选择了“--with-ldapsam”选项。在确保samba服务器和openldap服务器正常运行的前提下,进行以下配置。

要openldap能认识samba的用户信息,我们需在openldap服务器中导入samba.schema。该文件是不包含在openldap源码中的,我们可在samba源码目录中的/examples/LDAP路径中找到该文件。把它拷贝到openldap的schema目录。接着编辑slapd.conf文件,用include指令把samba.schema导入openldap。如:

# Allow LDAPv2 binds
allow bind_v2

# This is the main slapd configuration file. See slapd.conf(5) for more
# info on the configuration options.

#######################################################################
# Global Directives:

# Features to permit
#allow bind_v2

# Schema and objectClass definitions
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/samba.schema #导入samba.schema文件

重启服务器,使配置生效。

下来我们要配置samba服务器了。打开smb.conf文件,添加以下内容:

# You may wish to use password encryption. Please read ENCRYPTION.txt,
# Win95.txt and WinNT.txt in the Samba documentation. Do not enable this
# option unless you have read those documents
encrypt passwords = true
; passdb backend = smbpasswd guest #取消smbpasswd验证

ldap admin dn = "cn=admin,dc=com" #指定管理员
passdb backend = ldapsam:ldap://ldapserver #指定用户验证的ldap目录服务器
ldap user suffix = dc=samba,dc=it #用户信息存放的目录路径
ldap delete dn = no #不允许删除dn
ldap suffix = dc=com #指定搜索后缀

存盘退出,重启samba服务器。运行以下命令,把cn=admin,dc=com管理员的密码“secret”保存到secrets.tdb文件中,以便samba服务器与openldap服务器进行通信。

debian:~# smbpasswd -w secret
Setting stored password for "cn=admin,dc=com" in secrets.tdb #成功保存的提示信息

把Samba用户的验证信息存放到ldap目录服务器的方式有两种。一种是利用ldap里已有的目录项,不用另外增加一个目录项来专门存放samba用户验证信息,而是把samba用户的验证信息存放到目录服务器中同名的目录项。采用这种方式,sambaSamAccount对象类型需手工维护,当用户数量大的时候就很难保证sambaSID号码的唯一。另外一种是直接运行smbpasswd -a test命令,重新创建一个uid=test,dc=samba,dc=it,dc=com的目录项。sambaSamAccount对象类型会自动创建,sambaSID号会由程序自动维护。但如果要以uid=test,dc=samba,dc=it,dc=com登录目录服务器维护samba用户信息,则要手工添加一个simpleSecurityObject对象类型,增加userPassword属性才行。这两种方式各有优缺点,可满足不同场合的需求。第二种方式相对简单,这里就不具体介绍。下面详细介绍一下第一种方式的配置步骤。

首先,我们在ldap目录服务器上要有一个叫“cn=test,dc=samba,dc=it,dc=com”的目录项,且使用该dn能正常登录ldap目录服务器。在cn=test,dc=samba,dc=it,dc=com目录项中还要添加一个sambaSamAccount对象类型,以便smbpasswd程序写入samba帐号信息。添加该对象类型时需要填两个属性,一个是sambaSID,一个是uid,sambaSID类似Windows NT中的SID,它是以S开头一串数字,由Samba服务器的SID + UID组成。当你的samba服务器成功连接到ldap目录服务器时,它已在ldap目录服务器中自动创建一个sambaDomainName=hostname的目录项。该目录项的sambaSID就是Samba服务器的SID了,类似于S-1-5-21-3129426798-1813742091-3551573396。UID手动填一个即可,如3001。每个用户的UID都是不同的。最后的sambaSID是S-1-5-21-3129426798-1813742091-3551573396-3001。

配置完成,使用smbpasswd命令就可把用户信息保存到ldap目录服务器上了。

debian:~# smbpasswd -a test
New SMB password:
Retype new SMB password:
Added user test. #成功添加用户

用phpldapadmin以cn=test,dc=samba,dc=it,dc=com登录进ldapserver服务器,你会发现该用户添加了samba用户的验证信息。其中,uid属性记录的是samba的用户名,sambaLMPassword和sambaNTPassword两个属性分别记录了用户的加密密码资料,分别对应windows98和NT两种加密方式。

到此为止,使用ldap目录服务器进行Samba用户验证已配置完成。但现在还是要管理员在samba服务器上使用smbpasswd命令为用户维护密码。从维护工作量和保密的角度出发,由用户自已维护自已的密码是一种最好的方法。我们借助phpldapadmin这个工具可帮我们实现该功能。具体设置方法是这样的:

首先,在设置前,需先把phpldapadmin安装好,具体的安装步骤请参考我网站上的openldap学习笔记。安装好phpldapadmin后,我们已可正常使用该工具维护目录项了。同时,通过目录服务器的权限管理,我们也可把test用户密码属性设置成只有dn是cn=test,dc=samba,dc=it,dc=com的用户和目录服务器管理员才能修改。要达到该项果,请把以下ACL加入到slapd.conf中。

access to attrs=sambaLMPassword
by dn="cn=admin,dc=com" write
by anonymous auth
by self write
by * none

access to attrs=sambaNTPassword
by dn="cn=admin,dc=com" write
by anonymous auth
by self write
by * none

重启openldap服务器使配置生效。

要修改samba用户的密码,我们只要修改smbaLMPassword和sambaNTPassword两个属性值即可,但会出错,提示修改失败,要我们去修改phpldapadmin的template_config.php文件。这是因为phpldapadmin使用了一个叫mkntpwd的程序来生成samba的加密密码。在template_config.php文件中设置了mkntpwd程序的执行路径。mkntpwd程序默认是没有安装在系统中的,我们需安装它,并把它放到在template_config.php文件里指定的执行位置(/usr/bin/)。mkntpwd的源码包含在samba的源码中,我们可进入samba的源码目下的examples/LDAP/smbldap-tools/mkntpwd目录,mkntpwd的源码全部在这里了,运行make命令,就可生成mkntpwd程序。最后把mkntpwd拷贝到/usr/bin目录下即可。

如果是debian系统,template_config.php文件就位于/etc/phpldapadmin/templates目录下。节选有关定义mkntpwd程序路径的内容如下:

...
## SAMBA TEMPLATE CONFIGURATION ##
## ---------------------------- ##
## ##
## In order to use the samba templates, you might edit the following properties: ##
## 1 - $mkntpwdCommand : the path to the mkntpwd utility provided with/by Samba. ##
## 2 - $samba3_domains : the domain name and the domain sid. ##
## ##
######################################################################################*/

// path 2 the mkntpwd utility (Customize)
$mkntpwdCommand = "/usr/bin/mkntpwd";
...

以cn=test,dc=samba,dc=it,dc=com登录进入ldap服务器,我们就可修改smbaLMPassword和sambaNTP\assword两个属性值了。其它用户的这两个属性test用户是看不到的。

其实,不使用phpldapadmin来维护samba用户密码也可以,我们完全可以用python-ldap配合mkntpwd程序自已DIY一个用户密码管理程序。

2.3. 回收站功能
samba也有回收站功能,它能把你在samba服务器中删除的文件移到回收站中,而不是真正的从磁盘删除掉。这大大提高了数据的安全性,更人性化一些。下面介绍如何设置。

[homes]
comment = Home Directories
browseable = no

# By default, the home directories are exported read-only. Change next
# parameter to 'yes' if you want to be able to write to them.
writable = yes

# File creation mask is set to 0700 for security reasons. If you want to
# create files with group=rw permissions, set next parameter to 0775.
create mask = 0700

# Directory creation mask is set to 0700 for security reasons. If you want to
# create dirs. with group=rw permissions, set next parameter to 0775.
directory mask = 0700

vfs object = recycle #启用回收站功能
recycle:keeptree = yes #保持目录的树状结构
recycle:versions = yes #相同文档名时,有不同版本
recycle:repository = ../recycle/%u #回收站的位置,每个用户都有一个目录

recycle目录的访问权限是所有用户可写,自动生成的recycle/%u目录的访问权限是只能由用户可写。

Chapter 3. 小技巧
使用tdbdump程序可以查看samba的tbd格式文件。

使用smbclient -L winserver -d 3可显示连接winserver时的Debug信息,这些信息对于跟踪连接过程和故障处理都很有用。-d是开启debug功能的选项,3代表debug的级别,可选值为0到10,数字越大显示的信息越详细。

连接中文机器名时要注意两边系统的字符集要相同,如果不同,要用unix charset和doc charset指定两边的字符集。如果两边系统的字符集不对称,则在连接时会出现以下的出错信息。

session request to failed (Called name not present)
session request to *SMBSERVER failed (Called name not present)

samba通过Windows的139和445端口进行通信,samba会先通过445端口进行连接,如果连接失败,则再尝试139端口。在NT中,SMB运行于NBT(NetBIOS over TCP/IP)上,使用137,139(UDP),139(TCP)端口。在2000/XP/2003中,SMB可以直接运行在tcp/ip上,而没有额外的NBT层,使用TCP 445端口。

手动加载smbfs文件系统的方法:

debian:#~ mount -t smbfs -o username=your_username,password=your_password,iocharset=utf8,codepage=cp936 //servername/sharename /mnt/share

我的Debian采用UTF8编码,Samba服务器的操作系统采用GB2312编码,使用iocharset=utf8和codepage=cp936选项是为了使加载的共享能正常显示中文,iocharset指定客户端的字符集,codepage指定服务器的代码页。

注意,由于该命令包含访问文件服务器的用户名和密码,为保密起见,该命令尽量不要在命令行中输入,因为bash有一个命令缓存功能,能记录你所输入的所有shell命令。我们应该采用credentials选项代替username和password选项,如下所示:

debian:#~ mount -t smbfs -o credentials=/root/smbpassword,iocharset=utf8,codepage=cp936 //servername/sharename /mnt/share

credentials=/root/smbpassword选项指定登录samba服务器的密码文件,smbpassword文件的格式如下:

username=xxxxxx
password=xxxxxx

由于在smbpassword密码文件中的密码是明文的,所以我们要设置好访问权限,只能由合法用户来读取。

我们也可把加载smbfs文件系统的方法写在fstab文件中,使它能够在系统启动时自动加载,下面是我的fstab文件,自动加载了/root/data和/root/books目录。

# /etc/fstab: static file system information.
#
#
/dev/hda3 / ext3 errors=remount-ro 0 1
/dev/hda2 none swap sw 0 0
proc /proc proc defaults 0 0
/dev/fd0 /floppy auto user,noauto 0 0
/dev/cdrom /cdrom iso9660 ro,user,noauto 0 0
//samba/data /root/data smbfs credentials=/root/smbpassword,iocharset=utf8,codepage=cp936 0 0
//samba/books /root/books smbfs credentials=/root/smbpassword,iocharset=utf8,codepage=cp936 0 0

坎坷的samba-3源码安装一:编译安装

系统是redhat9 2.4.20-8,系统自带装了samba-2.2.7a-7.9.0
下载samba最新版,文件名samba-3.0.24.tar.gz
1、解压、编译、安装
#tar xzvf samba-3.0.24.tar.gz
#cd samba-3.0.24/source
#./configure;make;make install
;没用路径参数,因为默认是/usr/local/samba
2、安装smb.conf
#cp ./samba-3.0.24/examples/smd.conf /usr/local/samba/lib
;安装目录下有很多smd.conf的例子,但/usr/local/samba/lib下却没有,所以必须copy.
#/usr/local/samba/bin/testparm
;检查smb.conf配置语法是否错误和设置是否成功(默认的smb.conf,不会有问题:)
3、配置smb.conf
#vi smb.conf
有两个地方非改不可
workgroup=mygroup(我的windows机子的工作组名,有三台win机,都是"workgroup" 工作组)
增加:unix charset=cp936
dos charset=cp936
display charset=cp936
; 这三条设置的目的是在win机上使用“网络邻居“共享到linux上的文件夹和文件时,显示汉字。
4、增加smb用户
一般linux机子上都有很多用户,比如有一个用户名是rocky,那么:/usr/local/samba/bin/smbpasswd -a rocky,就把rocky增加为smb用户了。
5、启动smb服务
#service iptables stop
#service network restart
#/usr/local/samba/sbin/smbd -D
#/usr/local/samba/sbin/nmbd -D
启动完成,然后到win机上,打开网络邻居,就可以看到linux机子。输入“rocky"和密码,就可以看到linux机子上/home/rocky的文件夹内容了。

最后一步,需要做的就是把smb服务设为开机启动。
vi /etc/rc.d/rc.local,加入/usr/local/samba/sbin/smbd -D
;/usr/local/samba/sbin/nmbd -D 就可以了。
如果启动后修改了smb.conf,重复第5条操作就可以了,不用重启。

安装并不复杂,但还是走了弯路。网上很多此类文章,有四点迷惑人:
一是如果系统里已经有samba旧版本的时候(用rpm -qagrep smaba)由源码安装的samba3.0.24无法启动,所以最好是把旧的卸载掉先(用rpm -evv samba.x.x.x).
一是显示汉字问题。很多文章的设置都是基于samba2.x的,与3.0不同。
二是相关文件存放的路径,如smb.conf,有些说在/etc/下,有的在/usr/sabma下。这一点,其实只要认真看看安装文档就解决了。
三是启动问题,大部分都提到可以/etc/rc.d/init.d/smb start,我看/etc/rc.d/init.d下并没有smb脚本,估计要自己写一个请参考坎坷的samba-3源码安装二:smb 脚本,但把启动放在/erc/rc.d/rc.local我觉得也很方便。
另外,samba安装目录下有一个docs子目录,有一个samba-howto.pdf文档,非常详尽,汉字显示的解决就是看了这个才解决的。
samba有很多详细设置,我刚安装,很多内容有待今后去实践。

linux扫盲+速成

1、什么是Linux?

  准确的说,是指Linux的kernel(系统的核心程序),其内核版权属于Linus Torvalds,在GPL(GNU General Public License)版权协议下发行, 任何人都可以自由的复制(copy), 修改(change), 套装分发(distribute),销售,但是不可以在分发时加入任何限制, 而且所有原码必须是公开的,所以任何人都可以无偿取得所有执行文件和原代码。

  对于Linux用户和系统管理员来说,Linux是指包含Linux kernel、utilities (系统工具程序)以及application (应用软件)的一个完整的操作系统。Linux的应用软件是由自由软件基金会(FSF)开发的,全世界许多热心的程序员为Linux开发或移植了很多应用程序,包括X-Windows、Emacs、TCP/IP网络(包括SLIP/PPP/ISDN)等等,现在Linux(包括内核和大量的应用程序)光是执行程序就已经达到200M,完全安装后的规模将更大(大约500M左右)。

  从本质上讲,Linux是Unix的”克隆”或Unix风格的操作系统,在原代码级上兼容绝大部分的Unix标准(如IEEE POSIX,System V,BSD),它遵从 POSIX规范,例如对于System V来说,把其上程序源代码拿到 Linux下重新编译后就可以运行,而对于BSD Unix来说,它的可执行文件可以直接在Linux环境下运行。

  Linux的标志是可爱的企鹅,至于为什么选用企鹅,Linus是这样说的:别的都被他人用了,企鹅,不是也非常可爱吗?!由Linux作者发布的仅仅是一个内核而己,有一些公司或组织把内核、原代码及相关的应用程序组织在一起发行, 于是就产生了不同的Linux发行(distributor)版本, 比较著名的发行版本有RedHat、SlackWare 、S.u.S.e、Debian 等。

 2、Linux的发展历史?

  Linux的历史可以追溯到1990年,Linus Torvalds还是芬兰赫尔辛基大学的一名学生,最初用汇编语言写了一个在80386保护模式下处理多任务切换的程序,后来从Minix(用于操作系统教学、很小的Unix)中得到灵感,发誓要写一个比Minix更好的Minix,于是开始写了一些硬件的设备驱动程序、一个小的文件系统......,这样0.0.1版本的Linux就出来了,但是它必须在有Minix的机器上编译以后才能玩,这时候的Linus已经完全“走火入魔”了,决定踢开Minix“闹革命”,于是在1991年10月5号发布了Linux 0.0.2版本,这个版本已经可以运行bash(一种用户与操作系统内核通讯的软件)和gcc(GNU C编译器)了。

  Linus从一开始,就决定自由扩散Linux、包括源代码,他把源代码发布在网上,随即就引起爱好者的注意,他们通过互连网也加入了Linux的内核开发工作,一大批高水平程序员的加入,使得Linux达到迅猛发展,到1993年底,Linux 1.0终于诞生。Linux 1.0已经是一个功能完备的操作系统了,其内核写得紧凑高效,可以充分发挥硬件的性能,在4M内存的80386机器上也表现得非常好。

  很多人对Linux的认识有个误区,即总把Linux与低档硬件平台联系到一起,其实从2.1.xx系列内核开始,Linux就开始走高端的路子了,大约在1.3版本之后,开始向其他硬件平台上移植,包括号称最快的CPU---Digital Alpha(目前主频是最高的),目前Linux能将硬件的性能充分发挥出来,可以囊括低端到高端的所有应用。

  Linux加入GNU并遵循公共版权许可证(GPL),由于不排斥商家对自由软件进一步开发,不排斥在Linux上开发商业软件,故而使Linux又开始了一次飞跃,出现了很多的Linux发行版,如Slackware、Redhat、Suse、TurboLinux、OpenLinux等十多种,而且还在增加,还有一些公司在Linux上开发商业软件或把其他Unix平台的软件移植到Linux上来,如今很多IT界的大腕如IBM、Intel、Oracle、Infomix、Sysbase、Corel、Netscape、CA、Novell等都宣布支持Linux! 商家的加盟弥补了纯自由软件的不足和发展障碍,Linux得以迅速普及。


1、如何快速掌握Linux?

  方法是多动手、动脑,学习时要经常与Windows进行对比。建议你先安装RedHat Linux,然后练习如何配置它,如何使用Linux命令,如何在X—WINDOWS下操作,如何在Linux下安装应用软件,如何在Linux下上网、编辑文档、播放多媒体文件、玩游戏等。

  快速上手的方法只有一个,那就是多动手操作,看看你能否完成上面的工作。

2、Linux与Windows有哪些异同点?

  Windows是图形界面的,Linux类似以前的DOS,是文本界面的,如果你运行了图形界面程序X-WINDOWS后,Linux也能显示图形界面,也有开始菜单、桌面、图标等。

  Windows有MS-DOS方式,在该方式下通过输入DOS命令来操作电脑;而Linux与Windows类似,也有命令方式,Linux启动后如果不执行X-WINDOWS,就会处于命令方式下,必须发命令才能操作电脑。另外Linux上也有很多的应用软件,安装运行了这些软件后,你就可以在Linux上编辑文档、图片,玩游戏、上网、播放多媒体文件等。

  不过Linux的分区格式和目录结构,与Windows迥然不同,应用软件的安装方式也不同。

3、安装Linux时的注意事项

  安装前确定好Linux安装在哪个分区,Linux也有系统分区和Swap分区(类似Windows的虚拟分区,即交换文件)两个分区。由于Linux支持的分区格式与Windows分区格式不同,所以如果安装了Linux后,Windows还能继续使用,Linux就应该安装在硬盘分区的最后一个扩展分区;其次Linux的Swap分区必须保证有60MB,系统分区最少要保证240MB;此外安装前搜集好PC硬件方面的信息,特别是显示器信息,这将直接决定你安装Linux后,使用图形界面程序的效果;在安装、使用中输入命令时,请注意大小写。

4、掌握Linux的目录结构

  Linux的目录结构与Windows不同,而且在Windows下看不到Linux的目录,反过来,Linux也看不到Windows下的目录。Linux下各目录的含义如下:

目录名称 意 义
/vmlinuz 该目录中存放的是系统内核
/bin 该目录中存放Linux的常用命令,在有的版本中是一些和根目录下相同的目录。
/boot 该目录下存放的都是系统启动时要用到的程序,当用lilo引导Linux时,会用到这里的一些信息
/dev 该目录包含了Linux系统中使用的所有外部设备,它实际上是访问这些外部设备的端口,你可以访问这些外部设备,与访问一个文件或一个目录没有区别。例如在系统中键入“cd /dev/cdrom”,就可以看到光驱中的文件;键入“cd /dev/mouse”即可看鼠标的相关文件。
/cdrom 该目录在刚安装系统时是空的,你可以将光驱文件系统挂在这个目录下, 例如“mount /dev/cdrom /cdrom”
/etc
该目录存放了系统管理时要用到的各种配置文件和子目录,例如网络配置文件、文件系统、X系统配置文件、设备配置信息、设置用户信息等。
/sbin 该目录用来存放系统管理员的系统管理程序。
/home 如果建立一个名为“xx”的用户,那么在/home目录下就有一个对应的“/home/xx”路径,用来存放该用户的主目录。
/lib 该目录用来存放系统动态连接共享库,几乎所有的应用程序都会用到该目录下的共享库
/lost+found 该目录在大多数情况下都是空的。但当突然停电、或者非正常关机后,有些文件就临时存放在这里。
/mnt 该目录在一般情况下也是空的,你可以临时将别的文件系统挂在该目录下。
/proc 可以在该目录下获取系统信息,这些信息是在内存中由系统自己产生的
/root 如果你是以超级用户的身份登录的,这个就是超级用户的主目录
/tmp 用来存放不同程序执行时产生的临时文件
/usr 用户的很多应用程序和文件都存放在该目录下

5、Linux的常用命令

  如果在Linux命令行模式下遇到不会用的命令,你可以打"man [command]"得到该命令的帮助,如果想知道一个命令有哪些参数,可以打command -help来得到。

  注意:linux中的参数输入形式和dos不一样,在命令后面应该打一个空格,然后打"-",最后再跟一个或多个参数;另外linux下大小写是有区别的!

  下面介绍几个linux下最常用的命令,每个命令都与对应的dos命令作比较,并列出一些常用的参数。

命令参数 意 义
Ls
-a列出系统中的隐含文件,linux下的隐含文件是靠文件名的格式来表示的,不同于dos是靠文件属性来表示,即只要该文件以“.”开头,那么它就是隐含文件。
-l以长式列出。就是把该文件或目录的所有信息都列出来,一个文件占一行
相当于dos下的dir命令,是列文件列表的命令。
cd 和dos下的cd一样,转换目录的命令。 注意:linux下转到上级目录要打"cd .."而不是dos下的"cd..",即"cd"后面要有个空格
pwd 列出当前目录命令,相当于dos下没有参数的cd命令。例如:
[root@ttqq bin]# pwd /usr/bin [root@ttqq bin]# 这表示目前在"/usr/bin"目录下。
Mkdir
-m mode表示建立目录时默认的目录模式。这个是dos和Windows所没有的功能,主要是关于权限的问题。
建立新目录,相当于dos的md命令。一般就用 mkdir [dirname]
rmdir 删除目录,相当于dos的rd命令。
用法:rmdir [dirname]
cat 在文件后面追加文件,或在屏幕上打印文件内容,追加功能相当于dos的copy file1+file2,而在屏幕上打印文件内容可以和dos的typeml来类比。如果文件太大,在一屏上无法完全显示,则可用more命令
more 分屏显示文件内容,和dos下的more命令大致相同,但它可以和别的命令搭配使用。如:cat /home/eec/myfile | more。
cp

-r相当于dos的xcopy/s。用于拷贝一个目录下的所有子目录和文件 拷贝文件,相当于dos下的copy,使用方法与dos下的copy一样。

=======================================

系统安装: Linux快速入门

不少初学者都觉得Linux操作系统难用,现特将Linux中的基本操作与DOS操作系统中相似的操作对照比较如下,以让大家尽快入门


[一、基础知识]
1、[系统安装]
Linux的安装时,使用Tab、箭头、空格、回车等键做出选择。Linux一般须安装在单独的分区下,为避免Windows系统中的注册表、快捷方式路径出错,最好安装在硬盘的最后一个分区。即将最后的一个分区删除后,用分区软件(建议用Pqmagic)分为Linux Native(根分区)和Linux Swap(数据交换区),如果您的硬盘大于8G,您的Linux root分区应安装在前8G之内(linux 根分区终止扇区 <1023 柱面)。Native分区一般要大于240MB,具体大小视安装的Linux组件决定,建议不要大于2G。Swap分区必须有60MB以上。安装前要搜集好您的硬件信息如:CPU、内存、显示器、显卡、鼠标、键盘等。Linux的版本有很多,而且不断更新,根据提示安装一般都可顺利完成。

2、[登陆进入]
默认安装,启动后在出现的Lilo boot:之后输入Linux(或回车),Linux便开始启动,当出现登陆提示符Login:时,输入用户名,然后出现口令提示符password:输入口令。可进入相应的用户环境。如输入:root,及其密码,可进入超级用户环境#,输入其他用户名及口令,可进入该用户环境$(当然由于版本的不同还可能是%等)。

3、[关闭系统]
在超级用户提示符#下输入halt(立即关机)或shutdown [time](延迟time分后关机,给各用户每隔一段时间发出还有多长时间将关机的警告)后,计算机将进行一系列的关机工作,最后出现System halt时,表示可以关闭电源了。非超级用户则需用exit命令退出操作环境,再用超级用户:root登陆,才能执行关闭操作。

4、[注意事项]
与DOS不完全相同的地方:

  DOS Linux 备注
命令行字母 不区分大小写 区分大小写 在Linux中,超级用户的系统提示符是#,一般普通用户的系统提示符是$,普通用户的系统提示符也同DOS一样可以更改。通配符中*、?与DOS中的含义相同,[]是仅包括括号内的符号,连续的符号可用“-”连接首尾的符号代替,如[12345678]可以用[1-8]代替,[abcdefijk]可用[a-fi-k ]表示。
路径分隔符 /
提示符 > #、$
通配符 *、? *、?、[]

5、[文件类型]
与DOS、Windows不同,在Linux系统中,目录和设备都被视为文件,共有四种文件类型,它们是:⑴普通文件,即我们通常所说的文件,在长列目录方式时行首前用一符号“-”表示。⑵目录文件,即我们通常所说的目录,在长列目录方式时行用首前用一字母“d”表示。⑶字符设备文件,如显示器、打印机、终端等,在长列目录方式时行首前用一字母 “c”表示。⑷块设备文件,如硬盘、软盘、光盘在长列目录方式时行首前用一字母“b”表示。在Linux中用长格式列目录命令ls -l时,例如:

-rwxrw-r-- 5 user group 1089 Nov 18 1998 filename
存取权限 用户 组名 字节数 最后修改时间 文件名

DOS下的文件名是8.3格式的,Windows95以后开始支持长文件名,Linux支持长文件名。在DOS下扩展名是com、exe或bat的文件为可执行文件,但在Linux中文件类型只能通过文件属性得知,用命令ls –F可区分目录和文件,后有“/”符号的为目录,后有“*”符号的为可执行文件,用ls –aF可列出所有的文件和目录,包括隐藏的文件和目录,文件名以点号“.”开头的为隐藏文件。

6、[读取权限]
在Linux中,文件的主人称所有者,其他使用者分别称为同组者、其他人,为保证各用户文件的安全,Linux继承了UNIX的作法,通过设定存取权限,限制某些用户对文件的随意存取。共有三个级别的存取权:读权r、写权w、执行权x。在存取权中共有九个字符的位置其顺序是:所有者、同组人、其他人。在上例中分别表示:主人对文件拥有读写权和执行权,同组人对文件拥有读写权、其他人对文件只拥有读权。

7、[使用帮助]
在Linux中,您只要在命令行中打上man command(您要看帮助的命令),就可以得到该命令的在线帮助。man有一套它自己的命令,通常由单个键组成,按空格键和F键将翻到下一页,按B键翻到上一页,按Q键退出man,回到命令行。

[二、文件管理和目录操作]
1、[文件管理]

功能 DOS Linux 备注
显示文件内容 type、more cat、more type、cat是全部显示,more是分页显示
拷贝文件 copy cp
移动文件及改名 move mv
删除文件 del、erase rm
打印文件 print lpr

2、[目录操作]

功能 DOS Linux 备注
列目录及文件 dir/选项 ls –选项 在Linux中cd/是直接返回登录时的目录而不是根目录
显示当前目录 cd pwd
变更工作目录 cd目录 cd/目录
建立目录 md、mkdir mkdir
删除目录 rd、rmdir rmdir
目录更名 move mv
拷贝目录 xcopy copy

据说很多DOS命令都是借鉴UNIX的,而Linux又是从UNIX发展起来,故DOS和Linux命令的格式很相似,只是Linux的命令的功能更加强大,各选项、参数有较大区别,具体运用时可使用帮助命令。

[三、外存储器的使用]
在Linux中一般不能直接访问软盘、其他硬盘逻辑分区、光盘等,在Linux中它们都被视为文件,在使用前必须使用装载命令mount将它们装载到系统的/mnt目录中,使用结束后还须卸载。命令格式如下:

mount –t 文件系统类型 设备名 装载目录

常用的文件类型有:
msdos dos分区文件
vfat 支持长文件名的dos分区
ext2 Linux的文件系统
swap Linux swap分区或swap文件
iso9660 安装CD-ROM的文件系统
hpfs OS/2分区文件系统

设备名是指要装载的设备的名称,如软盘、硬盘、光盘等,软盘一般为/dev/fd0 fd1,硬盘一般为/dev/hda hdb ,硬盘逻辑分区一般为期hda1 hda2…等等,光盘一般为/dev/hdc。在装载前一般要在/dev/mnt目录下建立一个空的目录(名字自拟),如软盘可为floppy,硬盘分区可为其盘符如c、d等等,光盘可为cd-rom,个体使用例子:

装载一个mddos格式的软盘:mount –t msdos /dev/fd0 /mnt/floppy
装载一个Linux格式的软盘:mount –t ext2 /dev/fd0 /mnt/floppy
装载Windows98格式的硬盘分区(C盘):mount –t vfat /dev/hda1 /mnt/c
装载一个光盘:mount –t iso9660 /dev/hdc /mnt/cd-rom

装载完成后便可对该目录进行操作,在使用新的软盘及光盘前必须退出该目录,使用卸载命令umount卸载,才可以使用新的软盘及光盘,否则系统会不承认的,光盘在卸载前是不能用光驱面板前的弹出键退出的。

以上只是Linux基本的知识,不过相信您掌握后便已快速步入Linux了之门,进一步深入学习其他Linux知识了应该不成问题了。

Linux以及各大发行版介绍

出处 http://www.noobu.com 作者:沧蓝 欢迎转载,请注明出处与作者,谢谢
本文的完美排版版本:http://www.noobu.com/0502_linux_intro.html

2005-9-4 鉴于原图片链接失效,月下刀客重新编辑本文所有图片链接,特此说明。

什么是Linux?

也许很多人会不屑的说,Linux不就是个操作系统么。错!Linux不是一个操作系统,严格来讲,Linux只是一个操作系统中的内核。内核是什么?内核建立了计算机软件与硬件之间通讯的平台,内核提供系统服务,比如文件管理、虚拟内存、设备I/O等。

既然Linux只是一个内核。那么我们通常所说的Linux操作系统又是什么?我们通常所说的Linux,指GNU/Linux,即采用Linux内核的GNU操作系统。是的,操作系统的实际名称是GNU。什么是GNU?GNU代表GNU’s Not Unix。可以说是一个操作系统又可以说是一种规范。比如,众所周知的PHP,原名为Personal HomePage(个人主页),根据GNU的软件命名规则,PHP现已更名为PHP: Hypertext Preprocessor(超文本预处理程序)。


谁编写/创造了Linux?

Linux最早由Linus Torvalds在1991年开始编写。在这期间,Richard Stallman创建了GNU组织,并不断的编写创建GNU程序(程序的许可方式均为GPL: General Public License)。在不断的有程序员和开发者加入到GNU组织中后,变造就了今天我们所看到的Linux,或称GNU/Linux。

什么是Linux发行版?

正如之前所说的,Linux只是一个内核。然而,一个完整的操作系统不仅仅是内核而已。所以,许多个人、组织和企业,开发了基于GNU/Linux的Linux发行版。这其中最著名的便是Red Hat公司的Red Hat系列以及社区(community)组织的Debian系列。

下面我就简单得介绍一下目前比较著名、流行的Linux发行版本。部分资料来源:DistroWatch.com

Mandriva


Mandriva原名Mandrake,最早由Gaël Duval创建并在1998年7月发布。记得前两年国内刚开始普及Linux时,Mandrake非常流行。说起Mandrake的历史,其实最早Mandrake的开发者是基于Redhat进行开发的。Redhat默认采用GNOME桌面系统,而Mandrake将之改为KDE。而由于当时的Linux普遍比较难安装,不适合第一次接触Linux的新手,所以Mandrake还简化了安装系统。我想这也是当时Mandrake在国内如此红火的原因之一。Mandrake在易用性方面的确是下了不少功夫,包括默认情况下的硬件检测等。

Mandrake的开发完全透明化,包括“cooker”。当系统有了新的测试版本后,便可以在cooker上找到。之前Mandrake的新版本的发布速度很快,但从9.0之后便开始减缓。估计是希望能够延长版本的生命力以确保稳定和安全性。

优点:友好的操作界面,图形配置工具,庞大的社区技术支持,NTFS分区大小变更
缺点:部分版本bug较多,最新版本只先发布给Mandrake俱乐部的成员
软件包管理系统:urpmi (RPM)
免费下载:FTP即时发布下载,ISO在版本发布后数星期内提供
官方主页:http://www.mandrivalinux.com/

Red Hat


国内,乃至是全世界的Linux用户所最熟悉、最耳闻能详的发行版想必就是Red Hat了。Red Hat最早由Bob Young和Marc Ewing在1995年创建。而公司在最近才开始真正步入盈利时代,归功于收费的Red Hat Enterprise Linux(RHEL,Red Hat的企业版)。而正统的Red Hat版本早已停止技术支持,最后一版是Red Hat 9.0。于是,目前Red Hat分为两个系列:由Red Hat公司提供收费技术支持和更新的Red Hat Enterprise Linux,以及由社区开发的免费的Fedora Core。Fedora Core 1发布于2003年年末,而FC的定位便是桌面用户。FC提供了最新的软件包,同时,它的版本更新周期也非常短,仅六个月。目前最新版本为FC 3,而FC4也预定将于今年6月发布。这也是为什么服务器上一般不推荐采用Fedora Core。

适用于服务器的版本是Red Hat Enterprise Linux,而由于这是个收费的操作系统。于是,国内外许多企业或空间商选择CentOS。CentOS可以算是RHEL的克隆版,但它最大的好处是免费!菜鸟油目前的服务器便采用的CentOS 3.4。

优点:拥有数量庞大的用户,优秀的社区技术支持,许多创新
缺点:免费版(Fedora Core)版本生命周期太短,多媒体支持不佳
软件包管理系统:up2date (RPM), YUM (RPM)
免费下载:是
官方主页:http://www.redhat.com/

SUSE


SUSE是德国最著名的Linux发行版,在全世界范围中也享有较高的声誉。SUSE自主开发的软件包管理系统YaST也大受好评。SUSE于2003年年末被Novell收购。

SUSE之后的发布显得比较混乱,比如9.0版本是收费的,而10.0版本(也许由于各种压力)又免费发布。这使得一部分用户感到困惑,也转而使用其它发行版本。但是,瑕不掩瑜,SUSE仍然是一个非常专业、优秀的发行版。

优点:专业,易用的YaST软件包管理系统
缺点:FTP发布通常要比零售版晚1~3个月
软件包管理系统:YaST (RPM), 第三方APT (RPM) 软件库(repository)
免费下载:取决于版本
官方主页:http://www.suse.com/

Debian GNU/Linux


Debian是菜鸟油服务器之前所采用的操作系统。Debian最早由Ian Murdock于1993年创建。可以算是迄今为止,最遵循GNU规范的Linux系统。Debian系统分为三个版本分支(branch):stable, testing 和 unstable。截至2005年5月,这三个版本分支分别对应的具体版本为:Woody, Sarge 和 Sid。其中,unstable为最新的测试版本,其中包括最新的软件包,但是也有相对较多的bug,适合桌面用户。testing的版本都经过unstable中的测试,相对较为稳定,也支持了不少新技术(比如SMP等)。而Woody一般只用于服务器,上面的软件包大部分都比较过时,但是稳定和安全性都非常的高。菜鸟油之前所采用的是Debian Sarge。

为何有如此多的用户痴迷于Debian呢(包括笔者在内)?apt-get / dpkg是原因之一。dpkg是Debian系列特有的软件包管理工具,它被誉为所有Linux软件包管理工具(比如RPM)最强大的!配合apt-get,在Debian上安装、升级、删除和管理软件变得异常容易。许多Debian的用户都开玩笑的说,Debian将他们养懒了,因为只要简单得敲一下”apt-get upgrade && apt-get update”,机器上所有的软件就会自动更新了……

优点:遵循GNU规范,100%免费,优秀的网络和社区资源,强大的apt-get
缺点:安装相对不易,stable分支的软件极度过时
软件包管理系统:APT (DEB)
免费下载:是
官方主页:http://www.debian.org/

Ubuntu


笔者的桌面电脑便使用的Ubuntu。依照笔者的理解,简单而言,Ubuntu就是一个拥有Debian所有的优点,以及自己所加强的优点的近乎完美的Linux操作系统。 Ubuntu是一个相对较新的发行版,但是,它的出现可能改变了许多潜在用户对Linux的看法。也许,从前人们会认为Linux难以安装、难以使用,但是,Ubuntu出现后,这些都成为了历史。Ubuntu基于Debian Sid,所以这也就是笔者所说的,Ubuntu拥有Debian的所有优点,包括apt-get。然而,不仅如此而已,Ubuntu默认采用的GNOME桌面系统也将Ubuntu的界面装饰的简易而不失华丽。当然,如果你是一个KDE的拥护者的话,Kubuntu同样适合你!

Ubuntu的安装非常的人性化,只要按照提示一步一步进行,安装和Windows同样简便!并且,Ubuntu被誉为对硬件支持最好最全面的Linux发行版之一,许多在其他发行版上无法使用,或者默认配置时无法使用的硬件,在Ubuntu上轻松搞定。并且,Ubuntu采用自行加强的内核(kernel),安全性方面更上一层楼。并且,Ubuntu默认不能直接root登陆,必须从第一个创建的用户通过su或sudo来获取root权限(这也许不太方便,但无疑增加了安全性,避免用户由于粗心而损坏系统)。Ubuntu的版本周期为六个月,弥补了Debian更新缓慢的不足。

优点:人气颇高的论坛提供优秀的资源和技术支持,固定的版本更新周期和技术支持,可从Debian Woody直接升级
缺点:还未建立成熟的商业模式
软件包管理系统:APT (DEB)
免费下载:是
官方主页:http://www.ubuntulinux.org/

Gentoo


Gentoo最初由Daniel Robbins(前Stampede Linux和FreeBSD的开发者之一)创建。由于开发者对FreeBSD的熟识,所以Gentoo拥有媲美FreeBSD的广受美誉的ports系统——portage。(Ports和Portage都是用于在线更新软件的系统,类似apt-get,但还是有很大不同)Gentoo的首个稳定版本发布于2002年。

Gentoo的出名是因为其高度的自定制性:因为它是一个基于源代码的(source-based)发行版。尽管安装时可以选择预先编译好的软件包,但是大部分使用Gentoo的用户都选择自己手动编译。这也是为什么Gentoo适合比较有Linux使用经验的老手使用的原因。但是要注意的是,由于编译软件需要消耗大量的时间,所以如果你所有的软件都自己编译,并安装KDE桌面系统等比较大的软件包,可能需要几天时间才能编译完……

优点:高度的可定制性,完整的使用手册,媲美Ports的Portage系统,适合“臭美”的高手使用^^
缺点:编译耗时多,安装缓慢
软件包管理系统:Portage (SRC)
免费下载:是
官方主页:http://www.gentoo.org/

Slackware


Slackware由Patrick Volkerding创建于1992年。算起来应当是历史最悠久的Linux发行版。曾经Slackware非常的流行,但是当Linux越来越普及,用户的技术层面越来越广(更多的新手)后,Slackware渐渐的被新来的人们所遗忘。在其他主流发行版强调易用性的时候,Slackware依然固执的追求最原始的效率——所有的配置均还是要通过配置文件来进行。

尽管如此,Slackware仍然深入人心(大部分都是比较有经验的Linux老手)。Slackware稳定、安全,所以仍然有大批的忠实用户。由于Slackware尽量采用原版的软件包而不进行任何修改,所以制造新bug的几率便低了很多。Slackware的版本更新周期较长(大约1年),但是新版本的软件仍然不间断的提供给用户下载。

优点:非常稳定、安全,高度坚持UNIX的规范
缺点:所有的配置均通过编辑文件来进行,自动硬件检测能力较差
软件包管理系统:Slackware Package Management (TGZ)
免费下载:是
官方主页:http://www.slackware.com/

Knoppix


由德国的Klaus Knopper开发的Knoppix,是一个基于Debian的发行版。Knoppix严格算起来是一款LiveCD Linux,所谓的LiveCD就是整个操作系统都在一张光盘上,只要开机从光盘启动,就能拥有一个完整的Linux系统!无需安装!当然,Knoppix也能够非常轻松的安装到硬盘上。其强大的硬件检测能力、系统修复能力、即时压缩传输技术,都令人大加称赞。可以说,在LiveCD界,Knoppix是无人能及的!

优点:无需安装可直接运行于CD上,优秀的硬件检测能力,可作为系统急救盘使用
缺点:LiveCD由于光盘的数据读取速度限制导致性能大幅下降
软件包管理系统:APT (DEB)
免费下载:是
官方主页:http://www.knoppix.com/

MEPIS


MEPIS由Warren Woodford在2003年建立。MEPIS虽然刚建立不久,但是迅速的传播在Linux用户间。简单来说,MEPIS是一个集合了Debian Sid和Knoppix的产物。用户即能将之当作LiveCD使用,也能使用常规的图形界面进行安装。

MEPIS默认集成安装了Java Runtime Environment、Flash插件、nVidia加速驱动等许多常用的程序。用户可以非常轻松的安装完系统后就直接开始使用,而不用到处寻找资料如何下载、如何安装、如何配置这些软件。这不仅给Linux新手带来了便捷,也给老手们节约了相当多的时间。

优点:LiveCD与常规安装两用,优秀的硬件检测能力,预装了许多实用的软件
缺点:建立时间不长,默认的界面有些寒酸
软件包管理系统:APT (DEB)
免费下载:是
官方主页:http://www.mepis.org/

Xandros


Xandros建立在已经成为历史的Corel Linux之上。当初Corel Linux的公司由于财政上的困难,被迫终止了Corel Linux的开发,而Xandros适时的将Corel Linux部门买下,于2002年10月推出全新的Xandros Desktop。

Xandros的卖点在于极其简单的安装和使用,所以它的市场定位是那些没有任何Linux使用经验的新手,或是习惯使用Windows的用户。Xandros的标准版和增强版都是商业软件,分别售价$40和$99美元。不过你仍然可以在这里下载到免费的公开发行版。

优点:适合完全没有经验的新手,安装完以后就能立即投入使用,自带非常不错的工具
缺点:商业软件
软件包管理系统:Xandros Networks (DEB) 或 APT (DEB) (可选,但不提供技术支持)
免费下载:公开发行版
官方主页:http://www.xandros.com/

FreeBSD


首先要强调的是:FreeBSD不是一个Linux系统! 可是,为什么笔者要介绍FreeBSD呢?因为FreeBSD的用户也相当多,其许多特性都与Linux相类似。事实上,Linux和BSD(Berkeley Software Distribution)均是UNIX的演化分支。并且,Linux中相当多的特性和功能(比如用于配置DNS的Bind软件)都是取自于BSD的。而FreeBSD便是BSD家族中最出名,用户数量最多的一个发行版。MEZOC之前所采用的便是FreeBSD系统。

FreeBSD建立于1993年,拥有相当长的历史。FreeBSD拥有两个分支:stable和current。顾名思义,stable是稳定版,而current则是添加了新技术的测试版。另外,FreeBSD会不定期的发布新的版本,称为RELEASE,stable和current均有自己的RELEASE版本。比如4.11-RELEASE和5.3-RELEASE,请注意,这并不代表后者比前者的版本新。这仅仅代表前者(数字小的版本)是stable版本,后者(数字大的版本)是current版本。

FreeBSD除了作为服务器系统外,也适合桌面用户。不过,考虑到软件方面的兼容性,一般用户选择FreeBSD作为桌面系统不是很明智。作为服务器而言,FreeBSD是相当优秀的。曾经有人说过,同样的服务器硬件配置,运行同样的一个vBulletin论坛,FreeBSD所用的资源要比Linux少。这也是为什么许多空间商极力推崇FreeBSD的原因。

优点:速度快,非常稳定,优秀的使用手册,Ports系统
缺点:比起Linux而言对硬件的支持较差,对于桌面系统而言软件的兼容性是个问题
软件包管理系统:Ports (TBZ)
免费下载:是
官方主页:http://www.freebsd.org/

如果在常用的Linux中分类,我想应该有两个比较大的方向,商业版本和非商业版本。上面的版本中,Redhat,Suse,Mandrake,Redflag,Opendesktop,Cosix,Rays都是中内外的商业版本。像Magic Linux,Debian,Hiweed,Gentoo等则属于非商业版本。从另一个大方向分,可以分为Redhat系列和Debian系列(这样说很不精确,也没有别人这样说过,但大致上可以这么说),像Magic Linux,Suse,Mandrake,Redflag,Opendesktop,Cosix都采用了Redhat的RPM包管理方式,像Hiweed,Rays采用了Debian的包管理方式,对于网络良好的用户,此包管理方式有得天独厚的优势。Gentoo也采用了Debian类似的包管理方式。现在以Redhat系统为主,但相信随着网络的发展,Debian管理方式会吸引更多用户。对初级用户,如果选择两个系列,我分别推荐Redhat系列的Magic Linux和Debian系列的Rays,对Linux更加了解以后你们有能力去选择更适合自己的版本。

以上介绍了目前较为流行的各Linux发行版本,希望对大家有所帮助。同时,笔者也希望越来越多的朋友投入到Linux的大家庭中!\^O^/

linux的发音

linux的发音

linux发音是五花八门版本颇多,就笔者见到和听到的不下10种。对这种情况,据说,linux的创始人Linus(Linus Torvalds)针对读音分歧较多的情况,特意录了一段他对Linux的发音。这段录音的内容是这样的:“Hello,this is Linus Torvalds and I pronounce Linux as Linux”。我听出来的是/'li:nэks/,综合网上和linus自己的读音,概括出几个自认为最合适也最通用的读法:/Li'nQks/(“里那克斯”)或/'li:nэks/(“里呢克斯”)或/Li'nu:ks?/(“里纽克斯”)。这几个应该是谁都听得懂的。至于哪个比较正宗,当然是linus的原音。但事实上似乎使用linus那种读发的人并不在多数。

提示:上面的这段录音可以在RedHat中调试声卡的时候可以听到,如果你的声卡调试成功,系统会播放上面一段声音以示成功。

2007年2月24日星期六

郁闷的问题---redhat内核版本与销售版本的对应

看到一片文章说支持linux的厂商正在制定标准以应对日益混乱的linux版本造成的市场萎缩,早该标准化了,当年的Linus Torvalds就应该制定标准,看看现在linux版本乱的,唉~
我都没有搞清楚自己用的是什么版本只知道用uname -a查出内核是redhat9 2.4.20-8,
上网查了半天发现有个文件有一点点帮助
more /etc/redhat-release 显示Red Hat Linux release 9 (Shrike)

复习linux的启动过程

今天复习linux的启动过程,自我感觉记忆力大不如以前了,唉~都是IT惹的祸...windows用习惯了渐渐地连OS是怎么引导的都不是很清楚了,真实悲哀...

1.按下电源
开始bootstrap (俗语:“自己脱掉自己的靴子”也就是说在没有外界的帮助下完成所有工作)

2.装载引导扇区
读取ROM BIOS并根据设置初始化硬件参数,然后将启动设备的整个硬盘第一个引导扇区MBR加载到内存并把控制权转它(注:MBR包含一个小的装入程序和一个分区表),由MBR读取活动分区的引导扇区(如果LILO装在这里的话)

3.装载系统内核
系统根据lilo.conf里的设置加载相应的系统内核
kernel /vmlinuz-2.4.20-8 ro root=LABEL=/
*init和single参数
使用init参数直接告诉内核去启动另外一个进程(比如/bin/sh)而不是/sbin/init
使用single参数是将single直接传递给/sbin/init
引导计算机的人必须输入密码但是如果lilo.conf中没有设置password和restrict选项就可以对shell任意操作喽

4.硬件设备驱动初始化
用dmesgmore查看详情
4.1 内核版本号的显示
屏幕会显示内核的版本号
4.2 控制台的初始化
屏幕会显示 Console:colour VGA+ 80x25
4.3 速度指数和内存计算
4.4 检查CPU
4.5 PCI总线的探测和初始化
4.6 TCP/IP的初始化
4.7 串口的初始化
4.8 磁盘驱动器的初始化

5. 装载linux的服务---init进程
init进程号为1,根据/etc/inittab配置文件的参数启动系统服务

6.启动脚本
6.1 init先启动系统初始化脚本/etc/rc.d/rc.sysinit
init根据不同的runlevel传递不同的参数给系统初始化脚本,如l3传递3给rc.sysinit
**************************
*来看看rc.sysinit都作了什么
*--用swapon命令初始化交换空间
*--用fsck检查文件系统的结构和组成
*--装载/proc文件系统并重新装载根文件系统/为可读写
*--装载内核模块并结束运行
***************************
6.2 init开始执行该runlevel的脚本
init先运行控制脚本/etc/rc.d/rc并向其传递runlevel参数3,然后该控制脚本去运行该runlevel对应的脚本文件/etc/rcn.d 如rc3.d(其实在它们是关联到/etc/rc.d/init.d里面的相应的真实脚本)。注意S开头的是启动脚本K开头的是关闭脚本,它们都是按名字顺序执行的。
6.3 init再执行脚本/etc/rc.d/rc.local

7.装载可装载模块
这些可装载模块常常用添加设备的驱动程序,通常来说多数硬件可以在系统初始化时被内核正确设置但有时也会需要装载特殊设备的驱动,用lsmod可以检查系统已经装载的模块,用modprobe可以手动装载模块,用rmmod可以手动卸载模块

至此,linux引导完成

安装完samba 3.0.24以后

今天把我的RH9的samba由samba-2.2.7a-7.9.0升级到了samba 3.0.24

2007年2月22日星期四

配置一个安全的Linux DHCP服务器

配置一个安全的Linux DHCP服务器

转自:http://tech.ccidnet.com/pub/article/c743_a253591_p1.html
感谢原创作者:曹江华


DHCP是动态主机配置协议.这个协议用于向计算机自动提供IP地址,子网掩码和路由信息。网络管理员通常会分配某个范围的 IP 地址来分发给局域网上的客户机。当设备接入这个局域网时,它们会向 DHCP 服务器请求一个 IP 地址。然后 DHCP 服务器为每个请求的设备分配一个地址,直到分配完该范围内的所有 IP 地址为止。已经分配的 IP 地址必须定时地延长借用期。这个延期的过程称作 leasing,确保了当客户机设备在正常地释放 IP 地址之前突然从网络断开时被分配的地址可以归还给服务器。本文以Redhat Linux 9.0为例,介绍如何建立一个完整和安全的DHCP服务器。
一、建立DHCP服务器配置文件
可以使用Redhat Linux 9.0自身携带rpm包安装。安装结束后, DHCP 端口监督程序 dhcpd 配置文件是 /etc 目录中的名为 dhcpd.conf 的文件。下面手工建立/etc/dhcpd.conf文件。/etc/dhcpd.conf通常包括三部分:parameters、declarations 、option。
1. DHCP配置文件中的parameters(参数):表明如何执行任务,是否要执行任务,或将哪些网络配置选项发送给客户。主要内容见表1:
参数 解释
ddns-update-style 配置DHCP-DNS 互动更新模式。
default-lease-time 指定确省租赁时间的长度,单位是秒。
max-lease-time 指定最大租赁时间长度,单位是秒。
hardware 指定网卡接口类型和MAC地址。
server-name 通知DHCP客户服务器名称。
get-lease-hostnames flag 检查客户端使用的IP地址。
fixed-address ip 分配给客户端一个固定的地址。
authritative 拒绝不正确的IP地址的要求。

2. DHCP配置文件中的declarations (声明):用来描述网络布局、提供客户的IP地址等。主要内容见表2:
声明 解释
shared-network 用来告知是否一些子网络分享相同网络。
subnet 描述一个IP地址是否属于该子网。
range 起始IP 终止IP 提供动态分配IP 的范围。
host 主机名称 参考特别的主机。
group 为一组参数提供声明。
allow unknown-clients ?deny unknown-client 是否动态分配IP给未知的使用者。
allow bootp;deny bootp 是否响应激活查询。
allow booting?deny booting 是否响应使用者查询。

filename 开始启动文件的名称,应用于无盘工作站。
next-server 设置服务器从引导文件中装如主机名,应用于无盘工作站。



3. DHCP配置文件中的option(选项):用来配置DHCP可选参数,全部用option关键字作为开始,主要内容包括见表3:
选项 解释
subnet-mask 为客户端设定子网掩码。
domain-name 为客户端指明DNS名字。
domain-name-servers 为客户端指明DNS服务器IP地址。
host-name 为客户端指定主机名称。
routers 为客户端设定默认网关。
broadcast-address 为客户端设定广播地址。
ntp-server 为客户端设定网络时间服务器IP地址。
time-offset 为客户端设定和格林威治时间的偏移时间,单位是秒。

注意:如果客户端使用的是视窗操作系统,不要选择“host-name”选项,即不要为其指定主机名称。
下面是一个笔者使用的DHCP配置文件,这是一个C类网络,共126个IP地址可以分配的例子。读者可以复制后使用,注意红色部分是必须要修改的。

ddns-update-style interim;
ignore client-updates;

subnet 192.168.1.0 netmask 255.255.255.0 {

option routers 192.168.1.254;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option domain-name-servers 192.168.1.3;
option domain-name "www.cao.com"; #DNS名称#
option domain-name-servers 192.168.1.3;

option time-offset -18000;

range dynamic-bootp 192.168.1.128 192.168.1.255;
default-lease-time 21600;
max-lease-time 43200;

host ns {
hardware ethernet 52:54:AB:34:5B:09;#运行DHCP的网络接口的MAC地址#
fixed-address 192.168.1.9;
}
}

二、建立客户租约文件
运行DHCP服务器还需要一个名为 dhcpd.leases 的文件,保持所有已经分发出去的 IP 地址。在Redhat Linux 发行版本中,该文件位于 /var/lib/dhcp/ 目录中。如果您通过 RPM 安装 ISC DHCP,那么该目录应该已经存在。dhcpd.leases的文件格式为:

Leases address {statement}
一个典型的文件内容如下:
lease 192.168.1.255 { #DHCP服务器分配的IP地址#
starts 1 2005/05/02 03:02:26; # lease 开始租约时间#
ends 1 2005/05/02 09:02:26; # lease 结束租约时间#
binding state active;
next binding state free;
hardware ethernet 00:00:e8:a0:25:86; #客户机网卡MAC地址#
uid "\001\000\000\350\240%\206"; #用来验证客户机的UID标示#
client-hostname "cjh1"; #客户机名称#
}
注意lease 开始租约时间和lease 结束租约时间是格林威治标准时间(GMT),不是本地时间。
第一次运行DHCP服务器时dhcpd.leases是一个空文件,也不用手工建立。如果不是通过 RPM 安装 ISC DHCP,或者 dhcpd 已经安装,那么您应该试着确定 dhcpd 将其 lease 文件写到何处,并确保该文件存在。也可以手工建立一个空文件:

#touch /var/lib/dhcp/dhcpd.leases

三、启动和检查DHCP服务器
使用命令启动DHCP服务器:
#service dhcpd start
使用ps命令检查dhcpd进程:
#ps -ef | grep dhcpd
root 2402 1 0 14:25 ? 00:00:00 /usr/sbin/dhcpd
root 2764 2725 0 14:29 pts/2 00:00:00 grep dhcpd
使用检查dhcpd运行的端口:
# netstat -nutap | grep dhcpd
udp 0 0 0.0.0.0:67 0.0.0.0:* 2402/dhcpd


四、配置DHCP客户端
通常网管员使用选择手工配置 DHCP 客户,需要修改 /etc/sysconfig/network 文件来启用联网;并修改 /etc/sysconfig/network-scripts 目录中每个网络设备的配置文件。在该目录中,每个设备都有一个叫做 ifcfg-eth? 的配置文件,eth?是网络设备的名称。 如eth0等。如果你想在引导时启动联网,NETWORKING 变量必须 被设为 yes。 除了此处之外/etc/sysconfig/network 文件应该包含以下行:
NETWORKING=yes
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes

五、DHCP配置常见错误排除
通常配置DHCP 服务器很容易,不过,在这里有一些技巧可以帮助您避免出现问题。对服务器而言,要确保网卡正常工作,并具备广播功能。对客户机而言,还要确保客户机的网卡正常工作。最后,要考虑网络的拓扑,并考虑客户机向 DHCP 服务器发出的广播消息是否会受到阻碍。另外如果dhcpd进程没有启动,那么可以浏览 syslog 消息文件来确定是哪里出了问题。这个消息文件通常是 /var/log/messages。
典型故障:
1.DHCP服务器配置完成,没有语法错误。但是网络中的客户机却没办法取得IP地址。
通常是Linux DHCP服务器?有办法接收?自255.255.255.255 的 DHCP 客户机的Request 封包造成的。一般是Linux DHCP服务器的网卡没有设置具有MULTICAST功能。为了让dhcpd(dhcp程序的守护进程)能够正常的和DHCP客户机沟通,dhcpd必须传送封包到255.255.255.255这个IP地址,但是有些Linux系统里255.255.255.255这个IP地址被用来做为监听区域子网域(local subnet)广播的 IP地址,所以需要在路由表(routing table)里加入255.255.255.255以激活MULTICAST功能;
使用命令:
route add -host 255.255.255.255 dev eth0
如果报告错误消息:255.255.255.255:Unkown host
那么请先修改/etc/hosts加入一行:
255.255.255.255 dhcp
2. DHCP客户端程序和DHCP服务器不兼容
由于Linux有许多发现版本,不同版本使用DHCP客户端程序和DHCP服务器也不相同。Linux提供了四种DHCP客户端程序:pump, dhclient, dhcpxd, 和dhcpcd。了解不同Linux发行版本的服务器端和客户端程序对于常见错误排除是必要的。笔者曾经遇到过使用SuSE Linux 9.1 DHCP服务器和使用Mandrake Linux 9.0客户机不兼容的情况。此时就必须更换客户端程序。方法是先停止客户机的网络服务,卸载原程序,安装和服务器端兼容程序。附表:主要Linux发行版使用的DHCP客户端。
发行版本
缺省 DHCP客户端 可选 DHCP 客户端 DHCP客户端启动
脚本 附加配置文件
Red Hat Linux 9.0 dhclient 无 /sbin/ifup /etc/sysconfig/network,
/etc/sysconfig/network-scripts/ifcfg-eth0
Debian Linux 3.0 dhclient 无 /sbin/ifup /etc/network/interfaces,
/etc/dhclient.conf
Mandrake Linux 9.1 dhclient dhcpcd, dhcpxd, pump /sbin/ifup /etc/sysconfig/network,
/etc/sysconfig/network-scripts/ifcfg-eth0,
/etc/dhclient-eth0.conf
SuSE Linux 9.1 dhcpcd dhclient /sbin/ifup-dhcp /etc/sysconfig/network/dhcp,
/etc/sysconfig/network/ifcfg-eth0

六、DHCP服务器的安全

1. 在指定网络接口启动DHCP服务器
如果你的Linux系统连接了不止一个网络界面,但是你只想让 DHCP 服务器启动其中之一,你可以配置 DHCP 服务器只在那个设备上启动。在 /etc/sysconfig/dhcpd 中,把界面的名称添加到 DHCPDARGS 的列表中:
DHCPDARGS=eth0
或者直接使用命令:
Echo “DHCPDARGS=eth0”>> /etc/ sysconfig/dhcpd
这样对于带有两个网卡的防火墙机器,更加安全:一个网卡可以被配置成 DHCP 客户来从互联网上检索 IP 地址;另一个网卡可以被用作防火墙之后的内部网络的 DHCP 服务器。仅指定连接到内部网络的网卡使系统更加安全,因为用户无法通过互联网来连接它的守护进程。
2. 让DHCP服务器在监牢中运行
所谓“监牢”就是指通过chroot机制来更改某个软件运行时所能看到的根目录,即将某软件运行限制在指定目录中,保证该软件只能对该目录及其子目录的文件有所动作,从而保证整个服务器的安全。这样即使出现被破?或被侵入,所受的??也较小。
将软件chroot化的一个问题是该软件运行时需要的所有程序、配置文件和库文件都必须事先安装到chroot目录中,通常称这个目录为chroot jail(chroot“监牢”)。如果要在“监牢”中运行dhcpd,而事实上根本看不到文件系统中那个真正的目录。因此需要事先创建目录,并将dhcpd复制到其中。同时dhcpd需要几个库文件,可以使用ldd(library Dependency Display缩写)命令,ldd作用是显示一个可执行程序必须使用的共享库。
ldd dhcpd
libc.so.6 => /lib/tls/libc.so.6 (0x42000000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
这意味着还需要在“监牢”中创建lib目录,并将库文件复制到其中。手工完成这一工作是非常麻烦的,此时可以用jail软件包来帮助简化chroot“监牢”建立的过程。
(1)Jail软件的编译和安装
Jail官方网站是:http://www.jmcresearch.com/ ,最新版本:1.9a。
#Wget http://www.jmcresearch.com/static/dwn/projects/jail/jail_1.9a.tar.gz
#tar xzvf jail.tar.gz ;cd jail/src
#make; make install
(2)用jail创建监牢
jail软件包提供了几个Perl脚本作为其核心命令,包括mkjailenv、addjailuser和addjailsw。
mkjailenv:创建chroot“监牢”目录,并且从真实文件系统中拷贝基本的软件环境。addjailsw:从真实文件系统中拷贝二进制可执行文件及其相关的其它文件(包括库文件、辅助性文件和设备文件)到该“监牢”中。addjailuser:创建新的chroot“监牢”用户。
首先停止目前dhcpd服务,然后建立chroot目录:
#/sbin/service dhcpd start
#mkjailenv /chroot/
mkjailenv
A component of Jail (version 1.9 for linux)
http://www.gsyc.inf.uc3m.es/~assman/jail/
Juan M. Casillas

Making chrooted environment into /chroot
Doing preinstall()
Doing special_devices()
Doing gen_template_password()
Doing postinstall()
Done.
下面的例子展示为“监牢”添加dhcpd程序的过程
# addjailsw /chroot/ -P /usr/sbin/dhcpd
addjailsw
A component of Jail (version 1.9 for linux)
http://www.gsyc.inf.uc3m.es/~assman/jail/
Juan M. Casillas

Guessing dhcpd args(0)
Warning: file /chroot//lib/tls/libc.so.6 exists. Overwritting it
Warning: file /chroot//lib/ld-linux.so.2 exists. Overwritting it
………
Done.
不用在意那些警告信息,因为jail会调用ldd检查dhcpd用到的库文件。而几乎所有基于共享库的二进制可执行文件都需要上述的几个库文件。接下来将dhcpd的相关文件拷贝到“监牢”中:
# mkdir -p /chroot/dhcp/etc
# cp /etc/dhcpd.conf /chroot/dhcp/etc/
# mkdir -p /chroot/dhcp/var/state/dhcp
# touch /chroot/dhcp/var/state/dhcp/dhcp.leases
此时的“监牢”目录结构见图1。

图1 “监牢”目录结构
重新启动dhcpd:
[root@www root]# /chroot/usr/sbin/dhcpd
使用ps命令检查dhcpd进程:
#ps -ef | grep dhcpd
root 2402 1 0 14:25 ? 00:00:00 /chroot/usr/sbin/dhcpd
root 2764 2725 0 14:29 pts/2 00:00:00 grep dhcpd
注意此时进程名称已经改变,使用检查dhcpd运行的端口:
# netstat -nutap | grep dhcpd
udp 0 0 0.0.0.0:67 0.0.0.0:* 2402/dhcpd
端口号没有改变。现在dhcpd已经成功运行在“监牢”中。

到此为止一个这样,一个完整和安全的 DHCP服务器就完成了。

2007年2月14日星期三

Linux系统的字型设定方法

这次我们来研究如何调整各式各样的字型设定,如何安装新字体,和其他可以大大改善Xwindow字型的外观和可读性的方法。这是藉由调整XF86Config文件中的字型路径(FontPath),在startx或xdm加上Xserver命令列选项(command line options),加入新的字型,安装TrueType字型服务器(font server) xfs,和使用K Desktop Environment 1.1的功能来调整许多应用程序的字型设定,包含设定让非KDE应用程序的颜色和字型能够与KDE一致。
  XF86Config文件

  要想解决字型的问题,首先得看看XF86Config文件。(通常放在/etc/X11/

  XF86Config)。这个文件中关于字型最重要的部分就是FontPath。在我们研究它之前,最好先检查X的其他设定。错误的屏幕设定比错误的字型设定更令人头痛。请确定您屏幕的更新频率(refresh rate)。

  设定FontPath

  用vi文字编辑器编辑XF86Config,在档案的开头,应该会看到类似下面的东西:

  FontPath "unix/:7100"

  FontPath "/usr/X11R6/lib/X11/fonts/TrueType"

  FontPath "/usr/X11R6/lib/X11/fonts/75dpi/"

  FontPath "/usr/X11R6/lib/X11/fonts/100dpi/"

  FontPath告诉X到那里去找在屏幕上显示用的字型。顺序是很重要的,当一个X的应用程序向X要求使用一些字型,X server通常偏好使用正在用的字型。然后它去看看FontPath,使用最先看到能满足X client要求的字型。

  预设的FontPath通常将75dpi的字型放在100dpi的字型前面。若有一台高分辨率的屏幕,这表示非常小的字。首先就是将75dpi和100dpi的FontPath对调。

  FontPath "/usr/X11R6/lib/X11/fonts/misc/"

  FontPath "/usr/X11R6/lib/X11/fonts/Type1/"

  FontPath "/usr/X11R6/lib/X11/fonts/100dpi/"

  FontPath "/usr/X11R6/lib/X11/fonts/75dpi/"

  然后指出偏好使用不能缩放的点阵字。若曾经使用Netscape或是其他使用较大字型来显示标题的程序,将会发现这些字型呈现锯齿状的。这样很丑,需要修改。所以在misc,100dpi和75dpi的最后加上:unscaled。也可以同时使用能缩放和不能缩放的字,只要将不能缩放的字的FontPath放在前面,告诉X说若可能的话,尽量使用不能缩放的字。

  FontPath "/usr/X11R6/lib/X11/fonts/misc:unscaled"

  FontPath "/usr/X11R6/lib/X11/fonts/100dpi:unscaled"

  FontPath "/usr/X11R6/lib/X11/fonts/75dpi:unscaled"

  FontPath "/usr/X11R6/lib/X11/fonts/Type1"

  FontPath "/usr/X11R6/lib/X11/fonts/Speedo"

  FontPath "/usr/X11R6/lib/X11/fonts/misc"

  FontPath "/usr/X11R6/lib/X11/fonts/100dpi"

  FontPath "/usr/X11R6/lib/X11/fonts/75dpi"

  在做了这些改变后,重新启动X。

  

X server命令列选项

  下面一件要做的事是调整X server的命令列选项。可用-dpi来指定显示的分辨率是每英寸几点。现在很多的系统使用高分辨率的显示器,可能它们会要用100dpi。

  在console下启动X,键入

  startx -dpi 100

  若用xdm这种图形登录界面,需要编辑/usr/X11/lib/X11/xdm/Xservers文件。在里面有Xserver的命令列。我的文件里有下面这一行:

  :0 local /usr/X11R6/bin/X -dpi 100 -gamma 1.6

TrueType 字型


  在 Windows 里加上了对 TrueType 字型的支持。Windows 95 和其他的Windows 都内含 Arial、Times New Roman和 Courier New。约等于 Helvetica、Times和 Courier。TrueType 字型是能缩放的,所以在放大时很好看,而它们也被好好地调整过,故在缩小的时候依然可读。

  xfs

  xfs 是一种字型服务器的选择,XteamLinux 4.0默认的就是使用该字型服务器。xfs 是基于 FreeType Font library, 不只能处理 TrueType 和 Type 1 字型,也可以对付原本的 X 字型。

  安 装

  第一步是将 TrueType 字型加入Xteamlinux 4.0 里。su 为超级用户,建一个目录来存放这些字型: mkdir /usr/share/fonts/ttfonts。

  然后将字型放入这个目录里。您可以从Windows 系统中拷贝过去 cp /mnt/win/path_to_fonts/*ttfusr/share/fonts/ttfonts/或是从 Microsoft 直接下载。

  这些字型是自解压缩的ZIP文件。也可按如下方法安装:

  unzip

  注意字型的名文件必须小写。一个快速又容易的转换方法是将它们拷贝到一个 DOS(FAT16) 档案系统中,然后再拷贝回来。DOS 不处理大写。另一个方法是先进入到存放字型的目录下,然后键入:

  ls *TTF | while read f

  do

  [ -f "" ] &&&& mv -f "" "`echo "" | tr A-Z a-z`"

  done

  注意标点符号——那些“backquotes”很重要。当 TrueType 字型正确安装后,以超级用户执行:

  ttmkfdir -o fonts.scale

  mkfontdir

  

当字型目录下的内容改变后,重新执行上面的命令。接下来,编辑你的 xfs 字型设定文件/etc/X11/fs/config 在字型表中加入你的 TrueType 字型:

  catalogue =

  /usr/X11R6/lib/X11/fonts/misc:unscaled,

  /usr/X11R6/lib/X11/fonts/100dpi:unscaled,

  /usr/X11R6/lib/X11/fonts/75dpi:unscaled,

  /usr/X11R6/lib/X11/fonts/misc,

  /usr/X11R6/lib/X11/fonts/Type1,

  /usr/X11R6/lib/X11/fonts/Speedo,

  /usr/share/fonts/default/Type1,

  /usr/share/fonts/ttfonts,

  /usr/X11R6/lib/X11/fonts/100dpi,

  /usr/X11R6/lib/X11/fonts/75dpi

  也可以用“chkfontpath --add ”命令来加入字型。当使用时,按如下方法更改字型的预设点数。

  default-point-size = 140

  这使我从预设的 12 点字变为 14 点字。有些 X 的应用程序使用这个,有些则不。接下来,确定XF86Config 文件中的 FontPath 是:

  FontPath "unix/:-1"

  注意“unix/:7100”也可以做到,但是在刚出来时无法使用。将所有的 FontPath 用“#”让它变成注解,反正你也不用它们了。xfs 的 packages 应该和其他XFree 的 packages 一起安装了。要确定它是预设的服务,可以使用 “ntsysv” 或是 chkconfig --add xfs

  现在 xfs 在您每一次开机的时候都会启动。重新启动 X 来读入新的 FontPath。用下面的方式 启动/重新启动 xfs

  /etc/rc.d/init.d/xfs restart

  这样Xteamlinux 4.0就有个可以使用的字型服务器了,而且它已经启动了,可以检查哪些字型正在被使用:

  xlsfonts | less

Oracle 9i 在Linux 下的安装

Oracle9i 2000 年 10 月在 Oracle Open World 上发布,为 Oracle 数据库、应用服务器和开发工具引进了许多新功能。Oracle9i 是业界第一个完整、简单的用于互联网的新一代智能化的、协作各种应用的软件基础架构。Oracle9i 实际上是指 Oracle9i Database, Oracle9i Application Server 和Oracle9i Developer Suite的完整集成。随着软件逐渐开始转变为一种托管服务( hosted services), 具有internet上的高伸缩性能的、智能化的、和可靠的Oracle9i 将成为高质量的电子商务服务实现的关键软件。

本文将介绍Oracle9i 在Linux下的安装过程,如果你是有过安装Oracle的经验本安装过程可以权当快速安装手册;如果你以前从未在Linux下安装过Oracle数据库,那我们就从这篇文章开始熟悉oracle的安装过程。

系统要求:
以下的系统要求适用于典型的Oracle安装和创建简单数据库的方式。
内存:
安装Oracle 9i 软件至少需要512M内存,用以下命令可以查看机子的内存大小:
grep MemTotal /proc/meminfo
MemTotal: 900252 kB
900252kB就是你系统的内存大小。
交换区:
交换区的大小一般要求是内存的两倍,至少要求达到400M以上,当然是越大越好,用以下的命令可以查看系统交换区的大小:
/sbin/swapon -s
Filename Type Size Used Priority
/dev/sda6 partition 105221 686976 -1

其中105221就是系统交换区的大小。

光驱:
如果你使用光盘安装Oracle9i则你的机子上需要8速以上的CDROM,如果你是下载了oracle9i的包文件,则不需要使用的CDROM。

硬盘空间:
安装Oracle9i数据库至少要有2.5GB以上的剩余空间。

临时硬盘空间:
Oracle安装程序在安装过程中需要400M以上的临时硬盘空间,建议使用/tmp文件夹作为零时文件夹,如果/tmp文件没有足够的硬盘,可以新创建一个文件夹作为安装的临时目录,之后设置环境变量TEMP和TMPDIR指向相应的位置,例如:
使用bash
mkdir /home/temp
TEMP=/home/temp ; export TEMP
TMPDIR=/home/temp ; export TMPDIR

使用csh
mkdir /home/temp
setenv TEMP /home/temp
setenv TMPDIR /home/temp

操作系统:
Oracle公司官方公布的资料指出Oracle 9i只在安装SuSuSe 7.1, 内核 2.4.4 和glibc2.2的系统上测试通过,经过本人的测试,Oracle在Linux Mandrake release 8.0,内核2.4.3-20和glibc-2.2.2的版本上也可以顺利安装,本文将以Linux Mandrake8.0为例介绍Oracle9i的安装过程。

虚拟x-windows软件:
这个软件不是必要的!所谓虚拟x-windows软件指的是可在远程终端允许服务器x-windows的虚拟软件,现在流行的x-windows软件有exceed、x-win32等软件,如果你嫌在控制台安装oracle系统麻烦,可以使用虚拟x-windows软件在远程终端在图形界面下安装oralce9i,本文将以x-win32 5.0为例介绍用虚拟x-windows安装oracle9i的过程。
JDK
如果你要安装Oracle HTTP Server还需要用到blackdown的JDK1.3.1,请到以下地址下载ftp://ftp.progsoc.uts.edu.au/pub ... -linux-i386.tar.bz2

配置内核参数
oracle9i使用Linux的共享内存、交换区等资源进行工作,如果你的内核参数设置不能满足oracle的要求,那在安装oracel9i或使用过程就会频频出现问题,因此配置系统内核的参数就显得尤为重要和关键了。

内核参数的配置一般在/proc文件夹下配置:
1. 以root用户允许以下命令;
2. 进入目录/proc/sys/kernel;
3. 用cat命令或more命令查看semaphore当前参数的值:
cat sem
命令运行后将会出现如下的结果:
250 32000 32 128
其中, 250 是参数SEMMSL的值,32000是参数SEMMNS的值, 32是参数SEMOPM的值,而128则是参数SEMMNI的值。
4. 用以下的命令可以对上述参数进行修改
echo SEMMSL_value SEMMNS_value SEMOPM_value SEMMNI_value > sem
其中SEMMSL_value、SEMMNS_value、SEMOPM_value、SEMMNI_value分别用相应的值进行替换,并且这些值的顺序不能调换

5. 设置共享内存大小,共享内存大小一般设为物理内存的一半,在这里我们假设物理内存为512M则共享内存的值4294967295以此类推,如果你的物理内存是1G则这里的值则是8589934590:
echo 4294967295 > shmmax
添加用户
Oracle在安装和使用中需要用特定用户(非root用户),按照oracle的标准说明是需要添加三个专门用户和用户组,为了简便大家的安装和使用我们把oracle的安装和使用归到一个特定用户来完成。
首先创建oracle用户组,我们架设这个用户组命名为dba:
以root用户登陆系统;
运行groupadd dba命令添加dba用户组;

添加oracle用户:
以root用户登陆系统;
运行useradd –g dba –p password –d /oracle –s /bin/bash oracle
运行后系统创建了一个属于dba用户组的用户oracle,密码为password,主目录为/oracle使用bash

这个用户将作为系统的安装和使用指定用户,因此要妥善保存好!
创建安装点(mount point)
oracle9i的典型安装需要至少两个安装点:一个安装基本的运行程序,要求至少要有850M的硬盘空间;一个为存放数据库,至少要求有450M的硬盘空间。为了简化安装我们可以把运行程序和数据库装在同一个安装点下。
在你的文件系统上找到有足够空间的分区,在分区下创建文件夹,我们假设这个文件夹为/oracle。
配置系统环境变量
很多网友安装oracle失败都是因为环境变量没有配置正确,环境变量的配置直接影响到以后oracle9i的安装和配置,在配置的时候要尤为小心!
配置x-windows变量
确认oracle9i在安装过程中是否使用本地x-windows安装还是远程虚拟x-windows安装,如果需要远程x-windows安装,则需要配置DISPLAY变量,这个变量用于告诉系统屏幕的图形将输出到什么位置,默认情况下是本机,如果你使用虚拟x-windows进行安装,则在这里指明远程终端的显示情况,比如你远程终端的IP地址是xxx.xxx.xxx.xxx则DISPLAY的变量应设为“xxx.xxx.xxx.xxx:0”后面的“:0”表示该终端的第一个显示器。
确定安装临时目录
前面我们提到过oracle9i的安装需要一个临时的可写空间,我们在这里把/tmp作为临时的可写目录。如果你不是使用/tmp作为临时可写目录则需要配置相应的值TMPDIR=/path。
配置oracle的环境变量

下面提供一个例子可以供大家参照使用
export DISPLAY="192.9.200.24:0.0"
export BASH_ENV= $HOME/.bashrc
ORACLE_HOME=/oracle/product/9.0.1; export ORACLE_HOME
ORACLE_SID=oracle; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
TNS_ADMIN=/home/oracle/config/9.0.1; export TNS_ADMIN
NLS_LANG=american_america.ZHS16GBK; export NLS_LANG
ORA_NLS33= $ORACLE_HOME/ocommon/nls/admin/data; export ORA_NLS33
LD_LIBRARY_PATH= $ORACLE_HOME/lib;export LD_LIBRARY_PATH
PATH= $PATH:/bin:/usr/bin:/usr/sbin:/etc:/opt/bin:
/usr/ccs/bin:/usr/openwin
PATH= $PATH:/opt/local/bin:/opt/NSCPnav/bin: $ORACLE_HOME/bin
PATH= $PATH:/usr/local/samba/bin:/usr/ucb:
export PATH
CLASSPATH= $ORACLE_HOME/JRE: $ORACLE_HOME/jlib:
 $ORACLE_HOME/rdbms/jlib
CLASSPATH= $CLASSPATH: $ORACLE_HOME/network/jlib
TMPDIR=/tmp;export TMPDIR
umask 022

其中:
ORACLE_HOME为系统软件的安装目录;
ORACLE_SID 为数据库的SID,这里可以自行设置;
NLS_LANG 为数据库的字符集,为了保证数据库能够输出输入数据库,我们需要在这里把字符集设为american_america.ZHS16GBK,其中american_america英文字符集,ZHS16GBK为中文字符集。

以oracle用户登陆系统,
vi  $HOME/.bash_profile
把以上环境变量的设置粘贴到文件中,确认相应的内容并修改,存盘退出。
重新登陆oracle用户
使用set|more命令查看oracle用户的环境变量是否生效
CLASSPATH=/oracle/product/9.0.1/JRE:/oracle/product/9.0.1/jlib:
/oracle/product/9.0.1/rdbms/jlib:
/oracle/product/9.0.1/network/jlib
DISPLAY=192.9.200.24:0.0
LD_LIBRARY_PATH=/oracle/product/9.0.1/lib:/lib:/usr/lib:
NLS_LANG=american_america.ZHS16GBK
ORACLE_HOME=/oracle/product/9.0.1
ORACLE_SID=oracle
ORACLE_TERM=xterm
ORA_NLS33=/oracle/product/9.0.1/ocommon/nls/admin/data
OSTYPE=linux-gnu
PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/usr/games:
/bin:/usr/bin:/usr/sbin:/etc:/opt/bin:/usr/ccs/bin:/usr/openwin:
/opt/local/bin:/opt/NSCPnav/bin:
/oracle/product/9.0.1/bin:/usr/local/samba/bin:/usr/ucb:
TNS_ADMIN=/home/oracle/config/9.0.1
仔细检查一下以上的几项,确保都设置正确了。

安装Oralce9i
安装JDK1.3.1
把下载的j2sdk-1.3.0-RC1-linux-i386.tar.bz2文件上传到服务器的/usr/local/目录下,以root用户登陆,用bzip –d j2sdk-1.3.0-RC1-linux-i386.tar.bz2命令先把文件解成tar格式,再使用tar xvf j2sdk-1.3.0-RC1-linux-i386.tar.bz2解压出来,为了便于操作可以把文件夹名改成jdk.。
配置x-windows
oracle9i的安装几乎支持所有的x-windows,也支持远程的虚拟x-windows安装,如果你要在本机安装在控制台上以我们先前创建的oracle用户登陆(注意要先设置好环境变量,并把DISPLAY的值设为空export DISPLAY=””)运行startx命令进入x-windows。
如果需要在远程终端使用虚拟x-windows进行安装,需要在客户端先安装x-win32软件,x-win32的安装过程我们就不多介绍了,安装完成后运行x-win32命令在你的任务栏会出现一个x的标致。使用neterm等终端攻击以oracle用户登陆系统确认环境变量都已经生效并且DISPLAY变量的值为你终端机的IP地址,运行startkde命令启动x-windows,运行完毕后系统会出现一大堆的出错信息,忽略不管,过了几秒后在你的远程终端上会出现Linux的kde界面。
下载Oracle安装软件
Oracle网站(http://otn.oracle.com)现在提供Oracle9i for Linux软件下载,在下载前请仔细阅读他的Licence,这样在今后的使用中才不会有版权问题。在下载前你需要一个otn的账户,申请是免费的,只要简单回答几个问题就可以,oracle9i的安装程序共有三个文件包分别是:
Linux9i_Disk1.cpio.gz (412,092kb)
Linux9i_Disk2.cpio.gz (638,547kb)
Linux9i_Disk3.cpio.gz (82,956kb)
下载完这三个文件后,把这三个文件上传到服务器/oracle目录下,并保证这三个文件的属主是oracle用户。如果你有Oracle9i的安装CD那就可以省下大把下载时间了。
安装Oracle 9i 数据库
以oracle用户登陆系统,启动本地x-windows或虚拟x-windows,打开一个控制台窗口,进入到刚才存放oracle文件的目录下,分别使用
gunzip Linux9i_Disk1.cpio.gz
cpio -idmv gunzip Linux9i_Disk2.cpio.gz
cpio -idmv gunzip Linux9i_Disk3.cpio.gz
cpio -idmv 命令解包,把三个文件包解压缩成三个安装文件夹分别为Disk1、Disk2、Disk3。
进入Disk1目录
cd Disk1
在控制台窗口敲入
./runInstaller &
运行后会出现一个OUI的图形界面,如下图所示:

中间绿色的窗口就是oracle的安装图形界面了。
下面我们来进行oracle9i最基本的安装,在进入安装界面后点Next进入下一步:

Source指的是包含Oracle产品信息的文件,一般情况下他会自动识别到,如果找不到可以用Browse按钮来手工指定路径。
Destination指的是9i将要安装的路径这里就是我们在环境变量里设的 $ORACLE_HOME,如果这一栏里是空白的则要重新检查环境变量中各值的设定是否有误。确认正确后按Next进行下一步:

这一步有三个安装选项供选择:
Oracle9i Database 9.0.1.0.0,安装oracle9i的数据库服务器版本、管理工具、网络服务以及基本的客户端软件;
Oracle9i Client 9.0.1.0.0 ,企业版的客户端软件,网络服务以及开发工具等。
Oracle9i Mangement and Integration 9.0.1.0.0,安装Management Server,管理工具Oracle的网络目录、综合服务、网络服务以及基本的客户端软件。
我们选第一项安装Oracle9i数据库服务其,接着安Next按钮;

这一步是选择Oracle安装的类型,有三个类型供选择Enterprise Edition,企业版,Standstard Edition标致版,Custom自定义安装,我们选择企业版的安装,如果你对Oracle这一系列的产品比较熟悉的化可以选择Custom自定义安装,按自己的需求选择组件进行安装,确认后安Next进入到下一步;

这里可以选择一种适合你的数据库模版,一般我们选第一种通用的数据库模版,如果你需要使用数据仓库,则可以使用选择数据仓库的模版进行安装。确认后按Next进入下一步;

这一步是确认Oracle9i的SID和全局数据库的名字,SID的值我们在环境变量中已经设好了,所以这里就自动显示了,全局数据库名(Global Database Name)我们可以也指定成和SID的值相同,确认后按Next进入下一步;

面我们提到了,数据库的字符类型在数据库超作中是很关键的,这一步就是设置数据库的字符集,前面我们设置的是NLS_LANG=american_america.ZHS16GBK,所以我们选择Simplifiled Chinese ZHS16GBK,按Next进入下一步;

因为我们在前面选择了Enterprise的版本进行安装,系统会安装Oracle Web Server,安装Oracle Web Server需要使用JDK,我们使用Browse按钮把前面安装JDK的目录指定好以便系统能在安装过程中找到需要的应用程序,确认按Next进入下一步;

进行完所有选择后,系统会给出一个安装概要,这里列举了你选择安装的组件,确认你要安装的东西都在列表内后,安Install钮进行安装,如果不需要安装其它的程序,则按Exit退出安装界面。

Oracle的安装速度视服务器的性能一般来说需要装30分钟的时间,在安装过程中可能会有对话框弹出,对话框内会有一些需要root运行的命令要求你执行,这时候另外开一个控制台窗口,su成root并运行提示框内的命令,运行完毕后按确定继续安装;

安装完数据库后系统会运行配置工具对系统进行网络和数据库的配置。配置完成后,系统会自动启动数据库,并开启Oracle Web Server。所有配置完后,按Next完成安装。

如果一切正常,OUI会出现The Installation Of Oracle9i Database Was successful.的字样,这表明你的Oracle9i数据库安装正常了,如果需要安装其它的内容按Next Install钮进行其它内容的安装,否则按Exit退出安装。



使用Oracle 9i 数据库
安装完毕后Oracle数据库会自动启动,下面我们用实际超作来说明一下Oracle 9i数据库的启动和关闭。
以oracle用户登陆数据库,开个控制台窗口;
关闭Oracle 9i 数据库
[oracle@wing /oracle] $ sqlplus " / as sysdba" //以sysdba用户登陆数据库

SQL*Plus: Release 9.0.1.0.0 - Production on Wed Jul 11 15:35:31 2001

(c) Copyright 2001 Oracle Corporation. All rights reserved.


Connected to:
Oracle9i Enterprise Edition Release 9.0.1.0.0 - Production
With the Partitioning option
JServer Release 9.0.1.0.0 - Production
运行shudown命令关闭数据库
SQL> shutdown
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>

启动Oracle 9i 数据库
[oracle@wing bin] $ sqlplus " / as sysdba"

SQL*Plus: Release 9.0.1.0.0 - Production on Wed Jul 11 16:00:59 2001

(c) Copyright 2001 Oracle Corporation. All rights reserved.

Connected to an idle instance.

SQL> startup
ORACLE instance started.

Total System Global Area 336356520 bytes
Fixed Size 279720 bytes
Variable Size 268435456 bytes
Database Buffers 67108864 bytes
Redo Buffers 532480 bytes
Database mounted.
Database opened.
SQL>

启动Oracle 9i监听程序
Oracle的监听程序主要是为客户端的连接提供接口
[oracle@wing bin] $ lsnrctl

LSNRCTL for Linux: Version 9.0.1.0.0 - Production on 11-JUL-2001 16:12:17

Copyright (c) 1991, 2001, Oracle Corporation. All rights reserved.

Welcome to LSNRCTL, type "help" for information.

LSNRCTL> start
Starting /oracle/product/9.0.1/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 9.0.1.0.0 - Production
System parameter file is /oracle/product/9.0.1/network/admin/listener.ora
Log messages written to /oracle/product/9.0.1/network/log/listener.log
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=wing)(PORT=1521)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 9.0.1.0.0 - Production
Start Date 11-JUL-2001 16:12:58
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security OFF
SNMP OFF
Listener Parameter File /oracle/product/9.0.1/network/admin/listener.ora
Listener Log File /oracle/product/9.0.1/network/log/listener.log
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=wing)(PORT=1521)))
Services Summary...
Service "PLSExtProc" has 1 instance(s).
Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "oracle" has 1 instance(s).
Instance "oracle", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
LSNRCTL>


关闭Oracle 9i监听程序
[oracle@wing bin] $ lsnrctl

LSNRCTL for Linux: Version 9.0.1.0.0 - Production on 11-JUL-2001 16:12:17

Copyright (c) 1991, 2001, Oracle Corporation. All rights reserved.

Welcome to LSNRCTL, type "help" for information.
LSNRCTL> stop
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC)))
The command completed successfully
LSNRCTL>

关闭Oracle Web Server
cd  $ORACLE_HOME/Apache/Apache/bin
./stopJServ.sh
/oracle/product/9.0.1/Apache/Apache/bin/apachectl stop: httpd stopped


启动Oracle Web Server
cd  $ORACLE_HOME/Apache/Apache/bin
[oracle@wing bin] $ ./startJServ.sh
/oracle/product/9.0.1/Apache/Apache/bin/apachectl start: httpd started

启动Oracle Web Server后默认的端口号是7777
在客户端浏览器地址栏输入http://xxx.xx.xxx.xxx:7777/
如果浏览器出现以下界面则表示Oracle Web Server运行正常

在Linux上安装MySQL Server 5.0

我使用binary进行安装,文件名mysql-standard-5.0.18-linux-i686-glibc23.tar.gz
[1]将上述文件解压到某处,并将MySQL所以目录名改为mysql,结果应如/home/jiang/mysql
[2]根据mysql目录下的INSTALL-BINARY文件来进行安装
// 加用户组mysql,以及用户mysql;该命令无需修改
shell> groupadd mysql
shell> useradd -g mysql mysql

// 以下三步的主要目的是为MySQL解压目录做一个链接,放到usr/local目录中
// 首先是进入/usr/local目录;该命令无需修改
shell> cd /usr/local
// 这一步可以不需要,因为已经解压了
shell> gunzip < /PATH/TO/MYSQL-VERSION-OS.tar.gz | tar xvf -
// 做一个到/home/jiang/mysql的链接,放在/usr/local中,该链接的名字是mysql。
// 该命令修改为ln -s /home/jiang/mysql mysql
shell> ln -s FULL-PATH-TO-MYSQL-VERSION-OS mysql

// 进入/home/jiang/mysql目录,/usr/local/mysql是到/home/jiang/mysql的链接
shell> cd mysql

// 对MySQL进行初始化(如果以前已经安装过MySQL,这一步可以简略);该命令无需修改
shell> scripts/mysql_install_db --user=mysql

// 变更所有权;该命令无需修改
shell> chown -R root .
shell> chown -R mysql data
shell> chgrp -R mysql .

// 启动MySQL服务器;该命令无需要修改
shell> bin/mysqld_safe --user=mysql &
[3]进入MySQL应用环境
进入mysql目录下的bin目录,运行命令./mysql -u root -p,此时将出现password:(要求输入密码),但默认情况下root用户没有密码,所以回车即可。此时将进入MySQL界面,当然仍然只是个命令行窗口而以。
[4]简单使用MySQL
在MySQL环境中运行命令show databases;,将会显示已经有的数据库(如test);运行命令use test,将进入test数据库...

注意:如果在运行./mysql -u root -p之后,报
Can't connect to local MySQL server through socket '/tem/mysql.sock'
的错误,那么可能有以下几种情况:
[1]mysql.sock并不在/tmp目录下,而是在其它某个目录下(如,/var/lib/mysql目录)。这时只需要将这个mysql.sock做链接到/tmp目录下,运行命令:
ln -s MYSQL.SOCK_PATH /tmp/mysql.sock
[2]在同学的笔记本的Linux中,会在/tmp下生成mysql.sock,但重新启动Linux后,该文件被删除。这时也可以用情况2中的解决方法,或者每次都运行命令:
./mysqld_safe --user=mysql &

学习Linux的七点忠告

1、不要“玩 Linux”

很多人用 Linux 的时候会感觉很迷茫,该用哪个发行呢?是不是我少装了什么?怎么升级这么快啊!怎么这么不稳定!每当遇到新的软件他就想试用,每当新的版本出现,他就更新,然后用鼠标在新的菜单里选择从来没见过的程序来用用。

其实你是为了Linux而使用Linux,而没有找到正确的理由来利用 Linux。你首先要明确用电脑的目的,你用它是为了解决你的实际问题,而不是为了学习安装CAO作系统,不是为了测试哪个版本好用,不是为了“赶上潮流”,更不是因为你硬盘太大了,你想多占点空间。

如果你启动了电脑之后不知道应该干什么,那么最好先不要用电脑,因为你可能有更重要的事情需要做。

2、不用挑剔发行版本

很多人刚开始用 Linux 的时候,总是在怀疑别的发行版本是否比自己正在用的这个好,总是怀疑自己以后时候会失去支持,不得不换用别的发行。所以很多人今天是 Redhat,明天又换成了 debian, 一会儿又是 gentoo, …… 甚至有的人在一台机器上装了两个版本的 Linux,然后比较哪一个好。

其实你完全没有必要这样做,任何发行,只要你熟悉了,你在上面的工作方式几乎是不会受到任何影响的。你常常听说 Debian 的更新比 Redhat 快,包比 Redhat 多,但是你可以比 Debian 更新还要快,直接到你需要的程序的主站点下载源码来编译就是了。

Debian, TurboLinux, SuSE, Redhat, Gentoo, ... 任何一个版本都是不错的。

3、不要当“传教士”

很多人在讨论区不断的引起 "Linux vs. Windows" 之类的讨论,甚至争的面红耳赤,这是没有必要的。因为各人的需要不同,生活的环境不同,你不可能得到一个定论。我们需要尊重别人的选择,这是你在进行任何对工具的讨论前需要提醒自己的事情。面对一些容易引起争论的东西:Word 和 TeX;Emacs 和 VIM;MAXIMA,Mathematica 和 Maple;Gnome,FVWM 和 KDE;Mutt 和 Pine …… 一定要冷静。

你需要关心的不是你的工具是什么,而是你用它做了什么。精通 Linux 并不说明任何问题,因为它只是一个工具而已。如果你用 Windows 能很好的完成你的任务,那你就没有必要费时间去熟悉 Linux。直到有一天你发现一项任务只有 Linux 才能完成的时候再换也不迟,因为你身边的 Linux 的爱好者一定会很乐意的帮助你。

并不是喜欢一种东西就必须反对其它的。世界需要多样性,人们都需要FUN。用自己的兴趣去压制别人的,就会毁掉所有的兴趣。个人喜欢什么就用什么,完全没必要为这个争论。

不要做“传教士”!你说我现在就是在“传教”?冤枉啊~

4、直接从源码安装程序

很多人放着最新的源码不用,等着有人帮他做出 rpm, deb, 才能安装。我说你为什么不用源码编译,这样版本比 rpm 高的多,有很多新功能,而没有烦人的依赖关系。可是他说:“要是我用源码编译安装,卸载的时候就不方便了,会留下很多垃圾。”

为什么程序还没有安装你就想到卸载?难道你不知道这个程序是用来做什么的?你应该改变到处找程序来试用的作法,而应该先了解一下到底那些程序有同样的功能,听听别人的意见,看看它们各有什么长处和短处,然后挑一个最适合你的程序来用。

从源码编译安装程序,不但比你装rpm更适合自己的机器设置,而且它们一般会装到 /usr/local 目录,这样你以后如果换硬盘重装系统,也可以把以前 /usr/local 下的程序原封不动拷贝过去用。我的 /usr/local 下有 2G 之多的程序,你想要是我有一台新机器要重新安装,然后配置,得花费多少时间?实际上我曾经通过网络把它们传到一台新机器上,然后就出去吃晚饭,回来时我就得到了另一台一摸一样的 Linux 机器。

确实要卸载 make install 的程序怎么办呢?答案是直接删掉。别以为直接删掉程序会留下垃圾,引起“系统不稳定”。(btw: 这是谁教你的啊?呵呵。) make install 无非就是把可执行程序放在 /usr/local/bin, 把某些函数库放在 /usr/local/lib,把数据文件放在 /usr/local/share 下一个它自己的目录,你把这些东西都删掉就行了,不会留下垃圾,即使真的留下一点文件没有删掉也占不了多少空间,更不可能引起系统不稳定。UNIX 就是这么简单但是有几个程序不建议从源码安装,它们是 Mozilla, Open Office, ... 它们编译时会占用你几个G的空间和好几个小时的时间,这种花费我觉得是不值得的,因为你不能从编译得到更多好处,不如直接安装编译好的版本。

5、不要盲目升级

不知道这是心理作用还是什么,有的人看到比较大的版本号,就会很想换成那个。很多人的 Redhat 本来配置的很舒服了,可是一旦 Redhat 发行新的版本,他们就会尽快下载过来,然后选择升级安装。结果很多时候把自己原来修改得很好的配置文件给冲掉了。新的软件又带来了新的问题,比如有一次我的 rxvt 升级到 2.7.8 就跟 miniChinput 冲突了,升级到 Redhat 8.0,发现 xmms 居然缺省不能放mp3了,XFree86 的 xtt 模块在 I810 上有新的 bug,会导致 Mozilla 突然退出。

如果你已经配置好了一切,千万别再整体升级了,这会浪费你很多很多时间的,不值得。如果需要的话,你可以只把某些部件升级,比如内核,glibc, gcc, XFree86,...

使用 UNIX 的经典程序

好的程序一般都是可以很方便的在很多种 UNIX 上移植的,bash, VIM, Emacs, Mutt, FVWM, xterm, 都是这样。如果你用这些程序,你就可以在 Sun, HP, ... 等工作站上也装上,这样你在各种机型上的工作环境就几乎完全一样了!你不需要在 Sun 上面用 CDE,在PC上又换成 KDE,在它们上面都装一个 FVWM,使用相同的配置文件,就能得到一致的界面。

这些程序大部分都是久经考验的,是经过很多人多年开发的结果。它们功能完善,各种情况都考虑周全,绝对是你的好助手。

6、不要配置你不需要的东西

如果你只想做一个像我这样的普通用户,主要目的是用 Linux 来完成自己的科研任务和日常工作,那就可以不用系统管理员或者网络管理员的标准来要求自己,因为当一个系统和网络管理员确实很辛苦。普通用户学习那些不经常用到的复杂的维护系统的工具,其实是浪费时间,学了不用是会很快忘记的!

我不是一个合格的网络管理员,我的服务器都只设置了我自己需要的功能,设置好 ssh, ftp 已经足够了,那样可以省去我很多麻烦。我从来不过度考虑“安全”,因为 Linux 缺省已经很安全了。我没有磁带机,就不用管 tar 的那些稀奇古怪的参数了,czf, xzf, ztf 已经可以满足我所有的需要。sed, awk, ... 我也只会几种常用的命令行。

7、不用忙着看内核源码

除非你想研究CAO作系统,否则还是先把怎么使用 Linux 掌握好再说吧。我以前看了那么多内核源代码,写了驱动程序,结果最后发现我还是一只很多事情不能用 Linux 解决的菜鸟吸取我的教训吧,你应该首先掌握 shell,Xwindow 的使用和原理,它们可不比内核简单。

一个LINUX学习高手写给初学者的话

现在好多的人开始接触电脑的时候,见到的应该是Windows98说实话,98 已经是一个很人性化,封装的很好的一个系统了一个对电脑一窍不通的人都能很快的使用它。这样很多人对

"电脑"的印象和那些和我一样一开始接触的是DOS人是绝然不同的。在DOS时代,如果你对电脑的基础知识不懂的话是玩不动它的,不像现在好多人CPU是什么都不知道,却能够是Flash高手,倾倒MM无数。如果你是这样的人,你要学Linux,你有一段回头路要走,为什么,看下去我们先看看MS操作系统的发展,他有两套内核MSDOS--->DOS+Win3.2-->Win9X--->WinXP WindowsNT3.1---NT4.0-->Win2000
他的发展是从DOS这个纯字符界面的系统发展到一个由字符界面的内核加上一个图像界面的应用程序(Win3.2)再到结合把两个合为一体的Win95,到现在再并上一开始就是图形界面的NT成为WindowsXP,他未来的野心就是并上internet成为 .net

现在我们来看Linux,Linux只是个内核!这点很重要,你必须理解这一点。只有一个内核是不能构成一个操作系统的。现在的linux操作系统如redhat,蓝点,红旗等,都是用这么一个内核,加上其它的用程序(包括X)构成的。任何一个叫做操作系统的东西都是这样子构成的:内核+用户界面+一般应用程序。

现在我就拿MS的系统和linux的系统的互相对应来让大家更多的认识Linux如果你装过DOS,那你一定知道安装完成之后整个硬盘是这样根目录下有io.sys msdos.sys command.com config.sys autoexec.bat共5个文件,以及C:\dos这个目录,很简单。其中io.sys和msdos.sys就是系统的内核,command.com是用户界面(shell),config.sys和autoexec.bat是配置文件,C:\DOS目录下面的是一般应用程序系统启动时首先装入io.sys,再根据配置文件的设置装入msdos.sys和command.com,然后就出现提示符,现在你就能输入命令了。如copy c:\aaa.txt d:\aaa.txt 来拷贝文件。也你能够使用C:\dos目录下的一些应用程序来完成工作,如用edit编辑文件,用Qbasic写basic程序。

接下去你安装了一个叫做Foxpro2.6的程序,这个程序可以让你做一些数据库方面的工作,然后你在安装了一个叫做windows3.2中文版的程序,这个程序可厉害了,你现在不用在命令行下打命令了,可以用鼠标来操作了,打开文件管理器,打开C 再打开另一个窗口D,用鼠标一拉就能完成copy c:\aaa.txt d:\aaa.txt这个命令,你只是动了几次食指和现在在windows98下没么两样。

OK ,goto linux安装好linux之后根目录下有boot,bin,sbin,etc,usr/bin,等几个目录
boot下有vmlinuz这个文件,这个就是内核,就是目前世界上最厉害的黑客linus带头写的那个东东。
bin下有sh,这个就是shell(==command.com,用户界面)因为UNIX系统是没有内部命令这个说法的,准确地说/bin+/sbin == Command.com而/etc == config.sys + msdos.sys剩下/usr/bin == c:\dos

当然。因为Linux比Dos庞大得多,所以,reahat和红旗或者有不同的安排方法,各种目录下的东西并不规则。linux的启动同样是装载vmlinuxz,然后装载sh(或者其他的shell,如bash),出来提示符。现在你同样能输入命令了。如cp /aaa.txt /tmp/aaa.txt。同样可以用vi编辑文件,用gcc编译程序

接下去你安装了一个叫做MySQL的程序,这个程序可以让你做一些数据库方面的工作,然后你再安装了一个叫做kde4.0的程序,这个程序可厉害了,你现在不用在命令行下打命令了,可以用鼠标来操作了,打开文件管理器,打开/ 再打开另一个窗口/tmp,用鼠标一拉就能完成cp /aaa.txt /tmp/aaa.txt这个命令,你只是动了几次食指和现在在windows98下没什么两样,看到这里希望你明白我为什么说你在走回头路,因为目前的Linux操作系统==MS的Win3.2但MS系统已经走过了9X,现在是XP了,整整落后了两代。当然,这是从用户界面上来说的,但也恰恰是很多人装个Linux之后就是在X的kde上搞东搞西,而其它的什么都搞不起来,为什么搞不起来因为你没搞过DOS,你根本就不知道系统还可以有这样的搞法。你一开始接触的就是98,电脑给你的感觉就是用鼠标来操作的东西,你认为同样是操作系统,Linux也应该是这样的东西。你根本就没有想过你一直以为你在玩的是Linux,但实际上你玩的只不过是一个运行在Linux系统上的程序而已。因此很多人装完搞了几天说,靠,Linux不过如此。这话可以说对也可以说不对Linux嘛,你都还没见到是什么样子,你有什么资格说它怎样呢?但kde嘛,就真的确实不过如此,你用过98吧,现在你去用用3.2看看,你有什么感觉?

从稳定性来说,我不拿98比了,拿95,如果同样的工作,95一天崩溃1次的话,那X会崩溃10次,如果是2000的话,2000一天崩溃1次,X会崩溃100次。和3.2是差不多的。但为什么还是会听说比如某些好莱坞的电影特技是在Linux上完成的呢?为了出席一次重要宴会,你可以去买一套名牌西装,也可以去订做一套,订做的当然更加合身更加好看,但价格也更贵,工作量也更大名牌西装==Windows系统定做西装==Linux系统+修改系统内核+修改X代码+修改kde代码+专门写的特技软件你现在装的那套西装是街边货,也就是reahat服装厂为了适应全世界所有人的身材批量生产的东东。明白了吧?如果你明白,那你也就明白了Linux比Window好的一个方面了,我也就不用废话,那么为什么Linux往往会和黑客撤上关系呢?记得我看过一本书这么写,"Linux是由一个叫linus的黑客及互联网上很多的黑客共同编写而成"。所以,一个由黑客写成的系统怎么会和黑客没有关系呢?当然这个“黑客”的定义和现在很多中国人心中的"黑客"的定义是绝然不同的前者是几乎从未入侵过其他系统,而后者是入侵过就是了。

如果你是一个美术工作者,你也是几乎除了睡觉就在用电脑,你时时都开着photoShop在那里搞啊搞,在美术这个行业,你也算得上是这个行业里的高手了。但你根本就不关心你所做的,电脑里面到底是怎么帮你完成的。电脑不过是你创作的一个工具。就像音乐是很多人喜欢听的,但你根本不关心你所听到的音乐,她从原来歌星嘴里发出来到被你来欣赏,她到底是怎么个回事。但对一HIFI发烧友而言,她关心的就只是这些。现在回到我刚刚说到了copy命令,对于一个黑客而言,她根本不关心aaa.txt这个文件里面的内容,她关心的是从C:\aaa.txt到d:\aaa.txt这个过程中,电脑它到底干了什么?现在我问一下正在看这个帖子的人:把一个文件从一个地方拷贝到另一个地方这个事情你肯定是做过的对吧?但当你这样做的时候,你是否有想过电脑内部它是怎样来完成你的这个操作的呢?如果你的回答是:哎呀,我倒真的从未想过耶~~那么,你根本没有黑客的天分,你还是到轻松一刻混比较有前途。

寻根问底是黑客的天性,在这点上,Linux可以满足,但windows不能,你在dos上按下copy C:\aaa.txt d:\aaa.txt。复制的任务是完成了,但电脑作了什么你知道么?你只能根据你的经验的积累,大概的判断系统怎么完成,在你没看过copy的源代码之前你根本没法确定你的判断是否正确的。但UNIX上cp的源代码基本上是随手就能拿到。

TCP/ip方面,linxu可以让你一杆子捅到内核中去,但windows你只能捅到winsockapache和系统的具体交流你可以一清二楚,但IIS和系统的交流你却不可能知道Linux和黑客的关系是在这里,和入侵是一点关系都没有的。很多远程漏洞的攻击程序是要在unix系统上编译的这没错,但是那些程序本来的意义就是举个例子让你看好过说,你看得懂的话,改一改在Win上同样可以编译。

UNIX和Windows相比有太多的优点,也有太多值得你去弄的地方,只是我说不出来就像你深爱一个人的时候,你根本没法说出你爱他什么,她有什么地方值得你去爱但,Windows不是垃圾,绝对不是,作为一个工具来使用,她比UNIX好上几百倍似乎你现在都该明白为何很多远程漏洞的攻击程序是以unix的习惯写的,因为能够发现这个漏洞,说明他对系统相当的熟悉,而且是UNIX让他对系统相当的熟悉,他不自觉地就是用了UNIX的那一套,不过,它的这些代码却很大的可能是用UltraEdit在windows系统下敲的。

好像跑题了,我说要给想学Linux(UNIX)的朋友的一点建议,但却说了这样的话,

但我觉得没有跑题,我希望你看到这里已经能够知道我要给你的建议是什么了。

1.根据你目前的水平,确定Linux对你的意义有多大。

2.确定你玩的是Linux而不是X

3.把X系统卸了,剩下的空间装上源代码

4.不要用rpm -i的方式安装程序,用自己编译的方法

5.找个合用的telnet软件,我推荐SecureCRT.

6.如果你只有一台电脑,安装Vmware.用这个方式来接触UNIX

7.再看一下帖子,自己再一次体会我帖子中暗藏的建议

8.在学习Linux的过程中的,把被linux玩的经验记下来

9.在玩linux的过程中,把linux怎么被你玩的趣事记下来

RPM的使用

本文所涉及示例均在fedora core3下得到。所使用RPM包为:lynx-2.8.5-11.i386.rpm和lynx-2.8.5-18.i386.rpm。


Red Hat包管理器(即RPM:Red Hat Package Manager)是一种打包系统,用于软件的发布和安装。其他Linux发布商,如SuSE等也使用RPM。


安装与升级是管理RPM包的根本。安装RPM包时,就是在系统中增加新软件。升级RPM包时,就是在相关软件中更新最新的特性。


一个包就是一个文件,其中包含了安装一个应用所需的多个文件。尽管包中包含了安装时所需的文件,但是应用程序为了能运行可能还需要其他文件的存在或其他未包含包的存在,如特定的库。这样的需求就是包的依赖性(dependency)。如,内核源代码RPM包要有GNU C语言编译器。由于内核源代码具有依赖性,因此要先安装GNU C语言编译器,再安装内核源代码。


任何用户都可以列出或查询包。但是,安装,升级或删除包通常需要超级用户的特权。这是因为包通常安装在系统级目录下,该目录只对root(超级用户)是可写的。有时,也可以指定一个目录。把把安装在你的主目录或者你拥有写权限的目录下。


以下简要介绍RPM包的安装,删除和查询


RPM包的建立,安装和查询是用rpm命令进行的。RPM包的名字通常以.rpm扩展名结束。rpm有一组模式,每种模式都有自己的选项。


rpm命令的格式为:


rpm [options] [packages]


第一个选项指定rpm模式(安装,查询,更新),其他选项影响模式。


对包的选项描述中,有时把包指定为package-name,而有时指定为package-file。包的名字是程序名或应用名,如lynx。包文件是RPM文件的名字,如lynx-2.8.5-18.i386.rpm。


RPM为指定常用的选项提供了配置文件。系统配置文件通常是/etc/rpmrc,而用户可以建立他们自己的$HOME/.rpmrc文件。你可以用--showrc选项为在rpmrc文件中设置的所有选项显示RPM会使用的值。


以下为rpm --showrc命令显示的节选:


示例:


此为部分显示结果

[root@localhost ~]# rpm --showrc

ARCHITECTURE AND OS:

build arch : i386

compatible build archs: athlon i686 i586 i486 i386 noarch

build os : Linux

compatible build os's : linux

install arch : athlon

install os : Linux

compatible archs : athlon i686 i586 i486 i386 noarch

compatible os's : linux

RPMRC VALUES:

macrofiles : /usr/lib/rpm/macros:/usr/lib/rpm/i386-linux/macros:/usr/lib/rpm/redhat/macros:/etc/rpm/macros.*:/etc/rpm/macros:/etc/rpm/i386-linux/macros:~/.rpmmacros

optflags : %{__global_cflags} -m32 -march=athlon

Features supported by rpmlib:

rpmlib(VersionedDependencies) = 3.0.3-1

PreReq:, Provides:, and Obsoletes: dependencies support versions.

rpmlib(CompressedFileNames) = 3.0.4-1

file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path.

rpmlib(PayloadIsBzip2) = 3.0.5-1

package payload can be compressed using bzip2.


rpm命令包括FTP和HTTP客户端,因此可以指定ftp://或http://URL来通过Internet安装或查询一个包。只要这里给出的命令中指定了package-file,你就可以使用FTP或HTTP URL。


示例:


[root@localhost ~]# rpm -ivh ftp://fr.rpmfind.net/linux/fedora/core/3/i386/os/Fedora/RPMS/lynx-*

Retrieving ftp://fr.rpmfind.net/linux/fedora/core/3/i386/os/Fedora/RPMS/lynx-2.8.5-18.i386.rpm

Preparing... ##################### [100%]

1:lynx ##################### [100%]



以下列出一些通用选项(可以用于所有模式):


--dbpath path

用path作为RPM数据库的路径。


--ftpport prot

用port作为FTP端口。


--ftpproxy host

用host作为所有传输的代理服务器。如果你通过使用代理的防火墙系统连到FTP,就要指定该选项。


--help

输出一个长的使用信息(如果运行rpm时没有选项,则给出短的使用信息)。


--justdb

只更新数据库;不改变任何文件。


--pipe command

用管道把rpm输出到commond。


--quiet

仅显示错误信息。


--rcfile filename

用filename作为配置文件,而不用系统配置文件/etc/rpmrc或$HOME/.rpmrc。


--root dir

在dir目录内执行所有操作。


--version

输出rpm版本号。


-vv

输出调试信息。


安装升级和刷新


安装或升级一个RPM包,install命令的语法为:


rpm -i [install-options] package_file

rpm --install [install-options] package_file


示例:


[root@localhost ~]# rpm -i lynx-2.8.5-18.i386.rpm

package lynx-2.8.5-18 is already installed

[root@localhost ~]# rpm --install lynx-2.8.5-18.i386.rpm


为了安装一个包的新版本,同时删除现有版本,使用upgrade命令:


rpm -U [install-options] package_file

rpm --upgrade [install-options] package_file


示例:


先安装旧版

[root@localhost ~]# rpm -i lynx-2.8.5-11.i386.rpm


再安装新版

[root@localhost ~]# rpm -U lynx-2.8.5-18.i386.rpm


显示出新版本信息

[root@localhost ~]# rpm -q lynx

lynx-2.8.5-18


说明:

-U的一个特点是如果包在系统上不存在,其作用就与-i选项一样,即安装包。


与-U的特点不一样,刷新(freshen)一个包,是指在已经安装了旧有版本时rpm才升级包。


刷新的语法是:


rpm -F [install-options] package_file


rpm --freshen [install-options] package_file


示例:


从未安装过lynx包,使用-F选项,将无法升级。


[root@localhost ~]# rpm -F lynx-2.8.5-18.i386.rpm

[root@localhost ~]# rpm -q lynx

package lynx is not installed

安装和更新选项为:


--allfiles

安装或更新所有文件。


--badreloc

与--relocate一起使用,强制重新定位,即使包不是可重定位的。


--excludedocs

不安装任何文档文件。


--excludepath path

不安装文件名以path开始的任何文件。


--force

强制安装。等价于使用--replacepkgs,--replacefiles和--oldpackage。


-h,--hash

当包档案被解包时打印50个散列标记。使用--version选项以进行更好的显示。


--ignorearch

即使二进制包用于不同的体系结果也进行安装。


--ignoreos

即使操作系统不匹配也安装二进制包。


--ignoresize

安装前不检查磁盘的可用空间。


--includedocs

安装文档文件。只有在rpmrc文件中指定了excludedocs:1时,才需要这个选项。


--nodeps

不检查这个包是否依赖于其他包的存在。


--noorder

安装之前,不为了满足依赖关系而对包进行重新排序。


--noscripts

不执行任何预安装或后安装脚本。


--notriggers

不执行任何由包安装触发的脚本。


--oldpackage

允许升级以用旧包替换新包。


--percent

当文件被解压时输出完成百分比的信息。


--prefix path

把可重定位包的安装前缀设置为path。


--replacefiles

即使包替换了来自其他安装包的文件,也安装这些包。


--replacepkgs

即使某些包已经被安装,也安装他们。


--test

检查安装过程,看整个过程都做了些什么,但并不真正安装包。



查询


query命令的语法为:


rpm -q[information-options] [package-options]

rpm --query[information-options] [package-options]


查询选项有两个子集:包选择选项决定查询什么包,信息选择选项决定提供什么信息。


以下简单示演示一下包查询:


简单查询:


最简单的形式是rpm -q packagename查询。可以用这个命令寻找以安装包的版本。


示例:


[root@localhost ~]# rpm -q lynx

lynx-2.8.5-18


信息查询:


rpm -qi packagename命令可以得到安装包的汇总信息。


示例:

[root@localhost ~]# rpm -qi lynx

Name : lynx Relocations: (not relocatable)

Version : 2.8.5 Vendor: Red Hat, Inc.

Release : 18 Build Date: 2004年07月08日 星期四 18时52分16秒

Install Date: 2006年05月30日 星期二 13时27分21秒 Build Host: tweety.build.redhat.com

Group : 应用程序/互联网 Source RPM: lynx-2.8.5-18.src.rpm

Size : 4837340 License: GPL

Signature : DSA/SHA1, 2004年10月21日 星期四 01时14分03秒, Key ID b44269d04f2a6fd2

Packager : Red Hat, Inc.

URL : http://lynx.isc.org/

Summary : 一个基于文本的网页浏览器。

Description :

Lynx 是一个基于文本的 万维网 浏览器。Lynx不显示任何

图像,但是它支持框架、表格、以及多数其它 HTML

标签。Lynx 优于图形化浏览器的地方是它的速度――

Links 能够快速启动、退出、及显示网页。

标识拥有者

找出什么包拥有文件file:


示例:


[root@localhost ~]# rpm -qf /etc/lynx-site.cfg

lynx-2.8.5-18


列表包中的文件:


如果对一个包不够了解,则可以用rpm -ql packagename命令列出包中的文件。这个表中确认某个配置文件或命令是否在这个包中。如果要升级,这个信息有助于了解升级有什么风险。


示例:


此为部分显示结果

[root@localhost ~]# rpm -ql lynx

/etc/lynx-site.cfg

/etc/lynx.cfg

/etc/lynx.cfg.cs

/etc/lynx.cfg.ja

/etc/lynx.cfg.sk

/usr/bin/lynx

/usr/share/doc/lynx-2.8.5

/usr/share/doc/lynx-2.8.5/INSTALLATION

/usr/share/doc/lynx-2.8.5/README

/usr/share/doc/lynx-2.8.5/docs

/usr/share/doc/lynx-2.8.5/docs/CHANGES2.3

/usr/share/doc/lynx-2.8.5/docs/CHANGES2.4

/usr/share/doc/lynx-2.8.5/docs/CHANGES2.5

/usr/share/doc/lynx-2.8.5/docs/CHANGES2.6

/usr/share/doc/lynx-2.8.5/docs/CHANGES2.7

/usr/share/doc/lynx-2.8.5/docs/CHANGES2.8

/usr/share/doc/lynx-2.8.5/docs/CMU.announce

/usr/share/doc/lynx-2.8.5/docs/CRAWL.announce

/usr/share/doc/lynx-2.8.5/docs/FM.announce

/usr/share/doc/lynx-2.8.5/docs/IBMPC-charsets.announce

/usr/share/doc/lynx-2.8.5/docs/OS-390.announce

/usr/share/doc/lynx-2.8.5/docs/README.TRST

/usr/share/doc/lynx-2.8.5/docs/README.chartrans


列出包所提供的实际能力:


--provides选项的作用是列出这个包所提供的实际能力。


示例:


[root@localhost ~]# rpm -q --provides lynx

config(lynx) = 2.8.5-18

webclient

lynx = 2.8.5-18


列出这个包所倚赖的任何包:


-R,--requires选项的作用是列出这个包所依赖的任何包。


示例:


[root@localhost ~]# rpm -qR lynx

/bin/sh

config(lynx) = 2.8.5-18

indexhtml

libc.so.6

libc.so.6(GLIBC_2.0)

libc.so.6(GLIBC_2.1)

libc.so.6(GLIBC_2.2)

libc.so.6(GLIBC_2.3)

libcrypto.so.4

libncursesw.so.5

libssl.so.4

libz.so.1

rpmlib(CompressedFileNames) <= 3.0.4-1

rpmlib(PayloadFilesHavePrefix) <= 4.0-1


列出包中的配置文件


-c,--configfiles选项的作用是列出包中的配置文件


示例:


[root@localhost ~]# rpm -qc lynx

/etc/lynx-site.cfg

/etc/lynx.cfg

/etc/lynx.cfg.cs

/etc/lynx.cfg.ja

/etc/lynx.cfg.sk

显示有关于包的改变信息的日志:


--changllog选项的作用是显示有关于包的改变信息的日志。


示例:


此为部分显示结果

[root@localhost ~]# rpm -q --changelog lynx

* 五 7月 09 2004 Tim Waugh <[email]twaugh@redhat.com[/email]> 2.8.5-18

- Removed perl dependencies (bug #127423).

* 三 6月 16 2004 Elliot Lee <[email]sopwith@redhat.com[/email]>

- rebuilt

* 三 5月 26 2004 Tim Waugh <[email]twaugh@redhat.com[/email]> 2.8.5-16

- No longer need lynx-284-ipv6-salen.patch.

- No longer need lynx2-8-2-telnet.patch.

* 六 2月 14 2004 Elliot Lee <[email]sopwith@redhat.com[/email]> 2.8.5-15

- rebuilt

* 二 12月 02 2003 Tim Waugh <[email]twaugh@redhat.com[/email]> 2.8.5-14

- Updated to dev16, fixing bug #110196.

- No longer need crlf patch.

- Use shipped ja translations.

- Use %find_lang.

- Default config file now sets UTF-8 (bug #110986).


包选择选项


package_name

查询已安装包的package_name。


-a,--all

查询所有已安装拨。


-f file,--file file

找出什么包拥有文件file。


-g group,--group group

找出什么包拥有组group。


-p package_file

查询未安装包package_file


--querybynumber num

查询第num个数据库条目。主要用于调试。


-qf,--queryformat num

指定显示查询结果时所采用的格式,使用标记来表示不同的数据类型(NAME,FILENAME,DISTRIBUTION)。格式说明是标准printf格式化的一个变体。


--specfile specfile

查询specfile,就好象它是个包


--triggeredby pkg

列出触发安装pkg包的包。


--whatrequires capability

列出要求特定能力来行使职责的包。


--whatprovides capability

列出提供特定能力的包。


信息选择选项:


-c,--configfiles

列出包中的配置文件。


--changelog

显示有关于包的改变信息的日志。


-d,--docfiles

列出包中的文档文件。


--dump

转储包中每个文件的信息。这个选项必须至少与-l,-c或-d之一共同使用。

以下列顺序输出信息:

path size mtime md5sum mode owner group isconfig isdoc rdev symlink


--filebypkg

列出每个包中的所有文件。


-i

显示包的信息,包括名字,版本和描述。


-l,--list

列出包中所有文件


--last

根据安装时间列出包,最新的包排第一位。


--provides

列出这个包所提供的实际能力。


-R,--requires

列出这个包所依赖的任何包。


-s,--state

列出包中的每个文件及其状态。可能的状态为normal,not installed或replaced。


--scripts

列出任何在安装和卸载过程中所使用的包特定的shell脚本。


卸载


uninstall命令的语法为:


rpm -e package_name

rpm --erase package_name


示例:


[root@localhost ~]# rpm -e lynx

[root@localhost ~]# rpm -q lynx

package lynx is not installed


卸载选项为:


--allmatches

删除包的所有版本。应该只指定一个包,否则会导致错误。


--nodeps

在卸载包之前不检查依赖性。


--noscripts

不执行任何预卸载和后卸载脚本。


--notriggers

不执行任何由这个包的删除而出发的脚本。


--test

不真正卸载任何包,仅仅查看活动过程。


以上简要介绍和演示了一下RPM包的安装,删除和查询。下一篇将讲解和演示RPM的一些其他特性。


参考文献:

《红帽Linux 9 从入门到精通》,[美] Michael jang著 邱仲潘 等译 SYBEX 电子工业出版社

《Linux in a Nutshell》,Ellen Siever,Stepben Spainbour,Stepben

系统管理:谈linux磁盘结构及分区

1991年,芬兰的一名学生linus torvalds出于兴趣,以他的灵感和才思,开发了当今最为流行的免费操作系统linux。linux也正以它的优越性赢得越来越多的用户的喜爱,同时也被微软视为最可怕的竞争对手之一。全世界使用linux操作系统的人正以惊人的速度增涨着,同时也产生了linux诸多不同的版本,因为它实在是太可爱了,太好了。但这里也不能说它的好了,要不就有骗稿费之疑了。但它有个最突出的特点是它的源代码全都是公开的,这样每个用户或机构就可以根据自己的需要来修改linux,甚至你也可以开发出属于你自己的操作系统。linux也给我国计算机的发展带来了机遇,借助linux的开放性我们可以开发出全中文的操作系统,我们也将不需“洋油”来过日子了。


由于linux是个自由软件,所以在使用起来不及windows这个商业软件来得上手,但好的是,linux正不断改正这一缺点,现在普通用户也可以轻松地掌握它了。本文就用户在装linux的过程中,所遇到的linux分区问题来详细地介绍一下,这里以red hat linux7.1为例。


首先我们要对硬盘分区的基本概念进行一些初步的了解,硬盘的分区主要分为基本分区(primary partion)和扩充分区(extension partion)两种,基本分区和扩充分区的数目之和不能大于四个。且基本分区可以马上被使用但不能再分区。扩充分区必须再进行分区后才能使用,也就是说它必须还要进行二次分区。那么由扩充分区再分下去的是什么呢?它就是逻辑分区(logical partion),况且逻辑分区没有数量上限制。


对习惯于使用dos或windows的用户来说,有几个分区就有几个驱动器,并且每个分区都会获得一个字母标识符,然后就可以选用这个字母来指定在这个分区上的文件和目录,它们的文件结构都是独立的,非常好理解。但对这些用户初上手red hat linux吗,可就有点恼人了。因为对red hat linux用户来说无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构。red hat linux中每个分区都是用来组成整个文件系统的一部分,因为它采用了一种叫“载入”的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得。下面我们先来看看red hat linux的驱动器是如何标识的。


对于ide硬盘,驱动器标识符为“hdx~”,其中“hd”表明分区所在设备的类型,这里是指ide硬盘了。“x”为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘),“~”代表分区,前四个分区用数字1到4表示,它们是主分区或扩展分区,从5开始就是逻辑分区。例,hda3表示为第一个ide硬盘上的第三个主分区或扩展分区,hdb2表示为第二个ide硬盘上的第二个主分区或扩展分区。对于scsi硬盘则标识为“sdx~”,scsi硬盘是用“sd”来表示分区所在设备的类型的,其余则和ide硬盘的表示方法一样,不在多说。


我们从上面可以看到,red hat linux的分区是不同于其它操作系统分区的,它的分区格式只有ext2和swap两种,ext2用于存放系统文件,swap则作为red hat linux的交换分区。那么现在我们就可以知道red hat linux至少需要两个专门的分区(linux native和linux swap)况且不能将red hat linux安装在dos/windows分区。一般来说我们将red hat linux安装一个或多个类型为“linux native”的硬盘分区,但是在red hat linux的每一个分区都必须要指定一个“mount point”(载入点),告诉red hat linux在启动时,这个目录要给哪个目录使用。对“swap”分区来说,一般定义一个且它不必要定义载入点。下面我们先对“linux native”和“linux swap”有个初步的了解。


*swap分区是linux暂时存储数据的交换分区,它主要是把主内存上暂时不用得数据存起来,在需要的时候再调进内存内,且作为swap使用的分区不用指定“mout point”(载入点),既然它作为交换分区,我们理所当然应给它指定大小,它至少要等于系统上实际内存的量,一般来说它的大小是内存的两倍,如果你是16mb的内存,那么swap分区的大小是32mb左右,以此类推。但必须还要注意一点,swap分区不要大于128mb,如果你是64mb的内存,那么swap分区最大也只能被定为127mb,再大就是浪费空间了,因为系统不需要太大的交换分区。以此类推,如果你是128mb或更大的内存,swap分区也只能最大被定为127mb。况且你还必须注意的是如果你是128mb(或更大)的内存,你必须提醒系统你有这么大的内存,要不然它可不认你这个128mb内存。具体如下:当顺利启动了安装过程后,会显示一个boot:提示符,这时你只要键入boot:linux mem=128mb就可以了。另外你也可以创建和使用一个以上的交换分区,最多16个。


*linux native是存放系统文件的地方,它只能用ext2的分区类型,上面已说过。对windows用户来说,操作系统必须装在同一分区里,它是商业软件吗!所以你没有选择的余地!对red hat linux来说,你有了较大的选择余地,你可以把系统文件分几个区来装(必须要说明载入点),也可以就装在同一个分区中(载入点是“/”)。下面我们看看可以创建哪些分区(仅列常用几种)。


/boot分区,它包含了操作系统的内核和在启动系统过程中所要用到的文件,建这个分区是有必要的,因为目前大多数的pc机要受到bios的限制,况且如果有了一个单独的/boot启动分区,即使主要的根分区出现了问题,计算机依然能够启动。这个分区的大小约在50mb—100mb之间。但是如果想用lilo启动red hat linux系统的话,含有/boot的分区必须完全在柱面1023以下。又由于8gb后的数据lilo不能读取,所以red hat linux要安装在8gb的区域以内。


/usr分区,是red hat linux系统存放软件的地方,如有可能应将最大空间分给它。


/home分区,是用户的home目录所在地,这个分区的大小取决于有多少用户。如果是多用户共同使用一台电脑的话,这个分区是完全有必要的,况且根用户也可以很好地控制普通用户使用计算机,如对用户或者用户组实行硬盘限量使用,限制普通用户访问哪些文件等。其实单用户也有建立这个分区的必要,因为没这个分区的话,那么你只能以根用户的身份登陆系统,这样做是危险的,因为根用户对系统有绝对的使用权,可一旦你对系统进行了误操作,麻烦也就来了。


/var/log分区,是系统日志记录分区,如果设立了这一单独的分区,这样即使系统的日志文件出现了问题,它们也不会影响到操作系统的主分区。


/tmp分区,用来存放临时文件。这对于多用户系统或者网络服务器来说是有必要的。这样即使程序运行时生成大量的临时文件,或者用户对系统进行了错误的操作,文件系统的其它部分仍然是安全的。因为文件系统的这一部分仍然还承受着读写操作,所以它通常会比其它的部分更快地发生问题。


/bin分区,存放标准系统实用程序。


/dev分区,存放设备文件。


/opt分区,存放可选的安装的软件。


/sbin分区,存放标准系统管理文件。


上面介绍了几个常用的分区,一般来说我们需要一个swap分区,一个/boot分区,一个/usr分区,一个/home 分区,一个/var/log分区。当然这没有什么规定,完全是依照你个人来定的。但记住至少要有两个分区,一个swap分区,一个/分区。下面我们来看看怎样分区。


用户可以使用两种分区工具:


1.disk druid:它是red hat linux提供的硬盘管理工具,它最初是随red hatlinux5一起发售的,它可以根据用户的要求创建和删除硬盘分区,另外还可以为每个分区管理载入点,这是一个不错的分区软件,建议读者使用。本文也将以此软件详细地介绍red hat linux分区。


2.fdisk:它是传统的linux硬盘分区工具,比disk druid更强大,使用更加灵活。但是fdisk要求用户对硬盘分区有一定经验,并能够适应且读懂简单的文本界面。如果你是第一次对一个硬盘驱动器进行分区操作的话,最好还是避免fdisk这样的程序,它虽然强大但用起来的感觉不是太好的。


附注:此外red hat linux还提供了一种叫fips的分区软件,但这种分区软件具有一定的危险性,不宜提倡操作。虽然有许多人已经成功地用fips对他们的硬盘进行了分区,但这不能保证fips将在你的系统中也能正常地运行。况且red hat linux也不提供对fips的支持,劝你对这种分区软件还是慎用为好。


如果你希望将red hat linux安装在已经含有其他操作系统的盘上,也就是多重操作系统,这个情况就比较复杂了,因为一个错误就可以毁掉你辛辛苦苦保存的数据,让你欲哭无泪。如果你想让red hat linux与os/2共存,那你必须使用os/2的分区软件来创建硬盘分区,要不然os/2将不能识别硬盘分区。另外你也可以用其它的一些分区软件来分区,下面列出了一些常见的这种分区工具软件:


*partition commander软件,从www.v-com.com处下载。


*partition it软件,从www.quarterdeck..com处下载。


*partition magic软件,从www.powerquest.com处下载。


注意:硬盘分区是一个非常危险的步骤,你要想安全地在不丢失数据的情况下改变磁盘的分区有点不太现实,所以我建议大家对重要得数据进行备份,装多操作系统更要如此,以备不测。当然或许你是刚装系统或就准备重装,那也就是另外一回事了,但是大家对待分区一定要慎重又慎重,切记。


下面我们详细地了解一下red hat linux7.1自带的disk druid分区软件所包含的一些信息。


1.current disk partitions区域(这里每一行代表了一个硬盘分区)


mount point 指出red hat linux启动并运行以后该分区的加载点,交换空间(linux swap)是不需要加载点的。


device 硬盘分区的设备名


requeted 给这个分区定义时申请的最小空间


actual 分配给该分区的实际空间


type 说明了该分区的类型


2.drive summaries区域(这里每一行代表一个硬盘)


drive 显示硬盘的设备名


geom[c/h/s] 显示硬盘的物理信息,c(柱面),h(磁头),s(扇区)


total 显示硬盘的可用空间


used 显示硬盘中已分配的空间


free 显示硬盘中末分配的空间


bar graph 该条图形化地显示当前硬盘使用的百分比,#号越少,空闲空间越多


3.disk druid按钮


add 增加一个分区


edit 修改在current disk partitons中被选中的分区的属性,选中该按钮将出现一个对话框来进行修改,但只能修改该分区的载入点。如果你需要修改其它内容,请先删除该分区,而后再重新建这分区。


delete 删除一个在current disk partitons中被选中的分区


ok 确认


back 不作保存,返回


4.如果你想增加一个分区,请点击“add”按钮,这时会出现一对话框,内容说明如下:


mount point 分区载入点,说明分区


size 分区的大小


grow to fill disk 表明这个分区将添满一个硬盘的整个未分配空间。这时,这个分区的容量可以随着其它分区的修改增加或减少


type 选择分区类型


allowable drives 选择这个分区将创建在哪个硬盘上


好了,通过上面的了解想必大家都能容易地创建出适合自己的分区。下一步我们所要做的工作就是要格式化所建的分区,选择你要格式化的分区并按space键,如果想在格式化分区时检查有无坏块,选择“check for bad blocks during format”,点击ok并按space键。如果分区中已无你要所保存的数据,最好都格式化一下。