基础命令
文件查看
cat
使用方式:cat [-AbeEnstTuv] [--help] [--version] fileName
说明:把档案串连接后传到基本输出(萤幕或加 > fileName 到另一个档案)
参数:
-n 或 --number 由 1 开始对所有输出的行数编号
-b 或 --number-nonblank 和 -n 相似,只不过对于空白行不编号
-s 或 --squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行
-v 或 --show-nonprinting
范例:
cat -n textfile1 > textfile2
把 textfile1 的档案内容加上行号后输入 textfile2 这个档案里
cat -b textfile1 textfile2 >> textfile3
把 textfile1 和 textfile2 的档案内容加上行号(空白行不加)之后将内容附加到 textfile3 里。
cat 也可以用来制作 image file。例如要制作软碟的 image file,将软碟放好后打
cat /dev/fd0 > OUTFILE
相反的,如果想把 image file 写到软碟,请打
cat IMG_FILE > /dev/fd0
注:
1. OUTFILE 指输出的 image 档名。
2. IMG_FILE 指 image file。
3. 若从 image file 写回 device 时,device 容量需与相当。
4. 通常用在制作开机磁片。
head 命令
语法:head [ -n ] 文件
说明:该命令显示每个指定文件的前面n行。如果没有给出n值,缺省设置为10。如果没有指定文件,head就从标准输入读取。例如显示文件example.c的前3行。
head -3 example.c
tail 命令
与 head 命令恰恰相反的是 tail 命令。使用 tail 命令,你可以查看文件结尾的十行。这有助于查看日志文件的最后十行来阅读重要的系统消息。你还可以使用 tail 来观察日志文件被更新的过程。使用 -f 选项,tail 会自动实时地把打开文件中的新消息显示到屏幕上。例如,要活跃地观察 /var/log/messages,以根用户身份在 shell 提示下键入以下命令:
tail -f /var/log/messages
more 命令
语法: more [ 选项 ] 文件
说明:该命令一次显示一屏文本,显示满之后,停下来,并在终端底部打印出 “-- More --”,系统还将同时显示出已显示文本占全部文本的百分比,若要继续显示,按回车或空格键即可。若要退出,按 q 或 Q。
该命令的各选项含义如下:
-p 显示下一屏之前先清屏。
-c 作用同- p基本一样。
-d 在每屏的底部显示更友好的提示信息:
-- More -- (XX%)[Press space to contiune , ‘q’ to quit . ]
而且若用户输入了-个错误命令则显示出错信息,而不是简单地鸣响终端。
-l 不处理 Ctrl+l (换页符)。如果没有给出这个选项,则more命令在显示了
一个包含有 Ctrl+l 字符的行后将暂停显示,并等待接收命令。
-s 文件中连续的空白行压缩成一个空白行显示。
指令实例:
more example1.c % 用分页的方式显示一个文件的内容。
more -c -10 example1.c % 执行该命令后,先清屏,然后将以每十行每十行的方式显示文件example.c的内容。
less 命令
less 命令的功能几乎和 more 命令一样,也是用来按页显示文件,不同之处在于 less 命令在显示文件时允许用户既可以向前又可以向后翻阅文件。 less命令的使用与more命令类似,在此就不赘述了,用户如有不清楚的地方可直接查看联机帮助。
用 less 命令显示文件时,若需要在文件中往前移动,按 ,键;要移动到用文件的百分比表示的某位置,则指定一个 0 到 100 之间的数,并按
即可。
例: less test
目录管理
cd
说明 : 变换工作目录至 dirName。 其中 dirName 表示法可为绝对路径或相对路径。若目录名称省略,则变换至使用者的 home directory (也就是刚 login 时所在的目录)。
另外,"~" 也表示为 home directory 的意思,"." 则是表示目前所在的目录,".." 则表示目前目录位置的上一层目录。
范例 : 跳到 /usr/bin/ :
cd /usr/bin
跳到自己的 home directory :
cd ~
跳到目前目录的上上两层 :
cd ../..
cd - 返回进入当前目录前所在目录
cp
使用方式:
cp [options] source dest
cp [options] source... directory
参数:
-a 尽可能将档案状态、权限等资料都照原状予以复制。
-r 若 source 中含有目录名,则将目录下之档案亦皆依序拷贝至目的地。
-f 若目的地已经有相同档名的档案存在,则在复制前先予以删除再行复制。
范例:
将档案 aaa 复制(已存在),并命名为 bbb :
cp aaa bbb
将所有以.c开头的文件拷贝至 Finished 子目录中 :
cp *.c Finished
mv
使用方式:
mv [options] source dest
mv [options] source... directory
说明:将一个档案移至另一档案,或将数个档案移至另一目录。
参数:
-i 若目的地已有同名档案,则先询问是否覆盖旧档。
范例:
将档案 aaa 更名为 bbb :
mv aaa bbb
将所有以.C开头的文件移至 Finished 子目录中 :
mv -i *.c
rm
使用方式:rm [options] name...
说明:删除档案及目录。
参数:
-i 删除前逐一询问确认。
-f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。
-r 将目录及以下之档案亦逐一删除。
范例:
删除所有.以C开头的文件;删除前逐一询问确认 :
rm -i *.c
将 Finished 子目录及子目录中所有档案删除 :
rm -r Finished
删除文件中有四个字母且有三个是Fin的所有文件
rm fin?
rmdir
使用方式: rmdir [-p] dirName
说明: 删除空的目录。
参数:
-p 是当子目录被删除后使它也成为空目录的话,则顺便一并删除。
范例:
将工作目录下,名为 AAA 的子目录删除 :
rmdir AAA
在工作目录下的 BBB 目录中,删除名为 Test 的子目录。若 Test 删除后,BBB 目录成为空目录,则 BBB 亦予删除。
rmdir -p BBB/Test
mkdir 命令
功能:创建一个目录(类似DOS下的md命令)。
语法:mkdir [选项] dirname
说明:该命令创建由 dirname 命名的目录。要求创建目录的用户在当前目录中(dirname 的父目录中)具有写权限,并且 dirname 不能是当前目录中已有的目录或文件名称。
命令中各选项的含义如下:
-m 对新建目录设置存取权限。也可以用chmod命令设置。
-p 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录。
指令实例:
mkdir -p -m 700 ./inin/mail/
该命令的执行结果是在当前目录中创建嵌套的目录层次inin 和inin下的mail目录,权限设置为只有文件主有读、写和执行权限。
touch
使用方式:
touch [-acfm]
[-r reference-file] [--file=reference-file]
[-t MMDDhhmm[[CC]YY][.ss]]
[-d time] [--date=time] [--time={atime,access,use,mtime,modify}]
[--no-create] [--help] [--version]
file1 [file2 ...]
说明:
touch 指令改变档案的时间记录。 ls -l 可以显示档案的时间记录。
参数:
-a 改变档案的读取时间记录。
-m 改变档案的修改时间记录。
-c 假如目的档案不存在,不会建立新的档案。与 --no-create 的效果一样。
-f 不使用,是为了与其他 unix 系统的相容性而保留。
-r 使用参考档的时间记录,与 --file 的效果一样。
-d 设定时间与日期,可以使用各种不同的格式。
-t 设定档案的时间记录,格式与 date 指令相同。
--no-create 不会建立新档案。
--version 列出版本讯息。
范例:
最简单的使用方式,将档案的时候记录改为现在的时间。若档案不存在,系统会建立一个新的档案。
touch file
touch file1 file2
将 file 的时间记录改为 5 月 6 日 18 点 3 分,公元两千年。时间的格式可以参考 date 指令,至少需输入 MMDDHHmm ,就是月日时与分。
touch -c -t 05061803 file
touch -c -t 050618032000 file
将 file 的时间记录改变成与 referencefile 一样。
touch -r referencefile file
将 file 的时间记录改成 5 月 6 日 18 点 3 分,公元两千年。时间可以使用 am, pm 或是 24 小时的格式,日期可以使用其他格式如 6 May 2000 。
touch -d "6:03pm" file
touch -d "05/06/2000" file
touch -d "6:03pm 05/06/2000" file
touch 也可以制造一个空档(0 byte).例如DHCP Server所需的/etc/dhcpd.leases, dhcpd 必须要有这个档案才能运作正常.[root@/root]#touch /etc/dhcpd.leases [root@/root]#ls -l /etc/dhcpd.leases-rw-r--r-- 1 root root 0 Jul 3 05:50 /etc/dhcpd.leases
记得上一次重灌前把/etc下的设定档tar起来,重灌好之后把原有设定还原,却发现系统检查设定档的时间有问题,这个时候用。
find /etc -name * -exec touch {};
就可以把设定档的时间更新到与现在一致了。
ln
使用方式 : ln [options] source dist,其中 option 的格式为 :
[-bdfinsvF] [-S backup-suffix] [-V {numbered,existing,simple}] [--help] [--version] [--]
说 明 : Linux/Unix 档案系统中,有所谓的连结(link),我们可以将其视为档案的别名,而连结又可分为两种 : 硬连结(hard link)与软连结(symbolic link),硬连结的意思是一个档案可以有多个名称,而软连结的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。硬连结是存在同一个档 案系统中,而软连结却可以跨越不同的档案系统。 ln source dist 是产生一个连结(dist)到 source,至于使用硬连结或软链结则由参数决定。 不论是硬连结或软链结都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。
参数 :
-f : 链结时先将与 dist 同档名的档案删除
-d : 允许系统管理者硬链结自己的目录
- i : 在删除与 dist 同档名的档案时先进行询问
-n : 在进行软连结时,将 dist 视为一般的档案
-s : 进行软链结(symbolic link)
-v : 在连结之前显示其档名
-b : 将在链结时会被覆写或删除的档案进行备份
-S SUFFIX : 将备份的档案都加上 SUFFIX 的字尾
-V METHOD : 指定备份的方式
-- help : 显示辅助说明
--version : 显示版本
范例 :
将档案 yy 产生一个 symbolic link : zz
ln -s yy zz
将档案 yy 产生一个 hard link : zz
ln yy xx
目录权限管理
chmod
使用方式 : chmod [-cfvR] [--help] [--version] mode file...
说明 : Linux/Unix 的档案调用权限分为三级 : 档案拥有者、群组、其他。利用 chmod 可以藉以控制档案如何被他人所调用。
参数 :
mode : 权限设定字串,格式如下 : [ugoa...][[+-=][rwxX]...][,...],其中
u 表示该档案的拥有者,
g 表示与该档案的拥有者属于同一个群体(group)者,
o 表示其他以外的人,a 表示这三者皆是。
+ 表示增加权限、
- 表示取消权限、
= 表示唯一设定权限。
r 表示可读取,w 表示可写入,x 表示可执行,
X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。
-c : 若该档案权限确实已经更改,才显示其更改动作
-f : 若该档案权限无法被更改也不要显示错误讯息
-v : 显示权限变更的详细资料
-R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更)
--help : 显示辅助说明
--version : 显示版本
范例 :将档案 file1.txt 设为所有人皆可读取 :
chmod ugo+r file1.txt
将档案 file1.txt 与 file2.txt 设为该档案拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入 :
chmod ug+w,o-w file1.txt file2.txt
将 ex1.py 设定为只有该档案拥有者可以执行 :
chmod u+x ex1.py
将目前目录下的所有档案与子目录皆设为任何人可读取 :
chmod -R a+r *
此外chmod也可以用数字来表示权限如 chmod 777 file
语法为:chmod abc file
其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。
r=4,w=2,x=1
若要rwx属性则4+2+1=7;
若要rw-属性则4+2=6;
若要r-x属性则4+1=7。
范例:
chmod a=rwx file 和 chmod 777 file 效果相同
chmod ug=rwx,o=x file 和 chmod 771 file 效果相同
若用chmod 4755 filename可使此程序具有root的权限
chown
使用方式 : chmod [-cfhvR] [--help] [--version] user[:group] file...
说 明 : Linux/Unix 是多人多工操作系统,所有的档案皆有拥有者。利用 chown 可以将档案的拥有者加以改变。一般来说,这个指令只有是由系统管理者(root)所使用,一般使用者没有权限可以改变别人的档案拥有者,也没有权限可以自 己的档案拥有者改设为别人。只有系统管理者(root)才有这样的权限。
参数 :
user : 新的档案拥有者的使用者
IDgroup : 新的档案拥有者的使用者群体(group)
-c : 若该档案拥有者确实已经更改,才显示其更改动作
-f : 若该档案拥有者无法被更改也不要显示错误讯息
-h : 只对于连结(link)进行变更,而非该 link 真正指向的档案
-v : 显示拥有者变更的详细资料
-R : 对目前目录下的所有档案与子目录进行相同的拥有者变更(即以递回的方式逐个变更)
--help : 显示辅助说明
--version : 显示版本
范例 :
chown jessie.users file1.txt
将档案 file1.txt 的拥有者设为 users 群体的使用者 jessie :
chown wang shiyan.c
% 把文件shiyan.c的所有者改为wang。
chown - R wang.users /his
% 把目录/his及其下的所有文件和子目录的属主人改成wang,属组改成users。
chgrp命令
功能说明:变更文件或目录的所属群组。
语 法:chgrp [-cfhRv][--help][--version][所属群组][文件或目录...] 或 chgrp [-cfhRv][--help][--reference=<参考文件或目录>][--version][文件或目录...]
补充说明:在UNIX系统家族里,文件或目录权限的掌控以拥有者及所属群组来管理。您可以使用chgrp指令去变更文件与目录的所属群组,设置方式采用群组名称或群组识别码皆可。
参 数:
-c或--changes 效果类似"-v"参数,但仅回报更改的部分。
-f或--quiet或--silent 不显示错误信息。
-h或--no-dereference 只对符号连接的文件作修改,而不更动其他任何相关文件。
-R或--recursive 递归处理,将指定目录下的所有文件及子目录一并处理。
-v或--verbose 显示指令执行过程。
创建用户和组
useradd
格式
useradd [-d home] [-s shell] [-c comment] [-m [-k template]] [-f inactive] [-e expire ] [-p passwd] [-r] name
主要参数
-c:加上备注文字,备注文字保存在passwd的备注栏中。
-d:指定用户登入时的启始目录。
-D:变更预设值。
-e:指定账号的有效期限,缺省表示永久有效。
-f:指定在密码过期后多少天即关闭该账号。
-g:指定用户所属的群组。
-G:指定用户所属的附加群组。
-m:自动建立用户的登入目录。
-M:不要自动建立用户的登入目录。
-n:取消建立以用户名称为名的群组。
-r:建立系统账号。
-s:指定用户登入后所使用的shell。
-u:指定用户ID号。
说明
useradd可用来建立用户账号,它和adduser命令是相同的。账号建好之后,再用passwd设定账号的密码。使用useradd命令所建立的账号,实际上是保存在/etc/passwd文本文件中。
应用实例
建立一个新用户账户,并设置ID:
#useradd caojh -u 544
需要说明的是,设定ID值时尽量要大于500,以免冲突。因为Linux安装后会建立一些特殊用户,一般0到499之间的值留给bin、mail这样的系统账号。
groupadd
作用 groupadd命令用于将新组加入系统。
格式
groupadd [-g gid] [-o]] [-r] [-f] groupname
主要参数
-g gid:指定组ID号。
-o:允许组ID号,不必惟一。
-r:加入组ID号,低于499系统账号。
-f:加入已经有的组时,发展程序退出。
应用实例
建立一个新组,并设置组ID加入系统:
#groupadd -g 344 cjh
此时在/etc/passwd文件中产生一个组ID(GID)是344的项目。
userdel
语法: userdel [-r] login
描述: userdel 命 令 修 改 系 统 帐 号 档 删 除 所 有 login 会 参 考 的 部 份 。 使 用 者 名 称 必 须是 存 在 的 。
-r 使 用 者 目 录 下 的 档 案 一 并 移 除 。 在 其 他 位 置 上 的 档 案 也 将 一 一 找 出 并 删 除 。
档案
/etc/passwd - 使 用 者 帐 号 资 料 /etc/shadow - 使 用 者 帐 号 资 讯 加 密 /etc/group - 群 组 资 讯
警告
userdel 不 允 许 你 移 除 正 在线 上 的 使 用 者 帐 号 。 你 必 须 砍 掉 此 帐 号 现 在 在 系 统 上 执 行 的 程 序 才 能 进 行 帐 号 删 除 。 不 能 在 NIS client 端 移 除 NIS 属 性 的 东 西 。 这 动 做 须 在 NIS server 端 上 执 行 。
文件查看,查找
ls
使用方式 : ls [-alrtAFR] [name...]
说明 : 显示指定工作目录下之内容(列出目前工作目录所含之档案及子目录)。
参数 :
-a 显示所有档案及目录 (ls内定将档案名或目录名称开头为"."的视为隐藏档,不会列出)
-l 除档案名称外,亦将档案型态、权限、拥有者、档案大小等资讯详细列出
-r 将档案以相反次序显示(原定依英文字母次序)
-t 将档案依建立时间之先后次序列出
-A 同 -a ,但不列出 "." (目前目录) 及 ".." (父目录)
-F 在列出的档案名称后加一符号;例如可执行档则加 "*", 目录则加 "/"
-R 若目录下有档案,则以下之档案亦皆依序列出
范例:
列出目前工作目录下所有名称是 s 开头的档案,愈新的排愈后面 :
ls -ltr s*
将 /bin 目录以下所有目录及档案详细资料列出 :
ls -lR /bin
列出目前工作目录下所有档案及目录;目录于名称后加 "/", 可执行档于名称后加 "*" :
ls -AF
find
使用说明 :
将档案系统内符合 expression 的档案列出来。你可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。
find 根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部份为 path,之后的是 expression。如果 path 是空字串则使用目前路径,如果 expression 是空字串则使用 -print 为预设 expression。
expression 中可使用的选项有二三十个之多,在此只介绍最常用的部份。
-mount, -xdev : 只检查和指定目录在同一个档案系统下的档案,避免列出其它档案系统中的档案
-amin n : 在过去 n 分钟内被读取过
-anewer file : 比档案 file 更晚被读取过的档案
-atime n : 在过去 n 天过读取过的档案
-cmin n : 在过去 n 分钟内被修改过
-cnewer file :比档案 file 更新的档案
-ctime n : 在过去 n 天过修改过的档案
-empty : 空的档案-gid n or -group name : gid 是 n 或是 group 名称是 name
-ipath p, -path p : 路径名称符合 p 的档案,ipath 会忽略大小写
-name name, -iname name : 档案名称符合 name 的档案。iname 会忽略大小写
-size n : 档案大小 是 n 单位,b 代表 512 位元组的区块, c 表示字元数,k 表示 kilo bytes,w 是二个位元组。-type c : 档案类型是 c 的档案。
d: 目录
c: 字型装置档案
b: 区块装置档案
p: 具名贮列
f: 一般档案
l: 符号连结
s: socket
-pid n : process id 是 n 的档案
你可以使用 ( ) 将运算式分隔,并使用下列运算。
exp1 -and exp2
! expr
-not expr
exp1 -or exp2
exp1, exp2
范例:
将目前目录及其子目录下所有延伸档名是 c 的档案列出来。
# find . -name "*.c"
将目前目录其其下子目录中所有一般档案列出
# find . -ftype f
find . -name "*" -exec grep xxx {} -print |morexxx为你想要找的字符串
find / -amin -10 # 查找在系统中最后10分钟访问的文件
find / -atime -2 # 查找在系统中最后48小时访问的文件
find / -empty # 查找在系统中为空的文件或者文件夹
find / -group cat # 查找在系统中属于 groupcat的文件
find / -mmin -5 # 查找在系统中最后5分钟里修改过的文件
find / -mtime -1 #查找在系统中最后24小时里修改过的文件
find / -nouser #查找在系统中属于作废用户的文件
find / -user fred #查找在系统中属于FRED这个用户的文件
locate
使用方式: locate [-q] [-d ] [--database= ]
locate [-r ] [--regexp= ]
locate [-qv] [-o ] [--output= ]
locate [-e ] [-f ] <[-l ] [-c]
locate [-Vh] [--version] [--help]
说明:
locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案。其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库,而不必实际深入档案系统之中了。
在一般的 distribution 之中,数据库的建立都被放在 contab 中自动执行。一般使用者在使用时只要用
# locate your_file_name的型式就可以了。
参数:
-u 建立数据库,-u 会由根目录开始
-U 则可以指定开始的位置
-e 将 排除在寻找的范围之外。
-l 如果 是 1.则启动安全模式。在安全模式下,使用者不会看到权限无法看到的档案。这会始速度减慢,因为 locate 必须至实际的档案系统中取得档案的权限资料。
-f 将特定的档案系统排除在外,例如我们没有到理要把 proc 档案系统中的档案放在数据库中。
-q 安静模式,不会显示任何错误讯息。
-n 至多显示 个输出。
-r 使用正规运算式 做寻找的条件。
-o 指定数据库存的名称。
-d 指定数据库的路径
-h 显示辅助讯息
-v 显示更多的讯息
-V 显示程序的版本讯息 范例:
locate chdrv : 寻找所有叫 chdrv 的档案
locate -n 100 a.out : 寻找所有叫 a.out 的档案,但最多只显示 100 个
locate -u : 建立数据库
locate 命令可以在搜寻数据库时快速找到档案,数据库由updatedb程序来更新,updatedb是由cron daemon周期性建立的, locate命令在搜寻数据库时比由整个由硬盘资料来搜寻资料来得快,但较差劲的是locate所找到的档案若是最近才建立或刚更名的,可能会找不到,在 内定值中,updatedb每天会跑一次,可以由修改crontab来更新设定值。(etc/crontab)
locate指定用在搜寻符合条 件的档案,它会去储存档案与目录名称的数据库内,寻找合乎范本样式条件的档案或目录录,可以使用特殊字元(如”*”或”?”等)来指定范本样式,如指定范 本为kcpa*ner, locate会找出所有起始字串为kcpa且结尾为ner的档案或目录,如名称为kcpartner若目录录名称为kcpa_ner则会列出该目录下包括 子目录在内的所有档案。
locate指令和find找寻档案的功能类似,但 locate是透过update程序将硬盘中的所有档案和目录资料先建立一个索引数据库,在执行loacte时直接找该索引,查询速度会较快,索引数据库 一般是由操作系统管理,但也可以直接下达update强迫系统立即修改索引数据库。
不过第一次在执行update後再使用 locate寻找档案常会失败,此时就要执行slocate ˉu该命令(也可执行updatedb指令,其效果相同)来更新slocate数据库,该命令会在/usr/sbin下产生slocate执行档,再由 locate到此数据库寻找所要找的资料。
grep
作用
grep命令可以指定文件中搜索特定的内容,并将含有这些内容的行标准输出。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
格式 : grep [options]
[options]主要参数:
-c:只输出匹配行的计数。
-I:不区分大小写(只适用于单字符)。
-h:查询多文件时不显示文件名。
-l:查询多文件时只输出包含匹配字符的文件名。
-n:显示匹配行及行号。
-s:不显示不存在或无匹配文本的错误信息。
-v:显示不包含匹配文本的所有行。
应用实例
grep root /etc/passwd 查找passwd下root的相关信息
grep root * 查找当前文件中所有与root的字符
grep -c bash /etc/passwd 计算包括单词bash的行数
find / -name *.html | grep bookmark
查找find 命令结果中的字符串bookmark
who | grep root
who列出当前登陆linux系统的所有用户。从中查找root
ps aux | grep mozilla
查找与mozilla相关的进程
*多位任意驱配
?一位任意驱配
磁盘管理
DNS服务器配置
重启后台守护进程named /etc/rc.d/init.d/named restart
列表刷新 rndc reload
配置文件
/etc/named.conf
/etc/host.conf
/etc/resolv.boot
/etc/hosts
/etc/named.boot
/var/named/named.ca
/var/named/named.hosts 手动建立
/var/named/named.local
/var/named/named.rev 手动建立
一共有9个文件,其中关键的是两个:“/etc/named.conf”和“/var/named/named.hosts”。前者是域名解析配置文件,后者为域配置文件。
"/etc/named.conf"文件的语法和作用。
――――――――――――――――――――――――――――――――――――
/*
* A simple BIND 8 configuration
*/
options {
directory "/var/named";
# forwarders {
# 192.168.192.100;
# };
# forward only;
};
#logging {
# category lame-servers { null; };
# category cname { null; };
#};
zone "etran.com" in {
type master;
file "named.hosts";
};
zone "192.168.192.in-addr.arpa" in {
type master;
file "named.rev";
};
zone "." in {
type hint;
file "named.ca";
};
zone "0.0.127.in-addr.arpa" in {
type master;
file "named.local";
};
――――――――――――――――――――――――――――――――――――
options 一段中的directory是在指示最后4个文件的位置,而forwarders则是指示是哪一台机器将不能解析的域名转发到上级DNS服务器上。关键的 是几个zone段,格式如上。最重要的是带有“etran.com”字样的段。需要注意的是:该段中将etran.com换成您需要的域名,下面的 file段表示对应于该域的文件,当然该文件在directory定义的/etc/named目录中。
另外,我们还要体会一下反向域的概念。 DNS其实就是域名对应于IP地址,而反向域则正好相反,即将IP地址对应于域名,也就是说对给定的IP地址解析出其域名,这样可以解决IP欺骗的问题。 反向域的特征就是最后两个段是以in-addr.arpa结尾,另外,前面段中的IP地址是要反向来读的,比如说0.0.127.in- addr.arpa对应的其实是127.0.0.X之类的IP地址。
Serial #序列号
Refresh #刷新周期,以秒为单位
Retry #循环周期
Expire #中止时间
Minimum #time-to-live的时间
“/var/named/named.hosts”这一文件主要负责将DNS域名映射为IP地址。配置实例如下:
―――――――――――――――――――――――――――――――――――――――
@ IN SOA ns.etran.com. root.etran.com. (
800006 ; serial number
86400 ; Refresh interval, every 24 hours
300 ; Retry interval, every 5 minutes
2592000 ; 30 days TTL
86400 ) ; 24 hours expiration
IN NS ns.etran.com.
IN MX 1 mail.etran.com.
ns IN A 192.168.192.100
www IN CNAME ns.etran.com.
mail IN CNAME ns.etran.com.
ftp IN CNAME ns.etran.com.
smtp IN CNAME ns.etran.com.
pop3 IN CNAME ns.etran.com.
localhost IN A 127.0.0.1
―――――――――――――――――――――――――――――――――――――
其中IN表示使用的是TCP/IP协议;
上面的"NS"记录说明了本域("etran.com")的域名服务器地址为“192.168.192.100”;
"MX"记录说明本域的邮件服务器地址,后面的1就是表示顺序,顺序小的优先使用。
接下来的"A"记录简单地将DNS名映射为IP地址。
最后的"CNAME"记录的是"别名",这是在说www.etran.com 、mail.etran.com、ftp.etran.com 等都是指向"192.168.192.100"这一台主机。
最后一句是本地机器名的IP为127.0.0.1。
注:和外部网络连接时的DNS配置,及其多个DNS服务器之间的合理配置简单说明如下,以方便今后使用;
* 主DNS服务器:
通常用来给一个独立的网络提供名称和IP的解析服务,通常用在孤立的局域网中。
* 从DNS服务器:
通常用于一个局域网和另外的外部网络连通的环境。此DNS服务器通过参数设定后,可以自动定时和主DNS自动交换有关DNS的数据库文件,包括简单数据刷 新、数据暂存、数据更新,同时在主DNS失效时,它有暂时代替主DNS进行工作的功能,在进行大的系统建设时,为了系统的安全应该考虑使用第二个DNS服 务器。
* 高速缓存DNS:
仅仅起高速缓存的作用,在本地有请求时,它首先会查找自己缓存中的数据,查不到时才从主DNS取得数据,它可以加快DNS服务的效率。
主配置文件在/etc 目录下面:named.boot, named.conf 两个。
数据文件在/ var/named 目录下面所有文件。
三、配置缓冲或转发方式的named:(从DNS和cache DNS配置)
在Internet中主要使用名字进行连接,因此网络中的DNS查询会十分频繁。很多情况下,会有大量且重复的DNS查询。尤其在使用拨号连接的条件下, 由于名字服务器位于ISP端,即使是曾经查询过的名字,其信息仍然保存在线路的另一端的名字服务器的缓冲区内,重复的DNS查询将占据宝贵的线路带宽。并 且DNS查询还往往使得网络连接软件不能正确获得超时信息,不能适时断开连接以节省电话连接时间。 因此,最好的办法是将查询结果保存在本地计算机上,以避免重复查询造成的无谓的网络流量。虽然很多TCP/IP 客户机能够在本机内保存一个名字解析缓冲区,但这个缓冲区相对来讲太小了,起不到很有效的作用,然而如果要将这个缓冲区设置的较大,又不能及时刷新名字解 析数据。要想很好的缓冲DNS数据,最好的缓冲区还是DNS服务器本身,因为DNS 的实现方式就是一种经常刷新的缓冲方式,并且named可以根据不同zone的不同设置,来实现数据刷新。 因此,最简单的办法就是设置一个具备缓冲能力的名字服务器,它将能够用做名字解析的缓冲,这就要需要设置名字服务器的过程。
配置DNS转发
某 些网络连接不鼓励向本地以外发送很大的数据流量,这要么是因为网络连接是按流量计费的,或网络连接本身是带宽不足。在这样的情况下,如果想将发往外部的 DNS 流量限制到尽可能的小,就需要使用 BIND 的转发机制。或者你的网络中只有一台机器能连接到 Internet ,而你在这台机器上运行了 BIND ,那么你可以将这台 BIND 作为内部网络中的其他 BIND 的转发器,使得其他 DNS 也能查找 Internet 域名。
转 发机制的这样的:当你设置了转发器后,所有非本域的和在缓存中无法找到的域名查询都将转发到设置的 DNS 转发器上,由这台 DNS 来完成解析工作并做缓存,因此这台转发器的缓存中记录了丰富的域名信息。因而对非本域的查询,很可能转发器就可以在缓存中找到答案,避免了再次向外部发送 查询,减少了流量。
转发器的配置格式是:
options {
forwarders { 192.168.24.35; 192.168.24.36; };
};
这里要注意,转发器本身不用做任何设置,而是对需要转发器的其他 DNS server 做以上配置。还有,如果该 DNS Server 无法联系到转发器,那么 BIND 会自己尝试解析。
如果你要禁止 BIND 在无法联系到转发器时不做任何操作,那么你还可以使用 forward only 命令,这样 BIND 只能使用区的权威数据和缓存来响应查询了( 在连接不到转发器的情况下 )。
options {
forwarders { 192.168.24.35; 192.168.24.36; };
forward only;
};
在 BIND 8.2 以后引入了一个新的特性:转发区( forward zone ),它允许你把 DNS 配置成只有查找特定域名的时候才使用转发器。( BIND 9 从9.1.0 才开始有转发区功能 )例如,你可以使你的服务器将所有对 xmgd.com 结尾的域名查询都转发给 xmgd.com 的两台名字服务器:
zone "xmgd.com" {
type forward;
forwarders { 210.52.83.228; 210.52.83.229; };
};
这样的功能有什么用呢?假设 xmgd.com 和你的网络有一个私有的连接,而 xmgd.com 又没有连接上 Internet ,那么你从 Internet 是无法查到 xmgd.com 后缀的域名的,这时你就要使用转发区的功能了。
还有一种转发区设置和刚才的设置刚好相反,它允许你设置什么样的查询将不被转发,当然这只适用于在 options 语句中指定了转发器的 DNS 。配置如下:
options {
directory "/var/named";
forwarders { 192.168.24.35; 192.168.24.36; };
};
zone "xmgd.com" {
type master;
file "zone.xmgd.com";
forwarders {};
};
这样写你可能会问为什么你要在自己的权威区里禁止转发?难道不是自己回答查询而不使用转发器吗?
有 这样一种情况,在 xmgd.com 这个区中,你授权了几个子域,例如:zx.xmgd.com、lab.xmgd.com 等,那么在 xmgd.com 的权威服务器上设置转发后,因为对 zx.xmgd.com、lab.xmgd.com 这几个子域不是权威,那么如果有对 www.zx.xmgd.com 这样的子域的域名查询,服务器也将转发。这完全是没有必要的,因为服务器上就有 zx.xmgd.com 子域的 NS 记录,何须再转发。
实例2
Linux DNS 配置方法(BIND 8)
1. 如果你还没有安装BIND8:
在你的CDROM的RPMS目录中找到bind-*.i386.rpm,并安装它
rpm -i bind-*.i386.rpm
2. 需要修改或增加的文件有
/etc/resolv.conf
/etc/namec.conf
/var/named/named.111.222.1
/var/named/named.abc.cxm
服务器端(机器名为 pc110)配置:
3. 对文件/etc/namec.conf的修改:
options {
directory "/var/named";
};
zone "." {
type hint;
file "named.ca";
};
zone "0.0.127.in-addr.arpa"{
type master;
file "named.local";
};
zone "1.222.111.in-addr.arpa"{
type master;
file "named.111.222.1";
};
zone "abc.cxm" {
type master;
file "named.abc.cxm";
};
4. 增加逆向DNS解析文件
(可以解决telnet 111.222.1.110很慢的问题)
/var/named/named.111.222.1
@ IN SOA pc110.abc.cxm. root.abc.cxm. (
2000102302 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS pc110
110 IN PTR pc110.abc.cxm.
36 IN PTR pc36.abc.cxm.
51 IN PTR pc51.abc.cxm.
5. 增加DNS解析文件: /var/named/named.abc.cxm
@ IN SOA pc110.abc.cxm. root.abc.cxm. (
2000102302; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS pc110.abc.cxm.
IN MX 30 pc110
pc110 IN A 111.222.1.110
www IN CNAME pc110
pc36 IN A 111.222.1.36
pc51 IN A 111.222.1.51
客户端配置:
6. linux 客户端配置:修改/etc/resolv.conf:
domain abc.cxm
search abc.cxm
nameserver 111.222.1.110
7. windows 客户端配置:
在网络中的TCP/IP属性里加入 域名abc.cxm 及相应的DNS Server IP即可
8. 服务器端重起named服务
#ndc restart
9. 测试
nslookup www.abc.cxm
辅助域名配置
假设想把机器hjc(IP为:111.222.1.88)设置为域 abc.cxm 的 slave DNS (假定pc110 已正确配置为主DNS(IP为111.222.1.110))。
1. 请先配置主DNS
2. 对主DNS的修改
在/var/named/named.111.222.1 中增加一行
@ IN NS 111.222.1.88.
/var/named/named.abc.cxm 中增加一行
@ IN NS hjc.abc.cxm.
3. 配置机器hjc.
/etc/named.conf:
zone "1.222.111.in-addr.arpa" {
type slave;
file "slave.111.222.1";
master {111.222.1.110}
};
zone "abc.cxm" {
type slave;
file "slave.abc.cxm";
master {111.222.1.110}
};
4. 启动slave DNS
ndc restart.