原文出处:http://testwo.com/space-8-do-blog-id-10.html
PICT—基于Pairwise的用例组合算法
1、Pairwise算法:
Pairwise (a.k.a. all-pairs) testing is an effective test case generation technique that is based on the observation that most faults are caused by interactions of at most two factors. Pairwise-generated test suites cover all combinations of two therefore are much smaller than exhaustive ones yet still very effective in finding defects.
常用的Pairwise工具集:http://www.pairwise.org/tools.asp
2、通过对测试变量的所有维度及维度的组合,避免穷举测试所有维度的所有值及其组合来减少测试用例数量的一种方法
3、基于Pairwise算法的PICT工具:
微软Pairwise算法程序Pairwise Independent Combinatorial Testing (PICT) Tool
例如:准备文本文件(.txt) 内容包括(注意格式<ParamName> : <Value1>, <Value2>, <Value3>, …)
OS:WinNT,HP-UX,AIX,Solaries
数据库:DB2,Oracle,SQLServer,PostgreSQL
JDK:1.6.0,1.5.0
字符集:utf-8,GBK
4、通过PICT程序运算:
结果如上图,较一般的排列组合算法(各维度值乘积)明显较少
需将结果输出保存至文件:命令
D:\Program Files\PICT>pict test2.txt > OutputFile.txt
D:\Program Files\PICT>pict test2.txt > OutputFile.xls
5、PICT选项:
/o:N - Order of combinations (default: 2)
/d:C - Separator for values (default: ,)
/a:C - Separator for aliases (default: |)
/n:C - Negative value prefix (default: ~)
/e:file – File with seeding rows
/r[:N] - Randomize generation, N – seed
/c - Case-sensitive model evaluation
/s - Show model statistics
6、提供丰富的分组模式
另外:
PICT帮组手册:App/PICT/PICTHelp.htm
PICT最新下载:http://msdn.microsoft.com/en-us/testing/bb980925.aspx
最近被这个东西烦了一小下,今天刚好也有同事问,于是就想着小小总结一下。
不过发现,网上有高手,总结的更细致,更好,于是就直接copy过来了。
原文地址:http://www.360doc.com/content/10/0530/15/1066294_30320704.shtml
如果你需要在Linux中操作windows下的文件,那么你可能会经常遇到文件编码转换的问题。Windows中默认的文件格式是GBK(gb2312),而Linux一般都是UTF-8。下面介绍一下,在Linux中如何查看文件的编码及如何进行对文件进行编码转换。
一,查看文件编码:
在Linux中查看文件编码可以通过以下几种方式:
1.在Vim中可以直接查看文件编码
:set fileencoding
即可显示文件编码格式。
如果你只是想查看其它编码格式的文件或者想解决用Vim查看文件乱码的问题,那么你可以在
~/.vimrc 文件中添加以下内容:
set encoding=utf-8
fileencodings=ucs-bom,utf-8,cp936
这样,就可以让vim自动识别文件编码(可以自动识别UTF-8或者GBK编码的文件),其实就是依照 fileencodings提供的编码列表尝试,如果没有找到合适的编码,就用latin-1(ASCII)编码打开。
2. enca (如果你的系统中没有安装这个命令,可以用sudo yum install -y enca 安装 )查看文件编码
$ enca filename
filename: Universal transformation format 8 bits; UTF-8
CRLF line terminators
需要说明一点的是,enca对某些GBK编码的文件识别的不是很好,识别时会出现:
Unrecognized encoding
二,文件编码转换
1.在Vim中直接进行转换文件编码,比如将一个文件转换成utf-8格式
:set fileencoding=utf-8
2. iconv 转换,iconv的命令格式如下:
iconv -f encoding -t encoding inputfile
比如将一个UTF-8 编码的文件转换成GBK编码
iconv -f GBK -t UTF-8 file1 -o file2
3. enconv 转换文件编码
比如要将一个GBK编码的文件转换成UTF-8编码,操作如下
enconv -L zh_CN -x UTF-8 filename
三,文件名编码转换:
从Linux往 windows拷贝文件或者从windows往Linux拷贝文件,有时会出现中文文件名乱码的情况,出现这种问题的原因是因为,windows的文件名 中文编码默认为GBK,而Linux中默认文件名编码为UTF8,由于编码不一致,所以导致了文件名乱码的问题,解决这个问题需要对文件名进行转码。
在Linux中专门提供了一种工具convmv进行文件名编码的转换,可以将文件名从GBK转换成UTF-8编码,或者从UTF-8转换到GBK。
首先看一下你的系统上是否安装了convmv,如果没安装的话用:
yum -y install convmv 安装。下面看一下convmv的具体用法:
convmv -f 源编码 -t 新编码 [选项] 文件名
常用参数:
-r 递归处理子文件夹
–notest 真正进行操作,请注意在默认情况下是不对文件进行真实操作的,而只是试验。
–list 显示所有支持的编码
–unescap 可以做一下转义,比如把%20变成空格
比如我们有一个utf8编码的文件名,转换成GBK编码,命令如下:
convmv -f UTF-8 -t GBK –notest utf8编码的文件名
这样转换以后”utf8编码的文件名”会被转换成GBK编码(只是文件名编码的转换,文件内容不会发生变化)
四,vim 编码方式的设置
和所有的流行文本编辑器一样,Vim 可以很好的编辑各种字符编码的文件,这当然包括UCS-2、UTF-8 等流行的Unicode 编码方式。然而不幸的是,和很多来自 Linux 世界的软件一样,这需要你自己动手设置。
Vim 有四个跟字符编码方式有关的选项,encoding、fileencoding、fileencodings、termencoding (这些选项可能的取值请参考 Vim 在线帮助 :help encoding-names),它们的意义如下:
* encoding: Vim 内部使用的字符编码方式,包括 Vim 的 buffer (缓冲区)、菜单文本、消息文本等。默认是根据你的locale选择.用户手册上建议只在 .vimrc 中改变它的值,事实上似乎也只有在.vimrc 中改变它的值才有意义。你可以用另外一种编码来编辑和保存文件,如你的vim的encoding为utf-8,所编辑的文件采用cp936编码,vim会 自动将读入的文件转成utf-8(vim的能读懂的方式),而当你写入文件时,又会自动转回成cp936(文件的保存编码).
* fileencoding: Vim 中当前编辑的文件的字符编码方式,Vim 保存文件时也会将文件保存为这种字符编码方式 (不管是否新文件都如此)。
* fileencodings: Vim自动探测fileencoding的顺序列表,启动时会按照它所列出的字符编码方式逐一探测即将打开的文件的字符编码方式,并且将 fileencoding 设置为最终探测到的字符编码方式。因此最好将Unicode 编码方式放到这个列表的最前面,将拉丁语系编码方式 latin1 放到最后面。
* termencoding: Vim 所工作的终端 (或者 Windows 的 Console 窗口) 的字符编码方式。如果vim所在的term与vim编码相同,则无需设置。如其不然,你可以用vim的termencoding选项将自动转换成term 的编码.这个选项在 Windows 下对我们常用的 GUI 模式的 gVim 无效,而对 Console 模式的Vim 而言就是 Windows 控制台的代码页,并且通常我们不需要改变它。
五,Vim 的多字符编码工作方式
1. Vim 启动,根据 .vimrc 中设置的 encoding 的值来设置 buffer、菜单文本、消息文的字符编码方式。
2. 读取需要编辑的文件,根据 fileencodings 中列出的字符编码方式逐一探测该文件编码方式。并设置 fileencoding 为探测到的,看起来是正确的 (注1) 字符编码方式。
3. 对比 fileencoding 和 encoding 的值,若不同则调用 iconv 将文件内容转换为encoding 所描述的字符编码方式,并且把转换后的内容放到为此文件开辟的 buffer 里,此时我们就可以开始编辑这个文件了。注意,完成这一步动作需要调用外部的 iconv.dll(注2),你需要保证这个文件存在于 $VIMRUNTIME 或者其他列在 PATH 环境变量中的目录里。
4. 编辑完成后保存文件时,再次对比 fileencoding 和 encoding 的值。若不同,再次调用 iconv 将即将保存的 buffer 中的文本转换为 fileencoding 所描述的字符编码方式,并保存到指定的文件中。同样,这需要调用 iconv.dll由于 Unicode 能够包含几乎所有的语言的字符,而且 Unicode 的 UTF-8 编码方式又是非常具有性价比的编码方式 (空间消耗比 UCS-2 小),因此建议 encoding 的值设置为utf-8。这么做的另一个理由是 encoding 设置为 utf-8 时,Vim 自动探测文件的编码方式会更准确 (或许这个理由才是主要的
。我们在中文 Windows 里编辑的文件,为了兼顾与其他软件的兼容性,文件编码还是设置为 GB2312/GBK 比较合适,因此 fileencoding 建议设置为 chinese (chinese 是个别名,在 Unix 里表示 gb2312,在 Windows 里表示cp936,也就是 GBK 的代码页)。
时间真快,不知不觉,快乐云の小屋已经一年了。
当时happycloudy的域名千挑万选,结果选的也不是很好,呵呵。
不过既然已经用了,就要一直用下去吧,就像百付宝的名字,难听,但是也要一直用下去,呵呵。
域名买了一年的,转眼就到期了,当时是在goddady买的,为了省那么2、3美刀,transfer到name.com了。
过程还是很简单的,百度一下,有很多教程,只是界面多少都有些变化,不过也不难找到。
另外踩了一个坑,付款的时候,信用卡信息填写英文的不行,必须填写中文的才能通过,不知道为什么,呵呵。
祝各位访问小屋的朋友幸福、快乐。
原来百度的CFO王湛生就在那里休年假的时候,溺水身亡了。
今天听说,阿里巴巴B2B的技术总监曹行也在那里休假,溺水身亡了。
sigh~真可怕。
因为舟曲的灾难,各大网站都把页面变成了黑白灰色,以表示对死难者的哀悼。
于是想着百度了一下使页面变灰的方法,具体如下:
在全站引用css文件的第一行,加入
html { filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1); }
详情请参考:http://zhidao.baidu.com/question/54381605.html
虽然这篇文章里面,很多关于我们部门老大蔡虎的正面言论,但是证实了一下,确实不是软文。
大家可以抛开很多情感因素,仅仅看待电子商务当中的一些问题和机遇,作为参考,希望能有收获。
原文地址:http://axiang.blog.techweb.com.cn/archives/315
越来越觉得微博是一个最佳的辩论平台,三言两语中就能直达话题本质,借助@还可以不断邀约更多人加入辩战双方。最近在微博上看到关于“电子商务九惑”的论战,这是迄今为止,我见过的、关于电子商务的最深刻、最精彩的见解,看后获益匪浅。
参与辩战的也非等闲之辈,都是国内电子商务界大佬——前谷歌中国的首席战略管、现投身电子商务的郭弃疾,百度电子商务事业部总经理蔡虎,以及其他一些大佬们。我简单记录一下由郭弃疾提出的“九惑”以及蔡虎的精彩回应,并提出我个人的见解。
疑惑1:互联网可省去传统渠道成本?
郭弃疾提问:“互联网可省去传统渠道成本”:互联网流量采购成本就是渠道成本。有人说,我有了品牌就不用采购流量了。真的么?那为什么到今天亚马逊还是谷歌在美国最大广告客户?
蔡虎回应:品牌可以有效降低流量采购 成本,但只要网民数量在增长,只要电子商务用户在增长,电子商务网站就一定需要采购流量,更何况搜索在看得见的未来会一直是人们需求的入口。搜索之于电子 商务,不是告诉人们买什么,而是在哪儿买什么。另外,品牌越大越需要打广告,搜索同样具备品牌营销价值。这些就是为什么亚马逊会一直是谷歌最大的客户的主 要原因,此现象在其他国家也一样,但不包括目前的中国。
评点:郭问的精彩,蔡回答更精彩。其 实我们可以做个类比,可口可乐和百事可乐在可乐领域,麦当劳和肯德基在快餐领域,几乎都在玩“二人转”,他们是否不需要“流量采购”?答案显然是否定的。 电子商务必须依靠搜索引擎进行流量转化,一个最新例证就是阿里巴巴在淘宝无法获取百度流量,以及谷歌推出中国后流量明显损失的情况下,不得不与搜狐的合 作。
疑惑2:销售量大就可以压低采购价格?
郭弃疾提问:“销售量大就可以压低采 购价格”:(1)总体销售量大不等于单个商品销售量大,事实上以今天电子商务的规模,和传统渠道相比,在单品采购量上,没有任何优势可言;(2)采购成本 的压缩也是边界效应递减,采购1个和1000个成本差不少,1000和10000差别或许就不大了。
蔡虎回应:为什么总是在说低价。只有最大规模的玩家才玩得起低价,数数全世界没几个。如果所有电子商务网站都在想着低价卖东西,然后销售量就能增加,然后就可以向供应商压低价格,然后就可以更低价卖东西……累不累啊,而且迟早把自己做死。
评点:郭不要忘了,到现在中国网络购 物才占到零售总额的多少?2%?恐怕还不到。美国、韩国可以到8%乃至10%以上。相比之下,我更赞同蔡,京东商城玩到现在,规模是上去了,但问题是盈利 还是遥遥无期,当当就更别提了,10年抗战。别总拿亚马逊持续亏损终见天日来说事,电子商务如果只能玩价格战,就算是10年、100年也玩不出第二个亚马 逊。
疑惑3:成功的关键是更快的物流?
郭弃疾提问:“用户都想更快获得商品,所以成功的关键是快速的物流”:是的,用户都想快,但问题是他们愿意为“快”买单么?10年前就有个公司叫做“e国1小时”,后来消失了。
蔡虎回应:我从来都不认为“快”是物流的关键。对于大多数商品来说,“能在我希望送到的时间送到”,才是物流在时间管理上的极致表现。另外,物流的安全和服务同样重要,单纯强调快,是和单纯强调便宜一样的自恋行为。有快的能力,但做到Good Enough,最好。
评点:哈哈,再次赞一个老蔡。不是每一次订单都是麦当劳送餐,需要那么快。“能在希望送到的时间送到”,精辟。此外,还有一点可以补充蔡的观点:羊毛出在羊身上,消费者不见得愿意为“快”买单——比如我在选择物流类型的时候,有时候就会选择平邮。
疑惑4:低价获取用户,再卖贵的东西给他们?
郭弃疾提问:“低价可以帮我们获取用户,以后可以卖贵的东西给他们”:用户的价格敏感度恰恰是最难改变的东西,这是由他们的经济状况,价值观与长期生活习惯决定的。低价可以帮你筛选价格最敏感的一群用户,你永远无法改变他们。
蔡虎回应:如果有些电商有这样天真的想法,我建议他不要做电子商务,因为他们不懂消费者。
评点:蔡的回应很犀利,这就跟谈恋爱一样,青年男女总觉得自己能改变对方,其实最终发现,谁都没有变,一切都是徒劳。
疑惑5:“我们有全世界最先进的仓库”?
郭弃疾提问:仓库系统是15年前亚马逊创造的技术壁垒,正如所有壁垒都有时效性,到今天它已经不复存在,人人都可以用合理的资本与时间建立起同样的系统。
蔡虎回应:在目前和以后相当长的时间 内,仓库管理能力是电子商务网站的核心竞争力,这和它的仓库是以什么形式存在无关。从另一个角度来说,也叫做库存管理能力。这点是电子商务网站可否持续成 长的关键因素之一,决定了它是否能适应产品生命周期、消费淡旺季、消费者行为、竞争条件等诸多复杂环境的动态变化,也许一个变化都可以让活的好好的电子商 务网站瞬间毙命。
评点:同意蔡的回应,AMZN其实一 直不太承认自己是个“电子商务”公司,更觉得自己是“IT公司”。其中很重要的方面就在于对数据、对库存系统的管理、分析、调整,这是需要巨大的数据挖掘 能力的。为什么一家电子商务公司能领航云计算?呵呵。这绝非国内的阿里、淘宝之流可以比肩的。
疑惑6:“我们的库存都可以退给供应商,所以没有库存风险”?
郭弃疾提问:“我们的库存都可以退给供应商,所以没有库存风险”:羊毛出在羊身上,供应商也会算小账,他已经把库存风险加到报价里了。
蔡虎回应:只能说明有此想法的人不懂库存管理,也不太懂财务管理。
评点:这个疑惑确实价值不大,很2的言论。
疑惑7:“我们有最先进的商品推荐引擎,别人不能复制”?
郭弃疾提问:“我们有最先进的商品推荐引擎,别人不能复制”:推荐引擎的效能主要由积累的数据量与可供选择的产品多样性决定,算法都大同小异。
蔡虎回应:任何基于互联网的模式都摆脱不了数据驱动的本质,对数据对算法漠视的做法会导致其“莫名其妙”的惨败。
评点:既然是“数据”,就会不断的增长,既然是“算法”,就可以持续优化。数据的容量、算法的优劣将决定其价值,如果都可以复制,那我们也可以复制一个同样成功的百度。
疑惑8:因为规模效应,运营成本会因为规模扩大而摊薄?
郭弃疾提问:这是一个理想状态,在现实中,销售量每提高一个数量级,运营复杂度会成指数提高,系统的熵会持续膨胀,虽然边界成本会下降,但新的固定成本与各种误差成本会不降反升。
蔡虎回应:皆有可能,要看这个规模效应是如何取得的。运营成本是否因规模扩大而摊薄,反映的是战略方向是否对,以及运营能力 是否强。
评点:对这个产生疑惑,就有些为赋新词强说愁的意味了。每个硬币都有它的两面,规模效应与运营成本的增加,一定程度是成正比的,优秀的电子商务企业会尽力改变这种可能。
疑惑9:“低毛利是我们选择的战略”?
郭弃疾提问:真相是商品同质化,用户价格敏感,涨价就离你而去。比市场价格低而导致别人跟随,叫价格战;比市场价格高而让别人跟随,那才叫定价权。电子商务到今天为止,没有任何定价权。
蔡虎回应:企业运营,毛利是关键的关键。只有少数中的少数,才敢说也才能说“低毛利是我们选择的战略”。
评点:同意两位的见解。据我所接触的一些行业,网络平台定价权完全掌握在供应商(厂商)手中,它其实不太care网络走的量,它只care价格会不会冲击到主流渠道。潜台词就是:你别给我惹麻烦就行了。
总结:这场发生在微博上的终极对话相信很多人看了也忍不住要说几句,我在想,正所谓“真理越辩越明”,我希望以后越来越听到更多这样的精彩论战。
最后附上两位主角的微博,大家可以关注一下:
郭弃疾:http://t.sina.com.cn/qujiguo
蔡虎:http://t.sina.com.cn/stanleycai
blog地址:http://plum.blog.sohu.com/
太牛了,给娃娃做的副食,看的我口水直流:)
强烈推荐有新生宝宝的爸爸妈妈看看,能学到不少东东~
记得06年的七夕,与妮妮热恋……
记得08年的七夕,向妮妮求婚……
如今是10年的七夕,该如何度过?送妮妮什么礼物好呢?
希望各位朋友多支支招:)
原文出处:
http://www.isspy.com/most_useful_linux_commands_1/
http://www.isspy.com/most_useful_linux_commands_2/
1 |
$ sudo !! |
大家应该都知sudo,不解释。但通常出现的情况是,敲完命令执行后报错才发现忘了sudo。这时候,新手用户就会:按上箭头,按左箭头,盯着光标回到开始处,输入sudo,回车;高手用户就蛋定多了,按Ctrl-p,按Ctrl-a,输入sudo,回车。
这里介绍这个是天外飞仙级别的,对,就直接sudo !!。
当然这几种解决方式效果是完全一样的,只是款不一样,嗯,不解释。
两个感叹号其实是bash的一个特性,称为事件引用符(event designators)。!!其实相当于!-1,引用前一条命令,当然也可以!-2,!-50。默认情况下bash会在~/.bash_history文件内记录用户执行的最近500条命令,history命令可以显示这些命令。
关于事件引用符的更多用法可以深入阅读The Definitive Guide to Bash Command Line History。
1 |
$ python -m SimpleHTTPServer |
这命令启动了Python的SimpleHTTPServer模块,考虑到Python在绝大多数的Linux发行版当中都默认安装,所以这个命令很可能是最简单的跨平台传文件的方法。
命令执行后将在本机8000端口开放HTTP服务,在其他能访问本机的机器的浏览器打开ttp://ip:8000即打开一个目录列表,点击即可下载。
1 |
:w !sudo tee % |
这题目读起来纠结,其实是很常见的,常常忘记了sudo就直接用vim编辑/etc内的文件,(不过也不一定,vim发现保存的文件无法保存时候会提示)等编辑好了,保存时候才发现没权限。曲线方法是先保存个临时文件,退出后再sudo cp回去。不过实际上在vim里面可以直接完成这个过程的,命令就是如此。
查阅vim的文档(输入:help :w),会提到命令:w!{cmd},让vim执行一个外部命令{cmd},然后把当前缓冲区的内容从stdin传入。
tee是一个把stdin保存到文件的小工具。
而%,是vim当中一个只读寄存器的名字,总保存着当前编辑文件的文件路径。
所以执行这个命令,就相当于从vim外部修改了当前编辑的文件,好完工。
1 |
$ cd - |
应该不少人都知道这个,横杆-代表上一个目录的路径。
实际上cd -就是cd $OLDPWD的简写,bash的固定变量$OLDPWD总保存着之前一个目录的路径。
相对地,$PWD总保存着当前目录的路径。这些变量在编写shell脚本时候相当有用。
1 |
$ ^foo^bar^ |
又是另外一个事件引用符(event designator),可以把上一条命令当中的foo替换成bar。
在需要重复运行调试一道长长的命令,需要测试某个参数时候,用这个命令会比较实用;但多数人会首先选择按上箭头提出上道命令,再移动光标去修改某参数,这样更直观,但效率上就不够使用引用符高,而且在脚本中用这个方法可以简化很多。
这道命令的原始样式应该是这样的:
1 |
!!:s/foo/bar/ |
本文一开始介绍过!!,后面的一段大家应该很熟悉,vim、sed的替换操作都是这样的语法。
关于事件引用符的更多用法可以深入阅读The Definitive Guide to Bash Command Line History
1 |
$ cp filename{,.bak}
|
这道命令把filename文件拷贝成filename.bak,大家应该在一些比较复杂的安装教程里面见过这样的用法。其原理就在于bash对大括号的展开操作,filename{,.bak}这一段会被展开成filename filename.bak再传给cp,于是就有了备份的命令了。
大括号在bash里面是一个排列的意义,可以试试这个:
1 |
$ echo {a,b,c}{a,b,c}{a,b,c}
|
将输出三个集合的全排列:
aaa aab aac aba abb abc aca acb acc baa bab bac bba bbb bbc bca bcb bcc caa cab cac cba cbb cbc cca ccb ccc
关于shell当中的集合操作,可深入阅读“Set Operations in the Unix Shell”
1 |
$ ssh-copy-id remote-machine |
这个命令把当前用户的公钥串写入到远程主机的~/.ssh/authorized_keys内,这样下次使用ssh登录的时候,远程主机就直接根据这串密钥完成身份校验,不再询问密码了。前提是你当前用户有生成了公钥,默认是没有的,先执行ssh-keygen试试吧!
这个命令如果用手工完成,是这样的:
1 2 3 |
your-machine$ scp ~/.ssh/identity.pub remote-machine: your-machine$ ssh remote-machine remote-machine$ cat identity.pub >> ~/.ssh/authorized_keys |
如果你想删掉远程主机上的密钥,直接打开authorized_keys,搜索你的用户名,删除那行,即可。
1 |
$ ffmpeg -f x11grab -s wxga -r 25 -i :0.0 -sameq /tmp/out.mpg |
我们在一些视频网站上看到别人的3D桌面怎么怎么酷的视频,通常就是这么来的,ffmpeg可以直接解码X11的图形,并转换到相应输出格式。
ffmpeg的通常用法是,根据一堆参数,输出一个文件,输出文件通常放最后,下面解析下几个参数:
-f x11grab 指定输入类型。因为x11的缓冲区不是普通的视频文件可以侦测格式,必须指定后ffmpeg才知道如何获得输入。
-s wxga 设置抓取区域的大小。wxga是1366*768的标准说法,也可以换成-s 800×600的写法。
-r 25 设置帧率,即每秒抓取的画面数。
-i :0.0 设置输入源,本地X默认在0.0
-sameq 保持跟输入流一样的图像质量,以用来后期处理。
1 |
command <CTRL-x CTRL-e> |
在已经敲完的命令后按<CTRL-x CTRL-e>,会打开一个你指定的编辑器(比如vim,通过环境变量$EDITOR指定),里面就是你刚输入的命令,然后爱怎么编辑就怎么编辑吧,特别是那些参数异常复杂的程序,比如mencoder/ffmpeg,一个命令动辄3、4行的,要修改其中的参数,这个方法最合适不过了,保存退出后自动执行这个程序。
实际上这是readline库的功能,在默认情况下,bash使用的是emacs模式的命令行操作方式,<CTRL-x CTRL-e>是调用这个功能的一个绑定。如果你习惯使用vi模式,按<ESC v>可以实现同样功能。
如果你喜欢别的编辑器,可以在~/.bashrc里面放上比如export EDITOR=nano的命令。
另外一个修改命令的方法是使用fc命令(Fix Command),在编辑器里面打开上一句命令。我们的第一辑连载提过一个^foo^bar^命令可以用fc来实现:fc -s foo=bar。
1 |
> file.txt |
>在shell里面是标准输出重定向符,即把(前部个命令的)命令行输出转往一个文件内,但这里没有“前部命令”,输出为空,于是就覆盖(或创建)成一个空文件了。
有些脚本的写法是:>file.txt,因为:是bash默认存在的空函数。
单纯创建文件也可以用$touch file.txt,touch本来是用作修改文件的时间戳,但如果文件不存在,就自动创建了。
1 |
ssh -N -L2001:remotehost:80 user@somemachine |
这个命令在本机打开了2001端口,对本机2001端口的请求通过somemachine作为跳板,转到remotehost的80端口上。
实现效果跟术语反向代理是相似的,实际上就是端口转发,注意上面的描述涉及了3台主机,但当然somemachine可以变成localhost。
这个命令比较抽象,但有时候是很有用的,比如因为众所周知的原因国内的IP的80端口无法使用,又或者公司的防火墙只给外网开了ssh端口,需要访问内部服务器一个web应用,以及需要访问某些限定了来源IP的服务,就可以用上这个方法了。
举一个具体例子,运行:
1 2 |
ssh -f -N -L 0.0.0.0:443:twitter.com:443 shell.cjb.net ssh -f -N -L 0.0.0.0:80:twitter.com:80 shell.cjb.net |
然后在/etc/hosts里面添加127.0.0.1 twitter.com,好吧剩下的你懂的。
当然通常做这个功能的反向代理,应该要用squid、nginx之类,ssh就算是轻量级的尝试吧!
1 |
reset |
如果你试过不小心cat了某个二进制文件,很可能整个终端就傻掉了,可能不会换行,没法回显,大堆乱码之类的,这时候敲入reset回车,不管命令有没有显示,就能回复正常了。
实际上reset命令只是输出了一些特殊字符,我们看BusyBox里面最简单的reset程序的实现:
1 |
printf("\033c\033(K\033[J\033[0m\033[?25h");
|
输出的这些字符对Shell是有特殊意义的:
\033c: “ESC c” – 发送重置命令;\033(K: “ESC ( K” – 重载终端的字符映射;\033[J: “ESC [ J” – 清空终端内容;\033[0m: “ESC [ 0 m” – 初始化字符显示属性;\033[?25h: “ESC [ ? 25 h” – 让光标可见;其中字符显示属性经常用来设定打印字符的颜色等,可参考这个博文。
1 |
echo cmd | at midnight |
说的就是at这个组件,通常跟cron相提并论,不过at主要用于定时一次性任务,而cron定时周期性任务。
at的参数比较人性化,跟英语语法一样,可以tomorrow, next week之类的,详细的查看手册man at。
1 |
dd if=/dev/dsp | ssh username@host dd of=/dev/dsp |
没错就是实现一个喊话器的功能。
/dev/dsp是Linux下声卡的文件映射(Digital Signal Proccessor),从其中读数据就是录音,往里面写数据就是播放,相当简单!
dd是常用的数据拷贝程序,如果不同时指定if、of,就直接使用stdin/stdout来传输。
如果你没有远程主机,可以试试这样:
1 |
dd if=/dev/dsp of=/dev/dsp |
直接回放麦克风的声音,只是有一点延时。
但是如果有别的程序正在使用声卡,这个方法就不凑效了,因为一般的声卡都不允许多个音频流同时处理,可以借用alsa组件的工具,arecord跟aplay:
1 |
arecord | ssh username@host aplay |
本地回放就是:
1 |
arecord | aplay |
如果你想吓吓别人:
1 |
cat /dev/urandom | ssh username@host aplay |
1 |
mount -t tmpfs -o size=1024m tmpfs /mnt/ram |
这个命令开了一块1G内存来当目录用。不过放心,如果里面没文件,是不会占用内存的,用多少占多少。
不过一般来说没必要手动挂载,因为多数发行版都会在fstab内预留了一个内存目录,挂载在/dev/shm,直接使用即可;
最常见的用途是用内存空间来放Firefox的配置,可以让慢吞吞的FF快很多,参见Shellex的博文:用tmpfs让Firefox在内存中飞驰,以及后来的改进:用tmpfs让Firefox在内存中飞驰II,其中提到的脚本来自speeding up firefox with tmpfs and automatic rsync。
那个破烂LinuxQQ也可以用这个方法,减少因为大量磁盘IO导致的问题。
1 |
ssh user@host cat /path/to/remotefile | diff /path/to/localfile - |
diff通常的用法是从参数读入两个文件,而命令里面的-则是指从stdin读入了。
善用ssh可以让web开发减少很多繁琐,还有比如sshfs,可以从编辑-上传-编辑-上传的人工循环里面解脱出来。
1 |
netstat -tulnp |
Netstat是很常用的用来查看Linux网络系统的工具之一,这个参数可以背下来:
-t: 显示TCP链接信息-u: 显示UDP链接信息-l: 显示监听状态的端口-n: 直接显示ip,不做名称转换-p: 显示相应的进程PID以及名称(要root权限)如果要查看关于sockets更详细占用信息等,可以使用lsof工具。
原文地址:http://msn.huanqiu.com/2010-07/952180.html

Super Sexy CPR 是一个口对口人工呼吸实施心肺复苏的急救教程,不同于我们以往在书本或者科教频道看到的任何教程,这个火辣性感的教程实在让人印象深刻。

1、首先检查四周环境,切勿贸然靠近伤者(如遭电击的伤者);

2、接着试着叫醒伤者确认是否有意识;

3、立刻呼救或打电话求助;

4、看、听、感觉伤者是否有呼吸和心跳;

5、压低额头,抬高下巴,以打开呼吸道;

6、以食指拇指捏住伤者鼻孔,向其嘴中吹气,观察胸部有无起伏;

7、以两边乳头连线中央胸骨处为按压处,双臂伸直十指交叉互相翘起,以手掌掌心按压,速度为每分钟100下,压下深度4-5CM;

8、每按压30次向嘴中吹两口气,并以此为循环反复。若身边有助手,可每5个循环换人施救;

9、反复上述动作直到伤者恢复心跳,人工呼吸则要做到伤者能够自主呼吸或救护人员来到为止(伤者恢复心跳后应立刻停止心脏按压)
Recent Comments