学习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
这个命令
!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下
登录用户的操作都会被记到history文件里
(bash下貌似是~/.bash_history)
这样好像不太爽
尤其是想做点敏感操作的时候
于是
简单
登上去
unset HISTFILE
即可
在服务器上跑一些命令
经常都会用到简单的shell也算是编程
用的比较多的是for语句
for i in a b c d; do
这样的
但当in后面的列表比较长的时候
往往就不知道怎么写了
今天偶尔翻到bash的faq(?貌似是这个)
发现如果后面是一系列有规律的数字的话可以这样处理:
for i in ((i = 0; i < 10000; i++ ))
这样就行
呵呵
再联想到bash下(())括起来的可以是运算
比如echo $((3+4))
输出是7
那这种写法也就不难理解了
就好像是敲入exit命令或Ctrl+D一样
奇怪的是
在我的两台rhel as5的机器上有这个问题
在另外两台fedora core的机器上就没问题
貌似可能还不是echo的版本的问题(2台fc,一台是”echo (GNU coreutils) 5.2.1″,一台是”echo (GNU coreutils) 6.9″,都没问题)
两台有问题的rhel as5都是”echo (GNU coreutils) 5.97″
貌似跟shell有关系
我换了tcsh和 zsh都没问题
然后再敲bash回bash
再echo的话
就报”Segmentation fault”
这是我的服务器初始化系统里的一个东东
改写过n多次
最早是写死2个设备:eth0和eth1
后来又用ip+grep+cut+awk写了个
最近改用ifconfig+sed了
就是这样:
ifconfig | sed -e ‘/\s*Link encap:Ethernet\s*.*/!d;s///’
这里为什么用ifconfig而不用ifconfig -a呢
因为我偶然发现ifconfig返回所有状态是up的网络设备
而如果是ifconfig -a的话,往往是连状态是down的网络设备都列出来
显然ifconfig的输出是我所要的
还有,这里比较诡异的是sed命令”s///”
我就是这里怎么也没想明白
但是因为好用,就囫囵吞枣,直接用了
表面上讲
s///
的意思应该是把”空”替换成”空”
但实际上
这里的”s///“起到的作用是把前面比配到行里的匹配上的字符串”\s*Link encap:Ethernet\s*.*“替换成空
近期评论