2007年12月27日星期四

经典*nix命令

[bash]
id #显示用户的uid,gid,groups信息
echo $LOGNAME #显示登录的用户名
bc #计算表达式,输入2+3 回车计算出5; quit 退出
df -k #以K字节显示文件系统使用情况
[/bash]

一行命令杀进程inetd
Kill 命令
[bash]
kill -1 `ps -e | grep inetd |awk '{print $1}'`
netstat -a | grep bat #检查 batserv 程序是否处于监听状态。
[/bash]

more 显示文件的时候,想退出按 q 键,到最前按 g< 键,h 键显示帮助,到最后按 G
[bash]
env #查看环境变量
uname -a #查看本机型号
hostname #显示主机名
domainname #显示主机域名
[/bash]

存储, 压缩文件
[bash]
tar -zcvf
tar -cvf target.tar sourcefilelist #打包
tar -xvf target.tar #解包
tar -tvf target.tar #查看包内文件目录结构
compress .tar #文件压缩为.z
uncompress .z文件 #解压缩文件
file #查看当前目录下所有文件的格式 file * | grep commands
which 程序名 #查看命令文件的位置,这个是一个单独的文件
type 程序名 #查看命令文件的位置,这个是bash内置命令
script #从键入script开始,所有终端显示内容将被输入到一个文件里(默认为typescript),直至 exit 或者 Ctrl+D 退出script环境。这在希望记录大段输入以及输出内容时很有用。
compress filename #压缩文件
compressdir directory-name #压缩目录
uncompress filename     #反压缩文件
uncompressdir directory-name #反压缩目录
[/bash]


搜索含有某个指令的脚本:
[bash]
find /etc 2>/dev/null | xargs grep 'awk ' 2>/dev/null
[/bash]

说明:

  • find /etc 查找/etc 目录下的所有文件,并显示文件名

  • 2>/dev/null 把所有的错误信息,如权限错误,不能访问等重定向倒看不到的虚拟设备,只显示有用信息。(1 代表"标准输出”,2 代表“标准错误输出”)

  • | 把前一个命令的输出以管道的方式传给后面的命令

  • xargs 对输入的每一个参数,循环执行后面的命令

  • grep 'awk'在指定文件中查找字符串,这里的输入文件时 xargs 命令传过来的,每次处理一个 find 输出的文件名



[bash]
find . | xargs grep "abc" #全文检索,打印出来包含关键字的文件名和行数据
[/bash]

[bash]
find . -exec grep -l "string" {} \; #全文检索,只显示包含关键字的文件名
find . -name *.cpp grep -l "字符串" {} \; #切换用户并使用该用户的环境配置:su - user
[/bash]

[bash]
#删除一些旧的文件,但是遇到windows的长文件名时的删除方法
find ./ -mtime +300 | awk -F \0 '{printf("\"%s\"\n",$0)}' | xargs -n 1 rm -f
#查找某个目录下的具有包含某个字符串的文件并删除:
find . -type f -exec grep "232" {} \; -exec rm {} \;
find . -type f -exec grep -q "123" {} \; -exec rm {}\;
#删除当前计算机系统日期前2天产生的所有文件,包括子目录下所有目录和文件:
find . -type d -atime +2 -exec /bin/rm -r '{}' 2>/dev/null \
find . -type f -atime +2 -exec /bin/rm -r '{}' 2>/dev/null \
grep 字符串 * #在当前目录(不包括子目录)里搜索文件内容
find . | xargs grep aaa #在当前目录(包括子目录)里搜索文件内容
find . | xargs grep typedef.*TIASTRU #同时包含词"typedef"和"TIASTRU"
find . -exec grep -l "string" {} \; #在当前目录全文查找string串
find . -name file1.c
[/bash]

正则表达式

  • .* 匹配任意字符

  • .. 匹配2个字符

  • abc?(2|9)1 ?匹配0或1个2或9

  • abc*([0–9]) *匹配0或多个0-9

  • abc+([0–9]) +匹配1或多个0-9

  • no@(one|ne) @严格匹配one和ne

  • no!(thing|where) !不匹配thing或where



unix上查看本地的ip地址和网卡信息:
[bash]
hostname #显示机器名
cat /etc/hosts
netstat -in
[/bash]

[bash]
chmod +x filename #增加执行属性
rm -f file #删除文件
rm -rf directory #删除文件夹
cd a* #就可以进入比如:appp的文件夹
ps -x #查看属于自己的进程
ps -ef | grep ap* #查找以ap开头的进程
uname -a #显示操作系统os类型
[/bash]

[bash]
ls -Rl | more #以分页方式列出目录下所有文件子目录
[/bash]

查看系统中的使用者:
[bash]
who or finger
su username #进入其他帐号
who am i
[/bash]

vi模式下
[bash]
vi *.sql #假如vi编辑多个文件,用:n切换下一个文件
ESC + :!sh or :!ksh #执行外部命令
ESC + :20,24 w file #将文件20-24行放到file文件中
vi -R #只读打开文件
q! #离开并放弃保存
wq #离开并保存
w #保存但不离开
ESC+:232 #代表跳到252行
ESC+:/banner #代表跳到查找包含banner词的行,用 n 还可继续查
ESC+: r #vi嵌入外部文件 r 文件路径
ESC+:! ls #vi执行外部命令
[/bash]

[bash]
man ls #在线帮助man+命令
mv #移动或更改文件、目录名称
pwd #当前目录
cat/more cat file1 | more
kill PID #杀死进程
[/bash]

[bash]
df #查看磁盘中可以使用的自由空间
df -t #查看使用百分比例
[/bash]

[bash]
diff #比较两个文件
[/bash]

more 或 vi 向下翻页用 CTRL+D,向上翻页用CTRL+B
[bash]
l -rt #显示最近更新的文件
[/bash]

unix默认shell采用ksh
在命令行下,使用时先按“ESC”键

  • j 向后查找

  • k 向前查找

  • / 查找关键字,回车匹配查找,按n显示下一个满足条件命令行,该功能类似vi中操作



用 ESC+k 或 j 上翻或下翻显示历史命令的时候,如何编辑命令呢
k 上翻,l 光标后移,x 删除光标所在的字符,向上箭头把光标移到最后,i 输入新字符


关机
[bash]
shutdown -y 0
[/bash]

[c]
sprintf(szYhtId, "%08s", szTemp); #字符串不够8位左补0:不要忘了s
szYhtid = atoi(yhtid); #转换为INT类型
[/c]

本地工作站与远端工作站之间文件传输必须拥有远端工作站之帐(号及密码,才可进行传输工作)
执行格式:ftp hostname or ftp ip_address
Example :
[bash]
ftp doc #与远端工作站 doc ,进行文件传输
Name (doc:user-name): 输入帐号
Password (doc:user-name): 输入密码
[/bash]

FTP 命令

  • help 列出 ftp 文件传输,可使用之任何命令。

  • !ls 列出本地工作站,目前目录下之所有文件名。

  • !pwd 列出本地工作站,目前所在之工作目录位置。

  • ls 列出远端工作站目前目录下之所有文件名。

  • dir 列出远端工作站目前目录下之所有文件名(略同於 UNIX 的 ls -l 指令).

  • dir . | more 同上,但每页会暂停(可能不适用 Unix 以外的 ftp)。

  • pwd 列出远端工作站目前所在之目录位置。

  • cd dir1 更改远端工作站之工作目录位置至 dir1 之下。

  • get file1 将远端工作站之文件 file1 ,拷贝到本地工作站中。

  • put file2 将本地工作站之文件 file2 ,拷贝到远端工作站中。

  • mget *.c 将远端工作站中,副文件名为 c 之所有文件,拷贝到本地工作站中。

  • mput *.txt 将本地工作站中,副文件名为 txt 之所有文件,拷贝远端工作站中。

  • prompt 切换交谈式指令(使用 mput/mget 时不用每个文件皆询问yes/no)。

  • quit 结束 ftp 工作。

  • bye 结束 ftp 工作。

  • lcd 切换本地目录



注:
1. 从PC与工作站间的文件传输也可通过在 PC端的 FTP指令进行文件传输,指令用法与上所述大致相同。
2. ![cmd[args]] 在本地机中执行交互shell、exit回到ftp环境,如!ls *.zip


例:
[bash]
ftp -n -i -v << !
open 172.10.1.11
user test test
prompt
as
quote type b 9
lcd /home/usr/test/yht
cd /home/test/test
mput *
bye
!
[/bash]
注:prompt指设置交互提示,这里关闭

2007年12月7日星期五

Samba 配置

1. 安装Samba服务器
如果用户在安装Linux 时已经安装了Samba ,就无需再安装了可以通过下列命令确定是否已经安装了Samba

[root@ smb_server root]# rpm –qa | grep samba
samba-commom -2.2.7a-7.9.0
samba-2.2.7a-7.9.0
samba-client-2.2.7a-7.9.0
redhat-config-samba-1.0.4-1
samba-swat-2.2.7a-7.9.0

若出现这5个软件包,则表示已经安装了Samba ,否则必须安装Samba 。

[root@smb_server root]# mount /dev/cdrom /mnt/cdrom

将光盘挂载到 /mnt/cdrom目录]

