Linux简明教程
时间:2006-02-10 来源:panzifei
Linux简明教程
作者:赵峻峰
第一章 基本要求
第一节 基础知识
linux的管理是通过一系列文本文件来实现的。Linux常用的文本编辑器有如下几种:vi、pico、joe、emacs。vi是linux系统最通用的文本编辑器,emacs则更加的灵活。如果你使用紧急引导盘来恢复一个文件,vi是唯一可用的编辑器。
vi的基本用法:vi filename
基本命令:
i 插入
o 插入新行
:w保存
:q退出
:wq!保存并强制退出
:q!不保存强行退出
第二节 文件系统的层次结构
基本文件系统层次结构:
/ 根目录,linux的最高级目录
/bin 基本的命令行工具,不应该单独挂接。
/boot 引导目录,包含linux的启动文件,其中有linux内核。默认大小
为100M
/dev 所有软硬件设备的驱动,不要将此目录单独挂接在一个分区上
/etc 存放大多数的基本配置文件
/home 存放大多数用户的主目录
/lib 内核程序库以及各种命令行工具。不要将此目录挂接在单独的分区上
/mnt 可移动设备的挂接点,包括软盘,光驱等
/opt 存放应用程序,如wordperfect、openoffice套件等
/proc 当前运行的和内核相关的进程,包括IRQ ports,I/O地址,DMA通道
/root root用户的主目录
/sbin 系统管理命令,不要单独挂接
/tmp 临时文件夹
/usr 对所有用户可用的小程序,包括一些系统管理命令和功能
/var 可变的数据包括日志文件,打印池
文件系统的格式及校验
用来对不同的文件系统进行管理的工具有如下几种:fdisk、mkfs、fsck
fdisk:硬盘分区工具,使用该命令,你必须指定对应的设备。
例如管理第一个scsi硬盘:#fdisk /dev/sda
fdisk命令: a:指定引导分区
l:列出已知分区的类型
n: 增加新的分区
q:不保存退出
t: 改变分区的文件系统
mkfs:格式化命令,例如格式化硬盘分区/dev/hda1:#mkfs –t ext3 /dev/hda1
fsck:磁盘检查命令,类似于windows 2000的chkdsk,使用该命令之前应将所要
检查的分区卸载,例如要检查挂接在/var目录下的hda7分区:
#umount /var #卸载/var目录
#fsck –t ext3 /dev/hda7 #检查文件
#mount /dev/hda7 /var #重新挂接文件系统
练习:创建新的lvm(逻辑卷)分区
1、 增加一个新的硬盘
2、 创建了一个新的分区,使用fdisk工具将该分区设为lvm文件系统。
3、 备份/home目录
4、 使用vgscan命令,扫描lvm文件系统,为其他的lvm命令创建数据库
5、 使用pvcresate /dev/partition创建卷
6、 使用vgcreate groupname /dev/partition1 /dev/partition2命令创建卷组
7、 使用lvcreate –L –xyM –n volname groupname groupname创建逻辑卷,xy是卷的大小。
8、 最后使用mkfs命令来格式化逻辑卷
9、 将逻辑卷挂接在/home目录下,修改/etc/fstab使得系统自动挂载/home目录
第二节 密码管理 linux的安全性是基于文件的权限管理。默认的权限通过umask变量来进行设定。suid和sgid权限赋予每一个指定的文件。对权限和属主进行更改分别使用命令:chmod chown chgrp umask: 用于设置默认的文件权限,例:umask=123,则默认的权限为777-123=654,但实际上不论umask的最后一位是什么,默认的权限最后一位一定是0,即不具有可执行权限。 suid and sgid: 为了防止赋予每一个用户完全的权限导致的潜在的威胁,可以设置suid和sgid来减小风险。 shadow passwords: 查看/etc/passwd文件的时候,你会发现有这么一列:x.旧版本的linux在这个位置将密码加密。由于/etc/passwd对所有的用户都是可以访问的,所以就会有黑客将这个文件拷贝之后进行破解以次得到该计算机的密码。这个问题导致了shadow passwords suite的出现。 shadow password suite Shadow password suite为密码提供了更进一步的保护,它把加密后的密码存放在shadow文件中(/etc/shadow、/etc/gshadow)。此文件只有root用户可以读取。 shadow password 命令 pconv: 将/etc/passwd转化为/etc/shadow punconv: 将/etc/shadow转化为/etc/passwd grpconv: 将/etc/group转化为/etc/gshadow grpunconv:将/etc/gshadow转化为/etc/group 第五节 系统管理 执行管理任务需要root用户的权限。标准用户文件存储在/etc/skel文件中。守护进程在后台运行并且执行各种不同的服务。cron是一种特殊的守护进程,它可以在指定的场合运行指定的脚本文件。对于午夜执行的备份任务,这项功能非常有用。作为系统管理员可以执行普通用户的任何任务。仅仅当需要的时候才使用root用户是一个很好的主意因为管理员的失误可能会给组织带来不可估量的损失。 su : superuser命令,su –c 只对一个特定的命令设定根用户权限。 su – root:切换到根用户 sudo: 该命令允许/etc/sudoers种的用户运行管理员的命令 /etc/skel:对个体用户可用的配置文件存在于/etc/skel/目录中 tar czvf home.tar.gz /home:备份/home目录为home.tar.gz tar xzvf home.tar.gz /home:将home.tar.gz 解压缩 gzip hello.jpg: 压缩hello.jpg文件 gunzip hello.jpg.zip 解压缩hello.jpg.zip 第三节 tcp/ip基础知识 tcp/ip协议从unix上发展而来并最终成为因特网上的通信标准。你可以使用ip地址来组织你的网络。有一系列的工具可以帮助你来配置你的网络。 基本工具: ping:用来测试网络连接是否有故障。例:ping 127.0.0.1 ifconfig:最重要的网络配置命令,例:ifconfig eth0 192.168.0.1 netmask 255.255.255.0:分配ip地址。 ifconfig eth1 irq 10:分配中断号。 ifconfig eth0 up/dow:启用或停止指定的网卡 netstat:查看和网络相关的信息,例:netstat –r 查看路由表 /etc/hosts: ip地址和主机名的对应表 /etc/resolv.conf: 该文件指定了域名服务器 /etc/host.conf: 该文件指定了以何种顺序查询主机名 第四节 基础硬件知识 linux 主要应用于intel架构的计算机,因此我们有必要对intel计算机的加够有一个大致的了解 irq settings:irq是由外围设备发送给处理器要求处理时间的信号。连接到计算机的每一个设备都需要一个irq端口。正常情况下,每一个设备需要一个专用的irq。intel架构的计算机只有十六个irq(0-15),现在这些irq端口号常常会显得不够用。通过共享端口号可以支持更多的设备。2000年以后生产的计算机大多都支持该功能。可以共享irq的主要是pci、usb接口的设备。 dma: dma设备之间可以直接通信而不经过cpu,但是dma设备仍然需要irq端口号,以共有八个标准dma通道(0-7),其中dma4属于保留号码,不能用于任何设备。 内存需求: 对于as3.0最少需要256m内存,实际上我的内存少于256运行的也还算正常,只是慢了点。系统所需的最大内存是你同时运行所有程序所需要的内存容量,这难于计算,所以你应该尽量购买大一点的内存,这样可以让你的系统运行的更好。as3.0支持的最大内存是64g。如果你的内存大于16g,你需要安装hugemenm内核。 关于硬盘: 在你的计算机将linux载如系统之前,bios一定要能够认出包含引导文件的主分区。这样硬盘上的linux才能启动,你应该知道下面这些关于硬盘的知识。标准intel架构支持4个ide硬盘最多支持31一个不通的scsi硬盘linux可以安装在前两个硬盘上,否则你就需要一张启动软盘来引导系统了尽管你可以使用usb硬盘或1394硬盘但是你不应该将系统安装在这两种设备上,因为既不能从这两种硬盘引导,也不能使用软盘来引导着两种硬盘上的系统。 第五节 硬件兼容性 现在的pc机的硬件绝大部分都已经可以被linux直接支持,硬件兼容性的问题已经较少见 |
第二章 磁盘管理
第一节 磁盘分区
磁盘使用之前必须进行格式化成某种格式才能够使用,linux支持多种文件系统。每一个硬盘最多可以划分为16个分区。
磁盘分区:推荐使用fdisk。举例说明:
#fdisk /dev/hda hda指第一块ide硬盘,scsi硬盘为sda或sdb等
command(m for help): n增加磁盘分区
command action
e extended
p primary partition (1-4)
p 增加主分区
partition number (1-4):1
first cylinder (1-512, default 1):
using default value 1
last cylinder or +size or +sizeM +sizeK(1-512,default512):+200M
command (m for help):p 查看当前磁盘信息
device boot start end blocks id system
/dev/sdb1 1 192 196592 83 linux
command (m for help):w 保存退出
mount:显示当前挂接的目录
df:查看磁盘信息
du: 查看文件夹的空间使用效率
磁盘格式化:mkfs ,例:格式化/dev/sda1: mkfs –t ext3 /dev/sda1
第二节 扩展磁盘空间
现有的磁盘的空间可能会随着时间的增长而变得越来越不够用。在这种情况下就需要增加新的磁盘来对原先的硬盘进行扩展。方法如下:
1、 将新的硬盘接好,进入系统后使用fdisk进行分区,然后格式化。
2、 建立一个空目录,例如:mkdir /mnt/newdisk.
3、 挂接新的硬盘到新建的空目录:mount /dev/sda1 /mnt/newdisk
4、 修改/etc/fstab使该分区自动挂载
第三节 逻辑卷管理(lvm)
磁盘上的某一个目录存储的文件增长迅速空间日渐不够使用这时候你可以使用lvm来解决
这个问题。实现方法如下:假设要增加/home目录的空间。
1、 增加新的硬盘,分区、格式化,假定要增加的新的分区为/dev/sdb2,/home
目录的分区为:/dev/sda7
2、 备份/home文件夹的内容
3、 #umount home 卸载/home目录
4、 #vgscan 进行扫描并创建相关的文件
5、 #pvcreate /dev/sda7 /dev/sdb2 创建物理卷
6、 #vgcreate vgtest /dev/sda7 /dev/sdb2 创建卷组
7、 #lvcreate vgtest –L 2000M –nlvtest 创建逻辑卷
8、 #mkfs –t ext3 /dev/vgtest/lvtest 格式化逻辑卷
9、 #mount /dev/vgtest/lvtest /home 挂接/home目录
10、 #vi /etc/fstab,删除和home 相关的行,并增加如下行: /dev/vgtest/lvtest /home ext3 defaults 0 0
11、 #reboot 重新启动计算机使更改生效
第四节 磁盘阵列
磁盘阵列可以有效的提高数据的读写速度和数据的可靠性。具体分类如下:
raid 0、raid 1、raid 2、raid 3、raid 4、raid5其中常用的是:raid 0、raid 1、raid
5,简介如下:
raid 0:使用两块硬盘,数据分别存放在两块硬盘上,读写速度较快,但不提供数据冗余。
raid 1: 也称为磁盘镜像,在两块硬盘上同时存储完全相同的数据,写入速度一般,但读
取速度增加一倍。任意一块硬盘损坏不会对数据造成损害。
raid 5: 也称为带奇偶校验的磁盘条带化,最少需要3块硬盘,最多支持32块硬盘,可用磁盘数量为n –1块硬盘。读取速度和写入速度都有一定程度的提高。为最常用的阵列形式。
实现方法:假定添加了四块硬盘到计算机,分别为/dev/sdb、/dev/sdc、/dev/sdd、/dev/sde,实现步骤如下: 1分别进行分区格式化
2、更改分区类型:fdisk /dev/sdb1
t
fd
p
w
对每一块硬盘进行如上操作,把分区类型
改为raid
3、创建/etc/raitab
#vi /etc/raidtab 添加如下内容:
raiddev /dev/md0
raid-level 1
nr-raid-disks 2
nr-spare-disks 0
persistent-superblock 1
chunk-size 4
device /dev/sdb1
raid-disk 0
device dev/sdc1
raid-disk 1
保存退出。
#mkdir /dev/md0 创建阵列md0
#mkfs -t ext3 /dev/md0 对阵列进行格式化
第五节 增加交换分区
#mkswap /dev/sdb1 创建交换分区
#swapon /dev/sdb1 开启新增的交换分区
#cat /proc/swaps 查看当前的交换分区
第六节 增加交换文件
#dd if=/dev/zero of=/swapfile bs=1024 count=8192
#mkswap /swapfile
#swapon /swapfile
交换文件最多8个,每个最大容量为16M
第七节 读取windows的文件
#mkdir /mnt/windows 建立一个空目录
#mount –t vfat /dev/hda4 /mnt/windows 挂接windows的fat分区
#mount –t ntfs /dev/hda5 /mnt/windows 挂接ntfs分区,linux内和默认不支持ntfs分区,要让linux识别ntfs分区必须要重新编译内核加入对ntfs的支持。
第三章 基本配置和管理
第一节 用户管理
1、增加用户:方法1:#useradd username –p password
例:增加用户kk,密码kk #useradd kk –p kk
方法2:直接修改/etc/passwd文件,然后手工创
建相应的用户主目录
2、修改用户:#usermod -l newusername -c “comment” -d /home/newusername oldusername
例:把test 用户名改为test2,主目录改为:/home/test2
usermod -l test2 /home/test2 test(test2目录要手工建)
-p:修改密码
-e:设定账号过期时间
-s: 设定shell
3、改密码:passwd username
4、删除用户:userdel username
5、限定可以执行su 命令的用户:普通的用户如果知道root的密码,就可以通过su命令取得根用户的权限。黑客也有可能通过暴力破解的办法,获得超级权限,因此有必要对可以执行su命令的用户进行限制。具体方法如下:
#vi /etc/pam.d/su,修改其中一行:
#auth required /lib/security/$ISA/pam_wheel.so use_uid
将行首#去掉,这样就只有wheel组中的用户可以使用su命令了。然后将选定的用户加入到wheel用户组即可。
第二节 基本用户环境
当我们使用userdd命令或redhat-config-users工具来创建一个新的用户的时候,会自动生成用户的主目录和一些默认的文件设定一些配置,即所谓的用户环境。这些默认的配置和文件存储在/etc/skel文件夹中。默认文件有以下这些:.bash_logout、.bash_profile、.bashrc、.kde、.zshrc,不同的版本的linux默认文件可能也会有一些差别
第三节 文件系统管理及自动挂接
1、挂接软盘:mount –t vfat /dev/fd0 /mnt/floppy
或者:mount /mnt/floppy 或者:mount /dev/fd0
2、自动挂在软盘:修改/etc/fstab 增加如下一行:
/dev/fd0 /mnt/floppy auto noauto,owner,kudzu 0 0
3、卸载软盘:umount /mnt/floppy
4、卸载光驱:umount /mnt/cdrom
第四节 RPM的使用简介
所谓rpm是指redhat package manager即红帽软件包管理器,是有redhat公司创建的一种软件发行发式,rpm格式发行的软件易于安装,相比其他的发行方式有很大的优越性。在此简介其基本用法。
1、rpm –i penguin-3.4.5.-26.i386rp安装以rpm形式发行的软件
2、rpm –U penguin-3.4.5-26.i386.rpm 升级软件包
3、rpm –e penguin-3.4.5.26 删除软件包
4http://download.fedora.redhat.com/pub/fedora/linux/core/update/i386/kernel-smp-2.6.7-1.494.2.2.i686.rpm
安装远程rpm包
5、rpm –import /usr/share/rhn/RPM_GPG_KEY 导入gpg公钥
6、rpm –checksig /mnt/cdrom/RedaHat/pxe-0.1-36.i386.rpm导入公钥以后对文件的完整性进行验证
7、rpm –verify –p /mnt/cdrom/RedaHat/pxe-0.1-36.i386.rpm进行md5校验和的验证
8、rpm --redhatprovides /etc/group查找某个文件对应的rpm包
9、rpm –q samba 查询samba是否安装,以及版本
10、rpm –qf /etc/passwd 查询/etc/passwd属于哪个软件包
第五节 关于rpm 源码包
通过rpm 源码包创建和定制rpm
rpm –ivh rpm-build-4.2.3-10.i386.rpm:安装rpmbuild工具
rpm –ivh modutils-2.4.21-22.src.rpm:安装源码包
这时在/usr/src/redhat/SPECS文件夹内可以看到modutils.spec,/usr/src/redhat/SOURCES文件夹内可以看到以下的文件:modutils-2.4.21.tar.gz、modutils-2.4.21.tar.gz
cd /usr/src/redhat/SPECS/ 进入该文件夹
rpmbuild –ba modutils.spec 重新编译建立rpm包,运行结束后,
cd /usr/src/redhat/RPMS可以看到如下文件:modutils-2.4.21.i386.rpm modutils-debuginfo-2.4.21-22.i386.rpm
至此rpm包成功建立,使用rpmbuild命令的时候,使用参数-bb也同样可以生成rpm包
第六节 基本网络配置
大多数情况下,在系统的安装过程中,网络的相关设置就已经设好了,但是如果你碰到了问题,你可能就会需要诊断网络的故障,特别是排除网络故障的时候,就更需要了解网络配置的知识。
1、和网络相关的配置文件大多数都存储在/etc/sysconfig文件夹里。/etc/syscofig/network是比较重要的一个,其设置简介如下:
networking:可以设置为yes或者no 以此来决定电脑是否联网。
nisdomain: 如果你使用nis网络,你应该在这个文件中指定nis域的名字
hostname:设定计算机的名字
gateway:设定网关的ip地址
gatewaydev:设定网络设备,例如eth0,如果你只有一个网卡那么你应该看不到这个选项。
2、/etc/syscofnig/network-scripts/ 命令及置文件介绍
eth0:和第一块网卡有关的设置,如ip地址、子网掩码、网络地址、
网关等等。最后一位的0代表第一块网卡,如有第二块网卡,就会有
ifconfig-eth1文件,依此类推。
ifconfig-lo:配置lookback 设备的相关信息,内容与ifconfig-eth0类似
network-functions:包含其他的网络脚本所使用的激活网卡、禁止网卡等功能
ifup-* and ifdown-*:用于激活或者禁止相关的协议
ifup eth0:激活eth0
ifdown eth0:禁止eth0
ifconfig:主要的网络配置命令
3、ifconfig 用法介绍
ifconfig:显示当前的网络配置
ifconfig eth0 192.168.0.1 netmask 255.255.255.0 设置ip地址和子网掩码。该命
令只在当前生效
ifconfig eth0 down:禁用网卡eth0
ifconfig eth0 up:激活网卡eth0
4、netstat –r:显示当前的路由表
基本启动过程
理解系统的启动及关闭过程将对你的系统管理工作带来极大的益处。Redhat使用的启动过程称之为:System V init。一旦内核被装载,它启动一个程序:init,由init来启动其余所有的相关程序。我们将对linux如何将自己引导为一个可用的系统有一个大致的了解。Redhat提供两个工具来管理随系统启动服务:redhat-config-services(图形化工具)、chkconfig(命令行工具)。首先我们要了解redhat runlevels。
1、runlevel 0 :关闭系统
2、runlevel 1: 单用户模式,用于对系统进行维护
3、runlevel 2: 多用户模式,但不能使用网络
4、runlevel 3: 多用户模式,具有网络功能
5、runlevel 4: 未使用
6、runlevel 5: 带图形界面的多用户模式
7、runlevel 6: 重新启动计算机
系统启动过程:计算机通电以后由bios会检查你的系统寻找引导装载程序(grub、lilo)。然后再由引导装载程序寻找linux内核。这样就开始安装你配置好的服务。内核总是通过调用init来启动。Init进程立刻运行/etc/rc.d/rc.sysinit,由其执行一系列的任务,例如网络配置、键盘映射、分区挂接等等。Init进程通过查看/etc/inittab来决定将系统引导至哪个运行级别。/etc/inittab中有类似这样的一行:id:5:initdefault:其中数字5代表系统的默认级别为runlevel 5,通过简单的更改这里的数字即可改变系统启动时自动运行的级别。
/etc/rc.d/目录中包含如下子目录:
init.d、rc0.d、rc1.d、rc2.d、rc3.d、rc4.d、rc5.d、rc6.d
除init.d之外的每一个目录都对应一个运行级别,其中包含该运行级别启动和关闭的服务,标有k的服务是该运行级别默认关闭的服务,标有s的服务为该运行级别默认启动的服务。
/etc/rc.d/init.d目录包含所有服务的启动脚本,手工启动一个服务即可在该目录下执行,例:/etc/rc.d/init.d/smb stop
第五节 虚拟控制台
linux作为多用户操作系统,你可以使用相同的身份同时等录到不同的终端。使用ALT+功能键在不同的终端窗口之间进行切换。例:切换到终端2:ALT+F2。在图形界面下切换使用:ctrl+alt+功能键
虚拟控制台在/etc/inittab文件中配置,可以看到有如下行:
1:2345:respawn:/sbin/mingetty tty12:2345:respawn:/sbin/mingetty tty23:2345:respawn:/sbin/mingetty tty34:2345:respawn:/sbin/mingetty tty45:2345:respawn:/sbin/mingetty tty56:2345:respawn:/sbin/mingetty tty6
根据官方的说法,最多只有6个终端,实际试验的结果是在这里修改配置文件添加终端数量以后,重新启动。终端的数量增加了,但是可用的仍然只有6个
第六节 其他配置工具
1、 clock:显示当前的系统时间设置
2、 redhat-config-date:图形化的时间配置工具
3、 redhat-config-keyboard:图形化的键盘配置工具
4、 redhat-config-mouse:图形化的鼠标配置工具
5、 redhat-config-services:图形化的服务配置工具,决定哪些服务岁系统启动
6、 redhat-config-network:图形化的网络配置工具
7、 chkconfig:确定某服务默认在哪个级别运行
第四章 内核、用户管理和任务自动化
第一节 shell配置文件
所有的shell配置文件都保存在/etc目录中,包括:bashrc、profile以及/etc/profile
目录中的脚本文件。简介如下:
/etc/bashrc:设定别名和一些其它的功能,你可以使用文本编辑器来查看该文件,该文件设定了umask的数值该参数决定了新创建的文件的默认权限,另外还设定了命令行下的提示符。
/etc/profile:用于设定系统环境,设定PATH、USER、
LOGINNAME、MAIL、HOSTNAME、HISTSIZE以及INPUTRC变量。以及最后运行/etc/profile.d目录中的脚本文件。
/etc/profile.d:一个包含若干用于bash shell脚本文件的目录,这些脚本文件由/etc/profile启动运行。
第二节 实现磁盘配额
1、 查看当前的内核是否支持磁盘配额:
#grep CONFIG_QUOTA /boot/config-2.4.21-4.EL
如果输出的内容如下则内核支持磁盘配额:
CONFIG_QUOTA=y
如果你看到的输出如下,则你需要自行编译内核:
CONFIG_QUOTA=n
2、 查看相关软件包是否已安装:
rpm –q quota
3、 举例说明磁盘配额的实现方法:
#useradd linux 增加用户linux
#passwd linux 修改用户linux的密码
#mkdir /www/linux 建立新文件夹
#chown linux.linux /www/linux 更改文件夹的属主
#vi /etc/fstab 增加如下行:
/dev/hda7 /www ext3 defaults,usrquota 0 0
#mkfs –t ext3 /dev/sdb1 格式化分区
#quotacheck -cu /www 生成aquota.user 文件
#quotacheck -vu /www 生成相关的信息
#repquota –au 显示所有的磁盘配额信息
#edquota -u linux 对用户linux设置配额
#edquota -t 设置宽限期
#edquotaon /www 开启/www目录上的磁盘配额
内核基础知识
内核是整个操作系统的核心部分。它管理硬件之间的通讯,决定哪个进程运
行,提供每一个进程运行所需的相对隔离的虚拟的地址空间。内核由引导程
序(grub、lilo)装入系统。内核负责将驱动程序,模块装入系统。自行编译
内核以后可以带来以下方面的好处:
极大的提高核心服务的运行速度
提供用户服指定的服务的内核直接支持
对适当的服务以模块化的形式动态支持
通过减少不必要的服务可以降低内核的内存需求
配置支持高端硬件,例如大于4G的内存,硬盘阵列,对称式多cpu
编译内核的建议: 只有在需要的时候才编译内核,直接编译进内核的东西越少系统运行越快。通过移除你不需要的设备减小内核, 可以在不改变设备的情况下提高系统运行的速度,其它的硬件留下更多的可用资源。将各种硬件的设备的驱动作为模块动态加载和卸载是一个较好的办法。模块是内核的扩展,虽然没有直接编译进内核,但是可以随需要加载和卸载。
单内核与模块化内核
单内核:所有的设备模块直接编译进内核
模块化内核:许多设备已模块的形式单独加载。
单内核与模块化内核比较:单内核与设备的通讯速度快,模块化内核与硬件通信要通过模块列表,不行的是单内核过于庞大。大内核减少了可用的内存。有些系统甚至不能启动这样大的内核。Linux过去使用单内核,linux一度在装载模块化内核的时候由于某些硬件而产生问题。使用单内核则系统安装完成之后所有的驱动程序就已经装好了。模块化内核有极大的灵活性。你可以将几乎所有的驱动程序作为模块编译,这样在必要的时候这些模块就会被载入系统。模块化使得内核十分的小,这就减少了启动所需要的时间提高了系统整体性能。如果linux装载模块的时候产生问题,你可以使用modprobe或者insmod命令来手动装载模块。
升级内核:你应该总是保留旧内核,以免由于新内核的错误而导致系统无法引导。对grub或者lilo而言新的内核就是一个新的操作系统。如果使用rpm包安装了新的内核,引导程序也自动被升级。如果你犯了一个比较大的错误,导致无法引导,你可以在重新启动后选择使用旧的内核。保存内核配置文件这样你就可以轻松的将其拷贝到新的内核继续使用。
/boot目录: linux的内核存储在这个目录里。新的内核也必须存放于这个目录,才能够使用。该目录的莫人大小时100M,足够存储当前的内核以及升级内核的时候的附加内核。
/proc 目录:这个目录基于一个虚拟的文件系统。换句话说她不包含任何存储在硬盘上的文件,但它是查看计算机的一个窗口。如果你要查看当前的内存信息使用该命令:cat /proc/meminfo
理解内核模块:
当你编译内核的时候,你可以将所有的需要的驱动程序编译成进内核,成为一个单内核。但是这样的内核太大了,并且需要很长的时间加载。大多数的系统管理员使用内核模块。内核模块并不直接编译进内核,而是根据需要动态的进行加载和卸载。如果和内核模块相关的硬件有了问题,你可以使用kudzu。这是一个自动检测和配置工具,一般在系统启动的时候自动运行,当然了你也可以手工运行这个工具来排除故障。kmod是模块加载控制器,负责内核模块的加载和卸载。指定特别的选祥和参数可以修改/etc/modules.conf文件。大多数的硬件都可以自动检测到,对于未识别到的硬件可以执行:depmod –a
手工加载模块使用modprobe例:#modprobe pcnet32
查看当前加载的模块:#cat /proc/modules或者#lsmod
卸载模块:rmmod –r pcnet32
第四节 升级内核
1、关于内核版本 内核版本号的形式一般都是这样的:x.x.x例如:2.4.21
第一个数字表示主版本号,第二个数字表示辅助版本号,第三个号码代表patch的号码。主版本号的变更往往意味着很大的改变,可能会有很多程序不能够在新的内核上使用。辅助版本号有两个含义:第一主版本内核的第x个版本,第二x若为奇数则表示该版本为正在开发中的版本,不适合生产使用,若为偶数则表示该版本为稳定的可靠版本,可以用于生产。最后一个号码代表patch即补丁的版本号。
2、升级内核的方式 内核往往会包含着新的技术,意味着系统可以支持更多的设备,也意味着更好的稳定性和更快的性能。所以系统管理员可能会需要对内核进行升级。升级内核主要有两种方式:
1、 rpm包升级方式 从网上下载已经编译好的rpm内核软件
包,然后进行安装,例:rpm –ivh kernel-2.4.21-8.i386.rpm
2、原码包编译:下载源代码进行编译安装
3、内核补丁 为了使你的系统运行的更加的稳定、高效,你可能经常要给你的系统打补丁,例如从2.4.20到2.4.21。内核补丁可以很容易的从网上下载到。安装也很容易,例:
#zcat pathch-2.4.22.gz | patch –p0
3、重新编译内核
内核资源 linux的优点之一是你可以格局你的需要对内核自由进行裁减编译,使之符合自己的需要。要编译内核就要先了解linux的源代码。一旦安装了源码包,你就会在/usr/src目录中看到如下子目录:debug、redhat、linux-2.4、linux-2.4.21-4.EL。linux-2.4是linux-2.4.21-4.EL的符号链接文件。安装内核源码包使用如下命令:
#mount /mnt/cdrom
#rpm –Uvh /mnt/cdrom/RedHat/RPMS/kernel-source-*
或者你可以下载linux tar file,即以tar.gz的形式发行的源码包。
内核编译:将下载好的内核解压缩到:/usr/src/目录下
#cd /usr/src/ 进入该目录
#ln linux-2.4.26 linux-2.4 创建该目录的符号链接文件
#cd linux-2.4 进入内核目录
修改Makefile文件,找到包含EXTAVERSION的行将其改为EXTRAVERSION=qun
#make mrproper 确保源文件的一致性
#make xconfig 选择需要编译进内核的功能
#make dep 解决依赖性
#make bzImage 生成内核
#make modules 编译内核模块
#cp usr/src/linux-2.4/arch/i386/boot/bzImage /boot/vmlinuz-2.4.26qun
#make modules_install 安装内核模块
#mkinitrd /boot/initrd-2.4.26qun.img 2.4.26qun 生成启动镜像文件
# cp /usr/src/linux-2.4/System.map /boot/System.map-2.4.26qun
#vi /etc/grub.conf # 在最后部分添加如下行:
title Red Hat Linux (2.4.26qun)
kernel /vmlinuz-2.4.26qun ro root=LABEL=/
initrd /initrd-2.4.26qun.img
:wq!
#reboot 重新启动后就可以看到刚刚安装好的内核了。
#对于2.6的内核而言,步骤就简单了很多只需要这几个命令:
make xconfig、make、make install
第五节 任务自动化
linux下实现任务自动化的工具主要有两个:cron、at,cron的守护进程是crond,在默认的情况下,它每分钟都检查一系列的目录,如果有设定的程序就会在指定的时间内将其启动。用户的cron设置位于:/var/spool/cron目录,计算机的调度任务位于:/etc/crontab和/etc/cron.d目录。只用当需要运行程序的时候,cron守护进程才会启动。
cron的配置方法如下:
crontab –u username -e,例:
crontab –u root –e 对用户root进行设置
设置的具体格式如下:
minute, hour, day of month, month, day of week, command
* * * * * command
例:crontab -u root -e
30 23 * * * * reboot
设定每晚23:30重新启动计算机
查看cron设置:crontab -l例:crontab -l -u zhao查看用户zhao的设置
crontab 参数介绍:
-e:编辑设置
-u:指定用户
-r:删除设置
-u:列出当前设置
使用at实现任务自动化:类似于cron,at也可以实现任务自动在指定的时间执行,不同之处在于cron任务是多次循环反复执行的,而at任务是一次性的,执行一次之后就不再生效了。设定at任务的方法如下:
#at now + 1 hour
at> reboot
at>ctrl+D 设定一个小时之后重新引导系统
查看at任务:atq 例:#atq
1 2004-11-01 00:53 a root
2 2004-11-01 01:53 a root
除任务:atrm 例:删除第一个任务:#atrm 1
增强cron、at安全性:
可以通过这两个文件来对用户进行权限的控制:/etc/cron.allow、/etc/cron.deny。如果
这两个文件不存在,那么所有的用户都可以使用cront、at。如果有/etc/cron.allow文件,
则该文件不包含的用户将不能使用cron,如果没有/etc/cron.allow文件,则
/etc/cron.deny文件所包含的用户不能访问cron.
第五章 linux网络服务
第一节 samba网络共享服务
共享文件是网络的一项重要服务,在linux中实现类似的功能主要有两种办法:samba文件共享,NFS文件共享,本节主要讲解samba的网络共享服务。使用samba服务可以实现linux和unix以及windows之间的网络文件共享。并且使用samba服务,linux还可以作为windows的服务器,主要有如下几种:
win9x的工作组成员、
nt/2000/xp/2003的域成员、
成员服务器甚至是域主服务器。
共享用户的主目录。
作为wins服务器
作为主浏览器
提供集中式的身份验证
配置本地目录作为共享文件系统
支持microsoft访问控制列表
1、 samba有两个守护进程:smbd、nmbd位于/usr/sbin
2、 启动和关闭samba服务:#service smb start、
#service smb stop
3、 使之随系统一同启动: #chkconfig –level 35 smb on
4、 samba共享文件实例 目标:共享本机上的/home/zhao,使用户zhao,可以通过网络读写,用户fang可以读不可以写。
实现步骤:
1、#vi /etc/samba/smb.conf 编辑[global],增加如下行:
netbios name = kodadigital 设置计算机的共享名
workgroup = koda 设置计算机的工作组
valid users = zhao 设置可以访问这台计算机的用户
2、增加如下行:
[zhao] 共享文件夹的名字
comment = welcome 对该共享文件夹的注释
path = "/home/zhao" 共享文件夹的路径
admin users = root 管理员用户,实际上并没有权限
valid users = root,zhao,fang 对该共享文件夹有访问权限的用户
write list = root,zhao 对该共享文件夹有写权限的用户
3、将默认的[homes] 配置文件及其选项全部用#注释掉
4、#/etc/rc.d/init.d/smb restart
说明:通过网络访问的时候首先要通过global中设定的valid用户的身份验证,然后根据访问的文件夹的不同,
还要通过各共享文件夹定义的valid用户身份验证。
第二节 web服务及虚拟服务器(apache)
在linux中web服务主要依靠apache来实现。Apache是当今世界上应用最为广泛,最为可靠的web服务器。Linux的各种发行版都自带有发行形时最新版的apache。后续的部分将以一个实例来讲解如何配置apache服务器。
1、安装完成后,/etc/rc.d/init.d/httpd start, 关闭防火墙,启动浏览器即可看到默认的页面,编辑/var/www/html/index.html,重新启动httpd服务,使生效。
2、实现用户的个人主页
#vi /etc/httpd/conf/httpd.conf 删除UserDir disable, 去掉 UserDir public_html 之前的#号,/etc/rc.d/init.d/httpd restart,重新启动web服务,在浏览器地址栏输入192.168.0.4/~zhao/,来验证。(zhao是本机用户之一)
3、基于名字的虚拟主机(实现基于名字的虚拟主机需要实现配置dns服务器)
# vi /etc/httpd/conf/httpd.conf 将最后的部分改为如下:
<VirtualHost www.zhao.com>
ServerAdmin [email protected]
DocumentRoot /var/www/zhao
ServerName www.zhao.com
<Directory /var/www/zhao>
</Directory>
</VirtualHost>
#etc/rc.d/init.d/network restart
#/etc/rc.d/init.d/httpd restart
4、基于ip地址的虚拟主机:
#ifconfig eth0:0 192.168.0.5 netmask 255.255.255.0
#vi /etc/httpd/conf/httpd.conf,增加以下部分:
<VirtualHost 192.168.0.5>
ServerAdmin [email protected]
DocumentRoot /var/www/hit
</VirtualHost>
/etc/rc.d/init.d/httpd restart
打开浏览器在地址栏输入:192.168.0.5进行检验是否生效
第三节 实现squid代理服务器
对于大多数企业而言代理服务器是必不可少的。在windows世界有各种软件来实现代理服务器的功能,如:sygate、wingate、isa等等,在linux领域中这个功能由squid来实现。Squid是一款功能强大的代理服务器软件,培植较为简洁,效率非常的高。本节以一个世纪的例子来讲解如何一步步的配置squid代理服务器。
1、#vi /etc/squid.conf 编辑squid配置文件,增加如下行:
http_port 8080 将代理端口设为8080,如不进行设置则默认的代理端口为:3128
cache_men 16 MB 设置代理服务器的高速缓存大小
cache_dir ufs /spool/squid 100 16 256 设置代理服务器的交换空间,/spool/squid表示高速缓存的位置,100表示空间为100M,16代表16个目录,256代表共有256个二级目录
cache_access_log /var/log/squid/access.log 缓存访问日志
cache_log /var/log/squid/cache.log 缓存日志
cache_store_log /var/log/squid/store.log 缓存存储日志
acl InternetAllow src 10.10.10.0 建立新的访问控制列表
http_access allow InternetAllow 建立新的规则允许InternetAllow列表中的主机使用代理服务器
2、#wq! 保存退出
3、#squid –z 进行初始化
4、#service squid start 启动squid 代理服务
squid设置完成,现在就可以使用了。
第四节 Ftp服务
ftp是互联网上很普遍的服务,再redhat中自带的ftp软件是vsftp,该软件的特点是易于使用,安全性极好。以下一个实际的例子来讲解如何实现vsftp服务器的全过程。
a) 安装vsftp软件:把第二张光盘放到光驱,挂接后进入/mnt/cdrom/RedHat/RPMS目录,使用命令:rpm –ivh vsftd-1.2.0-4.i386.rpm
b) #service vsftpd start 启动服务
c) 常用配置命令:cd、get、mget、put、mput
第五节 邮件服务器
邮件服务是互联网上的一项基本服务,绝大多数经常上网的网民都有自己的电子信箱,用于商业的电子信箱也日益普遍,多数公司都会使用电子邮件与客户进行通信、交流。很多的时候公司内部也会有内部的电子邮件服务器,在公司内部提供电子邮件服务。在linux/unix平台之上最常用电子邮件系统为:sendmail。该系统功能强大,运行稳定,广泛的运行于世界各地,是internet上最为流行的电子邮件系统。但是sendmail有一个缺点就是难于配置,培植文件非常难以读懂。本节的其余部分一个以实际的例子来对sendmail的配置文件进行修改,希望大家严格按照本文的步骤来进行操作,以确保能够顺利的启动邮件服务:
a) 安装sendmail和bind
b) 配置DNS服务器:
1、#vi /etc/named.conf,添加新的域:test.com
zone "test.com" IN {
type master;
file "test.com.dns";
allow-update { none; };
};
2、touch /var/named/test.com.dns建立相应的域的配置文件:
$TTL 1d 默认的生存周期
@ 1d IN SOA ns.test.com. root.test.com. (
1 起始序列号
2d 刷新频率
1h 重试频率
1w 失效时间
1h) 最短TTL
@ 1d IN NS ns.test.com. 设置域名服务器地址
1d IN MX 10 mail.test.com. 设置邮件服务器地址
www IN A 192.168.0.10 设置域名和ip地址的对应关系
ns IN A 192.168.0.10
mail IN A 192.168.0.10
3、保存退出,service named restart 将dns指向自己
4、测试:host -l test.com
c) 修改sendmail的配置文件:
1、#vi /etc/mail/,修改如下行:
o DaemonPortOptions=Port=smtp,Addr=127.0.0.1, Name=MTA
将其中的127.0.0.1更改为sendmail服务器的地址192.168.0.1,然后保存。
2、#vi /etc/mail/access,增加如下行:
test.com RELAY
192.168.0 RELAY
执行命令,使之生效:
makemap –r hash /etc/mail/access.db < /etc/mail/access
3、# vi /etc/mail/local-host-names,添加允许中继的主机
mail.test.com。保存退出
d) 重新启动sendmail服务:#service sendmail restart,现在你就可以使用这个sendmail服务起来收发邮件啦
第六节 DNS服务器
随着网络的发展,在公司内部建立自己的邮件服务器显得越来越重要,越来越多的服务要依赖于dns服务。Linux自带的邮件服务器是:bind 9。以下部分以新增tes.com域名为例讲解配置dns的过程。
1、安装
2、#vi /etc/named.conf #修改改配置文件,增加test.com的配置信息
zone “tes.com” IN { #新域的名字
type master; #该服务器的类型
file “tes.com.dns”; #该域的配置文件
allow-update {none;}; #是否允许动态更新
};
3、#touch /var/named/test.com.dns #建立test.com域的配置文件
4、# vi /var/named/test.com.dns #修改配置文件,增加以下内容
$TTL 1d
@ 1d IN SOA ns.tes.com. root.test.com (
1
1d
2d
3d
1h )
@ 1d IN NS ns.test.com. 增加域名服务器纪录
1d IN MX 10 mail.test.com. 增加邮件服务器纪录
www 1d IN A 192.168.0.1 增加主机纪录
ns 1d IN A 192.168.0.1 增机主机纪录
mail 1d IN A 192.168.0.1 增机主机纪录
5、保存退出
6、以上部分为正向的域名解析部分,下边是反向解析的配置办法
7、# vi /etc/named.conf #增加如下行
zone “0.168.192.in-addr.arpa” {
type master;
file “0.168.192.in-addr.arpa.dns”;
allow-update{none;};
};
8、#touch /var/named/0.168.192.in-addr.arpa.dns # 创建配置文件
9、# vi /var/named/0.168.192.in-addr.arpa.dns#修改配置文件,增加如下内容
$TTl 1d 0.168.192.in-addr.arpa IN SOA ns.test.com.(
1107274122
10800
3600
604800
38400)
0.168.192.in-addr.arpa. IN NS ns.test.com.
1.0.168.192.in-addr.arpa. IN PTR ns.test.com. 增加机指针纪录
1.0.168.192.in-addr.arpa. IN PTR mail.test.com. 增加机指针纪录
10、# service named restart #启动域名服务器
# host –l test.com #测试域名服务器正向解析
# host -l 0.168.192.in-addr.arpa #测试域名服务器的逆向解析
第七节 NFS服务
NFS是unix\linux世界中文件共享及打印的标准,最初由SUN公司在上世纪八十年代中期开发的。NFS线在仍然流行于UNIX\linux世界。
你可以通过直接编辑/etc/exports配置文件来实现NFS目录共享,也可以使用相关的工具来实现。总体而言NFS共享配置相当的容易,所有要做的工作只是导出一个文件系统,然后从远程主机进行挂接。本节的主要内容讲述如何进行基本的配置和操作。
1、#useradd zhao #建立新的用户
2、#passwd zhao #更改新用户的密码
3、#vi /etc/exports #修改nfs的配置文件添加如下行:
/home (*)(rw)
4、#exportfs –a #导出文件系统
5、#service nfs restart #重新启动nfs服务
6、#showmount –e #检查本机当前的nfs共享状态
7、#showmount –e yun #检查远程服务器上的nfs共享状态
8、#mount –t nfs yun:/home /mnt/cdrom #在另外的机器上挂接共
享目录
*需要说明的是用户必须有相应的权限才能够察看共享文件家的内容
第八节 DHCP服务
DHCP是一种常见的服务。对于一个大的网络而言通过部署dhcp服务器可以减少大量的配置工作并且相应的提高工作效率。Dhcp服务器最重要的功能是为网络内的计算机提供动态的ip地址以及其他的选项,例如网关、dns等。本节主要将如何实现一个最简单的dhcp服务器。
1、#vi /etc/dhcpd.conf #编辑配置文件,输入如下内容
ddns-update-style interim;
ignore client-updates;
subnet 192.168.1.0 netmask 255.255.255.0 { #指定对应网段
range dynamic-bootp 192.168.1.2 192.168.1.99 #指定分配ip地址的范围
default-lease-time 86400 #指定默认的ip地址租期
max-lease-time 172800 #指定最长的ip地址租期
}
2、保存退出
3、#service dhcpd restart #重新启动dhcp服务使修改生效
现在就已经可以为网络中的计算机提供dhcp服务了。dhcp服务器除了可以分配ip地址以外还可以通过修改配置文件分配众多的相关选项。通过在配置文件中添加下列选项可增加不同的功能:
option routers 192.168.0.2; #指定路由器地址
option domain-name-servers 192.168.0.2; #指定域名服务器
option domain-name “test.com”; #指定域的名称
option time-offset -900; #指定时间偏移量
另外还可以为某台计算机指定一个固定的ip地址,要实现该功能在配置文件中增加如下行:
host test {
hardware ethernet 00:E7:00:37:3B:81;
fixed-address 192.168.1.100;