rhel5(或者是centos5)下安装、配置时间服务器简直是再简单不过了
yum install ntp
That’s all!
是不是非常简单呢?
呵呵
装上以后
还需要对ntp做简单的配置
vim /etc/ntp.conf
只需要按照文件里的提示按照
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
这样的格式加上你允许对时的网段,一般是内网
多个网段可以多加几行
编辑完/etc/ntp.conf后
再vim /etc/sysconfig/ntpd
将
SYNC_HWCLOCK=no
改成
SYNC_HWCLOCK=yes
这样的话,当时间服务器每次从internet上同步时间成功,会自动写到bios ,这样bios的时间也得到同步了
然后再启动ntp
service ntpd start
这样的话,一会儿在客户端就能用ntpdate xxx.xxx.xxx.xxx(xxx.xxx.xxx.xxx是这台时间服务器的ip)来更新时间了
如果客户端同步时间时出错:
no server suitable for synchronization found
那么用ntpdate -d xxx.xxx.xxx.xxx来执行看看
如果这会儿有报错误:
Server dropped: Strata too high
并显示“stratum 16”的话
这表明时间服务器本身还没有跟自己的server或是自己同步完时间
所以需要等一会儿再试
那么怎样知道时间服务器跟远程时间服务器或是本身同步的完成状况呢?
watch ntpq -p
当LOCAL 这一行的reach的值
当其从0到17,连续几次后
客户端同步时间终于成功了!
原文来自commandlinefu
echo “foo” > /dev/tcp/192.168.1.1/25
这个命令将发foo消息到192.168.1.1这台机器的tcp端口25上
这个可以用来测试网络链接是否被防火墙所挡
这是tcp的情况
据说udp和icmp的也都行(没测过:)
原文来自commandlinefu
‘ALT+.’ or ‘<ESC> .’
这其实是两个命令
一个是按出Alt键不放,再敲.键;
另外一个是先敲Esc键,再敲.键
两个功能是一样的
都是取出前一个命令的最后一个参数
不停执行这两个命令之一
会从最后往前取出每个命令的最后一个参数
这个在bash下测试通过
只是在windows下用secure CRT的时候有一个小问题:
‘Alt + .’这个组合不好使
这是因为Secure CRT把Alt键开头的快捷键都指向操作Secure CRT的菜单了
点击Secure CRT的Options–>Session Options,点击Emacs
再勾选”Use ALT as meta key” ,接着点选”Send escape for meta key”
这下
‘Alt + .’也就好使了。
不过说实话
这些小技巧日常工作中真是用的少
我们一般碰到上个命令最后参数巨长而这个命令又要用的时候
一般是用上箭头键↑呼出上一个命令
再用home键到达命令行首
再删掉不需要的部分
敲入需要的部分再执行的。
原文来自commandlinefu
这条命令好理解
直接看手册就好了
man ssh-copy-id
ssh-copy-id – install your identity.pub in a remote machine’s authorized_keys
需要注意的是-i参数
如果你不提供的话
会将ssh-add -L 命令列出来的公钥都倒过去
如果有-i参数
后面可以指定公钥的文件名(缺省是identify.pub)
原文来自commandlinefu
这个命令
!whatever:p
整个是一个word designator
被用冒号(:)分成了event designator和modifiers
!whatever
这个event designator的意思是找出最近执行过的以whatever开头的命令
后面的
:p
这个modifier的意思呢
bash的手册(man bash看)上也有讲:
p Print the new command but do not execute it.
于是整个命令行的意思就是找出最近执行过的以whatever开头的命令显示出来,不执行
原文来自commandlinefu
cp filename{,.bak}
这个命令是用来把filename备份成filename.bak的
等同于命令
cp filename filename.bak
这里利用的是bash的brace expansion(大括号扩展)功能
按照bash手册(man bash)所述
bash支持{a,b,c}这样的扩展
比如a{d,c,b}e会被扩展成ade ace abe
所以
filename{,.bak}被扩展成filename filename.bak也就好理解了
原文来自commandlinefu
^foo^bar
这个命令用来把上一个命令中第一次出现的foo字串替换成bar字串
然后当做命令执行
bash的manual里是这么解释的
^string1^string2^
Quick substitution. Repeat the last command, replacing string1 with
string2. Equivalent to ‘‘!!:s/string1/string2/’’ (see Modifiers below)
这里最后还多了个”^”符号
可是文档上讲
最后那个”^”可以不写
原文来自于commandlinefu
原文是这样解释这个命令的:
在vim中保存正在编辑的文件而不需要必要的权限。
(Save a file you edited in vim without the needed permissions)
下面我们就分析下这条命令是怎样做到保存文件而不需要必要的权限的
:w !sudo tee %
man vim就会发现
百分号(“%”)代表当前文件名
根据man vim的提示:
:[range]w[rite] !{cmd} Execute {cmd} with [range] lines as standard input
(note the space in front of the ‘!’). {cmd} is
executed like with “:!{cmd}”, any ‘!’ is replaced with
the previous command
“:w !sudo tee %”这条命令的含义是把当前编辑的文件的内容当做标准输入输入到命令sudo tee 文件名里去
也就是sudo保存为当前文件名
这个功能其实可能debian和ubuntu的用户更需要一些
因为我们都是直接root
所以一般不会有权限不足的问题
哈哈
发现一个好网站:commandlinefu
从今天开始
每天从这个网站上选择一个我个人感觉有用的命令行实现
尽我自己的能力来简单解释一下
今天学习的是命令
sudo !!
这条命令sudo的意思大家都知道
关键是!!的含义,在这里是执行上一个命令
也就是history里的最后一个命令(用history命令可以看出)
我man bash看了一下
这里的!!指的是上一个命令,跟!-1是一个意思
同时,还有一些其他的!开头的表达的相关含义:
!n Refer to command line n.
!-n Refer to the current command line minus n.
!! Refer to the previous command. This is a synonym for ‘!-1’.
!string
Refer to the most recent command starting with string.
!?string[?]
Refer to the most recent command containing string. The trailing ? may be
omitted if string is followed immediately by a newline.
^string1^string2^
Quick substitution. Repeat the last command, replacing string1 with
string2. Equivalent to ‘‘!!:s/string1/string2/’’ (see Modifiers below).
!# The entire command line typed so far.
不过我们在工作中
经常用上箭头来呼出上一条命令(此功能为bash支持)
然后再回车执行
最近碰到个问题
某个域名
在linux下ping不了、wget不了、curl不了,都出“unknown host”的错误
但是nslookup却还是能解析出域名的
检查了/etc/hosts、/etc/host.conf、/etc/nsswitch.conf以及/etc/resolv.conf都没有问题
而且在windows下却没有任何问题
联想到ping、wget、curl等网络程序应该都是调用的同一函数来解析域名的
进一步了解应该是gethostbyname函数
写了个简单的程序用gethostbyname
果然出错
于是装上glibc的源代码
找到gethostbyname函数所在程序resolv/gethnamaddr.c
最终在resolv/res_comp.c中找到了答案:
int
res_hnok(const char *dn) {
int ppch = ‘\0′, pch = PERIOD, ch = *dn++;
while (ch != ‘\0′) {
int nch = *dn++;
if (periodchar(ch)) {
(void)NULL;
} else if (periodchar(pch)) {
if (!borderchar(ch))
return (0);
} else if (periodchar(nch) || nch == ‘\0′) {
if (!borderchar(ch))
return (0);
} else {
if (!middlechar(ch))
return (0);
}
ppch = pch, pch = ch, ch = nch;
}
return (1);
}
libresolv_hidden_def (res_hnok)
应该就是这个res_hnok这个函数判断名字不合法而导致返回0
最终h_error被设置为”NO_RECOVERY”
并gethostbyname返回NULL
呵呵
就是因为这个域名解析出来的某一级CNAME居然是*.xxx.xxx这个样子
于是被res_hnok函数认为非法
不过为啥windows下没有问题
这个估计是linux和windows下的gethostbyname不太一样吧
windows总是这样特立独行,不太愿意跟标准兼容的
:)
近期评论