[root@smb_server root]# cd /mnt/cdrom/RedHat/RPMS

切换到放置rpm文件的目录

[root@smb_server root]# rpm -ivh samba-commom -2.2.7a-7.9.0i386.rpm

这是Samba 必备的程序,必须安装

[root@smb_server root]# rpm -ivh samba-2.2.7a-7.9.0.i386.rpm

安装Samba 服务器程序,可以使我Windows 主机访问Samba 服务器共享的资源。

如果需要使Linux 主机访问Windows 主机上的共享资源,则还应该安装Samba 客户端程序。

[root@smb_server root]# rpm -ivh samba-client-2.2.7a-7.9.0.i386.rpm


2. Samba的全局参数的配置
Samba 最主要的配置文件是 /etc/samba/smb.conf,其中有很多选项可以设置,但作为初学者,只需要掌握其中一小部分选项的设置就可以配置所需要的Samba服务器了。在了解基本配置的基础上,就能很快架设一个基本的Samba服务器。在基本配置文件中,也只用到其中一小部分命令选项。

全局参数的配置在[global]字段中,没有出现(或被注释)的参数,Samba 采用的是默认配置。

# This is the main Samba configuration file. You should read the
# smb.conf(5) manual page in order to understand the options listed
# here. Samba has a huge number of configurable options (perhaps too
# many!) most of which are not shown in this example
#================== Global Settings ============================

[global]
#这是配置文件中关于全局参数的设置部分。
…………
workgroup = SMBGROUP
#这是设置服务器所要加入的工作组的名称,会在Windows 的“网上邻居”中能看到MYGROUP工作组,可以在此设置所需要的工作组的名称。

netbios name=smb-server
#设置出现在“网上邻居”中的主机名。默认情况下,则使用真正的主机名。

server string = Samba Server
#这是设置服务器主机的说明信息,当在Windows 的“网上邻居”中打开Samba 上设置的工作组时,在Windows 的资源管理器窗口,会列出“名称”和“备注”栏,其中“名称”栏会显示出Samba服务器的NetBios名称,而“备注”栏则显示出此处设置的“Samba Server”。当然,可以修改默认的“Sambe Server”,使用自己的描述信息。

hosts allow = 192.168.1. 127
#这里是设置允许什么样的IP地址的主机访问Samba服务器。默认的情况下,hosts allow选项被注释,表示允许所有IP地址的主机访问。

guest account = pcguest
#设置当访问那些被设置了“guest ok=yes”参数的资源时所要使用的帐号名。默认的帐号为”nobody”,如果不想用默认的值,则应该去掉注释用的分号,用你想要的帐号(如pcguest、 zhangsan等 ),然后,你必需将这一新帐号加入到/etc/passwd文件中去。

client code page=950
设置客户端访问Samba 服务器时所使用的字符编码表(code page),默认值为850,如果Samba 服务器要使用年中文名称来来命名共享的资源,要将此值改为950

log file = /var/log/samba/%m.log
#这一选项要求Samba服务器为每一个连接的机器使用一个单独的日志文件,指定文件的位置,名称。Samba会自动将%m转换成连接主机的NetBios名。

max log size = 0
指定日志文件的最大容量(以KB为单位),设置为0,表示没有限制。默认值为5000。

max disk size =1000
#设置能够共享的最大磁盘空间,单位为MB,默认值为0,表示不作任何限制。

max open file =100
#设置同一客户端最多能打开文件的数目,默认值为10000个。

security = user
#设置Samba服务器的安全等级。默认情况下,使用user等级。
#Samba服务器一共有四种安全等级。
share: 使用此等级,用户不需要帐号及密码可以登陆Samba服务器。
user: 使用此等级,由提供服务的Samba服务器检查用户帐号及密码。
server: 使用此等级,检查帐号及密码的工作可指定另一台Samba服务器负责。
domain: 使用此等级,需要指定一台Windows NT/2000/XP服务器(通常为域控制器),以验证用户输入的帐号及密码。

; password server =

#如果安全等级为“server”或“domain”,则使用此选项指定要验证密码的主机名。

password level = 8
username level = 8
#设置当验证用户口令和帐号时最多允许几个大小写字不同。默认值为0。

encrypt passwords = yes
#设置当Samba客户端将帐号及密码传送到服务器端时,是否采取密码加密的方式。客户的操作系统如果是Windows 95 OSR2 及NT SP3以后的版本,应该将此选项的值设为yes,默认值为no。

smb passwd file = /etc/samba/smbpasswd
#设置在Samba服务器上存放加密的密码文件的位置(注意:Samba服务器与Linux采用不同的密码文件)。


3. 设置Samba密码文件
smb.conf 文件中有“smb password file =/ect/samba/smbpassword”一行设置项,现在就要创建该设置项所指定的/ect/samba/smbpassword密码文件(若是用Windows NT/2000Server 来验证密码,则可以跳过此段内容)。以root帐号登录,然后按下列步骤进行:

[root@smb_server root]#cat /etc/passwd | mksmbpasswd.sh > /etc/samba/smbpasswd
[root@ smb_server root]# chmod 500 /etc/samba
[root@ smb_server root]# chmod 600 /etc/samba/smbpasswd

此步骤是将未加密的/etc/passwd文件转换成加密的smbpasswd文件。基于保密的原则,将/etc/samba目录的权限设为500,该文件的权限设为600,以避免他人取得密码文件。

完成之后再利用smbpasswd命令,设置/ect/samba/smbpassword文件中每个帐号所使用的密码。(下面以fred为例。注意:此处设置的密码是fred要访问Samba服务器的密码,并非登录Linux 主机的密码,默认设置”UNIX password sync=YES”, 则登录Linux 主机的密码将改变,与Samba服务器的密码一致,如果希望这两个密码不一致,则设置”UNIX password sync=NO”)

[root@smb_server root]# smbpasswd fred
New SMB password: 此处输入密码
Retype SMB password: 重新输入密码
Password changed for user fred 看到这一句表示密码设置成功。


4. 启动Samba服务器
可以执行下面的命令来启动Samba服务器:

[root@ smb_server Root]# service smb start

当能看到下面的显示,就表示启动成功。

Starting SMB service [确定]
Starting NMB service [确定]

如果要暂停或重新启动Samba服务器,只要将上面命令中的start 改为stop或restat就可以了。

也可以让系统在每次开机时就启动Samba服务器。执行ntsysv命令,进入Service设置画面,选择smb选项,单击确定即可。

5. 测试Samba配置文件
设置好smb.conf文件之后,执行下面的命令测试smb.conf的设置语法是否正确。

[root@smb_server root]# testparm
Load smb config files from /etc/samba/smb.conf
Processing section "[homes]"
Processing section "[printers]"
Processing section "[tmp]"
Processing section "[public]"
Processing section "[fredsdir]"
Loaded services file OK.
Press enter to see a dump of your service definitions

