学习commandlinefu的命令行:echo “foo” > /dev/tcp/192.168.1.1/25
原文来自commandlinefu
echo “foo” > /dev/tcp/192.168.1.1/25
这个命令将发foo消息到192.168.1.1这台机器的tcp端口25上
这个可以用来测试网络链接是否被防火墙所挡
这是tcp的情况
据说udp和icmp的也都行(没测过:)
原文来自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 withstring2. Equivalent to ‘‘!!:s/string1/string2/’’ (see Modifiers below)
发现一个好网站: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’.!stringRefer to the most recent command starting with string.!?string[?]Refer to the most recent command containing string. The trailing ? may beomitted if string is followed immediately by a newline.^string1^string2^Quick substitution. Repeat the last command, replacing string1 withstring2. Equivalent to ‘‘!!:s/string1/string2/’’ (see Modifiers below).!# The entire command line typed so far.
最近碰到个问题
某个域名
在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中找到了答案:
intres_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)
比如
我在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文件的第六列,也就是命令列
百分号(%)被赋予了特殊含义
被看做是换行符,而且,其后面的内容被当做命令的标准输入
所以,要想正常使用百分号(%)的功能
需要在其前面添加转义符(\)
学习了一下。
linux下
登录用户的操作都会被记到history文件里
(bash下貌似是~/.bash_history)
这样好像不太爽
尤其是想做点敏感操作的时候
于是
简单
登上去
unset HISTFILE
即可
近期评论