存档

文章标签 ‘Linux’

学习commandlinefu的命令行:echo “foo” > /dev/tcp/192.168.1.1/25

2010年8月22日 哈哈 没有评论

原文来自commandlinefu

echo “foo” > /dev/tcp/192.168.1.1/25

这个命令将发foo消息到192.168.1.1这台机器的tcp端口25上

这个可以用来测试网络链接是否被防火墙所挡

这是tcp的情况

据说udp和icmp的也都行(没测过:)

分类: tips 标签: , , , , ,

commandlinefu的命令行学习:’ALT+.’ or ‘ .’

2010年8月21日 哈哈 没有评论

原文来自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键到达命令行首

再删掉不需要的部分

敲入需要的部分再执行的。

分类: tips 标签: , , , ,

从commandlinefu学习命令行:ssh-copy-id user@host

2010年8月20日 哈哈 1 条评论

原文来自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)

分类: tips 标签: , , ,

来自commandlinefu的命令行:!whatever:p

2010年8月19日 哈哈 没有评论

原文来自commandlinefu

这个命令

!whatever:p

整个是一个word designator

被用冒号(:)分成了event designatormodifiers

!whatever

这个event designator的意思是找出最近执行过的以whatever开头的命令

后面的

:p

这个modifier的意思呢

bash的手册(man bash看)上也有讲:

p      Print the new command but do not execute it.

于是整个命令行的意思就是找出最近执行过的以whatever开头的命令显示出来,不执行

commandlinefu学习之:cp filename{,.bak}

2010年8月18日 哈哈 没有评论

原文来自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

2010年8月17日 哈哈 没有评论

原文来自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)
这里最后还多了个”^”符号
可是文档上讲
最后那个”^”可以不写
分类: tips 标签: ,

翻译并学习commandlinefu的命令行

2010年8月15日 哈哈 没有评论

发现一个好网站: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支持)
然后再回车执行
分类: tips 标签: , , , ,

linux下的gethostbyname是否跟windows下的不一样?

2010年8月7日 哈哈 没有评论

最近碰到个问题
某个域名
在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总是这样特立独行,不太愿意跟标准兼容的
:)

crontab中命令行中的百分号(%)需要做转义

2010年8月4日 哈哈 1 条评论

比如
我在crontab -e中用命令
echo -e “`date ‘+%s’`\t$RANDOM” > /tmp/xxx
的话
命令行直接用没有问题
但写在cron里的时候
‘%’需要转义成’\%’
原因还没找到
原因终于找到了
在linux下看crontab的帮助
man 5 crontab
里有这么一段:

Percent-signs (%) in the command,
unless escaped with backslash (\), will be changed into newline charac-
ters, and all data after the first % will be sent to the command as
standard input.

大概意思是说
在cron文件的第六列,也就是命令列
百分号(%)被赋予了特殊含义
被看做是换行符,而且,其后面的内容被当做命令的标准输入

所以,要想正常使用百分号(%)的功能
需要在其前面添加转义符(\)

学习了一下。

分类: tips 标签: , , , ,

怎样防止bash写操作记录到.bash_history

2010年8月2日 哈哈 没有评论

linux下
登录用户的操作都会被记到history文件里
(bash下貌似是~/.bash_history)
这样好像不太爽
尤其是想做点敏感操作的时候

于是
简单
登上去
unset HISTFILE
即可