表示正确。
检查正常后,一定要记得执行

[root@smb_server root]# service smb restart

命令,重新启动Samba服务器。

6. 设置共享资源参数

comment
#针对共享资源所作的说明、注释部分

browseable
#设置用户是否可以看到此共享资源。默认值为yes,若将此参数设置为no,用户虽然看不到此资源,但是拥有权限的用户仍可直接输入该资源的网址来访问该资源。

writable
#设置共享的资源是否可以写入。若共享资源是打印机,则不需设置此参数
#设置可访问的用户。系统会自动将%S转换成登录帐号。

create mode
# 设置文件的访问权限,默认值为0744。

directory mode
设置目录的访问权限,默认值为0755。

path
#若共享资源是目录,则指定目录的位置;若为打印机,则指定打印机队列的位置。

read only
#设置共享资源是否只读或可以写入,默认值为yes。若共享资源为打印机时,此参数无任何意义。这一项与writable相反。

Public
#等同于guest ok选项,表示是否允许用户不使用帐号和密码便能访问此资源。如果起用此功能,当用户没有帐号和密码时,则会利用“guest account=”所设置的帐号名登录。该选项默认值为no,即不允许没有帐号即密码的用户使用此资源。
avalible
#设置是否启用此共享资源。默认值为yes。若将此参数设置为no,则不管其他参数设置为什么,所有人均不得使用此资源。
valid users


7. 配置Samba文件共享举例

[global]
…………
#采用前面的[global]配置

[homes]
#用来配置用户访问自己的目录

comment = Home Directories
#注释

browseable = no
#用户私人目录,不给别人浏览(并不是不允许别人访问)

writable = yes
#允许用户写入自己的目录

valid users = %S
#可访问的用户局限于用户自己。%s会被自动转换为登录帐号。

create mode = 0664
#文件的访问权限

directory mode = 0775
#目录的访问权限
#This one is useful for people to share files

[tmp]
#这个部分为所有用户提供临时共享的方式
comment = Temporary file space
#注释文字

path = /tmp
#指定位置

read only = no
#可以读写

public = yes
#允许用户不用帐号和密码访问

[public]
# 这个部分为所有用户提供可以共同访问的目录。允许staff组用户写入,但其他用户只可访问,不能写入。

comment = Public Stuff
path = /home/samba
public = yes
writable = yes
printable = no
write list = @staff

# write list参数是用来设置具有写权限的用户列表。这里只允许staff组的成员有写的权限
[fredsdir]
#这个部分用来设置某一用户fred的访问权限。

comment = Fred’s Service
path = /usr/fred/private
valid users = fred
#只有fred可以访问(注意:即使security=share,也不代表用户登录Linux 主机后可以访问任意资源。)该共享目录

public = no
writable = yes
printable = no

说明:配置文件修改后,要重新用testparm测试配置文件,重新启动Samba 服务器程序。

8. 使用共享的目录
现在以Windows 2000为例,介绍***用户如何读取Linux 所共享的资源。
A.以fred帐号登录Windows ,然后在“网上邻居” 中找到前面所设置工作组smbgroup。
B.双击工作组smbgroup图标,将看到Samba 服务器smb_server
C.双击服务器smb_server图标,若在Windows 中使用的密码与Linux 的用户密码相同,即可以看到服务器上所共享的资源(表示登录Linux 主机成功)。
D.若在Windows 中使用的密码与Linux 的用户密码不同,则会出现“输入网络密码对话框”,输入st1在SMB中设置的用户密码(由于设置了”unix password sync=YES”,所以此处输入的密码一定要是smb密码)
E.双击所要访问的共享目录(如***sdir),出现所示“输入网络密码”窗口,输入***的密码(因为***sdir共享目录只允许***访问,所以在此要输入***的smb密码)

9.配置Samba打印共享
Samba中涉及打印共享的参数主要有以下几个

在[global]字段中涉及共享打印机的主要字段
printcap name =/etc/printercap
#这是指定打印机配置文件的位置。打印守护进程读取printcap文件中的配置信息,监视打印机的工作情况。

load printers
#指定是否要加载打印机(使打印机可以共享)。默认值为yes。
#如果用户想要自动载入打印机列表,而不是个别地安装,则必须在此指定以上两项

printing =cups
# 指定打印系统类型。只有在你的打印系统不是标准的情况下,才必须指定,否则不必指定。指定打印系统类型将影响到smb.conf文件中与打印机相关的命令(如print,lpq,lppause,lpresune)的执行方式。默认的打印系统类型为bsd,其他的类型还有 sysv,plp,lprng,hpux,qnx,cups。


10. 配置共享打印机
A. 在Linux Samba 服务器上配置本地打印机
B. 获得 Adobe Postscript Driver
按下列步骤进行
(1)到http://www.adobe.com/下载简体中文版Adobe Postscript Driver,文件名为Winstchs.exe。
(2)在Windows 环境(如Windows 2000 Professional)下安装。
(3)进入Windows 计算机C:WINNTsystem32spooldrivers目录,从子目录w32x86和WIN40中挑选出表1所示的8个文件,并且将文件名字母全部改为大写。













ADFONTS.MFM ADOBEPS4.HLP ADOBEPSU.DLL DEFPRTR.PRO
ADOBEPS4.DRVADOBEPS5.DLLADOBEPSU.HLPICONLIB.DLL

(4)在Linux 计算机上创建/usr/share/cups/目录, 表1所示的8个文复制到此目录下。
C.设置smb.conf的打印共享配置

[global]
…………
#按上文将有关共享打印机的几个主要配置参数写到此处。

[printers]
#这部分用于配置打印机共享,所有用户都可以共享打印机。

comment = All Printers
#注释文字

path = /var/spool/samba
#设置打印机队列的位置,用户必须自行创建该目录,存放打印的临时文件

browseable = no
#不允许浏览共享打印机

# Set public = yes to allow user ’guest account’ to print
guest ok = no
#必须用帐号和密码才可以访问共享打印机

writable = no
#共享打印机,writable必须设置为no

printable = yes
#允许用户更改打印机队列中的文件

[fredsprn]
#该共享的打印机只允许fred私人使用

comment = Fred’s Printer
valid users = fred
path = /home/fred
#打印机队列是fred的用户目录,要主义fred必须有权访问该目录。

printer = freds_printer
#设置共享打印机的名称,此参数又可以写成“printer name=”,该参数如果放在[global]字段,所有打印服务用到的打印机名都将是一样的

public = no
writable = no
printable = yes

D. 为Windows 客户机准备打印驱动

为了给Windows 客户机准备打印驱动,可以运行cupsaddsmb命令。执行如下的操作将打印机驱动程序放置在/etc/samba/drivers目录下。

创建/etc/samba/drivers目录

[root@smb_sever root] #mkdir /etc/samba/drivers

运行cupsaddsmb命令,以root身份执行该命令,共享所有打印机

[root@smb_sever root]# cupsaddsmb -a -U root

E. 从Windows 客户机访问Samba 共享打印机
当配置好Samba 共享打印机之后,合法用户就可以在Windows 的网上邻居看到被共享的打印机。双击共享的打印机,在弹出的窗口中确认安装此打印机驱动即可。

11. 在Linux环境下应用Samba服务
在Linux平台客户机上使用Windows 计算机提供的共享资源或Linux Samba 服务器提供的共享资源,通常有两种方法。分别是使用smbclient命令和使用smbmount命令。

现在以使用Windows 计算机提供的共享资源为例分别介绍这两种方法。先在Windows 中设置共享的文件夹,Windows 计算机NetBios名为win,IP地址为192.168.0.3,共享的文件夹共享名为share_dir。Linux计算机名为lin,且安装了smb组件。

A. 使用smbclient命令
在Linux计算机上,执行以下命令

[root@lin root] # smbclient -L win

或者

[root@lin root] # smbclient -L 192.168.0.3

