1 VMware安装
在Windows安装VWware Workstation
Host-Only网卡邦定 VMware Network Adapter VMnet1,
设定IP地址 172.1.1.1, 不能和局域网的地址冲突
NAT网卡邦定 VMware Network Adapter VMnet8,
设定IP地址 192.168.238.1,不能和局域网的地址冲突
Bridge网卡邦定Windows系统上的网卡
网卡属性里设置,选中VMware Bridge Protocol
配置WMware程序的网络
设置Host-Only网络
"VMnet1", use IP: “172.1.1.0” mask "255.255.255.0“
对应VMnet1地址
设置NAT网络
Select "Edit" --> "Virtual Network Settings..."
Click the "Host Virtual Network Mapping" tab.
Find the entry labelled "VMnet8".
Click the "..." button at the far right edge of that line.
Select "Subnet..." from the menu that appears.
IP Address: Enter “192.168.238.0”. (对应VMnet8地址)
Subnet Mask: Enter "255.255.255.0".
Select “NAT..." from the menu that appears.
Gateway IP Address: Enter “192.168.238.2”.
Subnet Mask: Enter "255.255.255.0".
1.VMware新建虚拟机
新建虚拟机
添加虚拟硬盘
用文件模拟
添加虚拟网卡
Host only: 只能访问本机,不能访问外部机器,也不能被局域网访问
Bridge:可以访问外部机器,也能被局域网访问
NAT: 相当于虚拟路由器,可以访问外部机器,但不能被局域网访问
在虚拟机中安装操作系统
在虚拟机中的系统上安装VMware tools
虚拟机中的网卡配置
网卡和虚拟机的设置次序相对应
设置Host-Only网络
“VMnet1”, use IP: “172.1.1.x” (对应VMnet1地址)
mask "255.255.255.0“
设置NAT网络
IP Address: Enter “192.168.238.x”. (对应VMnet8地址)
Gateway IP Address: “192.168.238.2”
DNS IP Address: “192.168.238.2”
Subnet Mask: Enter “255.255.255.0”.
设置Bridge网络
设置所在局域网的IP,(对应VMnet0地址)
如果局域网有DHCP服务器,IP可以自动获得
2 安装前的准备工作
2.1 需要什么设备
2.2 计划安装过程
2.3 准备硬盘驱动器
2.4 计划开机启动过程
2.1 需要什么设备
如果计算机上可以运行DOS和Windows,那就能安装并运行Linux操作系统。
安装Linux操作系统的基本要求如下:
386或者以上的CPU
16MB随机存取内存(RAM)─虽然Linux操作系统在8MB的内存上也可以运行(使用StarOffice软件的时候,最小推荐内存为32MB)。
1.44MB3.5英寸软盘驱动器。
CD-ROM光盘驱动器。
最少500 MB的硬盘空间,如果希望完全安装光盘上的内容,需要2.9 GB的硬盘空间。
2.2 计划安装过程
对硬盘进行分区
安装系统(光盘启动安装、软盘启动安装、网络安装)
配置X窗口系统
连通网络
配置声卡
2.3 准备硬盘驱动器
分区过是对硬盘驱动器上某个部分殊称呼以及进行划分的方法。
有两种类型的分区:“主分区”和“扩展分区”。
硬盘驱动器可以容纳四个主分区。
文件系统就是文件和子目录在硬盘驱动器上的记录方式。
分区一般都有一个“文件系统”。
Linux操作系统常用的文件系统有两种:
ext3/ext2 (用于存储文件)
swap (用于临时性地保存内存中的内容)。
2.4 计划开机启动过程
MBR ——主引导记录
Grub ——全称是Grand Unified Bootloader。
/boot/grub/menu.lst 配置文件
如果找不到此文件则不进入菜单模式直接进入命令行模式。
LILO─Linux操作系统加载程序(LILO)。
LILO安装在分区的MBR主引导记录里。
/etc/lilo.conf 配置文件
修改/etc/lilo.conf后,必须重新运行LILO命令
2.4 计划开机启动过程 - LILO
LILO是多重引导加载程序
LILO程序必须安装。
这是因为计算机只有在知道系统内核存放在什么位置的情况下才能够正确地引导启动。
如果你让NT和Linux共享一台计算机,也可以使用NT的多重引导加载程序代替LILO程序。
LILO的安装位置:
主引导记录MBR
把LILO程序安装在主硬盘的MBR(主引导记录)处,Windows系统安装会重写MBR,所以一般先安装Windows后安装Linux。
Linux操作系统的root根分区。
必须使用进行分区操作的工具程序把它设置为可引导的
软盘
Linux安装: 预备知识
当安装过程中有错误时,可以用如下几种方法进行恢复
重新安装Linux操作系统本身
添加或者删除某些软件包
重新配置那些已经安装好的软件或者Linux操作系统本身
从内核中添加或者删除某些模块
重新编译内核
安装类型
工作站
服务器
自己定制
升级
注意事项:
它将在MBR(主引导记录)中安装LILO程序,如果在计算机中已经安装了Windows,Grub/LILO将自动配置为双启动方式
它将删除硬盘上所有现存Linux分区,不管它们是不是属于Red Hat的Linux操作系统
它将自行选择需要安装哪些软件包
Linux安装: 预备知识
启动盘
Linux:rawrite.exe boot.img
在CMOS配置从什么地方开始引导系统
软盘
CDROM
某个硬盘
USB设备
安装方式
光盘启动安装
软盘启动安装
从硬盘安装
网络安装(HTTP,FTP,NFS)
选择组件和软件
把所有今后会用到的硬件的驱动程序都包括进去
视情况安装网络驱动程序和有关软件
把所有今后会用到的计算机语言的编译器和函数库都包括进去
把打算运行的所有服务的服务器程序都包括进去
选择应用程序和系统Shell
Linux分区和目录
分区必须对应目录,以目录的形式加载
使用mount命令加载
Linux常用的分区
Swap
/boot
/ (root)
/var
/usr
/tmp
/home
/opt
开始安装
首先拿到Redhat启动安装盘,要求可以光盘启动
让计算机从CDROM启动,
启动后出现简洁的欢迎信息
其他附加说明
Virtual Console虚拟控制台跟踪和调试安装过程. 五个不同的虚拟控制台: (键组合 控制台名称 控制台信息)
Alt + F1 Main Main(主控制台)
是安装程序通过对话框要求输入信息和进行执行安装操作的地方,还提供了安装进度状态条。
Alt + F2 General General(通用控制台)
在安装过程继续进行的同时,提供一个有限的交互式bash shell。
Alt + F3 Expert Expert(专家控制台)
给出安装进程的文字性状态说明。用于处理安装过程中挂起
Alt + F4 Rescue Rescue(恢复控制台)
显示着安装过程中屏幕后面发生的事情。安装挂起时,这个状态窗口同样也很有助于查找原因。
Alt + F5 Kickstart Kickstart(杂项控制台)
包括了安装过程的杂项数据。关于各部分存到硬盘的哪个位置之类的信息;另外在安装程序建立文件系统的时候显示有关的进度状态。
其他附加说明
诊断使用LILO程序启动引导时出现的挂起错误
当“LILO”显示在屏幕上的时候,每一个字母都代表引导启动过程的一个组成部分。下面两张表列出了LILO引导过程中可能发生的每一种错误以及部分错误代码和它们的原因。
LILO程序可以从软盘移到MBR,也可以从MBR移到软盘。在考虑这样做的时候,如果能够把安装Linux时建立的root分区设置为可引导(使用硬盘分区工具程序)的,那么还可以把LILO程序移到root分区中去。
LILO程序的代用程序
Loadlin程序:把LOADLIN.EXE文件拷贝到一个MS-DOS分区,在安装Linux操作系统之后,把/boot/vmlinuz文件拷贝到同一个分区中的根目录去
loadlin c:\vmlinuz root = /dev/hda1 ro
引导盘 mkbootdisk
其他附加说明
安装过程中会给出机器开机引导启动时允许运行的服务类型的清单。
F1键,屏幕上将给出光标所在服务的一个简单介绍。
- apmd服务
是笔记本电脑上使用的一个电源管理守护进程。 - atd服务
跟踪记录由at命令建立的工作。at命令允许把一次性的工作安排在某个时刻去完成。 - crond服务
跟踪记录定期运行的工作,通过编辑 cron文件或者用户使用crontab命令生成的。 - gpm服务
能够对一个非GUI任务提供有限的鼠标操作支持功能。 - sendmail服务
管理着你从一台计算机发向另外一台计算机的电子邮件。 - sound服务
保证声卡混音方面的各种设置值在计算机引导启动过程之间不会丢失。 - syslog服务
各种守护进程和其他进程用来在系统日志文件中添加记录的工具程序。
其他附加说明
恢复MBR
fdisk /mbr 或者 Norton Utilities
重新安装LILO程序
根据需要编辑/etc/lilo.conf文件,运行LILO程序,把新的设置信息写入MBR中去。
/sbin/lilo
删除LILO程序
/sbin/lilo -u
重新启动机器: reboot 或者shutdown -r
练习
安装VMware Workstation
设置系统网卡 vnet0, vnet1, vnet8
在VMware中安装Linux系统
计划安装的硬盘分区
选择安装的软件模块
安装Linux (RHEL4 / SLES9)
设置虚拟机中的网络地址
Linux操作系统
shell和常用命令
内容提要
1 shell
2 进程和shell 命令行
2 常用命令
1、使用SHELL
1.1 什么是Shell
1.2 系统中有几种Shell
1.3 Shell脚本
1.1 什么是Shell
shell提供了一个到Linux操作系统的界面以方便运行程序。事实上,shell也只不过是另外一个Linux操作系统程序而已。
shell是一个命令解释器,它可以用来启动、挂起、停止甚至编写程序。shell是Linux操作系统的一个整体组成部分,也是Linux操作系统和UNIX设计的一部分。
1.1 什么是Shell
如果把Linux操作系统的内核想象成一个球体的中心,那么shell就是包围内核的外层。从shell或其他程序向Linux操作系统传递命令的时候,内核就会做出相应的反应。
用户Shell配置的位置
/etc/passwd
1.2 shell
这种shell的内建命令都有哪些?
怎样进行任务控制?
这种shell是否支持命令行编辑?
这种shell是否支持命令行历史记录?
什么是它的重要的开机启动文件或者配置文件?
各个shell的重要环境变量有哪些?
可以使用什么样的命令行提示符?
它支持什么样的编程框架?
1.2 系统中有几种Shell
ash 袖珍的sh兼容的shell
由Kenneth Almquist编写的ash shell是Linux操作系统上尺寸最小的shell之一。这个shell有24个不同的内建命令和10个不同的命令行参数。
bash Bourne Again Shell(与ksh和sh兼容)
bash就是由Brian Fox和Chet Ramey编写的Bourne Again Shell,它是Linux操作系统上最流行的shell之一。
csh 对tcsh的一个符号链接
ksh pdksh,公共域Korn(与ksh兼容)shell
pdksh shell在Linux操作系统中叫做ksh。这个shell和商业化UNIX中的版本几乎是完全兼容的。
sh 对bash的一个符号链接
tcsh 与csh兼容的shell
zsh Z-shell,一个与csh、ksh、和sh兼容的shell
1.2.2 bash
bash就是由Brian Fox和Chet Ramey编写的Bourne Again Shell,它是Linux操作系统上最流行的shell之一。它有48个内建的命令和十多个命令行参数。
可以使用方向键查阅以前输入的命令(历史记录功能)
可以对某个命令行进行编辑
敲入命令的一部分然后再按下Tab键获得其他部分
自动执行脚本
初始化设置文件/etc/rc /etc/bashrc /etc/profile
用来设置全局(对所有用户都起作用的)参数,比如环境变量或者在第一次登录进入的时候给你发送一条消息(比如一条欢迎标语)。
用户子目录中的.bashrc登录文件
控制bash shell启动运行方式或者对不同的击键(如退格键)的响应;
用户子目录中.bash_profile文件,
通知s h e l l在用户登录后系统应该使用哪一个资源文件。
1.3 建立Shell命令脚本程序
shell script (脚本文件)
编辑文件
将其所有命令写入到该文件中,
添加执行权限
将该文件设置为可以执行
运行
2 Shell命令行和进程
2.1 对shell进行定制设置
2.2 进程管理
2.3 使用重定向和管道
2.1 对shell进行定制设置
shell包含了“环境变量”
重要的就是$PATH变量
$PS1变量
alias命令
显示环境变量
printenv
env
set
环境变量由资源文件预先定义
bash shell全局性系统环境变量的资源文件
/etc/rc
/etc/bashrc
/etc/profile
用户定制的系统环境变量
~/.bashrc
~/.bash_profile
2.2 进程的定义
Linux是一个多用户多任务的操作系统。
多用户是指多个用户可以在同一时间使用计算机系统;
多任务是指Linux可以同时执行几个任务,它可以在还未执行完一个任务时又执行另一项任务。
Linux用分时管理方法使所有的任务共同分享系统资源。
进程: Linux系统上所有运行的程序都可以称之为一个进程。
进程的一个比较正式的定义是∶在自身的虚拟地址空间运行的一个单独的程序。
进程与程序是有区别的,
程序只是一个静态的指令集合,不占系统的运行资源;
进程不是程序,虽然它由程序产生。进程是一个随时都可能发生变化的、动态的、使用系统运行资源的程序。而且一个程序可以启动多个进程。
2.2 在后台运行程序
后台运行程序的意思是这个命令继续在内存中执行,而在这同时shell命令行的控制权已经返回到了控制台。
对巨型文件进行排序或者对子目录和其他类型的文件系统进行搜索等等操作都是可以放到后台去执行的好例子。
运行一个进程命令格式:
进程名 &
nohup 进程名 &
2.2 报告进程状况 PS
ps命令是进程查看命令。
ps命令语法格式如下:
ps [option]
ps ax
ps -ef
常用选项说明如下:
-e:显示所有进程。
-f:全格式。
-u:打印用户格式,显示用户名和起始时间。
ps 重要的输出字段
USER 进程所有者的用户名
PID 进程号
STAT 进程状态,常见的值有:
R: 可执行的。
S: 睡眠状态。
Z: 僵尸。
I: 空闲。
2.2 结束进程 kill
结束进程的办法有:
<Ctrl+c>组合键: 当需要中断一个前台进程的时候,通常是使用<Ctrl+c>组合键;
kill命令: 该命令可以终止后台进程。
kill命令的语法格式很简单,大致有以下两种方式:
kill [-s 信号 | -p ] [ -a ] 进程号
kill -l [信号]
命令中的参数说明如下:
-s:指定需要送出的信号。既可以是信号名也可以对应数字。
-p:指定kill命令只是显示进程的pid,并不真正送出结束信号。
-l:显示信号名称列表,这也可以在/usr/include/linux/signal.h文件中找到。
2.2 休眠进程
sleep命令可使当前正在执行的进程在规定的时间内处于睡眠。其使用的语法格式为:
$ sleep [time]
time为进程将睡眠的时间,以秒为单位
2.3 使用重定向和管道
重定向操作符:
mysql Database < sql.txt
help > helplist.txt
help >> helplist.txt
管道:
ps ax | grep ftpd | wc - l
例子:
find /home -name *.doc | xargs fgrep administration | less
find *.doc | xargs cat | tr ' ' '\ n' | sort | uniq | tee dict | less
1.4 常用命令
3.1 使用man命令获得帮助
3.2 浏览及搜索文件系统
3.3 阅读子目录及文件
其他命令
df、date、who、cp、mv、rm、mkdir、wc、vi、gcc、ln、nohup、nice、passwd、echo、mail、talk、du、grep、chown、chgrp、chmod、uname
3.1 使用man命令获得帮助
man可以得到几乎所有命令的有关信息,包括man命令本身。
#man man
Linux操作系统发行版本也为几乎每个程序、工具、命令或系统编程调用编制了使用手册页。存放在/usr/man的子目录下。
man命令的使用手册页文件被命名为:
/usr/man/man1/man.1.gz
3.2 浏览及搜索文件系统
3.2.1 使用cd命令进入不同的目录
3.2.2 使用pwd命令查看自己所在的位置
3.2.3 使用find命令在子目录中搜索匹配的文件
3.2.4 使用whereis命令查找文件
3.2.5 使用locate命令定位文件
3.2.6 使用whatis和apropos命令获取命令简介
3.2.1 使用cd命令进入不同目录
输入cd命令,后面跟着一个路径名,就可以直接进入到另外一个子目录中去
#cd /usr/bin
#cd ..
#cd ../..
你总能够用下面的命令回到自己的用户子目录(也就是保存自己文件的子目录):
#cd 或者 # cd ~
3.2.2 pwd命令查看所在位置
pwd(显示工作子目录)命令告诉你自己所在的位置,并显示当前工作子目录。例如,执行命令:
#cd /usr/bin
接着输入:
#pwd
会看到:
/usr/bin
注意:pwd有内置命令和外部命令
3.2.3 用find在子目录搜索文件
find命令在硬盘驱动器上查找文件。
-name 按名字查找。比如说,如果想查找子目录/usr中的spell命令,可以采用下面的方法:
#find /usr -name spell –print
-atime 按照日期查找文件,或者可以指定一个日期范围。例如查找最近一百天没有使用过的程序:
#find /usr/bin -type f -atime +100 –print
-mtime 按修改时间查找,如查找建立不到一天的新文件或者二十四小时内修改过的文件:
#find /usr/bin -type f -mtime -1 –print
-xdev 按Windows分区查找,xdev参数把查询操作限制在当前的文件系统之中,检索子目录下所有以.sys结尾的文件:
#find /mnt/dos -name *.sys -print –xdev
3.2.4 使用whereis命令查文件
whereis命令 可以迅速地找到文件,而且提供二进制可执行文件、源代码文件和使用手册页存放的位置。
例如:
#whereis (-b) find
find:/usr/bin/find /usr/man/man1/find.1.gz
3.2.5 使用locate命令定位文件
文件名数据库(updatedb)
locate命令 在文件名数据库中检索文件名
检索要比搜索整个硬盘驱动器要快
#locate *.ps
3.2.6 whatis和apropos 命令简介
whatis命令: 从程序使用手册中抽出介绍
例如:
#whatis who
who(1) - show who is logged on
makewhatis 创建数据库
apropos命令: 查找可以执行某个操作的程序
man -K: 实现apropos命令同样的功能
其搜索过程会很慢,
搜索结果给出的是每个含有匹配字符串的使用手册页。
3.3 阅读子目录及文件
3.3.1 使用ls/ll命令列出子目录的内容清单
3.3.2 使用dir和vdir命令列出子目录的内容清单
3.3.3 使用cat命令列出及合并文件
3.3.4 使用more命令阅读文件
3.3.5 使用less命令浏览文件
3.3.6 使用head或tail命令阅读文件的开头和结尾
3.3.1 ls:列出子目录的内容清单
ls : 列出子目录内容清单
常用参数:
-l 长文件名列表
-a 显示所有文件(包括隐含文件)
-m 把文件用逗号分隔显示在一行上
-x 按水平对齐的方式而不是缺省的垂直对齐方式列出文件
-F 特殊显示目录和可执行文件
-R 显示子目录
3.3.2 ll, dir和vdir:子目录的内容清单
ll命令: 相当于ls -l参数,它缺省地列出文件的全部信息。
dir或vdir命令。使用上与ls命令类似,但是使用了一些缺省的参数。
dir命令 像普通的ls命令那样把文件按列对齐输出。
vdir命令 像ls -l参数,它缺省地列出文件的全部信息。
3.3.3 cat:列出及合并文件
cat命令: 把文件内容在屏幕上去显示。
-n 在阅读文件时显示行号
#cat -n test.txt
cat 和重定向符“>” : cat命令通过输出“重定向”把文件内容送到其他的文件中去。如:
#cat test* > test3.txt
#cat test.txt test2.txt > test3.txt
cat和重定向符“>>” : 文件合并
#cat test.txt >> test2.txt
cat > : 创建新文件,输完文本内容后按下Ctrl+D组合键关闭这个文件。
#cat > myfile.txt
3.3.4 使用more命令阅读文件
more命令: 页命令使你在浏览文件的时候可以一次阅读一屏或者一行。
#more longfile.txt
h” 键获得帮助。
空格键阅读后一页,也可以
b键阅读前一页。
惊叹号(!),从more命令中去执行其他的命令
3.3.5 使用less命令浏览文件
less命令 页命令
但功能比more命令更强大。Mark Nudelman编写,
less页命令是许多程序(man)的缺省页命令。
/usr/bin/zless命令 阅读压缩文件(.gz)
3.3.6 head或tail:阅读开头结尾
head命令: 用来显示文件开头x行:
head -n x filename
tail命令: 一直跟踪显示文件变化
tail -f filename
f output appended data as the file grows
练习
用cat命令显示 .bash_profile 配置文件
用env, set显示环境变量
启动一个后台程序,然后杀掉该进程。
#ping localhost &
察看进程的ID ps
杀掉该进程 kill
练习重定向和管道
用man命令获得帮助信息
练习文件目录操作命令 cd pwd find whereis locate ls ll dir
用 cat more less tail 命令操作文件
2 Linux——文件与目录操作
2.1操作文件与子目录
使用Linux操作系统在硬盘驱动器上对文件和子目录进行拷贝、删除或者移动,以便更好地组织信息。
1.1 touch命令
1.2 rm命令
1.3 mkdir命令
1.4 rmdir命令
1.5 mv命令
1.6 cp命令
1.7 ln命令
1.8 Midnight Command (MC)
1.2 rm命令
使用rm命令删除文件
#rm -fr /* 危险命令,强制递归删除所有
rm命令可以从命令行上一次删除一个或者几个文件。
#rm file1 file2 file3
#rm -i new* 交互
#rm -f new*
1.1 touch
使用touch命令建立文件
建立文件
更新文件的修改日期
建立文件的命令:
#> newfile2
#ls -l new*
#touch newfile2
#ls -l newfile2
#touch -t 1225130000 newfile2
touch命令可以在进行备份操作的过程中更新这些文件的时间记录,这样备份程序在进行下一次备份工作的时候就有了一个可供参考的时间
1.3 mkdir命令
mkdir命令一次可以建立一个或者几个子目录。
mkdir -p命令还可以只使用一个命令行一次就建立起包括全部的父目录和子目录在内的一个完整的子目录继承结构。
#mkdir temp
#mkdir temp2 temp3 temp4
#mkdir temp/child
#mkdir -p temp5/parent/child
高级用法:《unix高手的习惯》
#tree temp5
1.4 rmdir命令
rmdir命令是用来删除子目录的
#rmdir tempdirectory
但是要注意:这个子目录必须是空的。
#rmdir -p temp5
#rmdir -p temp5/parent/child
#mkdir -p temp5/parent/child2
#rmdir -p temp5/parent/*
1.5 mv命令
使用mv命令给文件改名或者用来在文件系统内移动文件或者子目录。
#touch file1
#mv file1 file2
#mkdir -p temp/temp2/temp3
#mv temp newtemp
mv命令有很多参数,但是我们只讨论其中最常用的两个,-b(备份)和-i(交互操作)
1.5 mv命令
#touch uno deux tree
#mv uno deux
#mv –b uno deux
#mv –i uno deux
1.6 cp命令
cp命令,即拷贝命令,是用来对文件或者子目录进行拷贝操作的。这个命令有将近40个命令行参数。
#cp file1 file2
#cat > file1
this is file1
#cat > file2
this is file2
#cat > file3
this is the third file
#ls -l file*ls
#cp -i file1 file2
#cp tempdir1/* tempdir2
#cp -r tempdir1 tempdir2
最后, cp命令还有一个-p参数,它的作用类似于mkdir命令中的-p参数。
1.7 ln命令:建立硬链接和符号链接
ln命令:可以建立两种形式的链接并把文件与其他的文件链接在一起。
硬链接: 直接链接两个同时保存在相同的文件系统上的文件。
删除了文件file1,文件file2依然存在。修改了文件file1,修改都会反映到文件file2中;修改了文件file2,文件file1也会随之更新。
虽然有两个文件,但是在硬盘驱动器上只有原始文件占用的空间。
符号链接 ln -s : 用来在扩展到不同的文件系统上的子目录或者文件之间建立链接。
符号链接和硬链接的区别是符号链接只不过是指向原始文件的一个alias(假名)而已。
如果删除了符号链接,原始文件不会发生任何变化。而一旦删除了原始文件,符号链接也会依然存在。
#cat > file1
This is file1.
#ln file1 file2
#ls -l file*
#cat file2
1.8 Midnight Commander
mc程序的全称是Midnight Commander它是一个对文件进行管理的图形化界面。相当于一个可视化的shell。如果想运行mc命令,请在命令行上键入下面的内容:
#mc
它的一些主要特点:
提供了同时对两个子目录的可视化接口
允许使用鼠标操作对子目录中的文件进行浏览
2.2搜索文件
介绍复杂的通配符、即规则表达式的使用方法以及一些使用grep类的程序进行文件搜索的小例子。
规则表达式
grep: 在文件内进行搜索
2.1 什么是规则表达式
规则表达式又称为正则表达式
规则表达式:是使用特殊的语法对字符串(除非是在对文件名进行搜索,字符串一般都在文件的文本之中)进行匹配的字符串格式。
详细资料可以通过man ed获取
2.1 常用规则表达式
表达式 匹配
- 任意字符
?或者. 一个字符
{x} 前导字符x个
{x,y} 前导字符至少x个,但是不超过y个
{x,} 前导字符至少x个
(xxx)||(XXX) 字符串xxx或者XXX
[xxx]或者[x-x] 在方括号中的字符范围内中的某
个字符
[XYZ]+ X、Y\Z至少一次
\x ? 或\等特殊符号字符
^pattern 一行开头的字符排列形式
$pattern 一行结尾的字符排列形式
2.1 常用规则表达式
#ls *.txt
#ls *1* *2* *3* *4* *5* *6* *7* *8* *9*(注意:有重复)
#ls *[0123456789]*
#ls *[0-9]*(#ls *[0-9]、#ls [0-9]*)
#ls *[a-z]*[0-9]*
#ls *\?*
2.2 grep: 在文件内进行搜索
grep命令家族包括:grep、egrep、和fgrep等命令。
需要使用这几个命令可以在文件中进行查找并抽出文本。这几中个程序命令的每一个都会查找文件的每一行。可以搜索一个文件或者一组文件。
#(e)grep ^[0-9] guide.txt
#fgrep friends guide.txt
2.2 grep: 在文件内进行搜索
使用egrep命令在文件中查找所有包含字符串(b)的行:
#egrep "\([b]\)" guide.txt
(see section 1 for a list of compatible boards ), or (b) there is an
connect to the network , or (b) you have a " dynamic " IP address,
#grep "\([b]\)" guide.txt
This is version 2.2.2 of the book , " Linux Installation and Getting to PostScript printers .
This document was generated by a set of This is not the " o fficial " version of the book ! Please see
#grep "(b)" guide.txt
2.2 grep: 在文件内进行搜索
每个grep命令程序都能够接受几乎相同的命令行参数。其中常用的一个是-n,即显示行号参数。
#egrep -n "friend" guide.txt
1242 : large extent by the window manager . This friendly program is
1942 : copy Linux from a friend who may already have the software , or
5161 : ( Unfortunately , the system was being unfriendly .)
2.2 grep: 在文件内进行搜索
-f 参数
#cat > mykeywords
beautiful
mind
dvd
#grep –nf mykeywords guide.txt
可以使用grep命令的-F参数使它能够模仿fgrep命令的执行情况;
或者使用-E参数模仿egrep命令的执行情况。
还可以在系统上找到一个独特的grep命令家族成员,zgrep命令,可以使用它来搜索压缩文件,
2.3 压缩与解压缩文件
介绍对文件进行归档和压缩操作的基本知识
3.1 用tar磁带文件归档命令建立档案文件
3.2 建立cpio档案文件
3.3 使用gzip命令压缩文件
3.4 使用compress命令压缩文件
3.1 tar: 建立档案文件
tar (tape archive) 磁带文件归档命令程序出现在还没有软盘驱动器、硬盘和光盘驱动器的计算机早期阶段。
使用tar命令可以生成一个包含有多个子目录和多个文件的档案文件。
在系统上安装的tar命令版本还支持一个-z参数,这样就可以使用gzip程序来压缩文档。
3.1 tar: 建立档案文件
#mkdir mydir
#cd mydir
#touch file1 file2 file3
#mkdir mydir2
#touch file21 file22 file23
#cd ../..
#tree mydir
3.1 tar: 建立档案文件
tar命令参数:
c(生成)
f(文件)
v(verbose)
w(提问)
t(测试,查看)
x(展开)
#tar c(v)f mydir.tar mydir
需要注意的是,如果参数的顺序放错了,tar命令会显示出错信息并退出
#tar x(v)f(w) mydir.tar mydir
#tar zc(v)f mydir.tar.gz mydir
如果只想从档案文件中释放某一个文件,可以在命令行中指定这个文件。
#tar xf mydir.tar mydir/mydir2/file23
5.3.2 建立cpio档案文件
cpio命令可以从tar或者cpio档案文件中拷入或者拷出文件。cpio命令和tar命令兼容。这个命令具备一些tar命令没有的功能
如下所示:
支持cpio和tar两种档案文件格式
支持许多老式磁带数据格式
能够通过一个管道读取文件的文件名
cpio -idvm < *.cpio
3.3 使用gzip命令压缩文件
gzip命令是用来压缩文件的。这个程序不仅可以用来压缩大的较少使用的文件以节省磁盘空间,
还可以和tar命令一起构成可能是Linux操作系统中最流行的压缩文件格式。
在因特网上寻找新的Linux软件时,经常会遇到.tgz或.tar.gz格式的文件。
gzip命令对文本文件有60%~70%的压缩率。
3.3 使用gzip命令压缩文件
#gzip mydir.tar
缺省的状态下,gzip命令会压缩文件、再加上一个.gz扩展名、然后删除掉原来的文件
gzip命令的对应程序命令gunzip或者gzip
必须保证这个用于解压缩的文件有.gz(或者.Z、
-gz、.z、-z、或者_z)扩展名,否则gzip命令和gunzip命令都会显示出错信息。
如果想使用自己的扩展名,可以使用-S后缀参数,如下所示:
#gzip -S .gzipped mydir.tar
3.3 使用gzip命令压缩文件
gzip命令还可以处理用zip命令、compress命令和pack命令压缩的文件包。如果想在压缩或者解压缩的过程中看到更多的信息,
可以使用-l列清单参数看到文件在被压缩或解压缩的时候的文件长度
#gzip -l mydir.tar.gz
gzip命令还有一个很有用的参数-t,可以用来测试压缩文件的完整性,如果文件正常,gzip命令不会给出任何显示。
如果想看到OK这两个字母,可以在测试某个文件时使用-tv。
3.4 使用compress命令压缩文件
compress命令就象它的文件名那样,就是用来压缩文件的。这是UNIX世界中出现得比较早的一个压缩程序。
使用compress命令生成的文件传统上都有一个.Z扩展名。如果想压缩某个文件,请输入下面的内容:
#compress file
如果想解压缩某个文件,请输入下面的内容:
#uncompress file.Z
像使用gzip命令的时候一样,必须给出一个带有.Z,扩展名的文件名否则compress命令显示出错信息。
其他的压缩命令
bzip2、zip 、unzip、zipcloak、zipnote、zipsplit、zless、zcat、znew、zmore、zcmp、pack、compact、shar、unshar或者zforce程序命令。
其他相关命令:uudecode, uuencode, strings
其他命令
du, df 文件系统使用空间
sync, ps, top, uname, 进程管理
who, su 用户身份
练习
文件和目录
查看目录内容 ls ll dir
建立目录 mkdir
新建文件 touch
复制文件 cp
移动文件 mv
删除文件和目录 rm rmdir
浏览文件 grep
压缩文件
tar磁带文件归档命令建立档案文件
cpio命档案文件
gzip令压缩文件
Compress
建立连接
ln -s /sbin/fuser /bin/fuser
Linux操作系统
文件编辑器vi
Linux——文本编辑器vi
vi的基本操作
vi高级编辑命令
vi的设置
§3.1 进入vi
vi是一个较大的UNIX命令,在启动的时候也有它自己的选项和参数
基本语法:
vi [-options] [+[n]] [file]
常用选项有:-r, -R
-r用于恢复系统突然崩溃时正在编辑的文件
-R用于以只读方式打开文件
+n用来指明进入vi后直接位于文件的第n行,如果不指定n,则位于最后一行
§3.2 vi的工作方式
vi一共有三种工作方式:命令方式、插入方式和行方式:
一、命令方式
无论用户处于什么状态,按Esc键或组合键Ctrl+[ 就可以进入命令方式。当用户初始进入vi时,也处于这个状态。
用户在命令方式下可以输入各种合法的vi内部命令,这些命令不会回显,而且不需要回车就会被执行
二、文本插入方式
在命令方式下使用某些命令会导致vi马上进入文本插入方式,这些命令包括:i,I,a,A,o,O等
i插入当前字符之后
I当前句之后
a当前字符之前,A当前句之前
在这种方式下用户的任何输入都被当作是文件的内容看待,并将其显示在屏幕上。
三、最后行方式
行方式又称为最后行方式,通过在命令方式下键入冒号:可进入这个方式,在这种方式下vi会在屏幕的最后一行显示一个冒号并等待用户输入命令
行方式下用户输入的命令将回显在最后一行上,并且直到用户输入回车vi才会去执行它
命令执行完毕后,vi自动进入命令状态
或者在输入命令时敲Esc键或组合键Ctrl+[ 、或用退格键删除所有的输入之后再按一下退格键回到命令方式
§3.3 基本编辑命令
移动光标(cursor movement)
Bksp 左移一个字符
Space 右移一个字符
Enter,+ 下移一行
h 左移一个字符
l 右移一个字符
j 下移一行
k 上移一行
§3.3 基本编辑命令
[n]G 跳到第n行
w,W 跳到下一个词的词头
b,B 跳到上一个词的词头
e,E 跳到下一个词的词尾
^ 跳到行首(第一个非空字符)
[0] 跳到行首
$ 跳到行尾
§3.3 基本编辑命令
Ctrl-u 向下翻滚1/2屏
Ctrl-d 向上翻滚1/2屏
Ctrl-f 向下翻滚1屏
Ctrl-b 向上翻滚1屏
Ctrl-n 向下移动一行
Ctrl-p 向上移动一行
上述命令(除[n]G外)的前面均可增加一个数字来控制移动的次数
§3.3 基本编辑命令
修改文本命令(modification)
[n]r 用字符char代替光标处的字符,n指定字符char出现的次数。n缺省为1。
[n]R
Cw,cw,cc 替换一个词或替换到行尾
§3.3 基本编辑命令
编辑中的每一行正文都有自己的行号,用下列命令可以移动光标到指定行:
:[n] 将光标移到第n行
命令模式下,可以规定命令操作的行号范围。数值用来指定绝对行号;字符“.”表示光标所在行的行号;字符 符“$”表示正文最后一行的行号;简单的表达式,例如“.+5”表示当前行往下的第5行。例如: :345将光标移到第345行
§3.3 基本编辑命令
在编辑模式下正确定位光标之后,可用以下命令切换到插入模式(Insert):
i 在光标左侧输入正文
I 在光标所在行的开头输入正文
a 在光标右侧输入正文
A 在光标所在行的末尾输入正文
o 在光标所在行的下一行增添新行
O 在光标所在行的上一行增添新行
§3.3 基本编辑命令
删除文本命令(delete)
x 删除当前光标所在位置的字符
X 删除光标前的字符
dd 删除当前行
D 删除从当前光标位置直到行尾的所有字符
d<cursor_movement>
删除从当前光标位置直到<cursor_movement>
参数指定的位置
§3.3 基本编辑命令
字符串搜索(search)
/[pattern]/[offset]
/[pattern]
?[pattern]?[offset]
?[pattern]
上述四个命令分别表示向下/向上搜索指定的正则表达式[pattern],并将光标停留在相对搜索结果距离为[offset]行处
§3.3 基本编辑命令
n重复命令, 搜索得到使用结果后,可以重复命令n或N沿着相同或相反的方向重复上一次的搜索
f命令在当前行搜索指定的字符并将光标停在匹配字符上
t命令在当前行搜索指定的字符并将光标停在匹配字符的左边
§3.3 基本编辑命令
字符串替换(Substitute)
此命令要求先进入行方式
命令的语法为:
[addr1,addr2|g]s/find_exp/repl_exp/[g|n][c]
上述命令表示在第addr1行到addr2行的范围内将字符串find_exp用repl_exp代替。
n表示替换每行的第n个匹配,c表示需要用户确认
g放在命令末尾,表示行全程,不加g,表示只对搜索字符串的首次出现进行替换;g放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。
§3.3 基本编辑命令
重复前一命令:.
取消上一命令:u
重画屏幕:Ctrl-l
Ctrl_G命令显示当前编辑文本的状态,包括文本共有多少行、文件名以及目前光标停在多少行。
文件的保存:行方式下使用w命令
§3.3 基本编辑命令
退出vi:行方式下使用q命令将退出vi,如果文件作过改动但还没有保存,系统将作出提示并取消此次退出动作。行命令x相当于:wq命令。在命令方式下使用命令ZZ等效于:x命令。
如果由于读写权限或是更新方面的问题,导致vi拒绝执行保存文件或退出vi的命令,那么可以在命令后加一个!号表示强制执行。
§3.4 高级命令
文件操作命令
[addr1,addr2]w[!] [filename]:将编辑缓冲区的addr1行到addr2行之间的内容写回到存储介质上的名为filename的文件中去,w后的!表示强制写入。
r filename : 将文件filename读入编辑缓冲区
e filename : 编辑已存在于缓冲区中的、名为filename的文件
f filename : 将当前文件重命名为 filename
f : 打印当前文件名称和状态,如文件的行数、光标所在的行号等
上述命令属于行方式
§3.4 高级命令
文本的移动和复制
[addr1,addr2]m[addr3]
[addr1,addr2]t[addr3]
上述行方式下的命令分别表示将第addr1行至第addr2行之间的内容移动/拷贝到第addr3行的后面
行的合并
命令方式下的命令J将当前行的下面一行合并到当前行的末尾
§3.4 高级命令
缓冲区操作
vi提供36个编辑缓冲区,它们分别为a-z共26个命名缓冲区,1-9共9个删除缓冲区,另外还有一个未命名的缓冲区,一般称之为buffer 0。
将文本内容送入缓冲区的命令为:
[“char][n]y[|y|w|l]
Char表示缓冲区的名字,小写表示覆盖写入,大写表示追加写入
n表示重复次数
表示想要写入缓冲区的文本的范围,从光标的当前位置算起。
y表示以行为单位
w表示以词为单位
l表示以字符为单位
从缓冲区中提取其内容并将其插入在当前文本的命令为:
[“char]p|P
P表示放在当前位置之前,p表示放在当前位置之后
§3.4 高级命令
在vi内使用shell
用户在运行vi的过程中不用退出vi就可以运行任何UNIX命令:
:!<unix_cmds>
在unix_cmds参数中,可以使用%作为当前文件名的缩写,用#作为上次编辑文件的缩写,用!作为上次命令的缩写
§3.4 高级命令
使用自定义的缩写
:abbr|ab str1 str2命令用用户自定义的字符串str1来代替字符串str2
:unab|una str1取消缩写str1
上述四个命令都是行方式下的命令
§3.4 高级命令
宏
:map key cmds_list
此时key必须是一个单独的字母。或是一个Ctrl加上一个字母
此时定义的是宏命令
:map! key string
此时key必须是一个单独的字母。或是一个Ctrl加上一个字母
此时定义的是宏字符串,用于文本输入方式
:unmap key将取消key的宏定义
§3.4 高级命令
要注意的是在输入Ctrl+key的转义序列时必须先按下下列组合键:Ctrl-v。
如果cmds_list是行方式下的命令,那么在其末尾必须加上一个回车,输入方法为先输入Ctrl-v,然后输入Ctrl-m。 Ctrl-m代表回车。
§3.5 vi的配置
vi的配置共有三种方法,
一种是在运行vi时使用行命令set来设置;
一种是使用EXINIT环境变量;
最后一种是使用用户主目录下的.exrc文件。
vi的显示是输出到终端上的,所以终端的类型会对vi的显示造成影响。
终端类型设置是使用TERM环境变量
(ansi, vt100):
$TERM=ansi;export $TERM
一、行方式下的设置
为控制不同的编辑功能,vi 提供了很多内部选项。在行方式下使用命令set可以显示和修改vi的各种内部环境变量。
基本语法:
:set argument[=value]
一、行方式下的设置
命令set的参数及其功能如下:
all 列出所有选项设置的情况
term 设置终端类型
ignorecase 在搜索中忽略大小写
list 显示制表符(I)和行尾标志(M)
number 显示行号
report 显示由面向行的命令修改过的行数
ruler 在屏幕底部显示光标所在行、列的位置
terse 显示简短的告警信息
warn 显示简短的未保存告警
nomagic 取消元字符在搜索字符串中的特殊性
nowrapscan 搜索时不回绕
mesg 允许vi显示其他用户用write写到自己终
端上的信息
shiftwidth 指定自动缩进的制表位
autoindent 自动缩进
directory 指定编辑缓冲区的路径
showmode 显示文本插入方式
window 设置显示的文本行数
mk 将选项保存在当前目录的 .exrc 文件中
tabstop 设置按 Tab 键跳过的空格数。例如 :set
tabstop=n,n 默认值为 8
二、永久设置方式
上面所说的:set命令在退出vi后就失效了,下次进入vi还需要重新设置
我们可以将上述:set命令写在一个名为~/.exrc的文件中,这样每次进入vi就会自动执行。
或者将需要用到的:set命令保存在EXINIT环境变量中。
§3.6 vim和gvim的高级特色
vim 代表 Vi IMproved,如同其名称所暗示的那样,vim 作为标准 UNIX 系统 vi 编辑器的提高版而存在。 vim 除提供和 vi 编辑器一样强大的功能外,还提供有多级恢复、命令行历史以及命令及文件名补全等功能。
gvim 是 vi 的 X Window 版本,该版本支持鼠标选中,一些高级光标移动功能,并且带有菜单和工具按钮。
§3.6 小结
vi必须经常使用才能够掌握
另外还有一些高级的操作方法,有兴趣的同学可以参考vi的联机手册
练习
编辑一个文件
光标移动
插入、修改、删除
保存,推出
编辑文件 /etc/bashrc
[\u@\h \W] 替换成 [\u@\h:\w]
保存
3 Linux操作系统网络管理
3.1 网络管理
1.1 网卡配置
1.2 IP转发
1.3 网络设置
1.1 网卡配置
配置文件(Redhat)
/etc/sysconfig/network-scripts/* : 网卡
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/resolv.conf: DNS配置
命令行
ifconfig [eth0]
ifconfig eth0 202.38.85.10 netmask 255.255.255.0 broadcast 202.38.85.255
ifup [eth0] 启动网卡
ifdown [eth0] 禁用网卡
图形界面
netconfig
1.2 IP转发
/proc/sys/net/ipv4/ip_forward为1
/etc/sysconfig/network
FORWARD_IPV4=YES
1.3 网络设置
主机名设置
配置文件 : /etc/sysconfig/network
命令行: #hostname [host]
/etc/hosts 配置
IP long_name short_name alias
127.0.0.1 localhost.localdomain localhost localhost
2 VNC使用和管理
远程图形终端Remote X terminal
跨平台
Linux
Unix
Windows
软件部分
vncserver
vncviewer
2 VNC服务器端管理
Install vnc server for Linux
rpm –Uvh vnc-3.3.7-1.i386.rpm
Start VNC server and stop vnc server.
The user must be the current user to run X application. Otherwise, will occure a authentication error.
vncserver :2 (localhost:2)
vncserver –kill :2
Set password
vncpasswd
Set DISPLAY
DISPLAY=[host]:[display.0], export DISPLAY
3.2 VNC客户端使用
Run X application
vncviewer [hostname]:[display]
如 vncviewer localhost:2
Web 访问
http://hostname:580x
x为display端口
3.3 远程操作 telnet
3 .3.1远程操作 telnet
telnet服务管理
chkconfig telnet on
service telnet restart
或: /etc/init.d/xinit restart
telnet 远程交互
telnet [hostname]
3 .3.2远程操作 rsh
配置
chkconfig rsh on
chkconfig rlogin on
chkconfig rexec on
启动服务
service xinetd reload
/etc/init.d/xinetd reload
/etc/init.d/xinetd restart
操作命令
rlogin 远程登录
rlogin [hostname]
rsh 远程shell
rsh [hostname]
rcp 远程文件复制
rcp [file] [hostname]: /[dir]
3 .3.3远程操作 ssh
配置文件
/etc/ssh/ssh_config
操作命令
ssh 远程shell
ssh [hostname]
scp 远程文件复制
scp [file] [hostname]: /[dir]
练习
配置网卡的地址
通过配置文件修改虚拟机上的bridge网卡
保证这个地址从局域网可以访问
配置网络
修改主机名 hostname
设置 /etc/hosts
实现远程主机基于主机名访问
使用VNC
启动vnc服务器在 :3
通过浏览器访问vnc
执行xclock程序,显示时钟
#export DISPLAY=:3.0
#xclock
使用ssh scp
两个Linux系统之间相互登录 ssh
在两个Linux系统之间拷贝文件 scp
4 Linux操作系统用户管理
4.1 基础知识
在Linux操作系统中,每一个文件和程序必须属于某一个“用户”。
每一个用户都有一个唯一的身份标识叫做用户ID(User ID,UID)。
每一个用户也至少需要属于一个“用户分组”,也就是由系统管理员建立的用户小团体。用户分组也有一个唯一的身份标识叫做用户分组ID(Group ID,GID)
用户可以归属于多个用户分组。
1 基础知识
对某个文件或程序的访问是以它的UID和GID为基础的。一个执行中的程序继承了调用它的用户的权利和访问权限。
每位用户的权限可以被定义为下面两种中的任何一种:
普通用户: 只能访问他们拥有的或者有权限执行的文件;分配给他们这样的权限是因为这个用户或者属于这个文件的用户分组,或者因为这个文件能够被所有的用户访问。
根用户: 能够访问系统全部的文件和程序,而不论根用户是否拥有它们。根用户通常也被称为“超级用户”。
1 基础知识
在Linux操作系统中,任何东西都有一个所有者。用户都按照这样一个方式配置:它们的访问权限只分配给经过挑选的一个很小的用户范围。
1.1 用户登录子目录
1.2 口令
1.3 shell
1.4 启动上机脚本程序
1.5 电子邮件
1.1 用户登录子目录
用户登录子目录: 每一个实际登录进入系统上机的用户都需要有地方保存那些专属于他的配置文件。这个地方就叫做用户登录子目录( home directory)
大多数站点都从/home开始安排用户登录子目录,把用户登录子目录安排在/home下的决定完全是人为的
根用户的登录子目录对大多数UNIX操作系统的变体来说都是传统的“/”,许多Linux操作系统的安装把它设置为/root
1.2 口令
每个账户都必须有一个口令,否则就根本不可能登录进入它。
当用户在登录提示符处输入它们的口令时,输入的口令将由系统进行加密。再把加密后的数据与机器中用户的口令数据项进行比较。如果这两个加密数据匹配,就可以让这个用户进入系统。
口令建议的规则:非语言单词(不是人类使用语言的单词),最好大小写、数字和标点符号混用
1.3 shell
根用户使用的缺省shell,叫做Bourne Again Shell,简称bash。
Linux操作系统带有好几种shell供用户选用—可以在/etc/shells文件中看到它们中的大多数。
1.4 启动脚本程序
当建立了一个用户账号的时候,必须提供一套缺省的启动脚本让这个用户可以开始工作。
相当于dos下面的autoexec.bat或者config.sys的程序
bash的启动脚本文件是:
.bashrc (.bash_bashrc)
.bash_profile(.profile)
1.5 电子邮件
建立一个新用户意味着能够让这个用户收发电子邮件。
电子邮箱保存在/var/spool/mail子目录中,以用户名命名的文件指定。
一个空电子邮箱是一个零长度的文件。所有电子邮箱都应该只属于它们对应的主人,其访问权限被设置为不允许别人读出其中的内容。
4.2 用户数据库
用户数据库: 是普通的文本文件,可以直接编辑修改
/etc/passwd
/etc/shadow
2.1 /etc/passwd文件
/etc/passwd文件保存着用户的登录名、加过密的口令数据项、用户ID(UID)、缺省的用户分组ID(GID)、姓名、用户登录子目录以及登录后使用的shell。
用户的登录名不应该超过八个字符。
文件的每一行保存一个用户的资料,而用户资料的每一个数据项采用分号分隔。
young:boQavhhaCKaXg:100:102:Tang Xiaosheng:/home/young:/bin/bash
2.1 /etc/passwd文件
很多站点是通过修改这个加过密的口令数据项来禁用某个账户的。
例如:把一个干了坏事的用户的加密口令数据项修改为
boQavhhaCKaXg*used mail bomber
用户ID(UID)对每一个用户来说都必须是唯一的,只有UID等于0时可以例外。
有些Linux操作系统的发行版本保留数值-1(或者65535)作为“nobody”用户的UID
2.2 /etc/shadow文件
/etc/shadow文件中的口令则只对那些具有根用户优先权的程序如登录程序等可读。
/etc/shadow文件包含加过密的口令,口令失效期和账户是否已被禁用等方面的信息。
/etc/shadow文件中每一行的格式包含着如下所示的几个部分:
登录名。
加过密的口令。
从1970年1月1日起计算,该口令修改后已经过去了多少天。
需要再过多少天才能修改这个口令。
需要再过多少天这个口令必须被修改。
需要在这个口令失效之前多少天对用户发出提示警告。
口令失效多少天之后禁用这个账户。
从1970年1月1日起计算,该口令已经被禁用了多少天。
保留域。
young:boQavhhaCKaXg:10750:0:99999:7:-1:-1:134529868
2.3 /etc/group文件
/etc/group分组定义文件对整个系统来说也必须是可读的。
每个用户至少会属于一个用户分组,也就是缺省用户分组
在需要的情况下,用户还可以分配到其他的分组中去。
/etc/passwd文件中包含着每个用户缺省的分组ID(GID)。
在/etc/group文件中,这个GID被映射到该用户分组的名称以及同一分组中的其他成员去。
/etc/group文件中每一行的格式如下所示:
用户分组名。
加过密的用户分组口令。
用户分组ID号(GID)。
以逗号分隔的成员用户清单。
project:baHrE1KPNjrPE:102:young, txs
4.3 用户管理工具
用户管理有以下途径:
编写口令数据库文件
命令行
LinuxConf
3.1 使用命令行进行用户管理
可以从下列的六种命令行工具程序中进行选择,用来执行G U I工具程序完成同样的动作:
useradd 增加用户
userdel 删除用户
usermod 修改用户
groupadd 增加组
groupdel 删除组
groupmod 修改组
passwd 设置密码
chpasswd 用文件配置修改密码
chpasswd < ora_pass
密码文件格式: oracle:password
3.2 使用LinuxConf进行用户管理
LinuxConf工具软件包是一个功能非常强大的配置工具,可以用来执行许多不同的任务。
它的特色之一就是建立、删除和修改用户信息的能力。
linuxconf 有文本模式下和图形模式下的执行程序。
3.2 使用LinuxConf进行用户管理
LinuxConf工具软件包是一个功能非常强大的配置工具,可以用来执行许多不同的任务。
它的特色之一就是建立、删除和修改用户信息的能力。
linuxconf 有文本模式下和图形模式下的执行程序。
4.4 更该文件的所有权
4.1 改变文件的所有权命令chown
4.2 改变用户分组命令chgrp
4.3 改变文件属性命令chmod
4.1 改变文件的所有权命令chown
chown命令可以把一个文件的所有权修改为别人的。只有根用户能够进行这样的操作。
这个命令的格式如下所示:
#chown [-R] username filename
没有所有权的文件: 是指文件所属的用户不存在
当用户从/etc/passwd文件中被删除后但是属于他的文件还依然存在的时候。
在问题中的文件进行子目录列表操作的时候。列表中不会出现文件的所有者,它将显示为一个号码,这个号码代表着拥有该文件的UID。
如果有一个新用户在被建立的时候使用了与老用户相同的UID,这个相同的UID将被显示为所有者,使得新用户看起来就像是拥有着那些文件一样。
4.2 改变用户分组命令chgrp
chgrp命令可以改变一个文件的用户分组设置情况。它的格式:
#chgrp [-R] groupname filename
4.3 改变文件属性命令chmod
访问权限分为四个部分,10位:
第一个部分就是访问权限的头一个字母。
“普通”文件( -) 不具有任何特殊的值,如果该文件具有特殊的属性,它就用一个字母来表示。
子目录( d)
符号链接(l)
第二个部分3位,表示的是文件所有者的访问权限;
第三个部分3位,表示的是文件所在分组的访问权限;
第四个部分3为,表示的是全系统(系统中的全部用户)的访问权限。
当组合属性的时候,把后三个部分的数值逐个相加。
字母 访问权限 数值
r 读 4
w 写 2
x 执行 1
文件的设定:
-rw------- (600) – 只有属主有读写权限。
-rw-r–r-- (644) – 只有属主有读写权限;而属组用户和其他用户只有读权限。
-rwx------ (700) – 只有属主有读、写、执行权限。
-rwxr-xr-x (755) – 属主有读、写、执行权限;而属组用户和其他用户只有读、执行权限。
-rwx–x--x (711) – 属主有读、写、执行权限;而属组用户和其他用户只有执行权限。
-rw-rw-rw- (666) – 所有用户都有文件读、写权限。这种做法不可取。
-rwxrwxrwx (777) – 所有用户都有读、写、执行权限。更不可取的做法。
目录注意事项:因为不可能去“执行”一个目录。 当添加或清除某个目录的执行权限时,其实上是允许完全查找这个目录。
4.3 改变文件属性命令chmod
chmod命令:根据文件访问权限的字母以及对应的数值用来设置访问权限的数值。
chmod [OPTION]... MODE[,MODE]... FILE...
使用数值改变文件权限:
#chmod 777 file1
使用字母来改变文件的权限:
参数设置
a 所有用户
u 创建者
g 同组用户
o 除去创建者和同组用户之外的用户
- 增加权限
-
清除权限
= 设置唯一权限
常用设置
g+w – 增加组用户的写权限
o-rwx – 清除其他用户的全部访问权限
u+x – 允许文件属主执行文件
a+rw – 允许所有用户读和写文件
ug+r – 允许文件属主和属组用户读文件
g=rx – 设置属组用户只能读和执行文件(不可写)
通过增加 -R 参数,可以改变整个目录树的权限。chmod o+w sneakers.txt chmod go-rw sneakers.txt chmod a-rw sneakers.txt
4.5 文件的权限和SetUID,SetGID
文件是通过SetUID位和SetGID位来控制访问权限的。
SetUID位的作用是通过二进制位进行设置的方法使程序按照其所有者的访问权限运行,不再受运行它的用户的访问权限的限制。
当用户运行一个应用程序的时候,这个程序将继承该用户所具有的全部权利(或者限制)。用户不能够读取这个文件,那么他运行的程序也不能读取该文件。这个权限可能会与该程序文件(通常叫做二进制文件)所有者所具有的权限有所不同。
例如:ls程序是归根用户所有的,它的访问权限被设置为每一个用户都能够执行,某用户young运行了ls命令,限制这份ls命令的是分配给用户young的访问权限而不是根用户。
如果把一个执行程序的SetUID位设置为on,并且让这个命令的二进制文件归属于根用户,那么就意味着如果用户young运行这个命令,这命令就是以根用户的访问权限运行的,不再受到用户young访问权限的限制。
SetGID位的是作用于文件用户分组的设置情况
如果想激活SetUID或者SetGID位,需要使用chmod命令
如果想把某个程序设置为SetUID状态,在打算分配给它的访问权限数值前面加上一个数字4。
如果想把某个程序设置为SetGID状态,在打算分配给它的访问权限数值前面加上一个数字2。
#chmod 4755 /bin/ls
练习
创建目录
以root用户建目录 /home/oracle
以root用户建目录 /u01
创建dba, oinstall用户组
groupadd -g 701 dba
groupadd -g 702 oinstall
创建oracle用户
useradd -g dba -G oinstall -u 701 -m -d /home/oracle oracle
加入dba,oinstall组,默认组为dba
主目录为 /home/oracle
用一个密码文件来修改密码
chpasswd < ora_pass
修改自动执行脚本.bash_profile,加入以下行
export ORACLE_BASE=/u01
export ORACLE_HOME=$ORACLE_BASE/db10g
export ORACLE_SID=orcl
修改/home/oracle /u01权限
修改所有者为oracle
所有组为oinstall
修改访问权限为755
chown -R oracle.oinstall /u01
5 Linux操作系统文件系统
5.1 Linux——文件系统
Linux是建立在文件系统的基础上的。
文件系统是对磁盘进行组织,在扇区和磁道组成的物理基础上提供抽象操作层面的机制。
磁盘管理要处理以下任务
建立硬盘分区、
建立文件系统、
引导系统时自动挂装文件系统、
以及发生系统崩溃之后如何对它们进行恢复等等。
挂装网络文件系统、
硬盘空间配额管理、
自动挂装(automounter)子系统等等。
1.1 文件系统的树状结构
1.1 Linux文件系统介绍
(1)/bin:该目录用于存放用户命令。 目录 /usr/bin 中也存放了一些用户命令。
(2)/sbin:该目录用于存放许多系统命令,例如 shutdown。目录 /usr/bin 中也包括了许多系统命令。
(3)/root:该目录用于存放根用户(超级用户)的主目录。
(4)/mnt:该目录主要用于存放系统引导后被挂载的文件系统的挂载点。
(5)/boot:该目录用于存放内核和其它系统启动时使用的文件。
(6)/lost+found:该目录被fsck用于存放零散文件(没有名称的文件)。
(7)/lib:该目录用于存放被 /bin 和 /sbin 中的程序使用的库文件。 目录 /usr/bin 中含有更多库文件。
(8)/dev:该目录用于存放设备文件。
1.1 Linux文件系统介绍
(9)/etc:该目录用于存放许多配置文件和目录。
(10)/var:该目录用于存放系统中不断扩充、变化的文件,例如日志文件和锁定文件。
(11)/usr:该目录用于存放与系统用户直接有关的文件和目录。
(12)/proc:该目录是一个虚拟的文件系统(不是实际贮存在磁盘上的),它包括被某些程序使用的系统信息。
(13)/initrd:该目录用于存放在计算机启动时挂载 initrd.img 映像文件的目录以及载入所需的设备模块。
(14)/tmp:该目录用于存放用户程序运行时所产生或保存的一些临时文件。 /tmp 有全局读写权。
(15)/home:该目录用于存放用户主目录的位置。
1.2 Linux文件类型
普通文件
目录文件
特殊文件
文件链接
1.2 文件权限
每个文件都被一个特定用户所拥有,但同时文件还被系统指定的用户组所拥有。每个用户在被建立用户目录时都至少被放在一个用户组中,而且,系统管理员还可以将用户编进多个用户组里。用户组通常是根据使用计算机的用户的种类来划分的。
对文件和目录来说,每个文件和目录都有一组权限标志和它们结合在一起。如果用ls命令加-l开关可能会看到目录列表
1.3 文件系统的构成
Linux的缺省文件系统ext2的全部抽象操作层面的构成和管理操作。
i-结点
超级块
1.3 文件系统的构成: i-结点
UNIX文件系统最基础的材料是i-结点(i-node)
i-结点是一个包含着指针的控制结构,其中的指针要么指向其他i-结点,要么指向数据块。
i -结点中的控制信息包括文件的所有者、访问权限、长度、最后一次存取时间、建立时间、用户分组GID号等等
/usr/src/linux/include/linux/ext2-fs.h文件中可以查到完整的内核数据结构
i -结点中没有保存的东西就是文件名。
子目录本身就是文件的一种特殊形式。
这就意味着每一个子目录都有一个i-结点,
i-结点指向的数据块中包含子目录所有文件的信息资料。
1.3 文件系统的构成: i-结点
ext2文件系统中i -结点和数据块的组织结构。
1.3 文件系统的构成: 超级块
从磁盘上读出来的第一块信息就是它的超级块( superblock)。
这个小数据结构中保存着好几个关键的数据,包括磁盘的几何尺寸、可用空间容量、以及最重要的—第一个i-结点的位置。
超级块数据结构被拷贝复制了许多份,散布保存在整个磁盘上,以此对付第一个超级块被损坏事件的发生。
在Linux的ext2文件系统中,在每一组数据块的后面就安排有一个超级块。每个数据块组包含着i -结点和数据。每个组有8192个块,这样第一个备份超级块就在8193,第二个在16385,依次类推。
5.2 管理文件系统
2.1 建立文件系统 fdisk mke2fs mkswap
2.2 挂装和卸载硬盘分区
2.3 使用/etc/fstab文件
2.4 使用fsck工具程序进行文件系统恢复
2.5 文件系统配额管理
2.1 建立文件系统
Block Device Naming
Most block devices are located in /dev
SCSI disks
Disk or logical volume: sd[a-iv]
Primary partitions: sda[1-4]
Logical partitions: sda[5-15]
IDE disks
Disk or logical volume: hd[a-t]
Primary partitions: hda[1-4]
Logical partitions: hda[5-31]
2.1 建立文件系统分区
检查新设备,可以使用下列命令
fdisk -l
/proc/diskstats > dmesg
fdisk 命令对硬盘做分区
#fdisk [device]
fdisk 里的常用命令
a toggle a bootable flag
d delete a partition
m print this menu
n add a new partition
p print the partition table
q quit without saving changes
t change a partition's system id
82 Linux Swap
83 Linux
w write table to disk and exit
Creating Extended Partitions
Creating Logical Partitions
Listing Partitions
#cat /proc/partitions
major minor #blocks name rio rmerge …
8 0 8281507 sda …
8 1 8281476 sda1 …
8 16 4192965 sdb …
8 17 2048256 sdb1 …
8 18 2048287 sdb2 …
8 32 9430155 sdc …
8 33 9430123 sdc1 …
8 48 9430155 sdd …
8 49 4715046 sdd1 …
8 50 4715077 sdd2 …
22 0 252290 hdc …
2.1 建立文件系统
/sbin/mkfs 格式化分区
–t 指定文件系统类型
如:
Ext2: # mkfs –t ext2 /dev/sdb1
Ext3: # mkfs –j /dev/sdb1
或使用/sbin/mkfs.代替
mke2fs建立ext2/3文件系统;
#mke2fs /dev/hdb3
#mke2fs -j ext3 /dev/hdb3
ext2 vs. ext3
ext2 used to be the most common Linux filesystem
ext3 is based on ext2
Same on-disk structure
ext2 can be converted to ext3
ext3 can be mounted as an ext2 file system
ext3 is a journaling filesystem
Preserves data integrity better than ext2
Faster and safer fsck after system crash
Swap分区配置
mkswap建立swap文件系统。
使用mkswap命令设置swap空间也同样简明。唯一的参数是在其上建立swap空间的分区名称。如果想在/dev/hdb2上建立swap空间,需要输入下面的命令:
#mkswap /dev/hdb2
物理内存的2倍,或大于2 GB
获得swap分区信息:
/proc Filesystem
/proc is a virtual file system
Provides an instantaneous view of the operation of the system
/proc/meminfo, /proc/mounts, /proc/partitions
Can be viewed with cat, more, less
Can be used to configure kernel parameters
Settable parameters are below /proc/sys
Can be set with echo or via sysctl
shmfs
Mount tmpfs on /dev/shm via fstab
Option “size=8g” means 8GB
Option “size=??” can be larger than physical RAM
Required by Oracle for VLM mode
Only used for buffer cache
Never used in non-VLM mode
裸设备 Raw Devices
I/O directly to partitions instead of a filesystem
Eliminates copying to/from filesystem cache
Each raw device is a character device
Character device major number 162
Requires more experienced administration
Devices will be either in /dev or /dev/raw
Device names are raw1 – 255 by convention
May need to manually create raw129 – raw255:
e.g., mknod /dev/raw/raw129 c 162 129
Minor #0 is special and can’t be used for I/O
Implies a limit of 255 raw devices
DB files should be symlinks to /dev/raw/raw*
创建裸设备
Create partitions of type “Linux” (type id=83)
Use /sbin/raw to bind raw device with a partition
Examples:
#/sbin/raw /dev/raw/raw1 /dev/sdc1
#/sbin/raw /dev/raw/raw1 8 33
Give oracle user ownership of raw device:
#chown oracle:dba /dev/raw/raw1
Bindings are not persistent across reboot
Use /etc/sysconfig/rawdevices
System V Shared Memory
Used by Oracle for the SGA
May have multiple segments if shmmax is low
Normally all segments deleted at shutdown
If instance crashes, segments may hang around
To view existing segments:
/usr/bin/ipcs
To manually remove a segment:
/usr/bin/ipcrm shm <shm_id>
Oracle Clustered Filesystem
OCFS delivers raw-like performance with tremendous advantages in management and usability
All database related files reside on a clustered filesystem
Visible to all nodes
Open source project sponsored by Oracle
Supports asynchronous I/O as of v1.0.9
Free to use
Get fix for bug #2883583
Allows cp, dd & tar of open database files needed for hot backup
2.2 挂装和卸载硬盘分区
文件系统的管理工作是从根目录/开始的。
包含着操作系统内核及核心目录结构的分区是在系统引导时挂装的,这个分区上必须存放有使系统进入单用户模式所必须的全部工具程序和配置文件,其上许多子目录都是空的。
当挂装上一个新子目录的时候,mount命令会把原来挂装在这个位置的全部内容隐藏起来。
这样在我们的/usr例子里,如果在挂装/dev/hda3分区之前根分区的/usr子目录中确实保存有文件,挂装后那些文件就看不见了(那些文件并没有被删除,一旦/dev/hda3分区被卸载,原来/usr中的文件就又出现了)
2.2 使用mount命令
One-time Mounts
mount [options] device directory
用于mount选项:
-o命令的参数如下所示
下面的mount命令把/dev/hda3分区以只读属性挂装到/usr子目录上:
[ root@ford /root ]#mount -o ro /dev/hda3 /usr
-a 把/etc/fstab文件(本小节后面介绍)中列出的文件系统都挂装上
-t fstype 定义挂装的文件系统类型。
mount命令通常可以自己检测出这类信息,例外: OCFS
-o options 定义作用于挂装过程的选项。它们通常是一些与文件系统类型有关的选项(挂装网络文件系统的选项不能够用来挂装本地文件系统)
/bin/mount /dev/sdb1 /oracle
2.2 使用mount命令
挂载光盘
mount –t iso9660 /dev/cdrom /dir
挂载iso文件 (Loopback Mounts)
mount -o loop,ro [iso file] /[dir]
mount –t iso9660 –o loop /img/cd_1.iso /mnt/cdrom
挂载samba文件
mount -t smbfs -o username=usr,password=pwd //host/folder /[dir]
Etc/fstab:
//host/folder /dir smbfs username=user,password=pwd 1 2
Mount dir
挂载NFS文件
mount [host]:/[dir] /[dir]
2.2 使用mount命令
mount -o命令的参数说明
ro 以只读属性挂装该分区
rw 以读-写属性挂装该分区(缺省值)
exec 允许二进制代码的执行(缺省值)
noatime 禁止刷新i-结点上的存取时间。用于存取时间不重要的分区(比如新闻队列),可以提高性能
noauto 如果使用了-a参数,禁止这个分区的自动挂装(只作用于/etc/fstab文件)
nosuid 禁止setuid程序的应用程序对此挂装分区置位
sb=n 告诉mount命令对一个ext2文件系统使用第n个数据块作为超级块
2.2 卸载文件系统
如果想卸载一个文件系统,使用umount命令。
下面是这个命令的格式:
umount [-f] directory
其中的directory是准备卸载的子目录名。如下所示:
[ root@test /root ]#umount /usr
把挂装在/usr子目录位置上的分区卸载下来。
2.2 卸载文件系统
umount命令不足之处:如果文件系统正在使用中(也就是说有人在那个分区上打开了文件),就无法把这个文件系统卸载下来。有三种方法可以用来解决这个问题:
使用lsof程序或者fuser程序检查有哪些进程打开了文件,终止那些进程的运行或者让进程的所有者停止操作。如果选择终止那些进程的运行,一定要明白自己在做些什么。
umount -f 参数强制执行卸载操作。任何在这个分区上打开的进程都将被挂起来,可能会造成数据丢失。
最安全和适当的办法是把系统调整为单用户模式,然后再卸载这个文件系统。在现实生活里,你可能不会总有这个奢侈之举。
2.3 /etc/fstab文件
/etc/fstab是一个mount命令可以利用的配置文件。
这个文件包含着一个系统中全部已知硬盘分区的清单。在引导过程中,这个清单被读出,其中包含的各个分区都被自动挂装到系统上。
下面是/etc/fstab文件中数据项的格式,下表定义了/etc/fstab数据项的各组成元素。
/dev/device /dir/to/mount fstype parameters fs_freq fs_passno
挂载命令:
mount /oracle
mount /dev/sdb1
2.3 /etc/fstab文件
/etc/fstab文件的数据项说明
/dev/device 将被挂装的分区
比如dev/hda3
/dir/to/mount: 分区挂装到其上的子目录(
比如/usr)
fstype: 文件系统的类型(比如ext2/ext3)
parameters: mount命令-o参数的附加参数
mount option
defaults 缺省值
noauto 防止启动时自动加载
fs_freq: 数值类型,告诉dump命令备份这个文件系统的频率
fs_passno: 数值类型,告诉fsck程序在引导时确定文件系统的检查顺序(请注意所有文件系统在挂装之前都要被检查)
2.3 /etc/fstab文件
swap分区是虚拟内存驻留的地方。
Linux的虚拟内存可以保存在根分区以外的另一个分区上。
swap分区遵守的规则不同于普通的文件系统,所以这样做可以提高性能。
因为这个分区不需要备份或者在机器引导时由fsck程序检查,所以最后的两个参数都设置为0
请注意swap还可以被保存为一个普通的磁盘文件。详细资料请查阅mkswap命令的使用手册页.
2.3 /etc/fstab文件
/proc文件系统
和/proc联系在一起的none数据项用来定义/proc文件系统。这是一个特殊的文件系统,它提供了一个到内核参数的接口,通过这个接口可以模拟任何其他的文件系统。
虽然它看起来好像是保存在磁盘上的文件,其实它不是的—所有文件分别代表内核中的某些东西。
最引人注目的是/dev/kcore,它实际上就是抽取成文件的系统内存映像。不熟悉/proc文件系统的人经常把它误认为是一个没用的大文件,错误地删除了它,从而引起系统发生许多明显的故障。除非你确实知道自己在干什么,否则最好还是把/proc中的文件留在那里别动。
/dev/pts文件系统
数据项/dev/pts,是一个新的机制,用来完善网络终端支持(ptys)的实现。
如果你打算让你的主机支持通过rsh、telnet、rlogin或者ssh的远程登录,这个数据项就是必不可少的。
2.4 使用fsck程序
fsck工具程序的名字是File System ChecK(文件系统检查)的缩写,它被用来诊断和修复在日常操作中可能已经损坏的文件系统。
系统发生崩溃的时候,一般都来不及把内部缓冲区中的全部数据转存到磁盘上,所以类似的修复通常是十分必要的。
如果确实发现某个文件系统的操作行为与其正常情况不一样(log日志是这类情况的最佳提示),你可能会在一个运转着的系统上运行fsck程序。
唯一的不足之处是:为了执行这个程序,需要诊断的文件系统必须先卸载下来。如果你选择了这个方法,完成操作后别忘记把文件系统再挂装上去。
2.4 使用fsck程序
e2fsck
注意fsck并不是ext2文件系统修复工具合适的名字;它实际上只是e2fsck的一个别名。fsck尝试确定哪一个文件系统需要修复,然后再调用适当的修复工具程序,把我们传递给fsck的参数都传递过去。对ext2文件系统来说,真正的工具叫做e2fsck。
当发生系统崩溃的时候,与其依靠其他应用程序替你调用e2fsck,还不如自己直接来调用它。
2.4 e2fsck的可用参数
如果想在/dev/hda3文件系统上运行e2fsck,需要输入下面的命令:
[root@test /root]#e2fsck /dev/hda3
强制进行文件系统检查并对出现的全部提示都回答“ Ye s”,需要输入下面的命令:
[ root@test ]#e2fsck -f -y /dev/hda3
2.4 e2fsck的可用参数
e2fsck的参数说明
-b superblock 让e2fsck读取分区信息的超级块编号。大多数情况下, e2fsck可以在第一个数据块中找到它,但是如果那个块损坏了,就需要指定另外一个号码。超级块每隔8192个出现一次,因此第二个超级块在8193、然后是16385等等
-c 在运行e2fsck之前先执行badblocks程序。它对整个硬盘按块查找并校验该块的完整性。这是检查硬盘最彻底的方法,但是花的时间比较多
-f 强制进行检查,即使认为文件系统已经没有问题了
-y 告诉e2fsck对e2fsck提示的问题全部自动回答为“Ye s”
2.4 lost+found子目录
另外一个比较少见的情况是e2fsck找到了一些文件碎片,但是没有办法把它们恢复到原始文件中去。这种情况下,它会把这些碎片放到该分区的lost+found子目录里。这个子目录就在该分区挂装的位置,因此如果分区/dev/hda3被挂装在子目录/usr上,那么子目录/usr/lost+found就对应于分区/dev/hda3。
任何东西都可以放到lost+found子目录里—文件碎片、子目录、甚至一些特殊文件。如果在这里找到了普通文件,可以看出它的所有者,你可以与该所有者联系看他们是否还需要这些文件(他们通常都不需要)。如果在lost+found中遇到了子目录,与其试图从lost+found中重新建立它的结构,还不如从最近的备份中来恢复。
lost+found子目录至少可以告诉你有一些东西失去了定位。但是,这种错误实在太少见了。
2.5 硬盘空间配额的管理
实现配额管理的准备工作
设置配额
管理配额
2.5 实现配额管理的准备工作
第一步是配置系统使用硬盘配额的一次性设置工作,通过这个设置把实行配额管理所必须的软件安排就位,以后每次开机时就进入预备状态,
第二步是在/etc/fstab文件中进行必要的设置,并在每个准备实行硬盘配额管理的分区里加上必须的文件。第二步的工作需要对每一个准备实行硬盘配额管理的分区分别进行设置操作。
2.5 设置引导过程
大多数Linux发行版本(包括RedHat)都已经把对配额管理的支持作为标准安装的一个部分预先设置好了。因此不必再对引导过程进行什么改动了。
如果想启动配额管理程序,在用户的引导脚本程序末尾(rc.local是个不错的选择)加上下面这几行语句:
2.5 配置各个分区
对每个准备实行硬盘配额管理的分区,需要进行三项设置: usrquota参数、grpquota参数和配额数据库。
•usrquota参数 编辑/etc/fstab文件,在每一个需要配额的硬盘分区的挂装参数里加上usrquota参数。举例来说,假设/dev/hda5挂装到/home子目录,现在准备对这个子目录设置用户配额,/etc/fstab文件中的对应数据项应该修改为如下所示的样子:
/dev/hda5 /home ext2 defaults,usrquota 1 1
•grpquota参数 需要用户分组配额支持的硬盘分区对应的/etc/fstab文件中的数据项应该有grpquota参数,与刚才介绍的usrquota参数一样(请注意同时设置这两个参数是可以的)。
• 配额数据库建立相应的数据库文件保存用户和用户分组配额信息。这些文件是空的,它们被放置在每一个实行配额的硬盘分区的根目录下;只有根用户才能读取它们的内容;而且必须给它们起名为quota.user和quota.group。
2.5 设置配额
无论是对用户还是对用户分组,建立、修改和删除配额的操作都是由edquota命令来完成的。首先学习几个术语:
软限制: 这个限制作用于用户或者用户分组。如果用户的账户超过了软限制,就开始进入限制期,也就是这个账户在超过软限制后还能存在多长的时间。在这个期间,用户会收到警告他们的账户超标的消息。
硬限制: 这个限制是由操作系统实行的,不允许超过。试图在硬限制以外进行数据写操作会被拒绝。
限制期(时间限制): 当用户的账户超过软限制的时候,时钟开始计时。在限制期结束之前,用户是无法再访问这个账户的。这个限制期的长度因系统而异,通常会是一个星期。如果不想让这个账户被禁用,用户需要删除或者压缩文件,使自己的硬盘空间消耗量降低到软限制以下。
2.5 edquota的命令行参数
当管理单个用户的配额时, edquota命令只有三个参数,如下所示:
#edquota [option] [user]
-u login为参数定义的用户设置配额数据
#edquota -u heidi
-t 为硬盘分区设置限制期。把它与-u或者-g参数联合使用可以分别为用户或者用户分组全部设置好限制期。请注意:如果用户/用户分组在同一个分区上,它们就不能有不同的限制期
-g group 为参数定义的用户分组设置配额数据
-p login 允许把一个用户的配额资料(用户名为login)克隆给另外一个用户。这个参数必须与- u参数合用
#edquota -p jyom ebosze
临时文件.
edquota命令编辑这些信息时会给其临时文件起一个唯一的名字。
保存这个临时文件—不要把这些信息写到quota.user或者quota.group文件上! edquota命令会把这些信息自动调整到这两个文件里去。
2.5 edquota命令示范
各项限制的值都是0,表示此时在heidi的账户上还没有设置任何配额。请注意:对i-结点和数据块都可以进行限制。别忘了Linux中的数据块的长度是1K字节,而i-结点则是保存文件所必须的控制信息。每个文件一般只需要几个i-结点,文件长度加大时再增加。准备把heidi的数据块软限制设置为5000、数据块硬限制设置为6000、i-结点软限制设置为2500、i-结点硬限制设置为3000。下面就是输入完成后文件的样子:
2.5 管理配额
激活配额功能并正常运行以后,另有三个可以帮助我们管理硬盘配额的工具程序,它们是quotacheck、repquota和quota。
quotacheck命令检查配额数据库的完整性。
-v 打开报告模式。再检查配额数据库的时候就会看到许多有用又有意思的信息
-u uid 检查UID是uid的用户的配额情况
-g gid 检查GID是gid的用户的配额情况
-a 检查所有设置了配额的文件系统(以/etc/fstab文件中的设置为准)
-R 与-a参数合用。检查所有设置了配额的硬盘分区,但是不包括根分区
repquota命令用来生成系统上配额使用情况的统计报告。
-a 统计所有文件系统的配额使用情况
-v 统计所有配额的使用情况,没有用到的也要统计
-g 以用户分组为单位统计配额使用情况
-u 以用户为单位统计配额使用情况
quota命令是供用户使用的。这个命令可以让用户查看分配给自己的配额。
-g 给出用户所在分组的配额使用情况
-u 给出该用户的配额使用情况(缺省操作)
-v 给出支持配额的所有文件系统里与该用户有关的配额使用情况
-q 如果该用户已经超标,显示一个消息给他
练习
增加新硬盘 10G
用 fdisk -l 检查新硬盘 假设为/dev/sdg
创建三个分区 fdisk
类型swap 82 /dev/sdg1 100M
类型Linux 83 /dev/sdg2 500M
类型Linux 83 /dev/sdg3 9G
格式swap分区
mkswap /dev/sdg1
创建裸设备
raw /dev/raw/raw1 /dev/sdg2
chown -R oracle.oinstall /dev/rawctl
chmod 777 /dev/rawctl
chown -R oracle.oinstall /dev/raw/*
chmod 777 /dev/raw/*
普通分区 ext3
格式化 mke2fs -j ext3 /dev/sdg3
加载到 /u01目录 mount
通过配置 /etc/fstab 加载该文件系统
卸载该文件系统
将一个iso文件作为光驱挂载,配置在/etc/fstab中
#mount -t iso9660 -o loop,ro /home/client.iso /mnt/cdrom
ckfs 检查文件系统 /u01
6 Linux操作系统软件模块和内核安装配置
6.1 软件安装与配置
本部分将讨论两种最常用的软件安装方法:使用Red Hat Package Manager软件包管理工具软件(RPM)和自行编译源代码。
本部分中所有需要输入的命令都是以根用户的身份输入的。因此最好是直接以根用户身份登录进入系统。
RPM Package Manager
Manage software packages
Install, upgrade, remove, verify, query, build
Package files referred to as RPMs
Distributed by the vendor
Include files to be installed plus some install scripts
Source RPMs contain the source code
e.g., kernel-2.4.9-e.24.src.rpm
Binary RPMs contain the pre-built binaries
e.g., kernel-2.4.9-e.24.i686.rpm
Choose the highest architecture the machine can use
e.g., i686, i586, i486, i386 (uname -m)
1 Red Hat Package Manager
一些可以获得到rpm软件的站点
http://www.rpmfind.net
ftp://ftp.redhat.com/pub/contrib
http://www.linuxapps.com
rpm的老家
http://www.rpm.org
1 安装新的软件包
普通安装:
#rpm -i bc-1.05a-4.i386.rpm
升级软件:
#rpm -U bc-1.05a-4.i386.rpm
强行安装:
#rpm -i --force -nodeps packagename.rpm
其他参数
-h 使用符号“#”指示安装进度,与-v参数一起使用时显示效果更好
-v 告诉RPM报告每一步操作的情况
–test 这个参数并不进行真正的安装;它只是用来检查安装能否成功地完成。用于检查依赖关系是否安全。
–percent 显示已完成的百分比指示安装进度。如果从另外一个程序(比如某个Perl脚本程序)中来运行RPM,并且想了解安装的进度时,这个参数就很方便。
1 查询软件包
列出已经安装的全部软件包
#rpm -qa
#rpm -qa | grep -i 'name'
找出某个特定的文件到底是属于哪个软件包的
#rpm -qf filename
查出某个已经安装的软件包的功能
#rpm -qi packagename
查出软件包中的文件
#rpm -qlp packagename
其中的packagename是准备要了解其组成文件的软件包名称
列出已经安装的软件包中的文件:
#rpm –ql <pkg_name>
1 反安装(清除)软件包
RPM反安装(清除)软件包
#rpm -e packagename
其中的packagename是rpm -qa命令清单中列出的软件包名称。
1 gnorpm工具
那些喜欢使用GUI工具简化操作的人们可以使用gnorpm软件。虽然它是被设计运行于GNOME环境的,但在KDE环境中也运行得相当好。它可以完成通过命令行完成的全部操作,但是用户就不必费力记住那些命令行参数了。当然,这样做是要增加一些系统开销的,这也是命令行版本依然存在的原因。
RPM Builds
Builds consist of multiple phases:
Prep – extracts and patches sources
Build – make individual binaries
Install – creates an install staging area
Doesn’t install it for use on the local system!
Additional actions come after Install phase:
Create a source RPM
Create a binary RPM
RPM Work Area
Work area is used for building RPMs
Location depends on vendor:
Red Hat: /usr/src/redhat
UnitedLinux: /usr/src/packages
Directory structure contents:
SPECS – RPM spec file
SOURCES – source archives and patches
BUILD – extracted source, objects, binaries
RPMS – generated binary RPMs
SRPMS – generated source RPMs
RPM Build Procedure
First, install source RPM
Populates SPECS and SOURCES
Run build phases
Populates BUILD and creates staging area
Generate binary and/or source RPMs
Populates RPMS and SRPMS, respectively
Clean up the build area
Install the new binary RPM if desired
RPM Build Example
All in one go:
rpm ––rebuild stat-2.5-3.src.rpm
Step-by-step:
rpm –i stat-2.5-3.src.rpm
cd /usr/src/redhat/SPECS
rpm –bp stat.spec
rpm –bc stat.spec
rpm –bi stat.spec
rpm –bl stat.spec
rpm –ba stat.spec ––clean
rpm –i ../RPMS/i386/stat-2.5-3.i386.rpm
6.2 开机和关机
2.1 系统引导
2.2 启动文件
2.3 内核加载
2.4 init进程
2.1 启动引导 - Boot Loaders
Grub
New and improved boot loader
Configured via /boot/grub/menu.lst
Not necessary to rerun after config changes
Grub Configuration
default=0
timeout=10
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
title Red Hat Ent Linux AS (2.4.21-9.EL)
root (hd0,0)
kernel /boot/vmlinuz-2.4.21-9.EL root=LABEL=/
initrd /boot/initrd-2.4.21-9.EL.img
LILO
Original Linux boot loader
Configured via /etc/lilo.conf
Must run /sbin/lilo after any change to lilo.conf or binary images (/boot/*)
2.2 Boot Files
Kernel binary:
IA-32 (compressed): /boot/vmlinuz-$LABEL
Other architectures: /boot/vmlinux-$LABEL
initrd images:
/boot/initrd-$LABEL
System mapfile:
/boot/System.map-$LABEL
By convention kernel binary, initrd and system mapfile should share the same $LABEL
2.2 Initrd Images
Kernel can’t mount root fs until appropriate disk drivers are loaded (except IDE)
Initrd is loaded into memory by Grub/LILO
Contains drivers needed to mount real root fs
Initrd must be rebuilt if a disk driver changes
To rebuild:
RH: Use /sbin/mkinitrd
SUSE: Use /sbin/mk_initrd
2.3 开机引导的步骤
加载内核
内核就必须完整地加载到可用RAM的第一个兆字节之内。为了实现这个目的,内核是被压缩了的。
这个文件的头部包含着必要的代码,先设置CPU进入安全模式(以此解除内存限制)再对内核的剩余部分进行解压缩。
执行内核
内核在内存中解压缩之后,它就可以开始运行了
一旦内核启动运行,对硬件的检测就会决定需要对哪些设备驱动程序进行初始化。
内核就能够挂装根文件系统,内核挂装了根文件系统之后,
启动并运行一个叫做init的程序。
2.4 开机引导的步骤
init进程是所有进程的发起者和控制者。
init是第一个运行的进程,
init的进程编号永远是1。
如果init出现问题,系统随之垮掉。
init进程有两个作用:
扮演终极父进程的角色。
失去了父进程的子进程就都会以init作为它们的父进程。
快速执行一下ps -af 命令可以列出许多父进程ID(parent process ID,PPID)为1的进程来。
特定运行级别( runlevel)时运行相应的程序,
init读取配置文件/etc/inittab,决定启动的运行级别(runlevel)。
缺省的运行级别
取决于配置文件 /etc/inittab
id:3:initdefault:
2.4 开机引导的步骤
命令脚本程序
执行 rc.sysinit
执行脚本在各个运行级别的子目录中/etc/rc{RUNLEVEL}.d
都建立有到/etc/rc.d/init.d子目录中的符号链接。
但是这些符号链接并不使用命令脚本程序在/etc/rc.d/init.d子目录中原来的名字,
如果命令脚本程序是用来启动一个服务的,其符号链接的名字就以字母S打头;
如果命令脚本程序是用来关闭一个服务的,其符号链接的名字就以字母K打头
运行级别3和5中,在字母S后面使用了数字99,这就保证了这个命令脚本程序将作为引导过程的组成部分,其最后阶段被执行。
2.4 编写自己的rc命令脚本程序
有两种方法可以用来实现修改开机或者关机命令脚本的目的:
/etc/rc.d/rc.local
如果所做的修改只在引导开机的时候起作用,并且改动不大的话,可以考虑简单地编辑一下/etc/rc.d/rc.local脚本。
这个命令脚本程序是在引导过程的最后一步被执行的。
/etc/rc.d/init.d子目录中添加一个命令脚本程序
适合修改比较细致,或者还要求关闭进程的操作必须使之明确地停止运行
这个命令脚本程序必须可以接受start和stop参数并完成相应的操作。
6.3 系统服务管理
用于在激活或停用启动时的服务
会修改/etc/rcX.d 到 /etc/init.d的(符号联接symbolic links)
配置服务 chkconfig
chkconfig --list
chkconfig [--level 2345] [service] on|off
服务管理 service
service [servicename] start|stop|restart
使用 chkconfig
#See where sendmail is running
chkconfig --list sendmail
sendmail 0:off 1:off 2:off 3:on 4:off 5:on 6:off
#Turn off sendmail at levels 3 & 5
#too many spammers out there!
chkconfig --level 35 sendmail off
6.4 内核
4.1 核心服务
4.2 内核编译和安装
4.3 模块加载卸载
4.1 核心级系统服务
核心系统服务:init、inetd、syslog和cron。
本部分将对每一个核心系统服务、相应的配置文件以及推荐的应用方式(如果有的话)逐个进行介绍。
4.2 安装新内核
Distributed by vendors in binary RPM format
Red Hat: kernel-{smp|enterprise}-*.i686.rpm
UnitedLinux: ???
RPM contents:
/boot/vmlinuz-$LABEL
/boot/System.map-$LABEL
/lib/module/$LABEL/…
RPM script generates a new initrd-$LABEL and automatically adds a Grub entry
If using LILO instead of Grub, then add lilo.conf entry manually and re-run /sbin/lilo
4.2 编译或者不编译内核的原因
编译的原因
运行一个程序,但是操作系统不支持该程序需要的功能。
某个用户需要的内核功能—比如说用户的机器中装有1GB到2GB容量之间的RAM系统内存,只能重新编译经过改动的内核才能够激活它。
用户希望对内核进行优化。
内核升级(驱动、BUG、意愿、功能、安全、有时间进行升级)
为什么不编译
如果只是想给内核加上很少数量的功能的话,就没有必要进行编译
编译内核可能会遇到的困难:面对众多的选项
4.2 编译(或升级)内核
确定内核版本
uname –r
确定内核是测试版还是正式版
按照下面的方法确定内核是测试版还是正式版:
- 忽略句号”.”前的第一个数字。
- 查看紧跟在句号”.”后面的第二个数字。
在实验性版本中,紧跟在第一个句号后面的第一个数字是一个奇数。
在成熟版本中,紧跟在第一个句号后面的第一个数字是一个偶数。
举例来说,内核版本2.2.5-15是成熟版本,而版本2.3.4-12是实验性版本
4.2 为内核源代码打补丁
内核经常需要小规模地升级。每次升级修复一个特定的bug,增加一个新的驱动程序或者功能,或者实现其他任务。 - 下载主版本的源代码和升级到新版本需要的每一个补丁的源代码。
- 使用c d命令把路径切换到/usr/src目录。
- 使用l s命令列出目录中的内容清单。如果其中有一个/usr/src/linux-version-ext目录已经存在的话,一般情况这就是正在已经运行的内核源代码。
- 输入“mkdir linux-newversion-ext”命令建立一个新的源代码目录。
- 把下载的源代码和补丁都拷贝到这个目录中。
- 使用tar命令对源代码进行解包操作。
- 每一个补丁都应该分别并按顺序来处理。使用tar命令对第一个补丁进行解包操作。
- 使用patch命令把这个补丁打到源代码中去。输入“patch -p0 original <patchname”命令。
- 依次打补丁
- 准备编译
注意:在源代码中有时候会包括有一个名为kernel-patch的命令脚本程序,该程序的功能是按顺序打所有的补丁。
4.2 编译内核
- 获取需要安装的内核源代码。
- 使用tar命令把源代码解包到/usr/src/linux-version-ext目录
- 使用cd命令把路径切换到这个目录。
- 选择你想使用的内核配置工具程序:
图形化功能最少,又很乏味的工具是config程序
一个图形化的工具是menuconfig程序
用于对内核进行配置的X工具总是最流行的,它叫做xconfig
Make [config|menuconfig|xconfig]
保存并退出内核配置程序之后,就已经有了用来配置内核设置值了。 - 输入“make dep”命令建立依赖关系表,它定义了包括在内核源代码中的某个特定文件如果发生了变化,就需要修改哪一个文件。
- 输入“make clean”命令删除安装过程中产生的大量临时文件。
- 输入“make bzImage”命令完成建立新内核的过程。
- 输入“make modules”命令编译内核模块并把它们存放到相应的位置。这是那些需要加载或者卸载的内核模块,另外还有一些固定加载的。
- 安装内核
4.2 安装内核
简单(自动)方法:
make
install
make
module_install
reboot
4.2 安装内核
手工方法:
- 使用ls命令列出/boot目录中的内容。
- 备份/boot/vmlinuz文件。改名为vmlinuz-version-ext。
3)拷贝编译过程中生成的bzImage文件到/boot目录中。/usr/src/LINUX_PATH/arch/i386/boot/目录中找到。 - 把/boot目录中的bzImage文件改名为“vmlinuz”。
- 把/usr/src/linux/System.map文件拷贝到/boot目录。
- 把路径切换回/usr/src/LINUX_PATH目录。
- “make module_install”命令把内核模块存放到相应的位置。
- 如果SCSI硬盘要确保SCSI模块能够被及时加载。输入“ mkinitrd /boot/initrd-version-ext version-ext”命令确保SCSI模块在引导过程中能够被及时加载。
- 拷贝initrd-version.img到/boot目录,输入“mkinitrd /boot/initrd-version.img version-ext”命令建立一个RAM盘,它将在开机引导启动过程中加载,然后再从机器中被删除
- 配置LILO
4.2 使用RPM包升级内核的步骤
从Red Hat公司的Web升级站点下载内核软件包,按照下面的方法进行操作: - 以根用户身份登录进入系统。
- 使用rpm命令升级下载的非内核文件,输入“ rpm -Uvh packagename”命令。警告千万要在手边准备好一张引导启动盘以防新的内核出现问题。
- 为确保不出现问题,最好安装一个新内核,而不是简单的升级。安装内核文件需要输入“rpm -ivh packagename”命令。
- 从/boot目录中查看当前内核的名称是什么。格式应该是“/boot/vmlinuz-version-ext”
- 输入“mkinitrd /boot/initrd-version.img version-ext”命令建立一个RAM盘,它将在开机引导启动过程中加载,然后再从机器中被删除。
- 配置LILO
4.2 配置LILO - 以根用户身份登录进入系统。
- 使用“vi /etc/lilo.conf”之类的命令打开/etc/lilo.conf文件。
- 除了被升级的部分,文件中新的数据段必须和用户当前运行的旧版本的有关内容保持一致。举例来说,用户原来的数据可能是如下所示的样子:
image = /boot/vmlinuz-2.2.5-15
label =linux
root = /dev/hda1
initrd = /boot/initrd-2.2.5 - 把光标移动到以“image”字样开头的那一行。
- 输入“4yy”拷贝4行文本到缓冲区。
- 按下“G”键前进到文件末尾。
- 按下“o”键在文件末尾插入一个新的文本行。
- 按下ESC键返回到命令模式。
- 按下“p”键把拷贝的文本复制到/etc/lilo.conf文件的末尾。
- 在新的语句中做必要的修改。比如说,把2.2.5-15修改为2.2.5-25等等。initrd项的数据根据版本之间差异的大小可以修改也可以不改。
- 再回到原始数据段部分,把它的label项改为“ linuxold”之类的东西,这样用户就可以把这两个数据段区分开了。
- 输入“:wq”保存文件并退出编辑器程序。
- 输入“/sbin/lilo -v”命令执行LILO程序,让新设置生效。
- 重新启动
6.5 加载核心模块
安装模块:
insmod .o
modprobe
列出已经安装的模块:
lsmod
cat /proc/modules
每一个已经安装的内核版本都应该有一个对应的目录。把路径切换到当前运行内核对应的目录中。
卸载模块
卸载模块
rmmod
只对idle和不再使用的模块起作用
如果机器警告有其他的模块依赖于想要删除的这个,但你还是想删除它的话,可以使用
rmmod -r modulename
检查坏的模块(Tainted Kernel)
Use the /sbin/lsmod command to see whether the kernel is tainted:
6.6 核心参数
Control dynamic kernel configuration / tuning
Most parameters can be changed on the fly!
Can be set multiple ways:
In /etc/sysctl.conf: (Recommended)
fs.aio-max-size=1048576
In /etc/rc.local (RH) or /etc/boot.local (SUSE):
echo 1048576 > /proc/sys/fs/aio-max-size
Using sysctl:
sysctl –w fs.aio-max-size=1048576
Will be lost on reboot if not in /etc/sysctl.conf
shmfs
Mount tmpfs on /dev/shm via fstab
Option “size=8g” means 8GB
Option “size=??” can be larger than physical RAM
Required by Oracle for VLM mode
Only used for buffer cache
Never used in non-VLM mode
IA-32系统上使用超过4g内存
Bigpages (x86)
Separate memory pool using large hw pages
Non-swappable
Must be set aside at boot time
Boot with kernel parameter “bigpages=8192MB”
Use Workaround in bug 3080838
To prevent Kernel panic in sshd_config set:
UsePrivilegeSeparation no -OR-
Compression no (preferred)
Hugetlbfs (RHEL)
Similar to bigpages but, configured at runtime, no need to reboot:
Shutdown instance (free memory)
echo 600 > /proc/sys/vm/hugetlb_pool
Ask for 600MB
cat /proc/sys/vm/hugetlb_pool
Verify you got 600MB, if not might need to reboot
Startup instance
Verify usage in /proc/meminfo
参数: 异步IO - async io requests
/proc/sys/fs/aio-max-size
Max size of data passed to driver at once
Requests larger than this will be broken up
Next chunk will not be submitted until the previous one has completed
Default value: 131072
Unit: bytes
/proc/sys/fs/aio-max-nr
Max number of aio requests system-wide
Limits number of structures allocated, not the number of requests in flight!
Each Oracle process allocates 1024
Default value: 65536
Unit: count
参数: 共享内存
/proc/sys/kernel/shmmax
Max size of a single shared memory segment
Smaller values mean more segments needed
Default value: 33554432
Unit: bytes
Maximum allowed: 4GB - 1 (4294967295)
/proc/sys/kernel/shmall
Max amount of shared memory system-wide
Default: 2097152
Unit: ?
/proc/sys/kernel/shm-use-bigpages
Allowed values:
0: don’t use bigpages pool for shared memory
1: use bigpages pool for SysV shared memory
2: use bigpages pool for SysV and shmfs
Default value: 0
Use Workaround in bug 3080838
To prevent Kernel panic in sshd_config set:
UsePrivilegeSeparation no -OR-
Compresson no (preferred)
RHEL Kernel Types (IA-32)
Choose the right kernel
“smp”: 2-level page tables
HW can only address 4GB of RAM
4kB pages and 4MB “large” pages
“enterprise”: 3-level page tables
HW can address up to 64GB of RAM
4kB pages and 2MB “large” pages
RHEL2.1: max 16GB RAM supported
SLES8: 64GB officially supported
进程地址空间 (IA-32)
3GB user/1GB kernel address space
0x00000000-0xbfffffff user
0xc0000000-0xffffffff kernel
Stack grows down from 0xbfffffff
mapped_base
Address where .so libraries are loaded
Default value: 0x40000000
Configure via /proc/$PID/mapped_base
练习
为虚拟机安装vmware-tools软件
安装
确认是否安装
卸载
配置系统服务
启动服务:
rsh rexec rlogin telnet sshd vsftpd rawdevices
禁用服务:
cups sendmail smartd apmd
chkconfig service
配置自动启动服务
/etc/rc.d/rc.local,
启动时自动授权oracle用户文件权限
/dev/rawctl
/dev/raw/*
chown chmod
设置Linux核心参数
编辑 /etc/sysctl.conf
参数生效 #sysctl -p
7 Linux操作系统网络文件系统
7.1 FTP服务器的安装
ftp软件
vsftpd
wu-ftpd、proftpd、pureftpd等
vsftpd安装
如果选择完全安装Linux,则系统就默认安装vsftpd服务器。
Linux添加应用程序
Redhat: 单击【主菜单】|【系统设置】|【添加删除应用程序】菜单项,在出现的【软件包管理】对话框里选中“FTP服务器”选项,然后单击【更新】按钮,插入要求的安装光盘,按照屏幕提示完成安装。
SUSE: 使用YaST
RPM安装
获得vsftpd-1.1.3-8.i386.rpm安装包
#rpm –ivh vsftpd-1.1.3-8.i386.rpm
-
FTP服务器的安装与设置
vsftpd配置文件
/etc/vsftpd.ftpusers 指定哪些用户帐号不能访问FTP服务器。
/etc/vsftpd.usr_list 该文件里的用户帐号在默认情况下也不能访问FTP服务器。
/etc/vsftpd/vsftpd.conf 定义用户登录控制、用户权限控制、超时设置、服务器性能选项、服务器响应消息等FTP服务器的配置。
1 FTP服务器的设置
(1)用户登录控制anonymous.enable=YES,允许匿名用户登录。
no_anon_password=YES,匿名用户登录时不需要输入密码。
local_enable=YES,允许本地用户登录。
deny_email_enable=YES,可以创建一个文件保存某些匿名电子邮件的黑名单,以防止这些人使用Dos攻击。
(2)用户权限控制
write_enable=YES,开启全局上传权限。
anon_upload_enable=YES,允许匿名用户具有上传权限。
anon_mkdir_wirte_enable=YES,允许匿名用户有创建目录的权利。
chown_username=whoever,当启用chown_uploads=YES时,所指定的属主用户帐号,此处的whoever用合法的用户帐号来代替。
chroot_list_enable=YES,用一个列表限定哪些本地用户只能在自己目录下活动。
(3)用户连接和超时选项
idle_session_timeout=600,设定默认的空闲超时时间,用户超过这段时间不动作将被服务器踢出。
data_connection_timeout=120,设定默认的数据连接超时时间。
(4)服务器日志和欢迎信息
dirmessage_enable=YES,允许为目录配置显示信息,显示每个目录下面的message_file文件的内容。
ftpd_banner=Welcome to FTP service,自定义FTP用户登录到服务器所看到的欢迎信息。
xferlog_enable=YES,启用记录上传/下载活动日志功能。
xferlog_file=/var/log/vsftpd.log,自定义日志文件的保存路径和文件名,默认是/var/log/vsftpd.log。
1 FTP服务器的安装与设置
启动/重新启动/停止vsftpd服务
启动vsftpd服务:
/etc/rc.d/init.d/vsftpd start
重新启动vsftpd服务:
#/etc/rc.d/init.d/vsftpd restart
关闭vsftpd服务:
#/etc/rc.d/init.d/vsftpd stop
7.2 网络文件系统NFS服务器配置
Make nfs mountpoint (NFS host):
mkdir -p /nfs
Set /etc/exports (NFS host)
/nfs prv1.demo(rw,no_root_squash) prv2.demo(rw,no_root_squash)
Set /etc/hosts
127.0.0.1 localhost.localdomain localhost
10.1.1.1 prv1.demo prv1 #public network interface
10.1.1.2 prv2.demo prv2 #public network interface
Configure start unused services(NFS host):
chkconfig --level 2345 nfs on
Set the accessrights for the nfs mountpoint (NFS host)
chmod 777 /nfs
mount -t ext3 /dev/sdd3 /nfs
/etc/fstab
/dev/sdd3 /nfs ext3 defaults 1 2
Mount /nfs
Edited /etc/modules.conf (NFS host)
options nfs nfs_uncached_io=1
Reboot
2 网络文件系统NFS客户端配置
Make the mountpoint (NFS client) :
mkdir -p /oracle/oradata
Configure /etc/fstab (NFS client)
share.demo:/nfs /u01/oradata nfs rsize=8192,wsize=8192,timeo=14,soft,nointr,tcp,noac
Mount the nfs mountpoint (NFS client)
mount /u01/oradata
7.3 Samba文件系统
samba是Windows系统的网络文件协议
samba可以用于与Windows系统文件共享
Linux中访问Windows文件系统
配置/etc/fstab
//[host]/[share] /[dir] smbfs username=[user],password=[pwd] 1 2
#mount /[dir]
直接连接
#mount -t smbfs -o username=[user],password=[pwd] //[host]/[share] /[dir]
3 配置Linux上的samba服务器
配置文件 /etc/samba
smb.conf 主要配置
smbpasswd 帐户信息
3 Samba
smb.conf配置信息
workgroup : 設定網絡群組
printcap name : Samba 3預設為CUPS,CUPS為Unix系統列印服務
load printers :Samba啟動時自動載入印表機設定
printing : 如系統使用CUPS可忽略上兩項
hosts allow : 設定可連線之客戶端IP地址範圍
security : 設為user,效果類似一般MSWindows檔案共享(非網域架構)
password server : 可讓Samba用第二台電腦作密碼認證
encrypt passwords : 把密碼以加密形式傳送
local master : 本地主瀏覽
os level : 系統等級
preferred master : 主瀏覽優勢
3 Samba
smb.conf配置信息
[sample]
comment = something share
path = /home/somewhere
browseable = yes
writable = yes
create mask = 0755
valid users = @staff lancelot
public = no
printable = no
3 Samba
注意事项
檔案權限層次
使用者名稱對換
密碼加密情況
網域角色
群組證策
軟件派發
並非盲目替代MSWindows
配置vsftpd
启动服务器
客户端连接服务器
配置NFS
启动服务器
客户端连接服务器
配置samba
连接windows系统共享文件
/etc/fstab
//[host]/[share] /[dir] smbfs username=[user],password=[pwd] 1 2
8 Linux操作系统系统优化
内容提要
Performance concepts and measurement tools:
CPU
Memory
Disk I/O
Network
Process
Profiling Kernel & Applications
Measurement Tools
Linux has measurement tools common to
UNIX platforms:
System Activity Reporter: sar
Historical database
Virtual Memory Statistics: vmstat, free
I/O Statistics: iostat
Top Resource Consumers: top -c
X-based tools: xosview, gnome-system-monitor, ksysguard, gkrellm
CPU Measurements
Identify the CPU statistics and interpret them:
Idle time: %idle
Executing user code: %user
Executing system code: %system
Load average: runq-sz
Start with cat /proc/cpuinfo
Total CPU count/speed
There are several ways to see the same information, for example: CPU activity
CPU Activity - mpstat
What is my CPU doing?: mpstat
CPU Activity - sar
What is my CPU doing?: sar
CPU Activity - iostat
What is my CPU doing?: iostat
Linux Virtual Memory
Each process is assigned a contiguous address space in virtual memory that maps process memory allocations to the real memory
User address space is a contiguous set of pages and is limited to 4GB per process
Physical Address Extension (PAE), allows access to more than 4GB of physical memory
RHat: ‘enterprise’ kernel (implied SMP)
SuSE: 64GB kernel (implied SMP)
Swap
Measuring Swap
How much is available/used?
swapon -s (cat /proc/swaps)
vmstat
so: Amount of memory KB/s SWAP OUT to disk
si: Amount of memory KB/s SWAP IN from disk
swapd: Amount of virtual memory KB reserved
Create/Add more?
#mkswap /dev/sdc3
fstab: /dev/sdc3 swap swap pri=42 0 0
Memory Usage
Measuring Memory Usage
Measure memory utilization and paging. Identify the significant memory statistics.
cat /proc/meminfo (units KB)
MemTotal: Total physical memory
MemFree: Total free memory
LowFree: Free memory below 1GB physical
Buffers: Linux Buffer Cache
Cached: Linux Page Cache
BigFree: Free bigpages memory
No Free Memory?
free command reports a very low number, should I be worried
It’s OK if Linux buffer or page cache are big
Look in -/+ buffer/cache row of free for projected free memory
Very useful stat
Memory - sar
-B paging statistics
-R memory statistics
-W swapping statistics
Measuring Disk I/O
You should monitor the I/O across all devices and look for ‘slow’ devices using:
sar, iostat, vmstat
Archive collected statistics for comparison
Network Traffic
Check the following sources of network traffic:
Oracle SQL*Net Servicing SQL connections
Interconnect in RAC environment
Network file system
Samba
HTTP server
Start with sar -n DEV
iptraf also very useful
sar Flags
-f read from sar historical file
/var/log/sa/…
-s -e start/end times
-s hh:mm:ss
-r memory/swap utilization
-c process creation activity
-w context switching activity
Process Specific
Specific process is a suspect:
System call trace:
strace –p <pid>
Library call trace:
ltrace –p <pid>
Detailed process statistics:
ps –o <options>
Try: ps -e -o pid,ppid,pcpu,rss,vsz,pri,wchan,cmd
Who has my file open?
lsof [-p <pid]
For Process Tree, use pstree –p
Not seeing a process, it’s probably a thread, try: ps -efm
What Does the Kernel Do?
It’s possible to profile the kernel and identify where it’s spending time:
Boot with “profile=2 nmi_watchdog=1”
Either in Lilo or Grub or add manually at boottime
Use readprofile -m <map>
Start with readprofile -r (to reset counters)
Very easy to use, but useful only if you see high system time.
To profile user applications use oprofile
http://oprofile.sourceforge.net/
System Wide
RDA (Remote Diagnostic Agent)
http://set.oraclecorp.com/tools/dca/index.html
Lshw (Hardware Lister)
http://freshmeat.net/projects/lshw/
Summary: Linux Monitoring Tools
Overall tools
sar , vmstat
CPU
/proc/cpuinfo , mpstat , top
Memory
/proc/meminfo , /proc/slabinfo
Disk I/O
iostat, sar
Network
iptraf, netstat, mii-tool
Individual process debugging
strace , ltrace, lsof
9 Linux操作系统开发
9.1 使用gcc
1 gcc特性
2 使用简介
3 常用命令行选项
1 gcc特性
编译过程
预处理、编译、链接
支持风格
ANSI C、C++、Objective C
调试信息
能够在生成调试信息同时进行优化
交叉编译
大量扩展(降低可移植性)
2 使用简介
#include <stdio.h>
int main(void)
{
fprintf(stdout,”Hello World!\n”);
return 0;
}
gcc hello.c –o hello
./hello
2 使用简介
过程:
cpp预处理所有的宏、展开头文件
编译为目标代码
使用ld链接成二进制文件
gcc -E hello.c -o hello.cpp
gcc -x cpp-output -c hello.cpp hello.o
gcc hello.o -o hello
gcc test2.c test.c -o test
2 使用简介
常用扩展名解释
.c c语言源代码
.C,.cc c++源代码
.i 预处理后的c源代码
.ii 预处理后的c++源代码
.S,.s 汇编语言源代码
.o 汇编后的目标代码
.a,.so 库代码
3 常用命令行选项
-o FILE 指定输出文件名,未指定a.out
-c 只编译,不链接
-DFOO=BAR 定义预处理宏
-IDIR 将DIR指定的目录添加到头文件搜索路径中
-LDIR 将DIR加入到库文件的搜索目录列表中,缺省情况下gcc只链接共享库
-static 链接静态库
-lFOO 链接名为FOO的函数库,如-lmath
3 常用命令行选项
-g 在可执行文件中包含调试信息
-ggdb 在可执行程序中包含只有GNU debugger才能识别的大量调试信息
-p 加入prof能够识别的统计信息
-ON 编译时进行优化(N为优化级别)
-w 关闭所有警告
-Wall 发出所有gcc能提供的警告
-werror 将警告转化为错误,中止编译
-v 显示每一步详细信息
9.2 使用Gnu’s make管理项目
为何使用make
编写makefile
深入了解makefile
额外的make命令行选项
调试make
常见错误
常用的makefile目标
1为何使用make
包含多个源文件的项目在编译时有长而复杂的命令行,可以通过makefile保存这些命令行来简化该工作
make可以减少重新编译所需要的时间,因为make可以识别出哪些文件是新修改的
Make维护了当前项目中各文件的相关关系,从而可以在编译前检查是否可以找到所有的文件
2 编写makefile
makefile:一个文本形式的文件,其中包含一些规则告诉make编译哪些文件以及怎样编译这些文件,每条规则包含以下内容:
一个target,即最终创建的东西
一个和多个dependencies列表,通常是编译目标文件所需要的其他文件
需要执行的一系列commands,用于从指定的相关文件创建目标文件
2 编写makefile
make执行时按顺序查找名为GNUmakefile,makefile或者Makefile文件,通常,大多数人常用Makefile
Makefile规则:
target: dependency dependency [..]
command
command
[..]
注意:command前面必须是制表符
2 编写makefile
例子:
3 深入了解makefile
伪目标:如上例中的clean
变量:
声明 VARNAME=sometext […]
使用
(
V
A
R
N
A
M
E
)
递
归
展
开
变
量
,
如
T
O
P
D
I
R
=
/
h
o
m
e
/
y
o
u
n
g
,
S
R
C
D
I
R
=
(VARNAME) 递归展开变量,如TOPDIR=/home/young, SRCDIR=
(VARNAME)递归展开变量,如TOPDIR=/home/young,SRCDIR=(TOPDIR)/src,则SRCDIR=/home/young/src
make可以检测到错误的递归展开,如CC = gcc CC=$(CC) –o
解决方案 CC:=gcc -o CC+= -O2
例子
OBJS = editor.o screen.o keyboard.o
HDRS = editor.h screen.h keyboard.h
editor: $(OBJS)
gcc -o editor $(OBJS)
editor.o : editor.c $(HDRS)
gcc -c editor.c
screen.o: screen.c screen.h
gcc -c screen.c
keyboard.o : keyboard.c keyboard.h
gcc -c keyboard.c
clean:
rm editor $(OBJS)
深入了解makefile
环境变量:make会自动读取环境变量并使用
自动变量:
$@ 规则的目标对应的文件名
$< 规则中的第一个相关文件名
$^ 规则中的所有相关文件的列表
$? 规则中日期新于目标的所有相关文件的列表
$(@D) 目标文件的目录部分(如果目标在子目录中)
$(@F) 目标文件的文件名部分
3 深入了解makefile
预定义变量:
AR 归档维护程序 ar
AS 汇编程序 as
CC C编译程序 cc
CPP C预处理程序 cpp
RM 文件删除程序 rm –f
ARFLAGS ASFLAGS CPPFLAGS LDFLAGS
3 深入了解makefile
隐式规则
3 深入了解makefile
添加注释:行首加#符号
额外make命令行参数
-f file 指定makefile的文件名
-n 打印要执行的命令但不实际执行
-r 禁止使用所有make的内置规则
-d 打印调试信息
-k 某个编译目标失败,继续编译其他目标
4 调试make
使用-d参数
输出信息:
重新编译时需要比较的文件
被比较文件以及比较结果
需要被重新生成的文件
make想要使用的隐含规则
make实际使用的隐含规则以及所执行的命令
5 常见的make出错信息
No rule to make target ‘target’. Stop
‘target’ is up to date
Target ‘target’ not remake because of errors (-k参数)
command: Command not found
Illegal option - option
6 有用的makefile目标
install 目标安装
dist 生成准备发布的软件包,删除编译工作目录中的旧的二进制文件和目标文件并创建一个归档文件
distclean
uninstall
test或者check 诊断安装包
installtest或installcheck
9.3 使用autoconf创建自配置软件
开发在不同UNIX和类UNIX上都可以运行的软件:
代码需要可移植
开发者必须对不同系统的编译和运行环境,甚至是硬件体系结构有足够的了解
使用autoconf可以生成一个自动配置源代码包的shell脚本,以使程序能够在许多不同品牌的UNIX和类UNIX上编译和运行。这个脚本通常叫做configure,它检查在当前系统中是否提供程序所需要的某些功能,并在此基础上生成makefile。
9.4 比较和归并源文件
1 比较文件
2 生成补丁
1 比较文件
cmp命令
diff 命令
diff3 命令
sdiff 命令
cmp命令
cmp [options] file1 file2
比较两个文件,给出差别字符的位置和行号。同时可以设置选项使得cmp给出结果时同时显示差别字符。
-c 显示第一个差别字符
-l 以十进制显示差别字符的位置,并以八进制显示其数值
diff命令
diff [options] file1 file2
普通输出格式:
仅按序显示差别行
上下文输出格式:-C
以一些行作为上下文(上下文hunk)来显示差别行,以便用户更清楚地知道所比较文件的差别。
统一输出格式:-U
修改了上下文格式,取消了重复的上下文并简化了输出。
diff3 命令
两个人同时修改了一个公用文件的情况下,使用diff3命令,可以比较两个文件对一个源文件的修改,并把结果合并在一个输出文件中,用以指出两个文件对源文件所作的修改的冲突之处。
diff3 [options] myfile oldfile yourfile
sdiff 命令
使用交互方式来合并文件,并以逐字格式显示文件。使用交互特性时,应在命令行使用-o file选项指定输出文件,在执行时,sdiff显示每一个hunk,并在其后输出提示符%,此时键入所需要的命令,然后回车,可用的命令如下:
l 把左边的列复制到输出文件
r 把右边的列复制到输出文件
el 先编辑左边的列,然后复制
er 先编辑右边的列,然后复制
e 放弃左右两列,输入新文本,然后把新文本复制到输出文件
eb 链接左右两列并进行修改,然后把结果复制到输出文件
q 退出
2 准备补丁
创建补丁:
diff -c sigrot.1 sigrot.2 > sigrot.patch
diff -u sigrot.1 sigrot.2 > sigrot.patch
使用-r参数来遍历目录
patch -p0 < sigrot.patch
p0 表示指定使用补丁前补丁中所包含的文件名中需要剥离的”/”的重数,-p则剥离了除最终文件名之外的所有部分。
恢复:patch -p0 -R < sigrot.patch
使用RCS进行版本控制
什么是版本控制
为什么需要版本控制
RCS和CVS
术语
基本用法
RCS关键字
什么是版本控制
跟踪和管理文件变化的自动过程
RCS (Revision Control System)
修改控制系统
其他类似的GNU软件
SCCS Source Code Control System
CVS Concurrent Version System
为什么需要版本控制
1 也许有一天你对源代码做了关键改动,删除了老的文件并且忘记了所作改动的确切位置
2 同时跟踪关于当前版本,下一版本以及修改过的错误的情况等信息是冗长并且容易出错的事情
3 也许你的同事不经意间修改了你的代码,会使得你不得不在备份磁带上疯狂查找以找回合适的版本
RCS和CVS
CVS建立在RCS的基础上,新增了两个特性:
1 CVS比RCS更适合于管理多目录的服务,因为它处理层次目录结构时比RCS简单,同时它对于项目的概念也更加完整,可以认为,RCS是面向文件的,而CVS则面向项目
2 支持分布式项目的开发,多个开发者可以在不同的地点或者Internet上共同开发一个项目,他们所存取和操作的是一个单独的代码库。其成功例子:KDE和Debian的Linux版本
术语
RCS Files: 在RCS目录下的文件,由RCS控制,并通过RCS命令存取。一个RCS文件包含某一特殊文件的所有版本。通常,RCS文件的扩展名是,v
Working file: 从RCS源代码库(即RCS目录)中检索到的一个或者多个文件,放置在当前工作目录下,并能够被编辑
术语
Lock: 以编辑目的取回工作文件时别人就不能同时编辑这个文件。此时,文件由第一个编辑它的人锁定
Revision: 源文件的一个特定版本,用数字标识。Revision的编号从1.1开始,并依次递增,除非强制指定修订版本号
RCS自动处理各版本的存储、检索、更改日志、存取控制、发行管理、修订标识和合并;并且,由于它只跟踪文件的变化,所以只需要最小的空间。
基本用法
ci : Check In
co : Check Out
mkdir RCS
ci howdy.c 建立一个RCS文件,名为howdy.c,v,将版本号设置为1.1,并要求输入描述
co howdy.c 将howdy.c文件从最新的版本中取出,存为工作文件,如果想修改文件,必须使用co -l howdy.c,将其锁定。
编辑完之后,如果想知道做了什么改动,有什么区别,可以使用rcsdiff howdy.c
遇到无法锁定的情况,可以使用rcs -l howdy.c来获得锁。
基本用法
如果是单用户使用,可以使用rcs -U howdy.c来关闭锁机制,用rcs -L howdy.c 来打开锁机制。
如果你想把文件变成RCS文件,但是又不想工作文件被删除,使用:
ci -l f.c 或者 ci -u f.c
前者执行之后用户仍拥有锁,而后者执行后用户不再有锁(也就是,不可写)。
基本用法
其他参数
-r 指定需要获取的版本号
-f 强制RCS覆盖当前的工作文件
如果你想把当前的版本号改变,使用
ci -r2 howdy.c 或者 ci -r2.1 howdy.c
将使用新的版本号。以后的版本将自动使用2.2, 2.3…
如果不强调 -r,总是取出当前版本号最大的版本。
如果check in 时使用 ci -r1.3.1, 则新版本号会是 1.3.1.1
关于分支,使用 rcsfile
基本用法
ident :可以在所有类型的文件中定位RCS关键字(形如
K
E
Y
W
O
R
D
:
V
A
L
U
E
KEYWORD:VALUE
KEYWORD:VALUE的字符串,不一定非得是RCS关键字),开发人员利用这个特性就能找出程序的特定发行版本中所使用的各个模块的版本号或者其他附加信息。
在模块中内嵌信息是一种有用的手段,因为这样就可以把特定的问题定位到特定的代码模块。
基本用法
rcsdiff -rVer1 -rVer2 Filename
rlog Filename 打印日志消息和其他信息
rlog –R只显示文件名 -L 列出被加锁的文件 -l 列出被某个指定用户加锁的文件
rcsmerge 可以合并多个版本,生成一个单独的工作文件
rcsmerge -rAncestor -rDescendant Working_file -p > Merged_file
基本用法
rcs 用于两种情形:
如果以只读方式取出文件后做修改,并且想保存结果,此时可以使用rcs -l Filename,取出该文件,并加锁,同时不覆盖现有的同名文件。
如果需要打开其他人对文件的加锁,可以使用rcs -u filename,此时文件被解锁,并且原来的加锁者将受到一条解释信息。
此外:rcs -mrev:msg可以修改某个版本的描述信息
基本用法
rcsclean 清除RCS文件,基本用法为rcsclean [options] file1 file2 …
不加任何选项的rcsclean删除哪些在取出后没有更改的工作文件
-u 选项可以先解锁所有已经加锁的文件,然后再删除没有更改的那些工作文件。使用-rM.N可以删除指定的版本,例如:rcsclean –r2.3 howdy.c将删除howdy.c的2.3版
RCS关键字
I
d
Id
Id
L
o
g
Log
Log 日志消息,RCS是在先前的日志消息上面插入新的消息,而不是用最新的消息取代以前的消息
A
u
t
h
o
r
Author
Author 存入该版本的用户登录名
D
a
t
e
Date
Date 该版本存入的日期和时间,使用UTC格式
H
e
a
d
e
r
Header
Header RCS文件的全路径名,版本号,日期,时间,作者,状态,加锁者(在文件被加锁的情形下)
RCS关键字
L
o
c
k
e
r
Locker
Locker 锁定该版本的使用者的登陆名
N
a
m
e
Name
Name 用于取回该版本的符号名
R
C
S
f
i
l
e
RCSfile
RCSfile 不包含路径的RCS文件名
R
e
v
i
s
i
o
n
Revision
Revision 该版本的版本号
S
o
u
r
c
e
Source
Source RCS文件的全路径名
S
t
a
t
e
State
State 版本的状态:Exp(试验版本)、Stab(稳定版本)、Rel(发行版本),缺省为Exp
ABI Compatibility
What is Application Binary Interface
Runtime compatibility mechanism
Allows for an upgrade option on components so long as the “binary” interface is maintained
If “binary” interface changed then ABI is said to have “changed” losing compatibility
ABI Illustration
#define ARRAY_SIZE 8
struct my_struct
{
int array[ARRAY_SIZE];
};
init_struct( struct my_struct *p )
{
memset( p, 0, sizeof(struct mystruct);
}
Glibc Compatibility
Usually only affected by 2nd-digit change
e.g., glibc-2.1 glibc-2.2
Symbols are versioned to provide executable binary compatibility
Does NOT provide link time compatibility
Must link against the same version of glibc that objects were compiled against
Since Oracle links at the customer site, we get around this by using glibc stubs for linking
Gcc C++ Compatibility
C++ ABI has changed between 2.96 and 3.2
C++ on Linux now closer to ISO standard
C++ programs built with gcc-2.96 will not run with runtime libraries from gcc-3.2
compatibility package ???
Current Architectures
These are the CPUs that can run Linux today:
List all CPUs one would need to build for if wanted to send a product on all types of CPUs.
IBM s/390, IA32
Building for i386 covers most bases w/o optimizations
Debugging your code
Spinning process? Oracle shadow? Attach to process using gdb debugger:
Profiling your code
Is your code doing what you think it should?
To find out or learn more on 3rd party tools, use oprofile, a freeware runtime profiling tool
Works on UL but not on RHEL 2.1AS
Intel compiler: vtune
10 Linux操作系统网络管理
10.1 C/S介绍
守护进程xinetd
RPC
1 xinetd守护进程
xinetd(eXtended InterNET services daemon)提供类似于inetd+tcp_wrapper的功能,但是更加强大和安全。它能提供以下特色:
-
支持对tcp、ucp、RPC服务(但是当前对RPC的支持不够稳定)
-
基于时间段的访问控制
-
功能完备的log功能,即可以记录连接成功也可以记录连接失败的行为
-
能有效的防止DoS攻击(Denial of Services)
-
能限制同时运行的同意类型的服务器数目
-
能限制启动的所有服务器数目
-
能限制log文件大小
-
将某个服务绑定在特定的系统接口上,从而能实现只允许私有网络访问某项服务
-
能实现作为其他系统的代理。如果和ip伪装结合可以实现对内部私有网络的访问
它最大的缺点是对RPC支持的不稳定性,但是可以启动protmap,与xinetd共存来解决这个问题
1 编译安装
www.xinetd.org下载xinetd
configure 选项:
–with-libwrap :根据tcpd配置文件(/etc/hosts.{allow, deny})来进行访问控制
–with-loadavg:在系统负载过重时关闭某些服务进程,来实现某些DoS攻击。
–with-inet6 : 使用该选项xinetd将支持IPv6
1 配置文件
配置方式:
/etc/xinetd.conf 和 /etc/xinetd.d
基本格式:
Service service_name
{
…
}
其中是属性表,每个属性可指定一个值,使用=,部分属性支持+=,-=实现在原有的基础上加、减某值。
1 servers
实现提供当前运行在服务器上的进程表 ,以及有关这些进程的确切信息 ,如:
Service servers
{
type = INTERNAL UNLISTED
Socket_type = stream
Protocol = tcp
Port = 9997
Wait = no
Only_from = 172.17.33.111
Wait = no
}
1 Services
services特定项的目的是提供可用服务的列表
Service services
{
type = INTERNAL UNLISTED
Socket_type = stream
protocol = tcp
port = 8099
wait = no
Only_ from = topcat
}
1 Xadmin
这个特定服务项提供以交互方式获得services特定服务所提供信息的方法
Service xadmin
{
type = INTERNAL UNLISTED
socket_type = stream
protocol = tcp
port = 9967
wait = no
Only_from = topcat
}
10.2 Linux路由实现
路由器简介
用Linux主机作静态路由
用GateD实现动态路由
2 路由器简介
路由器的基本概念
路由器的原理与作用
路由器的功能
Linux的路由种类
路由器的基本概念
路由和路由器
路由器和交换机的区别
路由器的分类:硬路由器和软路由器
路由器的原理与作用
路由选路的方式有两种:静态(Static)路由和动态(Dynamic)路由 。
静态路由
静态路由是指从每一个源地址到目的地址的传输都具有固定的路径。一般是根据网络的配置情况,预先添加到路由表里的。如果网络设置发生了变化不会自动更新,需要手动进行更改。
动态路由
常用的动态路由协议 :
RIP协议
OSPF协议
BGP协议
路由器的功能
数据转发
路由选择
协议转换
多种协议的路由选择
流量控制
分段和组装功能
网络管理功能
Linux的路由种类
1.在局域网和外部网之间进行数据包转发 。
2.分割子网并实现各个逻辑子网间数据包的转发。
3.用普通PC机来作通常意义上的路由器,也就是架设软路由器。
硬件准备——实例(网络拓扑图 )
设置服务器IP地址
eth0设置外部网络的IP地址 ,其余四个网络接口分别设置如下内部IP地址:
# ifconfig eth0 202.38.85.10 netmask 255.255.255.0 broadcast 202.38.85.255
ifconfig eth1 192.168.1.1 netmask 255.255.255.192 broadcast 192.168.1.64
#ifconfig eth2 192.168.1.65 netmask 255.255.255.192 broadcast 192.168.1.128
ifconfig eth3 192.168.1.129 netmask 255.255.255.192broadcast 192.168.1.192
#ifconfig eth4 192.168.1.193 netmask 255.255.255.192broadcast 192.168.1.255
或编辑/etc/sysconfig/network-scripts/目录下的启动脚本文件 。
设置路由
route add -net 202.38.85.0 netmask 255.255.255.0 dev eth0
#route add -net 192.168.1.0 netmask 255.255.255.192 dev eth1
#route add -net 192.168.1.64 netmask 255.255.255.192 dev eth2
#route add -net 192.168.1.128 netmask 255.255.255.192 dev eth3
#route add -net 192.168.1.192 netmask 255.255.255.192 dev eth4
最后指定默认网关 :
#route add default gw 202.38.85.1
配置客户端和检测路由设置
1.在一个子网内的一台客户机上,检测能否连通本子网的网关。
2.在一个子网内的一台客户机上,检测能否连通另一个子网的网关。
3.在一个子网的一台客户机上,检测是否能够连通另一个子网内的一台客户机。
4. 最后在一个子网的一台客户上,检测是否能够连通外部网络。
用GateD实现动态路由
GateD简介
配置GateD实现RIP
GateD简介
GateD是一个基于路由协议之间交换信息产生的路由数据库,来处理动态路由的软件。它采用了模块化的设计,包括核心服务程序、路由信息数据库、以及多种协议的支持模块。GateD支持的路由协议主要有:RIP、DCN HELLO、OSPF、EGP和BGP。GateD最初是被用来连接NSFNET(美国国家科学基金会NSF资助的关于主干网)网络之间的交界区域。
rip简介
rip报文类型:
请求报文:查询相邻RIP设备,获得它们的距离向量表
响应报文:公告它的本地距离向量表中的信息
在以下情况下发出:
每隔30秒发送一次
对另一个RIP结点产生的请求报文的响应
如果支持触发式,则在本地距离向量表发生变化时被发出。
RIP使用520端口发送和接收,每个数据报最大为512字节
rip分类
rip-1:
rip-2:
支持CIDR和VLSM
支持组播
支持认证
支持rip-1
rippng:
支持IPV6的认证
支持IPV6地址
使用521端口
RIP协议缺点:
路径代价限制和收敛时间长
Rip配置
rip yes |no|off [ {
broadcast;
nobroadcast;
nocheckzero;
preference preference;
defaultmetric metric;
query authentication [none|[[simple|md5]paswd]];
interface interface_list
[noripin]|[ripin]
[noripout]|[ripout]
[metricin metric]
[version1]|[version2[multicast|broadcast]]
[[secondary]authentication[none|[[simple|md5]password]];
trustedgateways gateway_list;
sourcegateways gateway_list;
traceoptions trace_options;
}];
Gated.conf配置
Broadcast:指定rip包被广播发送
Nobroadcast:在绑定的接口上不广播rip包
Nocheckzero:指定rip不处理RIP包中的保留域
Preference [n]:设置rip路由的preference,默认为100
Metric [n]:尺度(默认为16)
Query authentication:设置身份认证方式
Interface interface_list:针对接口进行参数设定
Trustedgateways gateway_list:定义接收更新包的网关
Sourcegateways gateway_list:直接发送rip的路由器列表
Traceoptions trace_options:设置RIP跟踪选项
INTERFACE_LIST选项
noripin:忽略指定接口接收到的RIP包
ripin:默认的设置参数
noripout:指定接口上不向外发送rip包
ripout:默认的设置参数
metricin metric:加入核心路由表前,增加的尺度
metricout metric:在指定的接口发出rip包前,增加的尺度
version 1:发送第一个版本的rip协议的数据包
version 2:指定发送第二个版本的rip 协议的数据包。
multicast:在指定接口上的发送第二版本的RIP包用组播方式
broadcast:指定在特定的接口上,使用广播方式来发送
配置GateD实现RIP
rip yes {
broadcast ;
defaultmetric 5 ;
interface eth1 version 2 multicast ;
} ;
static {
default gateway 202.38.85.1 preference 140 retain ;
} ;
3 ppp
http://www.samba.org/ppp/
http://www.roaringpenguin.com/penguin/open_source_rp-pppoe.php
一、编译内核
要建立PPPOE服务器,除了内核要支持PPP以外还需要内核支持PPPOE,不过在2.4.18里需要打开内核的不成熟代码才可以选择,内核的配置如下:
code maturity level options——>[*] prompt for development and/or incomplete code/drivers
networking options——>[*] packet socket[*] packet socket:mmapped io
network device support——>[*] ppp (point-to-point protocol) support[*] ppp multilink support (experimental)[*] ppp filtering[*] ppp support for async serial ports[*] ppp support for sync tty ports[*] ppp deflate compression[*] ppp bsd-compress compression[*] ppp over Ethernet (experimental)
character devices——>[*] non-standard serial port support[*] hdlc line discipline support
编辑/etc/modules.conf,加入以下几行:
• alias char-major-108 ppp_generic
• alias /dev/ppp ppp_generic
• alias tty-ldisc-3 ppp_async
• alias tty-ldisc-13 n_hdlc
• alias tty-ldisc-14 ppp_synctty
• alias ppp-compress-21 bsd_comp
• alias ppp-compress-24 ppp_deflate
• alias ppp-compress-26 ppp_deflate
10.3 ppp
使用configure
•使用make编译PPPD,这里有几个参数比较重要,要支持windows的客户端,应该在编译时加上选项USE_MS_DNS=1,如果你的系统shadow的话,你应该使用make HAS—SHADOW=1表示支持shadow密码
•编译完成后,将生成pppd、pppdump、chat和pppstats这几个文件,使用make install安装这些文件
启动PPPOE进程:
pppoe-server –L 10.0.0.1 –R 10.0.0.2 –N 64 -u
-L: 指定PPPOE服务器的IP地址
-R: 指定PPPOE拨入服务器分配给客户端的IP地址段
-N: 允许客户端同时拨入的数量(默认是64 最大是65534)
修改/etc/ppp/options,查看有没有以下几行,没有就加进去:
local
repaire-pap
login
auth
defaultroute
hide-password
ipcp-accept-local
ipcp-accept-remote
10.0.0.1:10.0.0.255
netmask 255.255.255.0
ms-dns 10.0.0.1
修改/etc/ppp/pppoe-server-options,将所有的行都注释掉
添加用户到/etc/ppp/pap-secrets中,例如添加用户test,密码为123456,允许从任何位置拨入:
#client server secret ip addresses
test * “123456” *
10.4 vpn
freeswan
www.freeswan.org
11 Linux操作系统用Linux构建Intranet
DNS服务器
域名的介绍
BIND的介绍
(Berkeley Internet Name Domain),当前有三版:bind4、bind8、bind9),支持多处理器、线程安全操作、公钥加密、IPv6支持、增量区传送等)
BIND
BIND的组成:
named守护进程,回答用户查询
库例程,联系DNS分布式数据库的服务器
DNS的命令接口:nslookup、dig和host
BIND
BIND名字服务器的分类:
权威:一个区的正式代表
主服务器:区数据的首要服务器,数据在磁盘
从服务器:从主服务器复制得到它的数据
存根:和从服务器类似,但仅复制名字服务器的数据
分支:仅在域内可见的服务器(秘密服务器)
非权威:用缓存数据回答查询:未知数据有效
缓存:缓存以前的查询:没有本地区
转发器:代替许多客户机执行查询,创建一个大的缓存
递归:代替您查询,直到返回答案或出错
非递归:如果不能回答查询,则返回下一服务器地址
BIND
解板库例程:
客户机例程:gethostbyname
轻量级例程:lwresd(对不支持IPv6的主机可以使用,要在服务器中包含lwres语句)
BIND
非/递归工作原理:例:访问:www.sina.com
BIND
缓存和效率:
早期缓存机制仅用于肯定回答,但实验发现DNS查询请求有60%都是无效查询,因此后来实现了否定缓存
BIND
解析器配置:
/etc/resolv.conf
search:列出了如果主机名不完整时要查询的域
如:search wtb.com. wtb.net. wtb.org.
注:此文件中的DNS服务器地址必须是递归的(解析器不懂推荐)
最多,可配置三个DNS地址,按顺序访问
BIND
下载安装BIND:
www.isc.org
(最新版BIND需openssl0.9.6e以上版本,在www.openssl.org下载最新版安装)
BIND
主配置文件:
/etc/named.conf
区文件目录:
/var/named/
区文件:
named.ca //根服务器信息,在ftp.internic.com/domain获取
named.local //本地反向区域
localhost.zone //本地区域
BIND—localhost.zone
$TTL 86400
$ORIGIN localhost.
@ 1D IN SOA @ root (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
1D IN NS @
1D IN A 127.0.0.1
BIND—named.local
$TTL 86400
@ IN SOA localhost. root.localhost. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS localhost.
1 IN PTR localhost.
BIND—/etc/named.conf
注:
1、每句以分号结束
2、大括号用于分组
3、可用:named-checkconf和named-checkzone检查语法错误
BIND—主配置语句类型
include:插入一个文件
options:设置名字服务器的全局配置选项和默认值
server:指定每个服务器所特有的选项
lwres:将DNS也配置成一个轻量级解析器
key:定义验证信息
acl:定义访问控制列表
zone:定义资源记录的一个区
trusted-keys:定义预先设置的密钥
controls:用ndc来定义用于控制名BIND的渠道
logging:指定日志记录分类及其目的位置
view:定义域名空间的一个veiw(视图)
BIND
include:补充文件引入named.conf文件
include “path”;
options:指定全局选项,仅有一个
9.0版本有50个左右的选项,以下是常用选项:
version “string”; [实际版本号]
directory “path”; [启动目录]
notify yes|no; [yes] :数据发生改变,通知从服务器
also-notify servers_ipaddrs; [empty]
:通知所有DNS服务器
BIND- options语句
recursion yes|no; [yes] :递归/非递归解析
allow-recursion {address_list} [allhost} 允许的主机
transfer-format one-answer|many-answers;
主服务器到从服务器一次传输的记录数
transfers-in number; [10] 同时发生入站区传送数目
transfers-out number; [10] 同时发生出站区传送数目
transfers-per-ns number; [2] 每个站点最大数目
transfer-source IP-address; 允许的源IP地址(需和allow 中定义的相同)
BIND- options语句
listen-on port ip_port address_list [53 all]
query-source address ip_addr port ip_port
查询其它名字服务器的接口和端口(用于有防火墙中)
forwarders {in_addr;in_addr;…}; [empty list]
转发服务器列表
forward only|first; [first]
转发方式,仅转发|先转发,不行再自己查询,转发服务器中有大容易的内存,用于缓存
注:转发区域必须是递归
BIND- options语句
allow-query {address_list}; [all hosts]
可以查询的主机
allow-transfer {address_list}; [all hosts]
可以请求传输区数据的主机
blackhole {address_list}; [empty]
从不希望与之通信的主机
BIND-acl语句
acl acl_name{ address_list };
除also-notify语句外,其它地方都可使用
必须在named.conf中定义
必须在使用前定义
默认定义:any、localnets、localhost、none
BIND—server语句
server ip_addr{
bogus yes|no; [no] :伪服务器
provide-ixfr yes|no; [yes(v9)] :发送增量区数据(主服务器)
request-ixfr yes|no: [yes(v9)] :请求增量区数据(从服务器)
support-ixfr yes|no; [no(v8)] :同上
edns yes|no; [yes] :extend DNS协议
transfers number; [2(v9)] :并发传数量
transfer-format one-answer |many-answers; :支持格式
keys {key-id;key-id;…}; :key中定义的密钥ID
}
BIND-- logging语句
术语:
channel(通道):消息能去的地方:syslog或文件
category(类别):named消息类型
module(模块):产生消息的来源模块名
facility(设备):syslog设备名
severity(严重性):出错消息的等级
logging语法:
logging {
[ channel channel_name {
( file path_name
[ versions ( number | unlimited ) ]
[ size size_spec ]
| syslog ( kern | user | mail | daemon | auth | syslog | lpr |
news | uucp | cron | authpriv | ftp |
local0 | local1 | local2 | local3 |
local4 | local5 | local6 | local7 )
| null );
BIND-- logging语句
[ severity ( critical | error | warning | notice |
info | debug [ level ] | dynamic ); ]
[ print-category yes_or_no; ]
[ print-severity yes_or_no; ]
[ print-time yes_or_no; ]
}; ]
category { 模块名 }
};
模块:
xfer-in :区传送
default :默认
security :安全
os :系统
panic :恐慌
statistics :统计信息
config :配置文件
maintenance:维护
BIND—zone语句
定义权威性的区域
装载根服务器地址和名称
一、配置主服务器
zone “domain_name”{
type master;
file “path”;
allow-query{address_list}; [all]
allow-transfer {address_list}; [all]
allow-update{addres_list}; [none] :动态更新、联系DHCP(限本地网络使用)
zone-statistics yes|no [no] :保留统计信息
};
BIND—zone语句
二、从服务器配置
zone "domain_name" {
type slave|stub; :stub:只传送NS记录(即存根)
file "path"; :从主服务器传来的区数据
masters {ip_addr;ip_addr;...}; [no default]:主服务器地址(主服务器有多个网络接口时)
allow-query {address_list}; [all]
allow-transfer {address_list}; [all]
};
BIND—zone语句
三、设置根服务器的线索
zone "." {
type hint;
file "path";
};
named由此“线索”查找其它域的信息,否则只能维护本域
四、设置一个转发区
zone "domain_name" {
type forward;
forward only|first;
forwarders {ip_addr;ip_addr;..};
};
实现一个对外部不可见的DNS
BIND—key语句
key语句:
定义用于某个特定服务器身份验证的有名字的加密密钥。
key key-id{
algorithm string;
secret string;
};
必须在named.conf中先定义方可使用
于某个服务器关联时,只要在该服务器的server中的keys中包括此key_id;
用于验证来自那个服务器的请求,又用来对那些请求的响应作签名
BIND-controls语句
定义rndc如何控制一个正在运行的named进程
controls{
inet ip_addr port allow{addres_list} keys {key_list};
};
默认端口号是:953
rndc-confgen –b 256 //会产生密钥
方法一:可让named和rndc都参考同一个配置文件
方法二:把产生结果分别写入/etc/rndc.key和/etc/named.conf,此方法用于rndc和dns不在一个主机
BIND—split DNS和view(仅v9)
分隔DNS对不同的网络的可视程度
下表是对内外服务配置的差别
参数 外部 内部
directory /var/named/external /var/named/internal
listen-on 外部接口 内部接口
recursion no yes
allow-query any 仅内部网
forward 不用 forward only
forwarders external_ns
BIND—split DNS和view(仅v9)
view view-name{
match-clients {address_list}; :控制谁能看到
view_option;...
zone_statement;...
};
view是按顺序来处理,所以先加上最严格的限制
view是全无全有的概念,即要么全加要么都不加
BIND—DNS数据库
一、资源记录
格式:
[name] [ttl] [class] type data
特殊字符:
;:引入注释
@:当前的域名
():允许数据跨行
*:通配符(仅由named字段使用)
name:表示该记录所描述的实体(一个主机或域),如果几个连续的记录涉及同一个实体,则第一条记录之后可以省略这个名字。可以用相对名或全名,全名后要加"."
ttl:存活时间,以秒为单位。默认以开头的$TTL设置的值
class:指定网络类型:IN对应internet,CH对应chaosNet,HS对应Hesiod
BIND—DNS数据库
SOA记录
@ IN SOA ns.wtb.com. wtb.wtb.com.(
20041101;序列号
7200 ;刷新时间(2 h)
1800 ;重试时间(30 m)
604800 ;终止时间(1 w)
7200) ;否定缓存存活时间(2 h)
@:名字,可以用$ORIGIN设置;
IN:类别;SOA:记录类型,"ns.wtb.com."是该区的主名字服务器,"wtb.wtb.com."是管理员邮件地址。
20041101:是序列号
7200:指定从服务器应该多长时间联系主服务器,1-6小时为合适值
1800:多长时间后再重试
604800;很长时间重试还是无效时则终止重试
7200:被缓存的否定回答的存活时间
BIND—NS记录
NS:记录标识一个区的权威服务器,通常跟在SOA后面
例:
wtb.com. IN NS ns.wtb.com.
wtb.com IN NS ns.cs.wtb.com.
wtb.com IN NS ns.li.wtb.com.
每个权威名字服务器应该既要在wtb.com的区文件中列出,也要在父区com的文件中列出。仅缓存服务器不能是权威的,不用列出它们。在这中不指定主/从服务器。
BIND—其它记录
A记录:
记录DNS数据库的核心,定义一个主机名到IP地址的对应
hostname [ttl] IN A ipaddr
PTR记录:
执行从IP地址到主机名的反向映射。
addr [ttl] IN PTR hostname
BIND—其它记录
MX记录:定义邮件服务器
name [ttl] IN MX preference host …
CNAME记录:为主机多分配几个名字
nickname [ttl] IN CNAME hostname
注:如果一个主机有别名,在引用时不能使用
LOC记录:描述DNS对象的物理位置和大小,但不汲及技术操作。
name [ttl] IN LOC lat lon [alt [size [hp [vp]]]]
BIND—其它记录
SRV记录:指定域内服务的位置
service.proto.name [ttl] IN SRV pri wt port target
service:标准互联网服务名称(www.iana.org/numbers.htm可查看)
proto:不是tcp就是udp
name:SRV记录引用的域
pri:是MX风格的优先级
wt:是用于几个服务器这间平衡负载的权重(为0表示不需负载平衡)
port:是服务器服务的端口号
target:目标服务器主机(为.表示禁止此服务)
BIND—其它记录
TXT记录:
引入一段说明在DNS记录中
BIND—区文件中的命令
$ORIGIN domain-name :定义域名
$INCLUDE filename : 包含文件
$TTL default-ttl (必须存在) : 默认存活时间
$GENERATE lots-of-args :成组生成对应
注:命令必须从第一列开始。整个命令要在一行
BIND-粘合记录
在父DNS服务器中添加子DNS服务器中的A记录。以便于在父服务器中设置子域的DNS服务器,
cs.wtb.com. IN NS ns1.cs.wtb.com.
kw.wtb.com. IN NS ns2.kw.wtb.com.
ns1.cs.wtb.com IN A 218.22.1.132
ns2.kw.wtb.com IN A 218.22.1.138
BIND-区传送
一、AXFR
传送整个区数据
二、IXFR
只传送少量变更的数据
provide-ixfr yes; //在服务器主区域设置,允许此方式发送
request-ixfr no: //在服务器从区域设置,允许此方式接受
注:IXFR只能用在全自动更新的区域
BIND-动态更新
DHCP的配置:
-
‘ddns-update-style’
这个就是动态DNS的更新方式,有几个选项,我用的是interim,可以用 man dhcpd.conf找到另外的几个选项。 -
‘ignore client-updates’
这个选项是不允许客户机更新DNS记录。当然,也可能允许,但会有一点问题。 -
‘key DHCP_UPDATER’
这个是更新DNS的KEY,是必须的。其中algorithm 后的是生成key的算法,key的生成是用 ‘dnssec-keygen -a HMAC-MD5 -b 128 -n USER DHCP_UPDATER’。 -
‘zone’
要更新的zone,如果是本机就是DNS server,primay 就写127.0.0.1,要是其它机器是DNS server, 就写那台机器的IP。zone test.com. {
primary 127.0.0.1;
key DHCP_UPDATER;
}
zone 251.168.192.in-addr.arpa. {
primary 127.0.0.1;
key DHCP_UPDATER;
}
BIND-动态更新
named.conf的配置:
key DHCP_UPDATER {
algorithm HMAC-MD5;
secret qhB++OR5yWo8BTXwk/m4ng;
}; //必须和dhcp中一样。
zone “test.com” IN {
type master;
file “test.com”;
allow-update { key DHCP_UPDATER; };
};BIND–rndc
status:状态报告
stop:停止named,保存没做完的更新
halt:中止named,不保存没做完的更新
dumpdb:把DNS数据库转储到named_dump.db中
stats:把统计转储到named.stats
flush:刷新服务器的缓存
reload:重新载入named.conf和区文件
reload zone:只重新载入指定的区
reconfig:重新载入配置文件和任何新的区
querylog:开关对查询的日志功能
BIND-DDNS
vi /etc/dhcpd.conf
ddns-update-style interim;
ignore client-updates;
key “rndc-key1” {
algorithm HMAC-MD5;
secret “koWQcX9XbbyzuzeUi0dK0QKmmZtN4L8PjtY4NP3CkOM=”;
};
zone test.com. {
primary 127.0.0.1;
key rndc-key1;
}
vi /etc/named.conf
key “rndc-key1” {
algorithm HMAC-MD5;
secret “koWQcX9XbbyzuzeUi0dK0QKmmZtN4L8PjtY4NP3CkOM=”;
};
zone “test.com” {
type master;
file “test1.com.zone”;
allow-update {key rndc-key1;};
};
注:尽量不要手工修改区域文件,以免冲突而引起named库破坏
BIND-制作自己的”根”服务器
一、自己分发根“线索”文件中只有你DNS服务器的“线索”文件
二、你要对com、net、org等域授权DNS服务器地址。
BIND-安全–chroot
#useradd bind
#cd /chroot/bind
mkdir chroot
mkdir chroot/dev
mkdir chroot/etc
mkdir chroot/etc/namedb
mkdir chroot/usr
mkdir chroot/usr/sbin
mkdir chroot/var
mkdir chroot/var/run
#grep bind /etc/passwd >chroot/etc/passswd
grep bind /etc/group >chroot/etc/group
cp /etc/namedb/named.conf chroot/bind/etc/
cp /etc/localtime chroot/bind/etc/
cp -R /etc/namedb/ chroot/etc/namedb/
mknod chroot/dev/null c 2 2
chmod 666 chroot/dev/null
cp /usr/local/sbin/named* chroot/sbin/
cp /usr/local/sbin/dns* chroot/sbin/
chroot/sbin/named –u bind(或id号) -t /chroot/bind/chroot
BIND-安全DNSSEC
功能:使用公钥加密对区数据的来源进行身份验证,并验证其完整性
一、dnssec-keygen –a DSA –b 768 –n ZONE mydomain.com. //生成密钥对
二、dnssec-makekeyset -t 3600 –s +0 –e +864000 Kmydomain.com.+003+12345 //绑定签名
三、由父区:dnssec-signkey keyset.mydomain.com Kcom.+003+56789 //父对子签名
四、dnssec-signzone -o mydomain.com /db.mydomain //
BIND-启动脚本
if [ -f /etc/init.d/functions ] ; then
. /etc/init.d/functions
elif [ -f /etc/rc.d/init.d/functions ] ; then
. /etc/rc.d/init.d/functions
else
exit 0
fi
Source networking configuration.
. /etc/sysconfig/network
[ ${NETWORKING} = "no" ] && exit 0
Check that smb.conf exists.
[ -f /etc/named.conf ] || exit 0
[ -d /var/namedb ] || exit 0
RETVAL=0
start() {
KIND="Named"
echo -n $"Starting $KIND services: "
daemon /usr/local/sbin/named
RETVAL=$?
echo
[ $RETVAL -eq 0 ] || RETVAL=1
return $RETVAL
}
BIND-启动脚本
stop() {
KIND="Named"
echo -n $"Shutting down $KIND services: "
killproc named
RETVAL=$?
echo
return $RETVAL
}
restart() {
stop
start
}
reload() {
echo -n $"Reloading named all file: "
/usr/local/sbin/rndc reload
RETVAL=$?
echo
return $RETVAL
}
status() {
/usr/local/sbin/rndc status
}
BIND-启动脚本
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
reload)
reload
;;
status)
status
;;
*)
echo $"Usage: $0 {start|stop|restart|status|restart}"
exit 1
esac
exit $?
11.1 Apache服务器的安装与设置
1 Apache服务器简介
Apache服务器是由Apache软件基金(http://www.apache.org)开发的一个功能强大的web服务器。在当前因特网上,Apache是应用最广泛的web服务器。根据美国的NetCraft在不久前的一份调查结果显示:Apache占据了互联网网页服务器市场份额的59.51%,而Microsoft IIS只占据27.46%。
8.1 Apache服务器的安装与设置
2 Apache服务器安装
安装Apache服务器有两种方法 :
(1)通过rpm安装
在RedHat Linux9.0安装光盘上可以找到Apache的rpm包,或者到RedHat的FTP服务器和其镜像站点找到Apache的rpm包。
得到Apache的rpm包后,可以通过下面的命令安装:
rpm –Uvh apache.x.x.x.rpm
其中x.x.x为Apache的版本号,在RedHat Linux9.0里是2.0.40。
8.1 Apache服务器的安装与设置
(2)通过源代码生成Apache
获得Apache的源代码有几种不同的方法。RedHat的发布版本包含有Apache源代码的SRPM软件包,另外还可以在ftp://updates.redhat.com中找到最新的版本,也可以从http://www.apache.org/ 下载Apache的源代码。
目前最新的Apache源代码包的版本是httpd-2.0.44.tar.gz。
获得Apache的源代码后的安装步骤如下:
8.1 Apache服务器的安装与设置
第一步,解压缩Apache源代码包
# tar zxvf httpd-2.0.44.tar.gz
第二步,编译生成Apache服务器
解压缩之后会创建一个httpd-2.0.44的目录,进入该目录,并编译生成Apache服务器。
#cd httpd-2.0.44
#./configure –prefix=/data/apache
# make
# make install
8.1 Apache服务器的安装与设置
3 配置Apache服务器
Apache的配置文件是/etc/httpd/config/httpd.conf , Apache的运行参数由此文件决定,通过修改此文件,来调整 Apache的性能。
在需要配置Apache服务器时,首先编辑httpd.conf文件,然后使用reload,restart,stop和start等参数重新启动httpd进程使得该配置文件生效。如:
# /etc/rc.d/init.d/httpd reload
# /etc/rc.d/init.d/httpd stop
8.1 Apache服务器的安装与设置
4 启动和关闭Apache服务器
通过/sbin/service命令启动Apache服务器:
/sbin/service httpd start
关闭Apache服务器,采用如下的命令:
/sbin/service httpd stop
8.1 Apache服务器的安装与设置
4 启动和关闭Apache服务器
命令restart则用来先关闭服务器,然后再启动服务器:
/sbin/service httpd restart
如果编辑了httpd.conf配置文件,若要配置文件中的配置得以执行,又不想重新启动服务器,可以使用reload命令:
#/sbin/service httpd reload
8.2 FTP服务器的安装与设置
1 安装vsftpd服务器
如果选择完全安装RedHat Linux9.0,则系统就默认安装vsftpd服务器。如果安装RedHat Linux9.0时没有选择vsftpd服务器,则可以按照如下操作安装vsftpd服务器。
单击【主菜单】|【系统设置】|【添加删除应用程序】菜单项,在出现的【软件包管理】对话框里选中“FTP服务器”选项,然后单击【更新】按钮,插入第三张安装光盘,按照屏幕提示完成安装。
8.2 FTP服务器的安装与设置
也可以直接插入第三张安装光盘,定位到/RedHat/RPMS下的vsftpd-1.1.3-8.i386.rpm安装包,然后在终端命令窗口运行以下命令即可开始安装。
# rpm –ivh vsftpd-1.1.3-8.i386.rpm
11.2 FTP服务器的安装与设置
2 vsftpd配置
在RedHat Linux9.0中,vsftpd共有3个配置文件,它们是:
vsftpd.ftpusers 位于/etc目录下。指定哪些用户帐号不能访问FTP服务器。
vsftpd.usr_list 位于/etc目录下。该文件里的用户帐号在默认情况下也不能访问FTP服务器。
vsftpd.conf 位于/etc/vsftpd目录下。该文件定义用户登录控制、用户权限控制、超时设置、服务器性能选项、服务器响应消息等FTP服务器的配置。
8.2 FTP服务器的安装与设置
(1)用户登录控制
anonymous.enable=YES,允许匿名用户登录。
no_anon_password=YES,匿名用户登录时不需要输入密码。
local_enable=YES,允许本地用户登录。
deny_email_enable=YES,可以创建一个文件保存某些匿名电子邮件的黑名单,以防止这些人使用Dos攻击。
8.2 FTP服务器的安装与设置
(2)用户权限控制
write_enable=YES,开启全局上传权限。
anon_upload_enable=YES,允许匿名用户具有上传权限。
anon_mkdir_wirte_enable=YES,允许匿名用户有创建目录的权利。
chown_username=whoever,当启用chown_uploads=YES时,所指定的属主用户帐号,此处的whoever用合法的用户帐号来代替。
chroot_list_enable=YES,用一个列表限定哪些本地用户只能在自己目录下活动。
8.2 FTP服务器的安装与设置
(3)用户连接和超时选项
idle_session_timeout=600,设定默认的空闲超时时间,用户超过这段时间不动作将被服务器踢出。
data_connection_timeout=120,设定默认的数据连接超时时间。
8.2 FTP服务器的安装与设置
(4)服务器日志和欢迎信息
dirmessage_enable=YES,允许为目录配置显示信息,显示每个目录下面的message_file文件的内容。
ftpd_banner=Welcome to FTP service,自定义FTP用户登录到服务器所看到的欢迎信息。
xferlog_enable=YES,启用记录上传/下载活动日志功能。
xferlog_file=/var/log/vsftpd.log,自定义日志文件的保存路径和文件名,默认是/var/log/vsftpd.log。
8.2 FTP服务器的安装与设置
3 启动/重新启动/停止vsftpd服务
在终端命令窗口运行以下命令启动/重新启动/停止vsftpd服务:
启动vsftpd服务:
/etc/rc.d/init.d/vsftpd start
重新启动vsftpd服务:
/etc/rc.d/init.d/vsftpd restart
关闭vsftpd服务:
/etc/rc.d/init.d/vsftpd stop
8.2 FTP服务器的安装与设置
4 其余的ftp软件
Linux系统下的FTP服务器软件除了vsftpd外,wu-ftpd、proftpd、pureftpd等也很出名,其中有不少支持数据库用户以及带宽和线程控制等功能,可以参考专门的资料来完成各种功能的FTP服务器的配置。
11.3 DHCP服务器的安装与设置
DHCP 服务器工作的前提条件
为了使DHCP服务器为windows主机服务,需要创建一个到地址255.255.255.255 的路由,加这条路由命令到/etc/rc.d/rc.local 使每次启动时自动运行。
#route add -host 255.255.255.255 dev eth0
如果报告错误消息:255.255.255.255:Unkown host 试着加下面的入口到 /etc/hosts 文件:
#route add -host dhcp dev eth0
8.3 DHCP服务器的安装与设置
2 安装DHCP服务器软件
在RedHad Linux9.0中,默认情况下并没有安装DHCP服务器软件,可以在终端窗口下用如下命令安装:
mount /mnt/cdrom
#rpm -ivh /mnt/cdrom/RedHat/RPMS/dhcp-3.0pl1-23.i386.rpm
8.3 DHCP服务器的安装与设置
3 配置DHCP服务器
DHCP服务器的配置文件是/etc/dhcpd.conf,下面给出一个 DHCP配置文件的例子:
Sample /etc/dhcpd.conf
default-lease-time 1200;
max-lease-time 9200;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option routers 192.168.1.254;
option domain-name-servers 192.168.1.1,192.168.1.2;
option domain-name “zzei.net”;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.10 192.168.1.100;
range 192.168.1.150 192.168.1.200;}
8.3 DHCP服务器的安装与设置
上例允许DHCP服务器分配两段IP地址范围给客户192.168.1.10-100和192.168.1.150-200,如果客户不继续请求DHCP地址,则1200秒后释放IP地址,否则最大允许租用的时间为9200秒。服务器发送下面的参数给DHCP客户机:用255.255.255.0作为子网掩码,用192.168.1.255作为广播地址,用192.168.1.254作为默认网关,用192.168.1.1 和192.168.1.2作为DNS服务器。
8.3 DHCP服务器的安装与设置
可以为某块网卡指定固定的IP地址。无论何时,这块网卡将总是从DHCP服务器获得固定的IP地址,加下面的语句到/etc/dhcpd.conf:
host haagen {
hardware ethernet 08:00:2b:4c:59:23;
fixed-address 192.168.1.222;
}
8.3 DHCP服务器的安装与设置
4 启动DHCP服务器
启动DHCP服务器,可以在终端命令窗口输入:
/usr/sbin/dhcpd
或者用# ntsysv把DHCP服务自动启动。
如果想在eth1设备上启动 dhcpd,则:
/usr/sbin/dhcpd eth1
8.3 DHCP服务器的安装与设置
5 测试DHCP服务
选择一台客户机,启动windows,将IP地址选择为自动获得,重新启动计算机后,执行ipconfig/all命令检查DHCP服务是否设置正确。
11.4 DNS服务器的安装与设置
1 DNS的实现机制
DNS实际上是一个分布式的数据库系统,通常由两种实现机制:一种是用主机表,另一种是采用域名服务器。
(1)主机表机制
在互联网发展的初期,当时的主机数量不多,名字服务器是通过一张大型的主机表来完成。这张表被称为NIC注册主机表,它保存所有已经注册的网站的主机名和对应的IP地址。
8.4 DNS服务器的安装与设置
(2)域名服务器系统
域名服务器系统一般采用域名服务器来实现域名到IP地址之间的转换,目前常用的服务程序是BIND(Berkeley Internet Name Domain,伯克利网间名字域)。
DNS用域的层次结构来组织主机名。一个域是在某些方面相关站点的集合。名字空间类似于一棵树,这棵树的入口用一个点表示,称为根域。根据在层次结构中的位置,一个域可以分为顶级域、第二级域、第三级域。
8.4 DNS服务器的安装与设置
2 安装BIND服务
(1)安装前的准备工作
在RedHat Linux 系统光盘内有bind-9.2.1-9.i386.rpm包,执行如下命令:
rpm –ivh bind-9.2.1-9.i386.rpm
如果获得的BIND软件包是源代码bind-9.2.2.tar.gz,首先对该软件包进行解压缩。命令是:
tar zxvf bind-9.2.2.tar.gz
并进行如下配置:
cd bind-9.2.2
#./configure –prefix=/usr/local/bind
8.4 DNS服务器的安装与设置
(2)编译安装
使用make命令进行编译,首先使用clean关键字清除目录内一些不必要的文挡。
make clean
再使用make的depend关键字改变设置文件Makefile内的相关设置。
#make depend
执行make命令对BIND程序进行编译。
make
最后使用make install命令进行BIND程序安装。
make install
8.4 DNS服务器的安装与设置
(3)启动和关闭
安装成功后,可以启动BIND,在RedHat Linux中执行如下命令:
service named start
如果要关闭BIND,执行如下命令:
# /etc/init.d/named stop
8.4 DNS服务器的安装与设置
3 配置DNS服务器
BIND中几乎所有的配置都是通过/etc/named.conf文件完成的。这个文件以纯文本的形式存放各服务器信息和区信息。下面是该文件的一个例子。
o
ptions {
directory “/var/named”;
forwarders {
202.102.224.68;
};
pid-file "/var/run/named/named.pid";
allow-query { any; };
allow-transfer { any; }; };
8.4 DNS服务器的安装与设置
zone “.” IN {
type hint;
file“named.ca”; };
zone “zzei.net” IN {
type master;
file“zzei.net”; };
zone “0.0.127.in-addr.arpa” IN {
type master;
file “named.local”; };
zone “100.168.192.in-addr.arpa” IN {
type master;
file “100.168.192”; };
8.4 DNS服务器的安装与设置
上例中,“directory”一行指定named从“/var/named”目录下读取DNS数据文件,这个目录用户可自行指定并创建。第一个区登记项用来通知BIND在何处定位根服务器的信息。文件中的zone “zzei.net”段是声明这是用于“zzei.net”域的主域名服务器,该域的数据从“/var/named/zzei.net”文件中读取。文件中的zone “100.168.192.in-addr.arpa”段是指向映射IP地址“192.168.100.*”到主机名的文件,该域的数据从“/var/named/100.168.192”文件中读取。
8.4 DNS服务器的安装与设置
4 BIND服务器的维护
管理员要维护好一个域名服务器非常困难,BIND软件组提供了大量的管理工具来减轻管理员的负担。如rndc reload用来装入新的数据库;nslookup用来查询域名信息。域名服务器的维护关键在于数据库文件的正确性,管理员要不断地更新维护。系统管理员为了域名服务器正确、高效地运行,需要日复一日地努力工作。
11.5 邮件服务器的安装与设置
邮件服务器至少涉及两个组件: MTA(Mail Transfer Agent,邮件传输代理)和MUA(Mail User Agent,邮件用户代理)。
MTA是服务器端应用程序,它负责处理邮件的发送和接收。
MUA是用户使用的客户端程序,常见的MUA有Microsoft Outlook、Foxmail等。
8.5 邮件服务器的安装与设置
1 Linux下常用的MTA
Sendmail:被目前Internet上大多数的电子邮件系统使用,是RedHat Linux中默认的MTA 。
Postfix:是Sendmail的一个流行的替代MTA程序。Postfix的特点是速度快、安全和容易管理 。
Qmail:目标是比Sendmail更容易使用。特点是安全、可靠、高效、简单。
8.5 邮件服务器的安装与设置
2 安装Sendmail
(1)通过图形界面方式安装
单击【主菜单】|【系统设置】|【添加删除应用程序】菜单项,然后单击【更新】按钮,插入第一张安装光盘按照屏幕提示完成Sendmail服务器的安装。
(2)通过rpm安装包
在终端命令窗口执行以下命令:
#rpm –ivh sendmail-8.12.8-4.i386.rpm
#rpm –ivh sendmail-cf-8.12.8-4.i386.rpm
#rpm –ivh sendmail-doc-8.12.8-4.i386.rpm
8.5 邮件服务器的安装与设置
3 配置Sendmail
Sendmail的配置文件是位于/etc/mail目录下的sendmail.cf。
通常在/etc/mail目录下有一个sendmail.mc模板文件,一般通过修改sendmail.mc模板来达到定制sendmail.cf文件的目的。
下面是创建sendmail.cf文件的步骤:
(见下页)
8.5 邮件服务器的安装与设置
⑴备份原有sendmail.cf文件
在终端命令窗口运行以下命令:
# cp /etc/mail/sendmail.cf /etc/mail/sendmail.cf.bak
⑵生成sendmail.cf文件
根据sendmail.mc模板文件生成sendmail.cf配置文件,并导出到/etc/mail目录下:
# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
⑶重启sendmail服务
# /etc/rc.d/init.d/sendmail restart
8.5 邮件服务器的安装与设置
4 启动/重新启动/停止Sendmail服务
安装Sendmail服务器后,最简单的启动方式是在终端命令窗口执行如下命令:
#/etc/tc.d/init.d/sendmail start
在终端命令窗口执行以下命令重新启动sendmail服务:
#/etc/rc.d/init.d/sendmail restart
在终端命令窗口执行以下命令来停止sendmail服务:
#/etc/rc.d/init.d/sendmail stop
8.5 邮件服务器的安装与设置
5 为新用户开电子邮件帐号
在Linux里为新用户开设电子邮件帐号比较简单,只需在Linux系统里新增一个用户即创建了一个同名的邮件帐号。
(1)在终端窗口为新用户开设电子邮件帐号的命令是:
#adduser peter –p peter
8.5 邮件服务器的安装与设置
(2)在图形界面下为新用户开设电子邮件帐号的操作是:
单击【开始】|【系统设置】|【用户和组群】菜单项,打开【Red Hat 用户管理器】对话框,单击【添加用户】按钮,在出现的【创建新用户】对话框里指定用户名、登录口令,如右图所示。
8.5 邮件服务器的安装与设置
6 支持POP和IMAP功能
(1)POP和IMAP服务器的安装
安装RedHat Linux 9.0时,可以选择安装POP和IMAP服务器,如果没有安装,可以将第二张安装光盘放入光驱,然后在终端命令窗口运行以下命令即可开始安装:
# cd /mnt/cdrom/RedHat/RPMS
# rpm –ivh imap-2001a-18.i386.rpm
8.5 邮件服务器的安装与设置
(2)启动POP和IMAP服务
要成功启动POP和IMAP服务器,首先要确定这些服务器存在于/etc/services文件,并确保以下的服务器前面没有加上“#”注释。
Imap 143/tcp imap2 # Interim Mail Access Proto v2
Imap 143/udp imap2
Pop2 109/tcp pop-2 postoffice # POP version 2
Pop2 109/udp pop-2
Pop3 110/tcp pop-3 # POP version 3
Pop3 110/udp pop-3
8.5 邮件服务器的安装与设置
修改好/etc/services文件,还要对相应服务配置文件进行修改。
启动POP3服务:修改/etc/xinetd.d/ipop3文件,将其中的”disable=yes”改为”disable=no”,保存该文件。重新启动xinetd使设定内容生效:
#/etc/rc.d/init.d/xinetd reload
启动IMAP服务:修改/etc/xinetd/imap文件,将其中的”disable=yes”改为”disable=no”,保存该文件。重新启动xinetd使设定内容生效:
#/etc/rc.d/init.d/xinetd reload
11.6 Linux下一个NAT配置的实例
网络地址转换(NAT)被广泛应用于各种类型的Internet接入方式中。原因很简单,NAT不仅完美地解决了IP地址不足的问题,而且还能有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。
在Linux环境下实现NAT的工具是RedHat Linux 9.0自带的防火墙工具包iptables。
8.6 Linux下NAT服务器简介
下面是某校园网NAT配置文件的实例。其中服务器安装RedHat Linux 9.0,外网网卡为eth0,IP地址为202.110.116.116,内网网卡是eth1,IP地址为192.168.254.254。通过NAT技术,将校园网接入Internet。
#!/bin/sh
echo 1 > /proc/sys/net/ipv4/ip_forward
#/sbin/insmod ip_tables
iptables -F INPUT
iptables -F FORWARD
iptables -F POSTROUTING -t nat
8.6 Linux下NAT服务器简介
iptables -P FORWARD DROP
iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT
iptables -A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.254.0/24 -j MASQUERADE
/sbin/insmod ip_conntrack_ftp
/sbin/insmod ip_conntrack_irc
/sbin/insmod ip_nat_ftp
/sbin/insmod ip_nat_irc
12 SQUID代理服务器
官方网站:www.squid-cache.org
功能:
1、支持proxy
2、支持HTTP缓存
3、FTP
4、SSL访问控制
5、DNS缓存
注:它和NAT是有区别的
/etc/squid/squid.conf
1.NETWORK OPTIONS(有关的网络选项)
2.OPTIONS WHICH AFFECT THE NEIGHBOR SELECTION ALGORITHM(作用于邻居选择算法的有关选项)
3.OPTIONS WHICH AFFECT THE CACHE SIZE(定义cache大小选项)
4.LOGFILE PATHNAMES AND CACHE DIRECTORIES(定义日志文件的路径及cache的目录)
5.OPTIONS FOR EXTERNAL SUPPORT PROGRAMS(外部支持程序选项)
6.OPTIONS FOE TUNING THE CACHE(调整cache选项)
7.TIMEOUTS(超时)
8.ACCESS CONTROLS(访问控制)
9.ADMINISTRATIVE PARAMETERS(管理参数)
10.OPTIONS FOR THE CACHE REGISTRATION SERVICE(cache注册服务选项)
11.HTTPD-ACCELERATOE OPTIONS(HTTPD加速选项)12.MISCELLANEOUS(杂项)
13.DELAY POOL PARAMETERS(延时池选项)
安装选项
./configure --prefix=/var/squid
--sysconfdir=/etc
--enable-arp-acl
--enable-linux-netfilter
--enable-pthreads
--enable-err-language="Simplify_Chinese"
--enable-storeio=ufs,null
--enable-default-err-language="Simplify_Chinese"
--enable-auth="basic"
--enable-baisc-auth-helpers="NCSA"
--enable-underscore
squid-NETWORK OPTIONS
http_port:监听客户请求的端口,默认3128
icp_port:和其它squid发送和接收ICP查询时监听的端口,0表示禁止
mcast_groups:指定一个多播组,可以接收多播形式的ICP查询,例:mcast_groups 239.128.16 224.0.1.20
htcp_prot:同其它相邻的缓存服务器之间发送和接收HTCP查询时监听的端口,0:禁用
tcp_outgoing_address:用于采用HTCP和CARP方式同其它服务器通信
默认:255.255.255.255
udp_incoming_address:接收其它缓存服务器的ICP数据报时使用的地址
默认:0.0.0.0
udp_outgoing_address:发送ICP数据报到其它缓存服务器时用的地址
默认:255.255.255.0
squid-OPTIONS WHICH AFFECT THE NEIGHBOR SELECTION ALGORITHM
cache_peer:指定网络中其它的缓存服务器。默认为none。
cache_peer hostname type http_port icp_port options
hostname:指对方地址
type:类型:parent/sibling /multicast,分别是:父/兄弟/多播
http_port:目的服务器的http端口
icp_port:目的服务器的icp端口(udp)
options:
proxy-only:仅去获取数据,但不在本地缓存
no-query:不发送ICP查询给此主机
default:默认的父服务器
login username:passwd:连接对方通过服务器用户名和密码
squid-OPTIONS WHICH AFFECT THE NEIGHBOR SELECTION ALGORITHM
cache_peer_domain:用来限定查询相邻的缓存服务器的域
cache_peer_domain 服务器地址 域
如:cache_peer_domain 218.2.2.3 edu.cn
neighbor_type_domain 服务器 类型 域
如:neighbor_type_domain 218.2.2.3 sibling .com .net
neighbor_type_domain 218.2.2.3 parent .org
icp_query_timeout 微秒
超时
maximum_icp_query_timeout 2000
hierarchy_stoplist cgi-bin ?:在URL中发现的此字符串,直接在此服务器处理
no_cache :指定对象不被缓存
例:acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
dead_peer_timeout:多长时间宣布对等服务器已死亡,时间用秒
squid-OPTIONS WHICH AFFECT THE CACHE SIZE
cache_mem:缓存内存大小
cache_swap_low(percent,0-100):缓存对象交换的最低点
cache_swap_high(percent,0-100):缓存对象交换的最高点
maximum_object_size:缓存对象的最大大小
minimum_object_size:缓存对象的最小大小
maximum_object_size_in_memory:在内存中缓存的最大的对象大小
ipcache_size 4096: ip对应cache的大小为4096
fqdncache_size 4096: 域名全称cache的大小为4096
squid-LOGFILE PATHNAMES AND CACHE DIRECTORIES
memory_replacement_policy :内存替换策略
cache_replacement_policy :缓存替换策略
选项:heap LFUDA |lru|heap GDSF:heap LRU
heap GDSF:双重大小贪婪法
LRU:默认,最近最少使用算法
heap LFUDA:最近最不常用被老化法
heap LRU:堆LRU
cache_dir:系统使用的存储类型
cache_dir type 路径 大小(M) 一级子目录 二级子目录
type: UFS|AUFS,默认使用UFS,AUFS用于非同步的I/O设备
如:cache_dir ufs /usr/local/squid/cache 25000 16 256
squid-LOGFILE PATHNAMES AND CACHE DIRECTORIES
cache_access_log /var/log/squid/access.log
access.log日志文件路径
cache_log /var/log/squid/cache.log
缓存日志文件的目录和文件
emulate_httpd_log:激活仿真HTTP格式的日志
mime_table:mime文件路径
pid_filename:指定pid文件和路径
squid-LOGFILE PATHNAMES AND CACHE DIRECTORIES
ftp_user:指定匿名FTP密码
ftp_list_width:指定FTP列表的文件名长度
ftp_passive:以被动模式(on)/主动模式(off)
cache_dns_program:指定DNS查询程序路径
编译时指定:--disable-internal-dns option
dns_children:指定本地默认启动DNS查询进程数
dns_nameservers:DNS服务器地址
diskd_program:磁盘管理程序
unlinkd_program:删除文件程序
pinger_program:ping程序
编译时指定:--enable-icmp option
squid-LOGFILE PATHNAMES AND CACHE DIRECTORIES
redirect_program:URL重点向程序
redirect_children:重点向进程数
redirect_rewrites_host_heade:重点向时重写包头(用加速器时勿用)
authenticate_program:认证程序
例:authenticate_program /usr/bin/ncsa_auth /usr/etc/passwd
authenticate_children 5:认证程序的进程数
authenticate_ttl 1 hour:认证有效时间
authenticate_ip_ttl :对一个IP一次认证后多长时间有效
此时在同一个IP有第二个用户认证会失败
authenticate_ip_ttl_is_strict :禁止一个用在多处登录
squid-OPTIONS FOR TUNING THE CACHE
request_header_max_size:最大http请求头
request_body_max_size:最大http请求数据内容
reply_body_max_size:最大返回数据
可限制用户下载的数据大小
reference_age:LRU算法中指定LRU时间
quick_abort_min (KB):断点续传最小值
quick_abort_max (KB):断点续传最大值
quick_abort_pct (percent):超过值认为续传成功
negative_ttl:否定回答TTL
positive_dns_ttl:DNS肯定回答TTL
range_offset_limit:请求SQUID预取数据的大小
.squid-TIMEOUTS
connect_timeout:SQUID等待客户请求的服务器回应的时间长度
peer_connect_timeout:一个对等的缓存服务器的TCP连接超时时间
client_lifetime:客户端同代理服务器TCP连接的最大时间长度
read_timeout:读入数据超时
request_timeout:客户端请求最大时间
shutdown_lifetime:关闭squid缓存时间
ACCESS CONTROLS
acl:定义一个访问列表
格式:acl aclname acltype string
类型:(acltype)
src:源地址
dst:目标地址
srcdomain:原(客户)名称
dstdomain:目标名称
time:时间
url_regex[-i]:URL中的正则表达式匹配
urlpath_regex[-i]:略去协议和主机名的正则表达式
proxy_auth:通过外部程序进行用户验证
maxconn:单IP最大连接数
port:端口
myip:本地IP
srcdom_regex [-i]:匹配客户名
dstdom_regex [-i]:匹配目标名
aclname myport:我的端口
acl
aclname proto:协议,http,ftp..
aclname method:方法, GET POST
aclname browser:匹配User-Agent header
aclname ident:用户方用户名
aclname ident_regex [-i]:匹配用户方用户名
aclname proxy_auth username:指定合法用户
用REQUIRED表示所有合法用户
ACCESS CONTROLS
http_access:代理访问控制
http_access allow|deny [!] acl_name
icp_access:icp访问控制
cache_peer_access:其它缓存服务器访问控制
cache_peer_access cache_host allow|deny [!]acl_name
ADMINISTRATIVE PARAMETERS
cache_mgr :管理员电子邮件
cache_effective_user squid:运行身份
cache_effective_group squid:运行组身份
OPTIONS FOR THE CACHE REGISTRATION SERVICE
announce_period:发布缓存通告频率
announce_host:通告的主机
announce_file:通告的信息
announce_port:通告的对方端口
HTTPD-ACCELERATOR OPTIONS
:加速某服务器访问
httpd_accel_port histname|virtual
httpd_accel_port:加速服务器的对方端口
httpd_accel_single_host:多台服务器时设置off
httpd_accel_with_proxy:即作为加速器,又作为WEB缓存服务器,设置为on
httpd_accel_uses_host_header:为on,能支持不同的http协议
MISCELLANEOUS
logfile_rotate 0:日志轮换版本数
append_domain :默认域名
tcp_recv_bufsize:TCP缓存区大小
err_html_text:包含在错误消息中的文本,例:mailto:wtb@liaomeng.com
deny_info:禁用时显示消息
deny_info err_page_name acl
visible_hostname www.liaomeng.com
错误消息中显示的服务器名称
error_directory:指定错误消息文件目录
用户验证
一、NCSA认证
authenticate_program /usr/lib/squid/ncsa_auth /usr/etc/passwd
acl auth_user proxy_auth REQUIRED
acl mynetwork src 192.168.0.1/255.255.255.0
http_access deny !mynetwork
http_access allow auth_user
http_access deny all
注:squid是顺序处理http_access
再运行以下程序创建用户:
htpasswd -c /var/squid/etc/password guest
透明代理
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
http_access allow all
在iptables中设置
iptables -t nat –A PREROUTING -i eth0 –p tcp –-dport 80 –j REDIRECT --to-port 3128
iptables -t nat –A POSTROUTING –s 192.168.0.0/24 –o eth1 –j SNAT –to-source 218.33.2.14
实例
http_port 8080 设置http代理端口为8080
cache_peer pa.us.ircache.net sibling 3128 3130 login=*:*
cache_peer sj.us.ircache.net sibling 3128 3130 login=*:*
cache_peer * parent 13280 4827 htcp *:*这几行是使用squid可以和其他几台机器进行协同工作的特性,同几台组成cache_peer。具体设置在后面的优化部分会解释。
cache_peer_domain * .edu.cn设置.edu.cn的域名使用某个cache_peer访问
cache_mem 400 MB设定内存cache的大小为400M
cache_swap_low 80
cache_swap_high 97这两行是设置cache进行替换的闸值。当占用到97%的cache后,cache中的内容将被清空20%。
maximum_object_size 20000 KB 最大对象大小为20M.
maximum_object_size_in_memory 10000 KB 内存中最大的对象大小为10M
ipcache_size 4096 ip对应cache的大小为4096
fqdncache_size 4096 域名全称cache的大小为4096
cache_replacement_policy heap LFUDA cache替换策略
memory_replacement_policy heap LRU 内存替换策略
cache_dir ufs /usr/local/squid/cache 25000 16 256 cache存放的路径大小及具体配置
dns_nameservers * * * * * 内部指定dns服务器
authenticate_program * * 身份认证程序
authenticate_children 32 身份认证程序启动的进程数目
request_body_max_size 5 MB 最大请求的body大小
reply_body_max_size 20 MB 最大回应的body大小
memory_pools on 内存池设置为打开。
memory_pools_limit 50 MB 内存池的大小
实例
acl all src 0.0.0.0/0.0.0.0
acl dorm proxy_auth 192.168.0.0/255.255.0.0 REQUIRED
acl bjpu proxy_auth 202.112.64.0/255.255.240.0 REQUIRED
acl bjpu2 proxy_auth 211.71.80.0/255.255.240.0 REQUIRED访问控制列表
acl banned_sites {过滤的关键字}
http_access deny banned_sites
deny_info ERR_BANNED_SITE banned_sites禁止访问违禁站点的设置
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl SSL_ports port 443 563
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT设置可以连接的端口
实例
http_access allow dorm
http_access allow bjpu
http_access allow bjpu2
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny all允许http访问
icp_access allow *允许cache_peer使用ICP协议访问
proxy_auth_realm BJPU proxy-caching web server 验证框提示的banner
cache_mgr liukange@netease.com cache管理员的电子邮件地址
cache_effective_user *
cache_effective_group * 执行cache程序的用户uid和gid
visible_hostname cnproxy.bjpu.edu.cn cache服务的机器名
其它
1、使用LFUDA(Least Frequently Used with Dynamic Aging)作为cache replacement policy,cache的命中率最高。
使用heap LRU作为memory replacement policy,memory cache命中率最高
2、建议使用unlink作为磁盘的管理程序,比diskd稳定
其它
3、对arp控制
acl advance arp 00:01:02:1f:2c:3e 00:01:02:3c:1a:8b ...
4、禁止下载
acl mmxfile urlpath_regex –i \.mp3$ \.avi$ \.exe$
http_access deny mmxfile
5、固定时间
acl worktime time MTWHF 8:30-12:00 14:00-18:00
http_access deny !worktime
其它
6、限制单用户最大连接数
acl conncount maxconn 3
http_access deny conncount normal
http_access allow normal
7、反向代理
a) 用iptables 将外网80端口访问重定向到squid
b) 让http只监听127.0.0.1 80
c) 在squid中包含hosts_file /etc/hosts
d) 在/etc/hosts中包含本地所有虚拟主机域名
e) 让squid只监听127.0.0.1
13 Apache
官方网站:www.apache.org
./configure
--prefix=/usr/apache \
--enable-module=most \
--enable-shared=max
--enable-module=so
make;make install
在http的bin目录中运行:strip httpd
Apache
httpd:
-V:显示编译httpd的值和有关目录位置
-l:显示静态链接库
-t:检查语法
-D SSL:监听443端口
Apache
主要目录:
htdocs:文档目录
bin:可执行文件
conf:配置文件
modules:模块
error:错误文档所在路径
logs:日志
Apache
主配置文件:
httpd.conf
一、全局环境指令定义(global environment)
二、主服务器部分 (main server section)
三、虚拟主机部分(virtual host)
指令环境分类
一、通用服务器环境
二、容器环境:directory、files、location等
三、虚拟主机环境:virtualhost
四、.htaccess环境:和directory中一样
Apache指令1-服务器环境
注:此类只能应用于主配置或虚拟主机中
ServerName:
服务名称
ServerRoot:
服务主目录,一般包含bin、conf等目录
DocumentRoot:
文档主目录(一般不要轻易修改)
ScriptAlias:
可执行文件所在目录
Apache指令1-服务器环境
ErrorDocument:
指定对于某类错误显示什么错误消息
如:ErrorDocument 401 /subscript.html
:消息内容可是文本/本站网页/外站网页
DefaultType:
指定MIME类型,一般用于容器(directory)中。设置此目录中的所有文件当成什么类型处理
Apache指令1-服务器环境
ServerType:
指定以什么方式运行服务器,standalone/inetd
PidFile:
指定pid文件存放地点
User/Group:
指定子进程运行身份
BindAddress:
定义只监听某一IP地址连接
Apache指令1-服务器环境
Port:
监听端口
Listen:
代替以上两个命令,可以使用多个此指令
Options:
控制特定目录下哪此服务器功能有效
ExecCGI:允许执行CGI脚本
FollowSymLinks:跟随符号链接(不能用于location)
Includes:允许服务器包含SSI(Server Side Includes)功能,
IncludesNOEXEC :允许SSI,但不允许执行脚本
Indexs:如果某目录下没有默认文档,则返回文件列表
MultiViews:允许内容协商的MultiViews
ALL:除MultiViews外的所有选项
SymLinkslfOwnerMatch:只跟随目标和链接由同一个用户ID拥有的符号链接
可用+/-在原有的基础上加上/减去某功能
Apache指令2-容器指令
<VirtualHost>
<Directory>
<DirectoryMatch>
<Files>
<FilesMatch>
<LocationMatch>
<Limit>
</Limitexcept>
Apache指令2-容器指令
<VirtualHost>
详见:虚拟主机
Apache指令2-容器指令
和
规则:先使用最短的容器目录,后应用较长的容器目录,后面可对前面的指令覆盖
可使用正则表达式匹配目录
Apache指令2-容器指令
和
用于针对某种类型的文件单独设置指令
<FilesMatch “.xml$”>
…
Apache指令2-容器指令
:
针对POST/PUT/DELETE方法的http访问的指令
除了某个方法以的方法
Apache指令2-容器指令
容器指令执行顺序:
1、,和.htaccess文件合并,并从最宽范围到最窄计算,在.htaccess中重复指令,后者覆盖前者
2、,如果重复覆盖已设置的指令
3、和
4、
Apache–.htaccess文件
AllowOverrides:
ALL:允许所有的.htaccess指令覆盖
None:禁止任何.htaccess指令覆盖
Authconfig:允许使用所有用户/组授权指令(详见认证)
FileInfo:允许使用控制文档类型的指令
Indexes:允许使用控制目录索引的指令
Limit:允许使用基本浏览器主机名或网络地址控制访问的指令
Options:允许使用特殊指令,(Options XBitHack)
apache-进程控制指令
1、MaxClients :设定能同时服务的请求数目;
2、MaxRequestsPerChild:设置每个进程能够响应的最大请求数,0表示不限制;
3、MaxSpareServers:设定最大空闲服务进程数目;MinSpareServers设定最小空闲服务进程数目;
4、ThreadsPerChild :设定Apache服务器使用的线程数;
13.1Apache—设置用户网站
1、相对路径
UserDir WWW:设置每个用户的文档在各自主目录下的WWW目录中
2、绝对路径:
UserDir /usr/www
在固定目录中有一个目录和此用户名相同
3、有通配符的绝对路径:
UserDir /usr/www/*/html
在www中每个用户拥有一个目录和用户名相同
4、重定向对用户主目录的请求
UserDir http://wtb.liaomeng.com/~*/
UserDir disabled <username>:禁止某些用户的主目录
UserDir enabled <username>:允许某些用户的主目录
Apache—设置用户网站
让用户主目录使用suEXEC
1、安装使启用suEXEC模块
2、httpd –l检查有没有支持suEXEC
此模块可用于:虚拟主机,也可用于用户主目录
Apache
简单重定向:(使用模块alias)
1、软链接
2、Alias /路径/ “目录绝对路径”
目录索引:mod_dir模块支持
如:http://liaomeng.com/rj会重定向到 http://liaomeng.com/rj/
DirectoryIndex :默认文档文件名
更复杂的目录索引:mod_autoindex模块
13.2 Apache—索引
IndexOptions FancyIndexing:启用复杂索引
索引更多选项:
IconsAreLinks:使图标成为文件名可单击的一部分
IconHeight=pixels:图标的高度(像素)
IconWidth=pixels:图标的宽度(像素)
NameWidth=n :文名名宽度
ScanHTMLTitles:将文件描述为<TITLE>中的文字
SuppressColumnSorting:禁止排序
SuppressDescription:禁止显示文件描述符
SuppressLastModified:禁止显示最后修改时间
SupressSize:禁止显示大小
SupressDescription:禁止显示说明
None:关闭复杂索引
Apache—索引
指定图标:
如:
AddIcon /icons/image.jpb *jpg*
指定默认图标:
如:
DefaultIcon /icons/unknown.pcx
指定文件说明:
如:
AddDescription "my home page" index.html
Apache—索引
添加页眉页脚:
HeaderName html文件
忽略文件:
IndexIgnore *.exe *.conf
索引显示排序:
IndexOrderDefault 方式键
方式:Ascending/Descending
键:Name,Date,Size,Description
Apache中的模块
模块类型:
一、核心模块(httpd_core.c)
二、标准模块
三、第三方模块
13.3 模块工作原理
标准模块在apache中的工作原理
一、读后请求:对虚拟主机处理请求的分辨
登记的模块有:mod_proxy,mod_setenvif
二、URL翻译:URL翻译成文件名
登记的模块有:mod_alias,mod_rewrite,mod_userdir
三、访问控制:检查客户对请求资源的访问
登记的模块有:mod_access
四、身份验证:确认用户
登记的模块有:mod_auth,mod_auth_dbm
模块工作原理
五、授权:检查用户访问资源的权限
六、MIME类型检查:确定请求资源的文件类型
登记的模块有:mod_mime
七、修正:在请求真正执行前需要进行的动作
登记的模块有:mod_header
八、响应或满足:请求资源真正被处理的阶段,
登记的模块很多,对特定资源执行以提供访问
九、日志记录
登记的模块有:mod_log_config
十、清除:清除已提供服务后的apache子进程
13.4 apache模块模块安装
一、静态安装
二、DSO(动态共享对象)安装
推荐:
1、核心模块和装载模块必须静态安装
2、少部分标准模块以静态安装
3、常改动的软件以DSO安装
以动态安装的模块装载使用:
LoadModule php4_module /modules/mod_php.so
实例:安装php
虚拟主机
实现模块:mod_virtual
一、基于IP的虚拟主机
二、基于名字的虚拟主机
三、动态虚拟主机
基于IP的虚拟主机
如:
<VirtualHost 192.168.5.1>
ServerName v1.liaomeng.com
DocumentRoot /usr/apache/virtual/v1
</VirtualHost>
注:可以对一个网络接口绑定多个IP地址实现
基于IP的虚拟主机
使用_default_虚拟主机
用于没有虚拟主机匹配时提供服务器虚拟主机
<VirtualHost _default_:*>
DocumentRoot /usr/default
</VirtualHost>
基于名字的虚拟主机
注:只能应用于HTTP/1.1,不能和基于IP的虚拟主机联用
NameVirtualHost 192.168.5.1
指定绑定地址
<VirtualHost 192.168.5.1>
ServerName w1.liaomeng.com
DocumentRoot /usr/w1
</VirtualHost>
<VirtualHost 192.168.5.1>
ServerName w2.hika.com
DocumentRoot /usr/w2
</VirtualHost>
动态虚拟主机
实现模块:mod_vhost_aliases
基于主机名的动态虚拟主机
指令:(只用两个指令)
VirtualDocumentRoot
VirtualScriptAlias
可使用的变量
%%:即%
%p:动态虚拟主机的tcp端口号
%0:整个服务器名字
%N:服务名中的第N部分
%N+:服务器名的第N部分和其后所有其余部分
%-N:字符器串倒数第N部分,
%-N+:倒数第N部分,以及前面所有部分
13.4 动态虚拟主机
apache必须要构造一个指向它自己的URL
构造指令:UseCanonicalName
1、on :apache使用ServerName和Port生成自指URL
2、off:使用http/1.1中的主机名和端口号构成URL,如果客户方是http/1.0,则apache使用ServerName和Port构造自指URL
3、DNS:则查询DNS以便购成自指URL
注:httpd -S用于调试虚拟主机启动
服务器方包含
安装模块:mod_include
并在httpd.conf中启用.shtml的解析
例:
<html>
<head>
</head>
Today is <!--#echo var="DATE_LOCAL" -->
<!--#config timefmt="%B %d,%Y" -->
</body>
</html>
使用CGI
CGI: 即通用网关
1、定义请求URL
ScriptAlias /cgi-bin/ “/usr/httpd/cgi-bin”
ScriptAliasMatch ^/cgi-bin(.*) /usr/httpd/cgi-bin$1
2、定义文件
AddHandler cgi-script .cgi .pl
3、定义方法
Script DELETE /cgi-bin/deleteit.cgi
4、定义介质类型
Action text/html /home/httpd/cgi-bin/parseme.cgi
此方法是对所有html网页都通过此cgi处理
13.5 高级重定向
支持模块:
mod_alias
1、 别名处理
Alias :Alias /icons "/usr/local/apache/icons"
AliasMatch :AliasMatch ^/icons/(.*) "/usr/local/apache/icons/$1"
ScriptAlias : ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"
ScriptAliasMatch:scriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"
2、重定向
Redirect :Redirect /wtb "http://liaomeng.com/wtb" //简单重定向
RedirectMatch :RedirectMatch (.*)\.gif$ "http://w1.wtb.com$1.jpg
RedirectTemp :RedirectTemp /wtb /usr/wtb //临时重定向
RedirectPermanent :RedirectPermanent /wtb /usr/wtb //永久重定向
高级重定向
支持模块:mod_rewrite
注:虚拟主机默认不从主服务器继承其设置
用户验证
1、文本
在httpd.conf中
<Directory /www/auth>
AllowOverride AuthConfig
</Directory>
在.htaccess中
AuthType Basic
AuthName "password file auth"
AuthUserFile /usr/apache/conf/password
AuthGroupFile /usr/apache/conf/group
Require group test
13.6 日志管理
服务模块:mod_core
ErrorLog logs/error_log
ErrorLog syslog
LogLevel 等级
emerg 使系统无法使用的状总值
alert 要求立即做出响应操作
crit 关键状态
error 错误状态
warn 警告状态
notice 建议状态
info 普通信息
debug 调试信息
日志管理
服务器模块:mod_log_config
TransferLog logs/access_log
日志格式(CLF格式)
remotehost identd authuser [date] “request url” status bytes
remotehost:远程主机
identd:使用ident协议验证客户身份,基本已不用
authuser:验证的用户身份
date:请求的时间
status:三位数的状态代码
bytes:响应的正文字节数
日志管理
自定义格式:
如:LogFormat “%h %l %u %t “%r” %>s %b” common
选项:
%a 远程主机ip
%A:本地IP
%B:发送的字节数
%b:发送的字节数,没有则用-
%{ENV VAR}e ENV VAR环境变量的内容
%f:日志文件的文件名
%h:远程主机名(要求打开HostnameLookups指令打开主机名查找)
%H:请求的协议和版本
%{header_line}i 发送给服务器的请求
%I 远程登录名
%m 请求方法(GET等)
%{header_line}o 取自客户机的应答信息
%p:TCP端口
%P:提供服务器进程ID号
%s:原始请状态,%>s上次请求的状态
%t:时间
%T;对用户服务器的时间用秒计
%U:请求的URL路径
%v:对请求提供服务器的服务器标准名称
日志管理
自定义格式日志生成文件:
例:LogFormat “%h %l %u %t “%r” %>s %b” common
CustomLog logs/access_log common
日志管理
条件分类记录日志:
模块支持:mod_setenvif
LogFormat “%h %l %u %t “%r” %>s %b” common
SetEnvIF Request_URI .gif$ image
CustomLog logs/images_log common env=image
日志管理
虚拟主机日志:
例:LogFormat “%h %l %u %t “%r” %>s %b servering Host:%v” common
CustomLog logs/access_log common
日志管理
图形化分析工具
webalizer
13.7 apache+resin
1、单独安装运行:
直接安装运行于和apache不同的端口
2、和apache合用运行
./configure –with-apxs=***/apxs
将resin的document改为apache的
在apache中加入
LoadModule caucho_module /usr/local/apache/libexec/mod_caucho.so
<IfModule mod_caucho.c>
CauchoConfigFile localhost 6028
<Location /caucho-status>
SetHandler caucho-status
</Location>
</IfModule>
AddHandel
官方网站:www.caucho.com
13.8 Proftpd
源包:ftp://ftp.proftpd.org/distrib/source
补丁:http://www.castaglia.org/proftpd
一、安装
-cp mod_quotatab/*.c proftpd/contrib
cp mod_quotatab/*.h proftpd/contrib
修改proftpd/contrib/mod_sql_mysql.c
把mysql.h改成你系统实际路径
安装如下:
Proftpd
二、基本配置
全局设置
设置项目1 参数1
设置项目2 参数2
#某个目录的设置
<Directory “路径名”>
…
…
#关于匿名用户的设置
<Anonymous “匿名登陆的目录”>
…
…
<Limit 限制动作>
…
…
Proftpd
1、权限的限制:用Limit容器设置
CMD:Change Working Directory 改变目录
MKD:MaKe Directory 建立目录的权限
RNFR: ReName FRom 更改目录名的权限
DELE:DELEte 删除文件的权限
RMD:ReMove Directory 删除目录的权限
RETR:RETRieve 从服务端下载到客户端的权限
STOR:STORe 从客户端上传到服务端的权限
READ:可读的权限,不包括列目录的权限,相当于RETR,STAT等
WRITE:写文件或者目录的权限,包括MKD和RMD
DIRS:是否允许列目录,相当于LIST,NLST等权限,还是比较实用的
ALL:所有权限
LOGIN:是否允许登陆的权限
针对以上的权限,可使用的指令有:
AllowUser 针对某个用户允许的Limit
DenyUser 针对某个用户禁止的Limit
AllowGroup 针对某个用户组允许的Limit
DenyGroup 针对某个用户组禁止的Limit
AllowAll 针对所有用户组允许的Limit
DenyAll 针对所有用户禁止的Limit
Proftpd
ServerName "wtb Linux FTP Server"
ServerType standalone #以非Xinetd 方式运行
DefaultServer on
Port 21
Umask 022
MaxInstances 30 #最多有30个proftpd的PID
User nobody
Group nobody
AllowRetrieveRestart on #下载断点续传
AllowStoreRestart on #上载断点续传
TimeoutStalled 10
MaxClients 10 #最多允许10个用户在线
MaxHostsPerUser 1 "对不起,每个帐户最多允许来源ip为1个"
MaxClientsPerUser 1 "对不起,每个帐户在每个客户端最多可以同时
登陆1次"
MaxClientsPerHost 1 "对不起,同一个客户端只能最多1个帐号可以登陆"
AllowStoreRestart on #允许断点续传(上传),断点续续(下载),DisplayLogin welcome.msg #欢迎词文件
ServerIdent off #屏蔽服务器版本信息
DefaultRoot ~ ftpusers #设置ftpusers组只能访问自己的目录 ,可用!号
Proftpd
WtmpLog off #记录FTP登录在wtmp中
TimeoutIdle 600 #客户端idel时间设置,默认就是600秒
AllowRetrieveRestart on #断点续传
AllowForeignAddress on #允许FXP
PassivePorts 49152 65534
proftpd
磁盘限额+mysql验证
qmail
资源:www.qmail.org
ftp://liaomeng.com(linux/admin)
安装管理过程如下:
qmail
qmail运行原理图:
qmail
qmail核心程序:
qmail
qmail主要配置文件
15 Linux操作系统FireBird BBS
15.1 硬件的准备
足够的记忆体及 SWAP 是影响上站人数上限的关键, 硬碟的大小则影响到各版文章能保留篇数的多少, 在架站前需衡量所需配备。
据观察, 一台具有32MB 记忆体的 Linux在BBS人数达 50 人左右时开始会用SWAP。 因为BBS 的档案多以信件, 讨论区文章为多, 这些都是 1k ~ 2k 的小档案, 所以系统的档案结构每个 inode 以 1k 或 2k 为佳 , 可以 df -i指令观察目前inode 的使用状况。 inode 的大小通常是在 newfs 时选择的。
架站前的考虑
15.2 网路流量的考虑
当BBS站公开给外界使用以後,通常会遇到以下麻烦:如果有大量使用者透过网路连接BBS,会对当地的网路造成「有点大,又不会太大」的网路交通量。 ==> 对策:统计网路交通流量,了解 BBS系统对网路的影响程度,以调整 BBS的管理策略。
架站前的考虑
15.3 系统安全的考虑
由於 BBS站是一般cracker觊觎的对象之一,因此设立 BBS站之後,容易让你的工作站成为显著的入侵目标。
==> 对策:请更加注意呢的系统安全,尤其当执行外部程式(gopher,lynx,tin,…etc)务必确定程式是否有执行上的漏洞, 或者寻找修改过专为 BBS 用的版本,并请勤於修补作业系统的漏洞。
架站前的考虑
15.4 身份确认的重要性
除非你的BBS站是封闭式的BBS(也就是使用者必须经过严格的申请程序才能拥有帐号),否则请注意匿名使用者的问题。匿名使用者的言责问题一直是网路上争议的论点之一,因此请您在开站之前考虑您的做法。
==> 对策:确认使用者身份以後才给予发表文章的权利,而且规定使用者身份只能透过系统管理员查询。如此即可适度保障使用者隐私权、又可在发生问题时追查责任的归属。
快速安装
在 /etc/group 中加入 bbs 的群组,设定如下:bbs:*:99:bbsadm,bbs,bbsuser
建立三个新帐号,依序如下:
bbsadm::9990:99:BBS admin: /home/bbsadm
:/bin/csh
bbs::9999:99:BBS user :/home/bbs
:/home/bbs/bin/bbsrf
bbsuser::9999:99:BBS user :/home/bbs :/bin/csh
在 /etc/shells 中加入 /home/bbs/bin/bbsrf
设定 bbsadm 与 bbsuser 两个帐号的密码,至於 bbs 则请勿设定任何密码。
快速安装
基於安全理由,请将这三个新帐号加入 /etc/ftpusers,以避免有心人通过ftp漏洞取得bbs的资料。不过较好的方式是关闭 bbs站的ftpd daemon,除非有非开ftp不可的理由。
以 bbsadm 的身份依序执行下列命令:
% cd /home/bbsadm
% tar -zxvf FirebirdBBS3.tar.gz
% cd bbssrc
% ./configure 做适当的设定。
快速安装
以 bbsadm 的身份执行编译程式的工作: % make
以 root 身份执行下列步骤:
cd /home/bbsadm/bbssrc
make install
telnet locahost,login name 请打 bbs。
顺利的话,会看到 BBS 的欢迎画面,这时请输入new建立新帐号SYSOP。请注意!SYSOP五个字母都要大写。建立好帐号进站後,SYSOP 将会取得BBS系统所有的权限。
快速安装
建立 guest 帐号以供来宾参观您的站台,如果不想有 geust 帐号,请在/home/bbs/.badname 中加入 guest。
最後,可以选择性的安装 /home/bbsadm/bbssrc/util 下的程式,请阅读各目录的 README 後再安装。也可以到FireBird的Official Site 查看是否 有新的外挂程式,站点地址是:ftp://ftp.firebird.dhs.org/。