存档

文章标签 ‘bash’

学习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的命令行:!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 标签: , , , ,

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

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

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

于是
简单
登上去
unset HISTFILE
即可

shell程序中for循环的一个小技巧

2009年12月2日 哈哈 没有评论

在服务器上跑一些命令
经常都会用到简单的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
那这种写法也就不难理解了

分类: tips 标签: , , , ,

诡异现象:echo一个字串都会导致ssh sesion退出

2009年4月27日 哈哈 1 条评论

就好像是敲入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”

linux下脚本取up的网络设备名

2009年1月13日 哈哈 没有评论

这是我的服务器初始化系统里的一个东东
改写过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*.*“替换成空