结果在Linux计算机上列表显示出win所提供的所有共享信息。
在Linux计算机上,执行以下命令

[root@lin root] # smbclient //win(或IP地址)/share_dir -U tom

其中tom是Windows 计算机上的用户。系统提示输入tom的密码,输入正确后,系统提示
smb:>

此时,就可以向使用FTP客户的方法使用smbclient。

使用smbmount命令
知道某台主机所共享的资源后,执行smbmonut命令将远程共享挂载到本地。

[root@lin root] # mkdir –p /mnt/smb/win_share_dir

先创建挂载点目录

[root@lin root] #smbmount //win/share_dir /mnt/smb/win_share_dir

将远程共享//win/share_dir//win/share_dir挂载到本地目录/mnt/smb/win_share_dir

这样就可以象访问本机目录一样操作此挂载的目录了。若要卸载已挂载的目录,则执行umount命令即可。

[root@lin root]#umount /mnt/smb/win_share_dir

Samba系统简介

什么是Samba
Samba在市场上并不是一个新面孔。它最初出现在大家面前的时间是1992年。Samba系统通过利用越来越多的开放源代码软件,获得了丰富多彩的性能,并且变得越来越稳定。随着Samba系统的不断进化,对于那些正在考虑将其文件和打印解决方案迁移到Linux的系统管理员来说,如今它已经成为这些管理员的一个真正的可选项。

另外,在Linux系统上构建存储解决方案也是一种非常便宜的方法。首先,在机箱中安装一个支持IDE RAID 卡,安装Linux,启动 Samba,然后你就可以一个在自己的网络上安排大量存储的存储空间,这是一种成本非常低的实现方法。对于那些移动专家的笔记本电脑的备份以及需要进行长期归档工作的企业来说,这种解决方案是非常理想的。

SMB协议
在安装Samba系统之前,很有必要了解一下Samba是如何工作的。Samba之所以能够工作,是因为它模仿的是 Windows内核的文件和打印共享协议,该协议称之为SMB协议(Server Message Block )。SMB在Windows出现之前就已经存在了。该协议可以追溯到上个世纪的80年代,它是由英特尔、微软、IBM、施乐以及3com等公司联合提出的。虽然在过去的20年中,该协议得到了扩展,但是该协议的基本理论仍然是相同的。

微软已经将SMB改名为公共因特网文件系统(CIFS,Common Internet File System )。这在一定程度上是由于它想与最初的基于NetBIOS的SMB保持一定的距离。最初,NetBIOS是一个伟大的工具,但是渐渐地显示出该工具无法处理在内部网络中连接到计算机上的全部计算机的个数,或者在因特网上无法显示连接到当前计算机上的计算机的个数。

Samba也执行了SMB(或者叫做CIFS)的一个版本,这个版本在很大程度上与大多数的Windows版本兼容。有时候,微软 Samba系统会出现崩溃,例如在Windows 2000的补丁包中,当正常的认证方式被改变时,就会导致Samba系统的崩溃。唯一的能够让Samba重新工作的方法是通过注册表来将认证方式改回来。尽管存在这些细小的缺陷,虽然这些缺陷在大量集成之后总是会出现的,但是,无论是从Windows连接到Linux还是从Linux连接到Windows 机器,Samba系统对于实现文件和打印服务来说总是很稳定的。

提示: 本文将以Red Hat 9.0上的Samba系统作为讨论的基础。但是你不要因此而考虑太多。因为无论你运行的是哪个版本的Linux,Samba系统在实质上是相同的,但是,在具体的配置细节上可能会有所不同。

安装Samba
自从Red Hat 9发行之后,Samba系统随之也发行了它的更新版本。正因为如此,你需要从RedHat网站上下载新的可用的更新版本。通过点击这里,可以登录Red Hat的Samba系统更新页面。

一旦你有了更新版本,你就可以使用下面的命令来安装他们:
[bash]
rpm -ivh samba-2.2.7a-8.9.0.i386.rpm samba-common-2.2.7a-8.9.0.i386.rpm samba-client-2.2.7a-8.9.0.i386.rpm samba-swat-2.2.7a-8.9.0.i386.rpm
[/bash]
使用这个命令可以安装Samba系统的所有组件,包括一个称之为 swat 的配置工具。虽然我在本文中将不使用swat,但是你应该注意到这是一个非常有用的工具,该工具可以帮助你在Samba系统中配置更为复杂的选项。

Samba的基本配置
控制Samba安装的文件在/etc/samba 目录下,其文件的名字是 smb.conf。要想让 Samba 系统工作,需要对这个文件进行一些基本的编辑工作。

首先你必须改变 Hosts Allow 行中的内容,使该行中包含你的局域网信息。如果你不对此行进行编辑的话,你的网络中的任何人都无法访问你的系统。此行中应该包含你的局域网的前缀。例如,我的实验室网络运行在10.254.1.0/24上。因此我可以将10.或者10.254.或者10.254.1 放在host allow 行中来允许我的网络中所有的机器来使用这个Samba系统。当然,我指定的网络地址越少,对于其他人来说,就有越多的机会来使用我的 Samba服务器。

密码
要确保Samba系统正确运行的最后一步是要对每个用户帐户至少设置一个密码。由于在 Linux 和 Windows 系统中保存密码的方式各不相同,所以对于SMB的密码数据库来说,你需要使用一个工具来进行管理。你可以在控制台提示中输入smbpasswd -a root 命令来实现这个目的。

在这种情况下,该工具将提示你对选定的用户输入密码,然后确认密码(这里假设是个根用户)。一旦完成这个过程,根用户就可以从一个Windows机器中连接到Samba的配置文件中指定的缺省共享文件夹。在这种情况下,根用户的home 目录以及一个选定的安装好了的打印机就已经可以使用了。

测试从Windows到Linux的连接
最快捷的测试激活Samba功能的Linux系统方法是:在同一个网络中寻找一个安装了 Windows系统的机器。点击Windows系统中的开始菜单中的运行,在运行窗口中,输入两个反斜杠\\,后面紧跟你的装有Samba服务器的IP地址。使用IP地址的目的在于消除你的网络中可能存在的域名解析方面的问题。如果你愿意的话,你可以使用机器的名字来测试,但是要注意的是这种使用名字的方法可能会无法实现你的测试目的。

此时系统应该会提示你输入用户名与密码。输入你在前面已经输入的根用户的名字和密码就可以了。此时你应该可以看到一个文件夹,该文件夹中包含一个名字为"root"的文件夹和一个名字为"Printers"的文件夹。即使在你的Samba服务器上没有安装打印机,也会出现"Printers"文件夹。

如果没有出现输入用户名和密码的提示,这可能意味着你的Linux机器上的Samba服务器还没有运行起来。你可以检查一下,以确认 smbd 进程确实已经启动,检查的方法是在命令行中输入ps -ea | grep smbd 就可以知道该进程是否启动。如果没有返回任何信息,说明Samba进程可能会由于某种原因没有启动。可以到/var/log/samba目录下查看一下日志文件,通过这些文件你可能可以找到导致进程没有启动的原因。

测试从Linux到Windows的连接
同样,从Linux系统中建立一个到 Windows 机器的连接也是非常简单的事情。第一步要确保你已经创建了一个挂载点来安装网络共享。例如,我用/mnt/smb来进行测试。在你以根用户登录时,你可以在根驱动器下通过使用mkdir /mnt/smb命令来创建这个目录。

一旦完成了目录的创建,你就可以使用mount命令来加载网络共享。在这里,对于mount命令和Samba系统来说,有三个关键因素需要你注意。首先,文件系统类型是smbfs。这意味着你在mount命令行中必须指定-t smbfs。其次,在远程机器上的用户名最好不要和本地机器上的用户名相同,所以必须指定一个用户名。你可以使用一下的命令来实现:-o username=domain\\user

需要注意的是,在 username 中使用的是两个反斜杠来分离域名和用户名。之所以要这样,是因为命令行解释器将这两个反斜杠只解释为一个反斜杠。

