SuperTaoer::Thanksgiving

成人的自以为是会伤了一颗孩子最纯真的心。

七月 5, 2008

ubuntu 实现3D桌面儿效果

文章类别: 程序 技术 — SuperTaoer @ 3:16 am

1、[安装 Compiz-Fusion 3D 桌面特效引擎(不安装的话,也有特效,不过比较少)]
$ sudo apt-get install compiz-fusion-plugins-* compizconfig-settings-manager emerald

2、[启用显卡(默认是关闭的)]
打开system =>Administration =>Hardware drivers,Ubuntu 8.04的受限驱动管理器会列出你的显卡,在“已启用”选项上打勾,Ubuntu 将自动下载并安装 NVIDIA 显卡驱动程序,安装完成后点击 close,驱动安装完成后 Ubuntu 会提示你重启动计算机,点击右上角的重启图标即可重启计算机
(more…)



六月 18, 2008

最近在研究和是用ubuntu8.04和eclipse

文章类别: 程序 技术 — SuperTaoer @ 12:04 pm

从网上下了个ubuntu8.04的desktop版,刻了张盘给装上了。。。

感觉还真不错,比7好,慢慢用着还挺喜欢,好多内置的东西已经满足了基本的工作和娱乐的需要,其他的慢慢摸索这来吧。。。

在linux下开发主要是IDE和vim,IDE就用了eclipse了,插件多,PHP,java,C都能搞得来。。。

我会把陆续的ubuntu8.04和eclipse的使用心得在这里这里分享。。。

三月 7, 2008

[转]linux下安装Zend Optimizer,如何判断Zend Optimizer安装成功

文章类别: 程序 技术 — SuperTaoer @ 5:53 pm

转自:http://bbs.banmutian.net/thread-264-1-1.html

安装多次Zend Optimizer,试了不同版本,总是失败。不知如何去找原因,因为Zend Optimizer安装实在太简单了:
1-释放压缩解包;
2-运行install.sh这个脚本,根据提示输入适当的参数,其中最主要的就是输入php.ini的路径。其次如果使用apache的话,输入它的控制脚本的路径,因为它要重启服务才能生效。

安装好后,检测Zend Optimizer是否安装成功,写个PHP文件,就一个语句:phpinfo();,看相关的信息,只看看到

This program makes use of the Zend Scripting Language Engine:
Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies with Zend Extension
只有Zend Engine,没有Zend Optimizer。

过些天,心里受的打击好后,不死心看phpinfo(),发现这两行很奇怪

Configure Command : ‘./configure’ … … …
‘–with-config-filepath=/usr/xxx/conf’
… … …
Configuration File (php.ini) Path : /usr/xxx/php/lib

其中编译php时指定配置文件与现在显示配置文件的位置不相同(实际php.ini在/usr/xxx/conf下,/usr/xxx/php/lib下没有)。心中马上有了希望,立即下载了Zend Optimizer,安装,先按php.inf实际位置输入。重启服务,观察phpinfo(),没有变化。

难到这次要在/usr/xxx/php/lib下寻找配置文件了吗?观察/usr/xxx/conf/php.ini,发现指向了/usr/xxx/Zend/ect/php.ini(安装Zend Optimizer自动更改的)。于是做了一个链接

ln -s /usr/xxx/Zend/etc/php.ini /usr/xxx/php/lib/php.ini
重启服务,查看phpinfo()发现两个变化

Configuration File (php.ini) Path /usr/xxx/Zend/etc/php.ini

This program makes use of the Zend Scripting Language Engine:
Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies with Zend Extension Manager v1.0.9, Copyright (c) 2003-2006, by Zend Technologies with Zend Optimizer v2.6.2, Copyright (c) 1998-2006, by Zend Technologies
呵呵,Zend Optimizer v2.6.2终于安装成功了。由于对PHP的配置了解很少,不明白是什么原因。

一月 25, 2008

linux下批量对文件内容进行替换