最后,在用于共享的UNC路径中,Windows一般都是使用反斜杠。在UNIX命令解释器中,由于存在反斜杠的翻译问题,所以在mount命令中使用前向反斜杠。所以,最后的命令应该如下:
[bash]
mount /mnt/smb //server/share -t smbfs -o username=MYDOMAIN\\Administrator
[/bash]
系统会提示输入你的密码,并且一旦你成功的输入了你的密码,你就可以通过你已经定义的挂载点来访问远程共享文件夹中的文件,在本文中该文件夹就是 /mnt/smb

未来的方向
Samba的支持并不是没有局限性。目前的Samba系统能够较好的和Windows2000和Windows XP客户端进行合作,但是它还没有完全集成到微软的活动目录结构中。这也是它的3.0版本所要实现的。虽然现在已经可以得到公开的Beta测试版本,但是在作者写作本文时,该版本仍在进一步研发中。

Samba系统的真正目的在于帮助简化混合操作系统环境中所存在的挑战。对于大企业来说,在共享文件和共享打印的访问方面存在巨大挑战,而Samba系统的目的在于改变这种现象。

2007年11月30日星期五

PHP 基础知识

FROM:

  • 单引号'和双引号"的区别
    单引号要比双引号执行效率要高,因为双引号会对内容进行预处理。例:'$value' 输出字符 $value ; "$value" 输出变量$value的值。

  • char和varchar的区别
    char是定长而varchar是变长,char的主要特点是存储方式预分配,varchar当它的数据长度发生变化时会影响其存储的页分配。
    char与varchar是一对矛盾的统一体,两者是互补的关系.
    varchar比char节省空间,在效率上比 char会稍微差一些,即要想获得效率,就必须牺牲一定的空间,这也就是我们在数据库设计上常说的 以空间换效率
    varchar 虽然比 char 节省空间,但是如果一个 varchar 列经常被修改,而且每次被修改的数据的长度不同,这会引起行迁移(row migration)现象,而这造成多余的i/o,是数据库设计和调整中要尽力避免的,在这种情况下用 char代替varchar2会更好一些

  • mysql_connect 和 mysql_pconnect 的区别
    引用exceed php club论坛上的朋友原话:
    php中 mysql_pconnect() 的实现方式: 其实 mysql_pconnect() 本身并没有做太多的处理, 它唯一做的只是在 php 运行结束后不主动 close 掉mysql的连接.
    mysql_pconnect() 与 mysql_connect() 的区别:
    cgi 方式下:
    在php经 cgi 方式运行时 pconnect 和 connect 是基本没有区别的, 因为 cgi 方式是每一个php访问起一个进程, 访问结束后进程也就结束了, 资源也全释放了.
    apache模块方式下:
    区别在于当 php 以 apache 模块方式运行时, 由于 apache 有使用进程池, 一个httpd进程结束后会被放回进程池, 这也就使得用pconnect打开的的那个mysql连接资源不被释放, 于是有下一个连接请求时就可以被复用.这就使得在apache并发访问量不大的时候, 由于使用了pconnect, php节省了反复连接 db 的时间, 使得访问速度加快. 这应该是比较好理解的. 但是在apache并发访问量大的时候, 如果使用pconnect, 会由于之前的一些httpd进程占用的mysql连接没有 close, 则可能会因为mysql已经达到最大连接着, 使得之后的一些请求永远得不到满足.
    例如:
    若 mysql 最大连接数设为 500, 而 apache 的最大同时访问数设为2000,假设所有访问都会要求访问 db, 而且操作时间会比较长
    当前500个请求的httpd都没有结束的时候, 之后的httd进程都是无法连接到mysql的(因已经达到mysql最大连接数). 只有当前500个httpd进程结束或被复用才可以连接得到了mysql.
    其实这个也很好解释了xgy_p的测试中若操作比较简单, pconnect比connect效率高很多, 而且跟使用jsp的连接池的速度比较接近. 因为这个时候httpd进程可以不断的给复用.
    而当db操作复杂, 耗时较长时, 因httpd会fork很多并发进程处理, 而先产生的httpd进程不释放db连接, 使得后产生的httpd进程无法连上db. 因为这样没有复用其它httpd进程的mysql连接. 于是会就产生很多连接超时, 像一开始的1000个并发连接测试说几乎都是连接超时就是这个原因.

    (反过来看jsp用的如果是纯粹的db连接池, 则不会有因为达到mysql连接上限而连不上的问题, 因为jsp的连接池会使得可以等待其它连接使用完毕并复用. )
    因此在并发访问量不高时,使用pconnect可以简单提高访问速度, 但在并发量增大后, 是否再使用pconnect就要看程序员的选择了..
    就我个人认为, php现在对mysql的连接并没有真正用到连接池, pconnect也只是相当于借了apache的进程池来用, 所以在并发访问量大的时候pconnect并不能很好的提高访问db效率. 在这一点上. php的确比不上jsp.
    就目前的这种情况, 如果并发量大的话, 我个人建议最好还用mysql_connect.

  • isset()和empty()的区别
    两者都是测试变量用的,但是isset()是测试变量是否被赋值,而empty()是测试一个已经被赋值的变量是否为空。

    如果一个变量没被赋值就引用在php里是被允许的,但会有notice提示,如果一个变量被赋空值,$foo=""或者$foo=0或者 $foo=false,那么empty($foo)返回真,isset($foo)也返回真,就是说赋空值不会注销一个变量。
     
    要注销一个变量,可以用 unset($foo)或者$foo = null

2007年10月24日星期三

WAMP配置

A.安装apache,在安装目录下找到htdoc文件夹,将下面的一个文件的扩展名改为.html,若成功安装在IE输入127.0.0.1可打开apache的一个页面。
B.下载PHP的zip包,若解压到E:/php
将php.ini.dist 另存为php.ini
打开php.ini
[bash]
extension_dir="e:\php\ext"
[/bash]

copy php.ini 到c:/windows 下
copy libmysql.dll 到c:/windows/system32下

C. 打开apache的配置文件httpd.conf
[bash]
LoadModule php5_module "e:\php\php5apache2.dll"
PHPIniDir "e:\php"
DirectoryIndex index.php
AddType application/x-httpd-php .php
[/bash]
D.增加环境变量
e:\php;e:\php\ext

2007年4月27日星期五

http错误代码含义

100 : Continue
101 : witching Protocols
200 : OK
201 : Created
202 : Accepted
203 : Non-Authoritative Information
204 : No Content
205 : Reset Content
206 : Partial Content
300 : Multiplehoices
301 : Moved Permanently
302 : Found
303 : See Other
304 : Not Modified
305 : Use Proxy
307 : Temporary Redirect
400 : Bad Request
401 : Unauthorized
402 : Payment Required
403 : Forbidden
404 : Not Found
405 : Method Not Allowed
406 : Not Acceptable
407 : Proxy Authentication Required
408 : Request Time-out
409 : Conflict
410 : Gone
411 : Length Required
412 : Precondition Failed
413 : Request Entity Too Large
414 : Request-URI Too Large
415 : Unsupported Media Type
416 : Requested range not satisfiable
417 : Expectation Failed
500 : Internal Server Error
501 : Not Implemented
502 : Bad Gateway
503 : Service Unavailable
504 : Gateway Time-out
505 : HTTP Version not supported
4xx: Client Error 使用者端(浏览器)错误讯息

400 错误的要求
401 未授权的动作
401.1 登入失败
401.2 因服务器设定问题造成登入失败
401.3 由于来源的 ACL 问题而未授权
401.4 筛选器授权失败
401.5 ISAPI/CGI 应用程序授权失败
403 Forbidden 禁止的动作
403.1 禁止执行存取
403.2 禁止读取存取
403.3 禁止写入存取
403.4 需要 SSL
403.5 需要 SSL 128 位加密
403.6 IP 地址被拒绝
403.7 需要客户端凭证
403.8 拒绝存取站台
403.9 太多的使用者
403.10 无效的设定
403.11 密码变更
403.12 对应程序拒绝存取
403.13 客户端凭证已撤销
403.14 目录清单被拒绝
403.15 超过客户端存取授权数
403.16 客户端凭证不被信任或者无效
403.17 客户端凭证已经过期或者无效
404 找不到
405 系统不允许此方法
406 无法接受
407 需要 Proxy 验证
408 要求的动作超过服务器的等待时间
409 冲突
412 先决条件失败
413 请求的实体太大
414 请求的 URL 太长

5xx 服务器端错误讯息
500 内部服务器错误
500.12 应用程序正在重新启动
500.13 服务器太忙碌
500.15 不允许 Global.asa 的要求
500-100 ASP 错误
501 未执行
502 不正确的网关

村口有篇文章提到过,可以利用404来控制生成静态页,也就是第一个访问者访问时,页面不存在,转向404处理页,根椐内容和上页url生成并转向静态页,第二个访问者访问时,该页就有静态了,这种方案在静态内容很多时还是有用的,如一次导入几万条数据...
当然,除了生成静态页,在404页里还可以作其它很多的处理。

Unix发展历史

UNIX是一个强大的多用户,多任务操作系统,支持多种处理器架构,最早由Ken Thompson,Dennis Ritchie和Douglas McIlroy于1969年在 AT&T 的贝尔实验室开发。

贝尔实验室开发UNIX的,此後的10年,UNIX在学术机构和大型企业中得到了广泛的应用,当时的UNIX拥有者AT&T公司以低廉甚至免费的许可将UNIX源码授权给学术机构做研究或教学之用,许多机构在此源码基础上加以扩充和改进,形成了所谓的UNIX“变种 (Variations)”,这些变种反过来也促进了UNIX的发展,其中最着名的变种之一是由加州大学Berkeley分校开发的BSD产品。

後来AT&T意识到了UNIX的商业价值,不再将 UNIX源码授权给学术机构,并对 之前的UNIX及其变种声明了版权权利。变种BSD Unix在Unix的历史发展中具有相当大的影响力,被很多商业厂家采用,成为很多商用Unix的基础。BSD使用主版本加次版本的方法标识,如 4.2BSD,4.3BSD,在原始版本的基础上还有派生版本,这些版本通常有自己的名字,如4.3BSD-Net/1,4.3BSD-Net/2等。其不断增大的影响力终于引起了AT&T的关注,于是开始了一场旷日持久的版权官司,这场官司一直打到 AT&T将自己的Unix系统实验室卖掉,新接手的Novell公司采取了一种比较开明的做法,允许伯克利自由发布自己的BSD,但是前提是必须将来自于AT&T的代码完全删除,于是诞生了4.4 BSD Lite版,由于这个版本不存在法律问题,4.4BSD Lite成为了现代BSD系统的基础版本。尽管後来,非商业版的UNIX系统又经过了很多演变,但其最终,都是建立在BSD版本上(Linux除外)。所以从这个角度上,4.4 BSD又是所有自由版(Free版)Unix的基础,它们和Unix V及Linux共同构成Unix操作系统这片璀璨的星空。

BSD在发展中也逐渐衍生出3个主要的分支:FreeBSDOpenBSDNetBSD

此後的几十年中,UNIX仍在不断变化,其版权所有者不断变更,授权者的数量也在增加。UNIX的版权曾经为AT&T所有,之後Novell拥有了UNIX,再之後Novell又将版权出售给了SCO(这一事实双方尚存在争议)。有很多大公司在取得了UNIX的授权之後,开发了自己的UNIX产品,比如IBM的AIX,HP的HPUX,SUN的Solaris和SGI的IRIX。

UNIX因为其安全可靠,高效强大的特点在服务器领域得到了广泛的应用。直到GNU/Linux流行开始前,UNIX也是科学计算,大型机,超级计算机等所用操作系统的主流。

Multics(Multiplexed Information and Computing System)是有一定渊源的。Multics是由麻省理工学院,AT&T贝尔实验室和通用电气合作进行的操作系统项目,被设计运行在GE-645大型主机上,但是由于整个目标过于庞大,糅合了太多的特性,Multics虽然发布了一些产品,但是性能都很低,最终以失败而告终。

AT&T最终撤出了投入Multics项目的资源,其中一个开发者,Ken Thompson则继续为GE-645开发软件,并最终编写了一个太空旅行游戏。经过实际运行後,他发现游戏速度很慢而且耗费昂贵——每次运行会花费75美元。

在Dennis Ritchie的帮助下,Thompson用PDP-7的汇编语言重写了这个游戏,并使其在DEC PDP-7上运行起来。这次经历加上Multics项目的经验,促使Thompson开始了一个DEC PDP-7上的新操作系统项目。Thompson和Ritchie领导一组开发者,开发了一个新的多任务操作系统。这个系统包括命令解释器和一些实用程序,这个项目被称为UNICS(Uniplexed Information and Computing System),因为它可以支持同时的多用户操作。後来这个名字被改为UNIX。

B语言的解释型语言和汇编语言混合编写的。B语言在进行系统编程时不够强大,所以Thompson和Ritchie对其进行了改造,并与1971年共同发明了C语言。 1973年Thompson和Ritchie用C语言重写了UNIX。在当时,为了实现最高效率,系统程序都是由汇编语言编写,所以Thompson和 Ritchie此举是极具大胆创新和革命意义的。用C语言编写的UNIX代码简洁紧凑,易移植,易读,易修改,为此後UNIX的发展奠定了坚实基础。

1974年,Thompson和Ritchie合作在ACM通信上发表了一片关于UNIX的文章,这是UNIX第一次出现在贝尔实验室以外。此後UNIX被政府机关,研究机构,企业和大学注意到,并逐渐流行开来。

1975年,UNIX发布了4、5、6三个版本。1978年,已经有大约600台计算机在运行UNIX。1979年,版本7发布,这是最後一个广泛发布的研究型UNIX版本。20世纪80年代相继发布的8、9、10版本只授权给了少数大学。此後这个方向上的研究导致了Plan 9的出现,这是一个新的分布式操作系统。

1982年,AT&T基于版本7开发了UNIX System Ⅲ的第一个版本,这是一个商业版本仅供出售。为了解决混乱的UNIX版本情况,AT&T综合了其他大学和公司开发的各种UNIX,开发了UNIX System V Release 1。

这个新的UNIX商业发布版本不再包含源代码,所以加州大学Berkeley分校继续开发BSD UNIX,作为UNIX System III和V的替代选择。BSD对UNIX最重要的贡献之一是TCP/IP。 BSD有8个主要的发行版中包含了TCP/IP:4.1c、4.2、4.3、4.3-Tahoe、4.3-Reno、Net2、4.4以及 4.4-lite。这些发布版中的TCP/IP代码几乎是现在所有系统中TCP/IP实现的前辈,包括AT&T System V UNIX 和Microsoft Windows。

其他一些公司也开始为其自己的小型机或工作站提供商业版本的UNIX系统,有些选择System V作为基础版本,有些则选择了BSD。BSD的一名主要开发者,Bill Joy,在BSD基础上开发了SunOS,并最终创办了Sun Microsystems。

1991年,一群BSD开发者(Donn Seeley、Mike Karels、Bill Jolitz 和 Trent Hein)离开了加州大学,创办了Berkeley Software Design, Inc (BSDI)。BSDI是第一家在便宜常见的Intel平台上提供全功能商业BSD UNIX的厂商。後来Bill Jolitz 离开了BSDI,开始了386BSD的工作。386BSD被认为是FreeBSD、OpenBSDNetBSD的先辈。 和

AT&T继续为UNIX System V增加了文件锁定,系统管理,作业控制,流和远程文件系统。1987到1989年,AT&T决定将Xenix(微软开发的一个x86-pc上的UNIX版本),BSD,SunOS和System V融合为System V Release 4(SVR4)。这个新发布版将多种特性融为一体,结束了混乱的竞争局面。

1993年以後,大多数商业UNIX发行商都基于SVR4开发自己的UNIX变体了。