文章类别: 程序 技术 — SuperTaoer @ 3:52 pm

今天工作需要,其实就是一行命令,
比如要将所有包含abc文件里面的abc替换为def

  1. find -type f | xargs perl -i -pe s%abc%def%g

如果要把子目录的内容一起替换

  1. ls -R | xargs perl -i -pe s%abc%def%g

一月 8, 2008

linux shell脚本给特定的目录批量进行操作

文章类别: 程序 技术 — SuperTaoer @ 5:56 pm

因为服务器的cvs目录暴露在web目录下,通过 www.xxxxx.com/.cvs 就可以浏览到里面的内容,
传说中的及其的不安全。。。

无奈没有root权限,不能修改apache的httpd.conf

只得曲线救国,在每个.cvs目录下touch index.html
本来想手工做,无奈目录太多,还是批量一下儿吧。。。

  1. #!/bin/sh
  2.  
  3.  
  4. foreach_dir() {
  5.  
  6.     #for file in `./th.perl`
  7.     for file in $1/*
  8.     do
  9.  
  10.         if [ -d $file ]; then
  11.  
  12.             if echo $file | grep ".cvs" > /dev/null
  13.             then   
  14.  
  15.                 #echo "" > /dev/null
  16.                 echo "touch $file/index.html"
  17.                 touch $file/index.html
  18.             fi     
  19.  
  20.             foreach_dir $file
  21.         else   
  22.  
  23.             echo "" > /dev/null
  24.  
  25.         fi     
  26.     done   
  27. }
  28.  
  29. #foreach_dir $1
  30. #foreach_dir `find ./ -name .cvs* -type d`
  31.  
  32. for f in `find ./ -name .cvs* -type d`
  33. do
  34.  
  35.     echo "touch $f/index.html"
  36.     touch $f/index.html
  37.     foreach_dir $f
  38. done

这个伟大的脚本在今天下午下班前就这么tmd诞生了。。。

顺便说一下修改apache的方法。。。
就是找到 Options
类似 Options Indexes Includes FollowSymLinks MultiViews 这样儿的吧。。。
把其中的 Indexes 变成: -Indexes
Options -Indexes Includes FollowSymLinks MultiViews
就好了。。。
郁闷~~~还是能配置apache比较好。。。

一月 3, 2008

mysql导出成excel格式的文件

文章类别: 程序 技术 — SuperTaoer @ 4:01 pm

这里不讲如何用php到处,只是用mysql的命令和shell结合来导出。。。

方法一:进入到mysql的控制台,输入:

  1. SELECT * INTO OUTFILE './test.xls' FROM tb1 WHERE 1 ORDER BY id DESC  LIMIT 0, 50;

这样,应该会在你的mysql的var/目录下产生一个test.xls的文件。。。
但是如果你的shell的登录帐户和mysql的运行账户不同,很可能这个方法就不适用了,因为你可以通过mysql控制台来产生这个文件,但是你却没有办法通过shell来对这个文件进行操作,因为用户不同,没有访问权限。

这个时候,同事告诉偶滴办法就重装登录了!!!

  1. echo "SELECT * FROM tb1 WHERE 1 ORDER BY id DESC LIMIT 0, 50;"| /usr/local/mysql/bin/mysql -hlocalhost -uroot -pxxxxx > /tmp/test.xls

ok,把你的test.xls文件从tmp下载到本地打开来看看吧。。。
什么?中文乱码?
别着急。。。
因为office默认的是gb2312编码,服务器端生成的很有可能是utf-8编码,这个时候你有两种选择,
1.在服务器端使用iconv来进行编码转换,

  1. iconv -futf8 -tgb2312 -otest2.xls test.xls

如果转换顺利,那么从server上下载下来就可以使用了。
转换如果不顺利,则会提示:iconv: illegal input sequence at position 1841 类似于这样的错误,
先把test.xls下载下来,这个时候文件是utf-8编码的,用excel打开,乱码。
把test.xls以文本方式打开,然后另存为,在编码选择ANSI编码,保存。

ok,再用excel打开,乱码问题,烟消云散。。。

mysql where子句的模式匹配

文章类别: 程序 技术 — SuperTaoer @ 12:11 am

今天在应用中遇到了这样的一个问题,
有一个字段 t1,其中的值类似于:1,1,1,2,3,3,4,4,5,5,2,4,3,2,1,2

需要从里面搜索出比如说:第一个逗号前的数字范围为3-5之间,第三个逗号前的数字的范围为3-5之间,第10个逗号前的数字范围为3-5之间,其余的都为1-5之间。。。

则sql语句可以这么写:

  1. SELECT * FROM tb WHERE t1 REGEXP '^[3-5],[1-5],[3-5],[1-5],[1-5],[1-5],[1-5],[1-5],[1-5],[3-5],[1-5],[1-5],[1-5],[1-5],[1-5],[1-5]%';

便可以实现需求。。。以前一直用like,刚知道mysql也有正则表达式,很是方便。。。
我爱正则表达式。。。hoho~~~

下面转载一片专门介绍myslq正则表达式的文章:

1. 使用LIKE和NOT LIKE比较操作符(注意不能使用=或!=);

2. 模式默认是忽略大小写的;

3. 允许使用”_”匹配任何单个字符,”%”匹配任意数目字符(包括零字符);

MySQL还提供象UNIX实用程序的扩展正则表达式模式匹配的格式:

1. 使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,他们是同义词);

2. REGEXP模式匹配与被匹配字符的任何地方匹配,则匹配成功(即只要被匹配字符包含或者可以等于所定义的模式,就匹配成功);

不同于LIKE模式匹配,只有和整个值匹配,才匹配成功(即只有被匹配字符完全和所定义的模式匹配,才匹配成功)

3. REGEXP默认也是不区分大小写,可以使用BINARY关键词强制区分大小写;

如:SELECT * FROM pet WHERE name REGEXP BINARY ‘^B’;

4. 正则表达式为一个表达式,它能够描述一组字符串。REGEXP操作符完成MySQL的扩展正则表达式匹配。REGEXP实现的功能是如果被匹配字符中部分或完全符合所定义的表达式描述的字符,则表示匹配成功。

1)最简单的正则表达式是不含任何特殊字符的正则表达式,如hello。

SELECT * FROM pet WHERE name REGEXP ‘hello’;表示的意思是如果name这列的某一行包含hello这个单词,则匹配就成功了。(注意和LIKE的区别,LIKE要求name这列的某一行必须完全等于hello,才匹配成功)。

2)非平凡的正则表达式,除了含有最简单表达式那些东西,还需要采用特殊的特殊结构,用到的字符,往下看。(因此,通常的正则表达式是普通单词和这些正则表达式字符构成的表达式)

5. 扩展正则表达式的一些字符:

1) ‘.’匹配任何单个字符;

2) […]匹配在方括号内的任何字符,可以使用’-’表示范围,如[a-z],[0-9],而且可以混合[a-dXYZ]表示匹配a,b,c,d,X,Y,Z中的任何一个;(注意使用括号以及’|’的方法也可以达到相同的效果,如(a|b|c)匹配a,b,c中的任何一个);此外可以使用’^’表示否定,如[^a-z]表示不含有a-z中间的任何一个字符;

3) ‘*’表示匹配0个或多个在它前面的字符。如x*表示0个或多个x字符,.*表示匹配任何数量的任何字符;

4) 可以将模式定位必须匹配被匹配字符的开始或结尾,在匹配模式前加”^”:表示匹配从被匹配字符的最开头开始,在匹配模式后加”$”:表示匹配要进行到被匹配字符的最末尾。

5) ‘+’表示匹配1个或多个在它前面的字符。如a+表示1个或多个a字符。

6) ‘?’表示匹配0个或1个在它前面的字符。如a?表示0个或1个a字符。

7) ‘|’如de|abc表示匹配序列de或者abc。注意虽然[…]也可以表示匹配中的某一个,但是每次仅仅能表示单个字符及[a-bXYZ]实际每一次只代表了一个字符。

8) ()括号可以应用在表达式中,使得更容易理解。

9) a{5}表示匹配共5个a,a{2,8}表示匹配2~8个a。

a*可以写成a{0, } 第二个参数省略表示没有上界;a+可以写成a{1,};a?可以写成a{0,1}

更准确地讲,a{n}与a的n个实例准确匹配。a{n,}匹配a的n个或更多实例。a{m,n}匹配a的m~n个实例,包含m和n
m和n必须位于0~RE_DUP_MAX(默认为255)的范围内,包含0和RE_DUP_MAX。如果同时给定了m和n,m必须小于或等于n。

10) 标准类别[:character_class:]:

常用的一些标准类别,一般在[]中使用,由于用在[]中故和[a-z]类似,每一次只能顶替一个字符。(这个有点类似perl里面定义的常用的一些标准类别:\w表示一个单词字符即[a-zA-Z0-9];\W一个非单词字符与\w相反; \d一个数字即[0-9];\D一个非数字;\s一个白空间字符即[\t\f\r\n];\f为换页符;\S一个非白空间字符)

标准的类别名称:

alnum
文字数字字符

alpha
文字字符

blank
空白字符

cntrl
控制字符

digit
数字字符

graph
图形字符

lower
小写文字字符

print
图形或空格字符

punct
标点字符

space
空格、制表符、新行、和回车

upper
大写文字字符

xdigit
十六进制数字字符

使用实例:

SELECT ‘justalnums’ REGEXP ‘[[:alnum:]]+’;
解释其中[[:alnum:]]由于[:alnum:]表示文字数字字符,它又用在[]中,故[[:alnum:]]代表一个字符它为一个文字或者数字。后面的+号表示1个或多个这样的文字或数字。

上述语句返回1.那是因为justalnums中是由字母组成的。

11)字边界:[[:<:]]表示开始,[[:>:]]表示结束:

其定义了一个单词的开始和结束边界,这个单词为字字符,这样[[:<:]]代表这个字字符前面的部分,[[:>:]]代表这个字字符后面的部分。字字符为alnum类的字母数字字符或下划线(_);因此[[:<:]], [[:>:]]均代表不是字字符的字符,即只要不是字母数字字符以及下划线(_)即可。因此其可以为什么都不是。因此[[:<:]]word[[:>:]]能够匹配如下的所有情况:

即word单词本身,word*** 解释***代表不是字母数字以及_的任何字符(如,word-net);***word(如,micorsoft word);***word***(如,this is a word program.)

举例:[[:<:]]word[[:>:]]:

SELECT ‘a word a’ REGEXP ‘[[:<:]]word[[:>:]]’; 结果为真
SELECT ‘a xword a’ REGEXP ‘[[:<:]]word[[:>:]]’; 结果为假

最后注意的注意:
要在正则表达式中使用特殊字符,需要在这些字符前面添加2个反斜杠’\’,
举例:
SELECT ‘1+2′ REGEXP ‘1+2′; 结果为0
SELECT ‘1+2′ REGEXP ‘1\+2′; 结果为0
SELECT ‘1+2′ REGEXP ‘1\\+2′; 结果为1
解释:
这是因为MySQL解析程序解析该SQL语句时:
首先将字符串’1\\+2’解析为1\+2;
然后把1\+2当作正则表达式,由正则表达式库来解析,它代表1+2。
因此需要加上2个反斜杠。

不要经常犯加一个反斜杠的错误,加一个反斜杠会莫名其妙:
如SELECT ‘1t2′ REGEXP ‘1\t2′;
结果会返回1
本来的意思是匹配1制表符\t以及2,但是由于只添加了一个\所以,解析以后编程了1t2,所以匹配成功。
12)
[.characters.]和[=character_class=]

九月 30, 2007

安装mysql4.0.x joomla1.5RC2下的yvcomment插件小记…

文章类别: 程序 技术 — SuperTaoer @ 10:11 pm

安装mysql4.0.x joomla1.5RC2下的yvcomment插件小记…

首先用zip方式从本地上传安装,不成功~~~发现是权限问题…
需要将网页目录下的如下几个目录修改为777权限:

  1. tmp/
  2. components/
  3. administrator/components/
  4. language/
  5. administrator/language/
  6. plugins/
  7. cache/

如果你能用ssh进入服务器的shell模式,也可以这样直接修改:

  1. chmod -R 777 tmp/
  2. chmod -R 777 components/
  3. chmod -R 777 administrator/components/
  4. chmod -R 777 language/
  5. chmod -R 777 administrator/language/
  6. chmod -R 777 plugins/
  7. chmod -R 777 cache/

修改好了,上传依然不成功,这次报告错误是 CREATE TABLE xxxxx (LIKE ….) 这个sql语句有错误…
于是乎上网搜索,得知,CREATE TABLE *** (LIKE ***)是myql4.1以上版本才有的功能,我这个mysql4.0用户当然无福消受了啊~~~
于是打开安装文件:
也就是你从网站下载后解压缩的:www/administrator/components/com_yvcomment/install.com_yvcomment.php
这个文件,找到如下代码:

  1. $query = 'CREATE TABLE #__yvcomment (LIKE #__content)';

修改成:

  1. //$query = 'CREATE TABLE #__yvcomment (LIKE #__content)';
  2. $FromTableName   = $db->replacePrefix('#__content');
  3. $FromTableResult = $db->getTableCreate(array($FromTableName));
  4. $query           = str_replace($FromTableName, $TableName, $FromTableResult[$FromTableName]);

再安装,成功了….真tmd不容易…
好事儿多磨啊~~~接着打算试用下这个功能,先打算再后台设置下,好了…紧接着麻烦又来了,提示我:
Fatal error: Undefined class name ‘joutputfilter’ in /html/joomlatest/plugins/content/yvcomment.php on line 124

没办法,在整个目录搜索joutputfilter这个关键字,呵呵,在CHANGELOG搜索到了如下内容:
17-Jul-2007 Johan Janssens
^ Changed template _system directory to system for consistency reasons
+ Added storage parameter to JFactory::getCache to allow different stores to be used
^ Renamed JOutputFilter classname to JFilterOutput to adhere to naming conventions
^ Renamed JInputFilter classname to JFilterInput to adhere to naming conventions

其中第四行就说把JOutputFilter这个类名已经重命名为:JFilterOutput
靠,难怪搜索不到,于是乎改呗,这个问题需要修改的有两个文件
www/components/com_yvcomment/controller.php
搜索到:

  1. $url = JOutputFilter::ampReplace( $url );

修改成:

  1. //$url = JOutputFilter::ampReplace( $url );
  2. $url = JFilterOutput::ampReplace( $url );

www/plugins/content/yvcomment.php
搜索到:

  1. $url = JOutputFilter :: ampReplace($url);

修改成:

  1. //$url = JOutputFilter :: ampReplace($url);
  2. $url = JFilterOutput :: ampReplace($url);

重新安装~~~
再进入后台,没问题,设置允许评论的单元和分类…成功
再去前台发个评论试试看,也没问题…发出去了,后台也看到了…
hoho~~~安装成功,使用成功…

顺便提供下载 :)
yvCommentComponent_v1.05.000_chinese_utf-8_forMysql4.0And1.5RC2.zip
yvCommentPlugin_v1.05_chinese_utf-8_forMysql4.0And1.5RC2.zip

八月 1, 2007

mysql服务器my.cnf文件的权限问题。

文章类别: 程序 技术 — SuperTaoer @ 11:31 am

今天启动mysql服务的时候,其中一个端口正常,另外一个端口则显示:
warning: World-writeable config file /etc/my2.cnf is ignored
然后也能启动。。。

后来仔细观察,发现了两个my.cnf的权限不一样,按照my1.cnf的权限修改为755
重启,好了,错误提示没有了。。。
就是这么简单~~~

七月 30, 2007

Linux架设ntp时间服务器并且进行同步

文章类别: 程序 技术 — SuperTaoer @ 5:38 pm

首先,你可以从这里下载一个时间服务器的tar.gz包:
support.ntp.org/bin/view/Main/WebHome

参考:
大部分都参考了这里:鳥哥的 Linux 私房菜 — NTP 時間伺服器

客户端和服务端安装一样,解开tar包,
#./configure –prefix=/usr/local/ntp && make && make install && make clean

好了,进入你的/usr/local/ntp/bin目录下,你会发现如下几个文件:
ntpd ntpdate ntpdc ntp-keygen ntpq ntptime ntptrace ntp-wait sntp tickadj
其中有几个是待会儿需要用到的。。。

好了,接下来进行第一步:
设定ntp服务端的配置文件: /etc/ntp.conf
ntp.conf里主要可以使用如下几个命令:restrict,server,driftfile,keys
其中server是设定上级时间服务器用的,而restrict是设定哪台服务器可以和ntp server进行时间同步,具有什么样的权限。driftfile是用来指定记录时间差异的文件,keys是用来指定认证key文件的(这里不用)。

先来看restrict的格式为:
restrict [客户端IP] mask [netmask_IP] [parameter]

客户端IP,就是都是哪几台服务器要和这台ntp server进行同步的ip地址
最后的parameter可以有如下几个参数:
ignore:拒绝连接到ntp server
nomodiy:可以连接到ntp server,但是不能对ntp server进行时间上的修改
noquery:不提供对ntp server查询时间,也就是拒绝和ntp server进行时间同步
notrap:不提供 trap 远程登录功能(这个我不是很明白)
notrust:对没有认证的客户端不提供服务

如果在配置的时候parameter没有填写,则默认表示允许进行同步。

现在比如想让自己网内的服务器同步,拒绝网外的,那么ntp.conf这部分可以写成:

  1. #权限设置
  2. restrict default nomodify notrap noquery               #默认拒绝所有来源的任何访问
  3. restrict 127.0.0.1   mask 255.0.0.0                      #开放本机的任何访问
  4. restrict 192.168.0.0 mask 255.255.255.0 nomodify  #开放本网段的可查询访问
  5. restrict 192.168.0.11 mask 255.255.255.0 nomodify #限制单个IP,限制了局域网内192.168.0.11这台服务器可以执行除修改外的访问

好了,restrict就算完成了,接下来看server命令部分。
server命令的格式是:
server [IP or hostname] [prefer]
其中[IP or hostname]为上级时间服务器的IP或者域名,主机名:
可以是192.43.244.18形式,或者time.nist.gov再或者ntpserver这样的形式。
后面的[prefer]参数是可选的,加上prefer后,ntp server和上级时间服务器同步时会优先先访问加了prefer这行的进行同步。

ok,现在设置上级时间服务器在ntp.conf这部分可以写成:

  1. #上级时间服务器设置
  2. server time.nist.gov prefer  #优先使用time.nist.gov和上级时间服务器同步
  3.  
  4. #原本内定的一个内部时间数据,不需要更动他
  5. server  127.127.1.0     # local clock
  6. fudge   127.127.1.0 stratum 10

ok,接下来,来看driftfile命令,driftfile格式为:
driftfile [ntpd driftfile]
其中[ntpd driftfile]参数为记录日志文件的位置,关于这个文件,有以下几点需要注意:
a.driftfile要使用完整路径,即从/根目录开始的路径
b.给出的必须是一个实体文件,不能是软链接,硬链接等这样的文件
c.ntpd要对其有可读可写的权限
d.该档案所记录的数值单位为:百万分之一秒 (ppm)

关于这个命令的作用,有如下解释:
因为预设的 NTP Server 本身的时间计算是依据 BIOS 的芯片震荡周期频率来计算的,但是这个数值与上层 Time Server 不见得会一致啊!所以 NTP 这个 daemon (ntpd) 会自动的去计算我们自己主机的频率与上层 Time server 的频率,并且将两个频率的误差记录下来,记录下来的档案就是在 driftfile 后面接的完整档名当中了!
driftfile 后面接的档案会被 ntpd 自动更新,所以他的权限一定要能够让 ntpd 写入才行。在 CentOS 4.x 预设的 NTP 服务器中,使用的 ntpd 的 owner 是 ntp ,这部份可以查阅 /etc/sysconfig/ntpd 就可以知道啦!
PS,解释这段完全照抄的。。。

那么在ntp.conf中,driftfile这部分写成:

  1. driftfile /var/lib/ntp/drift
  2. broadcastdelay  0.008

最后,关于keys,先来解释下:
除了以 restrict 来限制客户端的联机之外,我们也可以透过金钥系统来给客户端认证, 如此一来可以让主机端更放心了。不过在这个章节里面我们暂不讨论这个部分, 有兴趣的朋友可以参考 ntp-keygen 这个指令的相关说明喔!
PS,解释这段完全照抄的。。。

keys这段在ntp.confi中设定格式为:
keys [key_file]
后面的key_file就是key文件的位置了。。。这里咱们不用。。。
默认的写成:

  1. keys /etc/ntp/keys

执行:
#mkdir /etc/ntp
#touch /etc/ntp/keys

综合以上4块儿,最后的ntp.conf文件就是这样子的。。。

  1. restrict default nomodify notrap noquery
  2. restrict 127.0.0.1   mask 255.0.0.0
  3. restrict 192.168.0.0 mask 255.255.255.0 nomodify
  4.  
  5. server time.nist.gov prefer
  6. server 127.127.1.0
  7. fudge 127.127.1.0 stratum 10
  8.  
  9. driftfile /var/lib/ntp/drift
  10. broadcastdelay  0.008
  11.  
  12. keys /etc/ntp/keys

ok,保存吧。。。

ntp用的是udp的123端口,接下来,开启防火墙规则允许ntp对外服务器。

接下来,来开启ntp服务运行试试看。。。执行:
#/usr/local/ntp/bin/ntpd

来看看服务了没?执行:
#netstat -tlunp
如果显示出类似于下面的dd,说明成功了哈。
Proto Recv-Q Send-Q Local Address Foreign Address PID/Program name
udp 0 0 192.168.0.254:123 0.0.0.0:* 15118/ntpd
udp 0 0 127.0.0.0:123 0.0.0.0:* 15118/ntpd
udp 0 0 0.0.0.0:123 0.0.0.0:* 15118/ntpd
udp 0 0 :::123 :::* 15118/ntpd

参考文档说可以用ntpstat查看ntp当前运行的状态。
但是我在/usr/local/ntp/bin 目录下并没有发现有这个文件。。。
执行后效果是这样的。。。
#ntpstat
synchronised to NTP server (220.130.158.71) at stratum 3
time correct to within 495 ms
polling server every 64 s
# 这个指令可以列出我们的 NTP 服务器有跟上层联机否。由上述的输出结果可以知道,
# 时间有校正约 495 * 10^(-6) 秒,且每格 64 秒会主动去更新时间喔!

也罢,先跳过这个。。。接着下面。。。
ntptrace,这个命令则可以列出目前我们的NTP服务器与上层NTP服务器彼此之间的关系。
#/usr/local/ntp/bin/ntptrace -n 127.0.0.1

我晕,报出了下面的错误。。。
Can’t exec “ntpq”: No such file or directory at /usr/local/ntp/bin/ntptrace line 29.
failed to start command ntpq -n -c rv 127.0.0.1: No such file or directory at /usr/local/ntp/bin/ntptrace line 29.

#whereis ntpq
ntpq:
汗,找不到。。。再:
#ls /usr/local/ntp/bin/
确实有ntpq这个文件。。。
感觉应该是找不到ntpq这个dd,看来要给ntpq指定目录,或者在/usr/local/bin 目录下建立ntp的软链接。。。

#ln -s /usr/local/ntp/bin/ntpq /usr/local/bin/ntpq
然后再执行:
#/usr/local/ntp/bin/ntptrace -n 127.0.0.1
127.0.0.1: stratum 11, offset 0.000000, synch distance 0.010981
这下正常显示了。。。呵呵。。。

接下来。。。使用ntpq命令:
#/usr/local/ntp/bin/ntpq -p
显示如下:
remote refid st t when poll reach delay offset jitter
========================================================
time.nist.gov .ACTS. 1 u 1606 1024 22 357.845 334.375 71.122
*LOCAL(0) .LOCL. 10 l 11 64 377 0.000 0.000 0.001

这个 ntpq -p 可以列出目前我们的 NTP 与相关的上层 NTP 的状态,上头的几个字段的意义为:
remote:亦即是 NTP 主机的 IP 或主机名称啰~注意最左边的符号, 如果有『+』代表目前正在作用当中的上层 NTP ,如果是『*』代表也有连上线,不过是作为次要联机的 NTP 主机。
refid:参考的上一层 NTP 主机的地址
st:就是 stratum 阶层啰!
when:几秒钟前曾经做过时间同步化更新的动作;
poll:下一次更新在几秒钟之后;
reach:已经向上层 NTP 服务器要求更新的次数
delay:网络传输过程当中延迟的时间,单位为 10^(-6) 秒
offset:时间补偿的结果,单位与 10^(-6) 秒
jitter:Linux 系统时间与 BIOS 硬件时间的差异时间, 单位为 10^(-6) 秒。
事实上这个输出的结果告诉我们,时间真的很准了啦!因为差异都在 0.0001 秒以内, 可以符合我们的一般使用了。另外,你也可以检查一下你的 BIOS 时间与 Linux 系统时间的差异, 就是 /var/lib/ntp/drift 这个档案的内容,就能了解到咱们的 Linux 系统时间与 BIOS 硬件时钟到底差多久?单位为 10^(-6) 秒啦!
PS:上面这段也是纯抄的~~~

好了,再来执行:
#cat /var/lib/ntp/drift
0.000
这么说这个文件也能被写入。。。没啥问题。。。

接下来,就是客户端和服务器端进行同步了哈。。。
同样的,客户端也需要编译安装ntp,这个和开始一样。。。

安装后,如下执行:
#/usr/local/ntp/bin/ntpdate 192.168.0.133
其中的192.168.0.133就是你ntp server的ip哈。。。

我倒~~~
又报错儿了~~~
30 Jul 16:43:07 ntpdate[31077]: no server suitable for synchronization found
把错误放在网上查,一般的都是说ntp server在启动后的5-15分钟内不提供服务,所以才会给出这样的提示。。。
可是我这么一边配置一边写。。。也过了15分钟了啊。。。既然是不提供服务,那么有没有可能是防火墙呢?
上了服务端一看防火墙配置。。。我汗。。。应该是123:udp我写成udp:123了。。。修改,重启防火墙和服务。。。
再次进行测试。。。
#/usr/local/ntp/bin/ntpdate 192.168.0.133
显示:
30 Jul 16:56:38 ntpdate[32752]: adjust time server 192.168.0.198 offset 0.000332 sec

哈哈。。。成功了。。。
设定为自动调整,你还可以把上面的命令加入到crontab中。。。
比如:/usr/local/ntp/bin/ntpdate 192.168.0.198 ; /sbin/hwclock -w
ntpdate和hwclock配合使用。。。
先进行同步,然后在把时间写入BIOS,这样即使重启服务器也不会时间失效。。。

在服务端再把
/usr/local/ntp/bin/ntpd &
加入到/etc/rc.local中。。。呵呵。。。

hoho~~~搞定,收工!!!

下一页 » 


本站使用 WordPress架设