Novell。Novell期望以此来对抗微软的Windows NT,但其核心市场受到了严重伤害,最终Novell将SVR4的权利出售给了X/OPEN Consortium,後者是定义UNIX标准的产业团体。最後X/OPEN和OSF/1合并,创建了Open Group。Open Group定义的多个标准定义着什么是以及什么不是UNIX。

实际的UNIX代码则辗转到了Santa Cruz Operation,这家公司後来出售给了Caldera Systems。Caldera原来也出售Linux系统,交易完成後,新公司又被重命名为SCO Group。

报导指出,当年负责研发UNIX与后续维护工作的贝尔实验室1127部门已于2005年8月正式宣告解散。Ken Thompson已退休,现居加州;Dennis Ritchie调到别的部门;Douglas McIlroy在达特茅斯学院担任教授等等。

POSIX,一个开放的操作系统标准就在制定中,IEEE制定的POSIX标准现在是UNIX系统的基础部分。

Richard Stallman建立了GNU项目,要创建一个能够自由发布的类UNIX系统。20年来,这个项目不断发展壮大,包含了越来越多的内容。现在,GNU项目开发的产品,比如Emacs,GCC等已经成为各种其他自由发布的类UNIX产品中的核心角色。

1990年,Linus Torvalds决定编写一个自己的Minix内核,初名为Linus' Minix,意为Linus的Minix内核,后来改名为Linux,此内核于1991年正式发布,并逐渐引起人们的注意。当GNU软件与Linux内核结合後,GNU软件构成了这个POSIX兼容操作系统GNU/Linux的基础。今天GNU/Linux已经成为发展最为活跃的自由/开放源码的类UNIX操作系统。

1994年,BSD UNIX走上了复兴的道路。BSD的开发也走向了几个不同的方向,并最终导致了FreeBSD, OpenBSD和NetBSD的出现。

Unix is simple. It just takes a genius to understand its simplicity.

2007年3月27日星期二

Bind 域名服务器的配置

Bind是一款开放源码的DNS服务器软件,Bind是由美国加州大学Berkeley分校开发和维护的,全名为Berkeley Internet Name Domain。它是目前世界上使用最为广泛的DNS服务器软件,支持各种Unix平台和Windows平台。FreeBSD6.1-stable版本在安装时会自动将该软件安装。
Bind包含了一个叫named的后台进程和resolver库。Bind服务器在后台运行时,通过众所周知的端口提供服务。UDP(User Datagram Protocol)和TCP(Transmission ControlProtocol)在DNS 中的标准端口通常是53,可在/etc/services中设置。
resolver(DNS client程序)就是一系列驻留在系统库中的程序,用来提供出其它程序来访问DNS 服务的端口。

启动53号端口

[root@root]# cd /etc/defaults
[root@root /etc/defaults]# vi rc.conf


进入FreeBSD系统后,输入如上命令,在打开的文件中找到如下的记录行:

named_enable="NO" # Run named, the DNS server (or NO).
named_program="/usr/sbin/named" # path to named, if you want a different one.
#named_flags="" # Flags for named
named_pidfile="/var/run/named/pid" # Must set this in named.conf as well
named_uid="bind" # User to run named as
named_chrootdir="/var/named" # Chroot directory (or "" not to auto-chroot it)
named_chroot_autoupdate="YES" # Automatically install/update chrooted
# components of named. See /etc/rc.d/named.
named_symlink_enable="YES" # Symlink the chrooted pid file

将之复制到/etc/rc.conf,并修改named_enable=“yes”,若要在系统启动时,域名服务自动启动,将named_flags=””前的“#”去掉。
保存rc.conf文件后,输入如下命令,启动域名服务:

[root@root /etc]# /etc/rc.d/named start

输入如下命令, 可查看53号端口是否启动,若端口为53号的处于listen状态,则成功启动。

[root@root /etc]# netstat –aln |grep 53


添加zone
假设这里配置的域名为example.net
输入如下命令:

[root@root ]# cd /etc/namedb
[root@root /etc/namedb]# vi namedb.conf

在该文件中,我们可以看到如下的记录行:

options {
directory "/etc/namedb";
pid-file "/var/run/named/pid";
dump-file "/var/dump/named_dump.db";
statistics-file "/var/stats/named.stats";

说明:
directory:域名服务器的工作目录。
pid_file:把DNS进程文件加入到工作目录中。
在文件中加入如下记录:

zone "example.net" {
type master;
file "master/example.net.db";
};

说明:
type:是域名的类型。
file :则是表示该域的DNS数据库文件名及其存储位置,这要结合前面的directory来设置。“master/example.net.db”则表示该文件在/etc/namedb/master下。

建立域example.net的DNS数据库
一个域的DNS数据库是由该域的主名字服务器的系统管理员维护的一个文本文件集合,这些文本文件成为区文件,就是在“named.conf”中定义的file。它们包括两种类型的项:分析器命令(如$TTL)和资源记录(Resource Records)。资源记录是数据库的真实部分,而分析命令只是提供输入记录的一些简便途径。
资源记录的基本格式:
[name] [ttl] [class] type data
name字段:表示一个主机或者一个域。
ttl字段:以秒为单位,存活时间,与TCP/IP中的TTL差不多含义,但在网络TTL是指跳数。在Bind中,用$TTL指令。一般将存活时间设为一周,这样,可以减少网络流量和DNS的负载。
class字段:一般都使用“IN”,对应的是internet。
type字段:有SOA、A、NS、PTR、MX、CNAME等。
data字段:根据type字段不同而不同。
用如下命令打开域exmple.net的DNS数据库的文本文件example.net.db:

[root@root]# vi /etc/namedb/master/example.net.db

添加如下记录:

$TTL 3h
example.net. IN SOA start.example.net. end.example.net.(
2 ;Serial
3h ;Refresh, 3 hours
1h ;Retry, 1 hour
1w ;Expire, 1 week
2h ;Minimum, 2 hours
)
example.net. IN NS start
ww IN A 127.0.0.1
www IN A 172.16.237.208
start IN A 172.16.237.208
end IN A 172.16.237.208

说明:
SOA记录:每个区仅有一个SOA记录,该区一直延伸到遇见另有个SOA记录为止。SOA记录包括该区的名字,联系方式和各种不同的超时值。
example.net.:因为在上面named.conf中添加的zone语句指定的名字是example.net(后面的“.”不可忘);可以在这个区文件中使用 $ORIGIN分析器指令进行更改,也可以用“@”简写。
IN:class字段。
start.example.net.:该区的主名字服务器(后面的“.”不可忘记)。
end.example.net.:域管理员的邮箱。它之后的圆括号用来让SOA记录跨越几行。
第一个数值2:Serial,代表该区的序列号,更新数据文件必须更新这个区的序列号,否则从服务器将不更新。
第二个数值3h:Refresh,指定多长时间从服务器要与主服务器进行核对。
第三个数值1h:Retry,代表如果从服务器试图检查主服务器的序列号时,主服务器没有响应,则经过1hour重新检查。
第四个数值1w:Expire,决定从服务器在没有主服务器的情况下持续提供域数据服务的时间长短。
第五个数值2h:Minimum,指高速缓存否定回答的存活时间(可能指客户机如果要解析某台服务器的IP,而这台服务器是不代表客户查询的存活时间)。
上面所说明的都属于SOA记录。
NS记录:识别一个区有权威性的服务器(即所有主服务器和从服务器),并把子域委托给其他机构。
A记录:是DNS数据库的核心。一个主机必须为它的每个网络接口得到一条A记录。所以在本设计中都采取更新A记录。
执行named命令,重新启动DNS服务:

[root@root /etc]# /etc/rc.d/named restart


用nslookup查看配置好的域名

[root@root /etc/namedb/master]# nslookup
> server 172.16.237.208
Default server: 172.16.237.208
Address: 172.16.237.208#53
> www.example.net
Server: 172.16.237.208
Address: 172.16.237.208#53
Name: www.example.net
Address: 172.16.237.208
>

至此,一个简单的域名服务器配置好。

DNS 及相关概念

DNS,Domain Name System(域名系统)。域名系统为Internet上的主机分配域名地址和IP地址。由于网络中的计算机都必须有个IP地址来识别,互相之间才能通信,但让我们记住一大串的IP地址来访问网站显然是不可能的,所以用户使用域名地址,而DNS系统的功能就是自动把域名地址翻译为IP地址。域名服务是运行域名系统的Internet工具。执行域名服务的服务器称之为DNS服务器,通过DNS服务器来应答域名服务的查询。

  • DNS就是域名服务器,他的任务就是确定域名的解析,比如A记录MX记录等

  • 任何域名都至少有一个DNS,一般是2个。因为DNS可以轮回处理,这样第一个解析失败可以找第二个。这样只要有一个DNS解析正常,就不会影响域名的正常使用。

  • www.internic.net/whois.html输入查询的域名就可以确定域名的DNS。这个是国际域名管理中心唯一的权威。只要这里能查到某个域名,就表示域名是生效的。
  • 有效的DNS表示当前正在起作用的DNS服务器,比如查询结果是 DNS29.HICHINA.COM、 DNS30.HICHINA.COM就表示当前域名是由DNS29.HICHINA.COM
    、 DNS30.HICHINA.COM负责解析。
  • DNS是可以修改的。修改以后需要24-72小时以后,全世界范围的所有DNS服务器才能刷新过来。internic的信息一般在24小时以后可以看到。另外,修改的过程,并不表示域名会停止解析,只要你在2边都做好了解析。如果生效了就是新的DNS在起作用。如果没生效。就是旧的DNS在起作用。要么生效,要么不生效。不存在2个都不起作用的时间。所以域名解析,不会中断。前提是两边都做了解析。



A记录
A (Address) 记录是用来指定主机名(或域名)对应的IP地址记录。用户可以将该域名下的网站服务器指向到自己的web server上。同时也可以设置您域名的子域名。通俗来说A记录就是服务器的IP,域名绑定A记录就是告诉DNS,当你输入域名的时候给你引导向设置在DNS的A记录所对应的服务器

子域名
子域名道理等同二级域名,不过比二级域名更加延伸,比如我们继续扩展该域名的主机名,设置主机名为bbs.at,那么就可以建立一个三级域名:bbs.at.abc.com,当然也可以建立四级域名bbs.at.go.abc.com,五级域名bbs.at.go.home.abc.com……,依次类推,可以建立无限级别的域名,我们统称这些域名为顶级域名abc.com的子域名。

CNAME
NAME (Canonical Name)记录,通常称别名指向。在这里,您可以定义一个主机别名,比如设置ftp.***.com,用来指向一个主机www.***.com,那么以后就可以用FTP.***.com来代替访问www.***.com了。

MX记录
MX记录也叫做邮件路由记录,用户可以将该域名下的邮件服务器指向到自己的mail server上,然后即可自行操控所有的邮箱设置。您只需在线填写您服务器的IP地址,即可将您域名下的邮件全部转到您自己设定相应的邮件服务器上。简单的说,通过操作MX记录,您才可以得到以您域名结尾的邮局。

TXT 记录
TXT 记录,一般指为某个主机名或域名设置的说明,如:
admin IN TXT "管理员, 电话: 13901234567"
mail IN TXT "邮件主机, 存放在xxx , 管理人:AAA"
Jim IN TXT "contact: abc@mailserver.com"
也就是您可以设置 TXT ,以便使别人联系到您

SRV 记录
SRV 记录:一般是为Microsoft的活动目录设置时的应用。DNS可以独立于活动目录,但是活动目录必须有DNS的帮助才能工作。为了活动目录能够正常的工作,DNS服务器必须支持服务定位(SRV)资源记录,资源记录把服务名字映射为提供服务的服务器名字。活动目录客户和域控制器使用SRV资源记录决定域控制器的IP地址。


TTL值
TTL值全称是“生存时间(Time To Live)”,简单的说它表示DNS记录在DNS服务器上缓存时间。要理解TTL值,请先看下面的一个例子:
假设,有这样一个域名myhost.abc.com(其实,这就是一条DNS记录,通常表示在abc.com域中有一台名为myhost的主机)对应IP地址为1.1.1.1,它的TTL为10分钟。这个域名或称这条记录存储在一台名为dns.abc.com的DNS服务器上。
现在有一个用户在浏览器中键入一下地址(又称URL):http://myhost.abc.com 这时会发生什么呢?
该访问者指定的DNS服务器(或是他的ISP,互联网服务商, 动态分配给他的)8.8.8.8就会试图为他解释myhost.abc.com,当然8.8.8.8这台DNS服务器由于没有包含myhost.abc.com这条信息,因此无法立即解析,但是通过全球DNS的递归查询后,最终定位到dns.abc.com这台DNS服务器,dns.abc.com这台DNS服务器将myhost.abc.com对应的IP地址1.1.1.1告诉8.8.8.8这台DNS服务器,然有再由8.8.8.8告诉用户结果。8.8.8.8为了以后加快对myhost.abc.com这条记录的解析,就将刚才的1.1.1.1结果保留一段时间,这就是TTL时间,在这段时间内如果用户又有对myhost.abc.com这条记录的解析请求,它就直接告诉用户1.1.1.1,当TTL到期则又会重复上面的过程

泛域名与泛解析
泛域名是指在一个域名根下,以 *.Domain.com 的形式表示这个域名根所有未建立的子域名。泛解析是把*.Domain.com 的A 记录解析到某个IP 地址上,然后别人通过任意的前缀.domain.com访问都能访问到你解析的站点上
例:域名根  name.com 只建立了 www.name.com和 name.com 这两个域名记录,那么 ftp.name.com mail.name.com bbs.name.com 等域名记录是不存在的,但为域名根 name.com 建立泛域名记录 *.name.com 后,*.name.com 就涵盖了 ftp.name.com mail.name.com bbs.name.com 等所有不存在的子域名记录。您可以定义 *.name.com 指向一个 IP ,那么当访问者无论是输入 ftp.name.com mail.name.com 或 bbs.name.com 的时候,
访问者都将直接访问您定义 *.name.com 的那个 IP 。

域名绑定
域名绑定是指,域名绑定是指域名和主机(即某个服务器)的空间进行关联绑定,其实就是在虚拟服务器上设置或者WEB服务器上设置,使一个域名被引导向服务器上的某一特定空间(某一个特定站点),访问者访问你的域名的时候就会打开你存放在该空间上的网页,简单来说其实就是把域名解析到服务器IP,然后在服务器上设置该域名有权限访问的过程。一般虚拟主机有控制面板给进行绑定域名,如果没有面板就需要自己在服务器上的IIS里面设置

域名转向
域名转向我们又称为域名(URL)指向或域名转发,当用户地址栏中输入您的域名时,将会自动跳转到您所指定的另一个网络地址(URL)。

Freebsd Make.conf

[bash]MASTER_SITE_BACKUP?= \
ftp://ftp.freebsd.org.cn/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/\
ftp://ftp.freebsdchina.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/

MASTER_SITE_OVERRIDE?= ${MASTER_SITE_BACKUP}
[/bash]

VI 设置

用chpass显示用户信息
[bash]
#Changing user information for root.
Login: root
Password: $1$W3Iu11I.$OrkaGSgxkaxJqSowHllDu.
Uid [#]: 0
Gid [# or name]: 0
Change [month day year]:
Expire [month day year]:
Class:
Home directory: /root
Shell: /usr/local/bin/bash
Full Name: Charlie &
Office Location:
Office Phone:
Home Phone:
Other information:
[/bash]

在Home directory:这项中可知道该用户目录,如这里是 /root
[bash]
cd /root
[/bash]
在下面看是否有.exrc文件,如果没有,自己建立一个,.exrc文件是设置vi的环境
如这个.exrc文件中内容:注意:不要像在命令模式中输入那样,不需要前面的冒号
[bash]
set nu
set autoindent
set showmode
[/bash]