阿辉的博客

系统 网络 集群 数据库 分布式云计算等 研究

vim 关闭自动注释

在centOS 6和7上,vim默认开启了自动注释,当我们想复制一段文本,而这个文本内其中一行带有#号时,从这一行开始,下面就会每一行都多一个#号,非常的不方便。

可以用以下命令将其关闭:
:set fo-=r
再度开启的命令为:
:set fo=r

PS:
关闭自动缩进(这个对C/C++代码好像无效)
:set noautoindent
关闭C语言缩进:
:set nocindent
再 Shift + Insert

恢复:

:set autoindent
:set cindent

启动生效请修改vimrc文件

参考:https://vim.fandom.com/wiki/Disable_automatic_comment_insertion

linux 使用curl命令访问url并模拟cookie

1.目录

linux下通过命令访问url的方式有多种,主要如下

2.1.elinks

elinks – lynx-like替代角色模式WWW的浏览器

例如: elinks –dump http://www.baidu.com

2.1.2.wget

这个会将访问的首页下载到本地

[root@el5-mq2 ~]# wget http://www.baidu.com

3.3.curl

curl会显示出源码

curl http://www.baidu.com/index.html

4.4.lynx

lynx http://www.baidu.com

5.5.curl使用实践

现在有个需求,因为服务器在收集访问数据,抓取cookie中的value,模拟url访问时需要带上cookie参数,curl命令刚好能完成这个功能。
首先查看帮助:
curl -h
 -b/–cookie <name=string/file> Cookie string or file to read cookies from (H)
 -c/–cookie-jar <file> Write cookies to this file after operation (H)
    –create-dirs   Create necessary local directory hierarchy
    –crlf          Convert LF to CRLF in upload
    –crlfile <file> Get a CRL list in PEM format from the given file
可以使用-b参数来完成,具体使用如下:
  curl –b “key1=val1;key2=val2;”
或直接使用文件
curl -b ./cookie.txt
编写测试实例:
curl -b “user_trace_token=20150518150621-02994ed9a0fb42d1906a56258e072fc4;LGUID=20150515135257-a33a769c-fac6-11e4-91ce-5254005c3644” http://10.10.26.164:1235/click?v=1&logtype=deliver&position=home_hot-0&orderid=10197777&userid=1942556&positionid=148&url=http%3a%2f%2fwww.lagou.com%2fjobs%2f317000.html%3fsource%3dhome_hot%26i%3dhome_hot-5&fromsite=http%3a%2f%2fwww.lagou.com%2fzhaopin%2fAndroid%3flabelWords%3dlabel%26utm_source%3dAD__baidu_pinzhuan%26utm_medium%3dsem%26utm_campaign%3dSEM&optime=2015-06-15_20:00:00
发现这样还是不可以,url附带的参数取不到。使用-d 参数传递url参数,使用-G 把请求方式配置为GET就OK了,如下:
curl -b “user_trace_token=20150518150621-02994ed9a0fb42d1906a56258e072fc4;LGUID=20150515135257-a33a769c-fac6-11e4-91ce-5254005c3644;LGSID=20150518150621-02994ed9a0fb42d1906a56258e072fc4;LGRID=20150617230732-4ea87972-1580-11e5-9a88-000c29653e90;” -d “v=1&logtype=deliver&position=i_home-1&orderid=10197777&userid=1942556&positionid=148&url=http%3a%2f%2fwww.lagou.com%2fjobs%2f317000.html%3fsource%3dhome_hot%26i%3dhome_hot-5&fromsite=http%3a%2f%2fwww.lagou.com%2fzhaopin%2fAndroid%3flabelWords%3dlabel%26utm_source%3dAD__baidu_pinzhuan%26utm_medium%3dsem%26utm_campaign%3dSEM&optime=2015-06-15_20:00:00”    -G  http://10.10.26.164:1235/click
想要获得response返回的cookie怎么办,使用’-c’参数,同时可以使用-b filename用文件方式表示cookie,配合-c使用更方便
可以先用-c 命令生成一个cookie文件作为模板,再修改这个文件作为-b 参数的文件名。
使用如下:
curl -b c1.txt -c c2.txt -d “v=1&_v=j31&a=406405635&t=pageview&_s=1&dr=http%3a%2f%2fwww.sogou.com%2ftuguang&dl=http%3A%2F%2Fwww.lagou.com%2F%3futm_source%3dad_sougou_pingzhuan&ul=zh-cn&de=UTF-8&dt=%E6%8B%89%E5%8B%BE%E7%BD%91-%E6%9C%80%E4%B8%93%E4%B8%9A%E7%9A%84%E4%BA%92%E8%81%94%E7%BD%91%E6%8B%9B%E8%81%98%E5%B9%B3%E5%8F%B0&sd=24-bit&sr=1600×900&vp=1583×291&je=1&fl=18.0%20r0&_u=MACAAAQBK~&jid=&cid=1312768212.1431333683&tid=UA-41268416-1&z=1204746223”    -G  http://192.168.52.130:1234/collect
生成的c2.txt内容如下:
# Netscape HTTP Cookie File
# http://curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.192.168.52.130 FALSE / FALSE 1757574737 user_trace_token 20150914151217-eedd019e-5aaf-11e5-8a69-000c29653e90
192.168.52.130 FALSE / FALSE 1442217595 LGSID 20150914152955-652a13c5-5ab2-11e5-846d-000c29653e90
192.168.52.130 FALSE / FALSE 1442217595 PRE_UTM
192.168.52.130 FALSE / FALSE 1442217595 PRE_HOST www.huxiu.com
192.168.52.130 FALSE / FALSE 1442217595 PRE_SITE http%3A%2F%2Fwww.huxiu.com%2Ftuguang
192.168.52.130 FALSE / FALSE 1442217595 PRE_LAND http%3A%2F%2Fwww.lagou.com%2F%3F
192.168.52.130 FALSE / FALSE 0 LGRID 20150914152955-652a1630-5ab2-11e5-846d-000c29653e90
192.168.52.130 FALSE / FALSE 1757574737 LGUID 20150914151217-eedd0624-5aaf-11e5-8a69-000c29653e90

转载:AI 数据 » linux 使用curl命令访问url并模拟cookie

pip安装报SSLError: The read operation timed out的问题

在windows 上安装python的模块有时报错:

C:Usersluohui>pip install zope.interface
Downloading/unpacking zope.interface
Cleaning up…
Exception:
Traceback (most recent call last):
File “C:Python27libsite-packagespip-1.5.6-py2.7.eggpipbasecommand.py”, l
ine 122, in main
status = self.run(options, args)
File “C:Python27libsite-packagespip-1.5.6-py2.7.eggpipcommandsinstall.p
y”, line 278, in run
requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundl
e=self.bundle)
File “C:Python27libsite-packagespip-1.5.6-py2.7.eggpipreq.py”, line 1197
, in prepare_files
do_download,
File “C:Python27libsite-packagespip-1.5.6-py2.7.eggpipreq.py”, line 1375
, in unpack_url
self.session,
File “C:Python27libsite-packagespip-1.5.6-py2.7.eggpipdownload.py”, line
572, in unpack_http_url
download_hash = _download_url(resp, link, temp_location)
File “C:Python27libsite-packagespip-1.5.6-py2.7.eggpipdownload.py”, line
433, in _download_url
for chunk in resp_read(4096):
File “C:Python27libsite-packagespip-1.5.6-py2.7.eggpipdownload.py”, line
421, in resp_read
chunk_size, decode_content=False):
File “C:Python27libsite-packagespip-1.5.6-py2.7.eggpip_vendorrequestsp
ackagesurllib3response.py”, line 240, in stream
data = self.read(amt=amt, decode_content=decode_content)
File “C:Python27libsite-packagespip-1.5.6-py2.7.eggpip_vendorrequestsp
ackagesurllib3response.py”, line 187, in read
data = self._fp.read(amt)
File “C:Python27libhttplib.py”, line 567, in read
s = self.fp.read(amt)
File “C:Python27libsocket.py”, line 380, in read
data = self._sock.recv(left)
File “C:Python27libssl.py”, line 246, in recv
return self.read(buflen)
File “C:Python27libssl.py”, line 165, in read
return self._sslobj.read(len)
SSLError: The read operation timed out

Storing debug log for failure in C:Usersluohuipippip.log (更多…)

使用php或python连接DB2的配置

最近写的一个程序需要连接一个DB2的数据库上去,配置环境的时候走了不少弯路,看了N多文档,搞了近两天,终于搞好了,在这里记录下:

先说明:系统是centos linux 5.x,64位,系统上的php是5.3,python的版本我有安装python 2.6的。

1)安装IBM Data Server Driver Package (DS Driver)

下载地址:https://www-304.ibm.com/support/docview.wss?uid=swg27016878

我下载下来的包名是:v10.5fp3_linuxx64_dsdriver.tar.gz

tar xvzf v10.5fp3_linuxx64_dsdriver.tar.gz
mkdir /opt/ibm
cp dsdriver /opt/ibm/
cd /opt/ibm/dsdriver./installDSDriver

(更多…)

centos 5上python 2.6版本的easy_install安装

cenots linux 5.x上默认安装的python版本是2.4.3。现在很多python脚本和模块已经不支持python 2.4的版本了,想用那些模块就需要升级到python 2.6以上。但是centos linux 5.x上的很多软件如yum都是基于python 2.4开发的,把系统自带的python直接升级到python 2.6,会造成yum等这些都不能使用。所以不能这么干,得在一个操作系统上安装两个或多个python版本。

在epel的yum源上,已经有做好的python26包。先加上epel源,再直接 yum安装就行。

yum install python26 python26-devel

直接运行python26命令就是新版本的python,系统上的python命令还是2.4的版本。

(更多…)

shell 引号 转义符 通配符 特殊字符

最近脚本写得比较多,这文章转过来,写得很系统。
shell中引号的使用方法
shell使用引号(单引号/双引号)和反斜线(“”)用于向shell解释器屏蔽一些特殊字符.
shell转义符有三种,不只是 。 单引号、双引号、反斜杠。
‘’(单引号) 又叫硬转义,其内部所有的shell 元字符、通配符都会被关掉。注意,硬转义中不允许出现’(单引号)。
“”(双引号) 又叫软转义,其内部只允许出现特定的shell 元字符:$用于参数代换 `用于命令代替
(反斜杠)   又叫转义,去除其后紧跟的元字符或通配符的特殊意义。

shell常见 通配符:*  ?  [ ]  { }

字符 含义 实例
* 匹配 0 或多个字符 a*b  a与b之间可以有任意长度的任意字符, 也可以一个也没有, 如aabcb, axyzb, a012b, ab。
? 匹配任意一个字符 a?b  a与b之间必须也只能有一个字符, 可以是任意字符, 如aab, abb, acb, a0b。
[list]  匹配 list 中的任意单一字符 a[xyz]b   a与b之间必须也只能有一个字符, 但只能是 x 或 y 或 z, 如: axb, ayb, azb。
[!list] 匹配 除list 中的任意单一字符 a[!0-9]b  a与b之间必须也只能有一个字符, 但不能是阿拉伯数字, 如axb, aab, a-b。
[c1-c2]

PYTHON包安装时发生Unable to find vcvarsall.bat的解决办法 (转)

今天遇到了这个方面的问题,目前找到两种办法。一种是换编译器如mingw,另一种是装vc。第一种方法没成功,现在正在等第二种。

第一种:

首先安装MinGW;

把MinGW的路径添加到环境变量path中,比如MinGW安装在D:MinGW中,就把D:MinGWbin添加到path中;

打开命令行窗口,在命令行窗口中进入到要安装代码的目录下;

输入如下命令就可以安装了。setup.py install build –compiler=mingw32
(更多…)

Vim 的纵向编辑模式(转)

本文转自:http://www.ibm.com/developerworks/cn/linux/l-cn-vimcolumn/index.html?ca=drs-

开始之前

人类大脑对文字的处理是平面式的,所以我们浏览文章、查找资料或者重构代码,要么是横向读,要么是纵向读,要么使用搜索功能,将文字作为一个平面整体。而在编辑文字、编写代码的时候则不是横向就是纵向。常规文本编辑器都是横向编辑,而纵向编辑也常被作为特色功能。比如 Vim、EditPlus、UltraEdit 这些编辑器都有纵向编辑模式,或者称为列模式。像日常文字处理工具 MicroSoft Word、OpenOffice Writer 也可以通过按下功能键 ALT,实现纵向选中文本,然后对文本进行操作。纵向编辑不仅是编辑器的一种功能,更是人们思考问题的一种方式,项目符号、段落编号,都是纵向编辑的体现。

Vim 的纵向编辑模式启动方便,使用灵活,还可以配合上插件实现很实用的高级功能。


启动方法

在 Vim 命令模式下,移动游标定位于某一个位置,键入 ctrl-v后状态栏上出现 VISUAL BLOCK 字样,即进入纵向编辑模式。移动游标以按需选择待编辑的区域。注意:在 Windows 版本的 Vim 中,键组合 ctrl-v通常被映射为文本粘贴,所以 Window 版的 Vim 的纵向编辑模式由 ctrl-q启动。当然灵活的 Vim 也可以由用户自行定义组合键。


示例 1:纵向编辑在批量修改代码的应用演示

将数列:

10.1.5.214 10.1.5.212 10.1.5.210

编辑成序列:

ping -c 4 10.5.5.214 >> result0 ping -c 4 10.5.5.212 >> result0 ping -c 4 10.5.5.210 >> result0

这是一个将 IP 数列修改成可执行的 ping 命令序列的过程。

第一步:修改

将 IP 数列中第二段所有数字“1” 修改为“5”:

将游标定位第一个行 IP 地址第二段的“1”

ctrl-v 进入纵向编辑模式

G 移动游标到最后一行,可视块覆盖所要修改的列

r 进入修改模式

5 输入数字“5”

ESC 退出纵向编辑模式,同时所有被选中的数字都被改成了“5”,并回到命令模式

结果如下:

10.5.5.214 10.5.5.212 10.5.5.210

第二步:前添加

在所有行之前添加“ping – c 4 ”:

将游标定位到第一行第一列

ctrl-v 进入纵向编辑模式

G 移动游标到最后一行第一列,可视块覆盖了第一列

I 进入行首插入模式

ping -c 4 输入所要求字符“ping – c 4 ”

ESC 退出纵向编辑模式的同时所有选中的字符前都添加了“ping – c 4 ”,回到命令模式

结果如下:

ping -c 4 10.5.5.214 ping -c 4 10.5.5.212 ping -c 4 10.5.5.210

第三步:后添加

在所有行之后添加“>> result0”:

将游标定位到第一行最后一列

ctrl-v 进入纵向编辑模式

G 移动游标到最后一行最后一列,VISUAL   BLOCK  覆盖了最后一列

A 进入行尾插入模式

>> result 输入所要求字符“>> result0”

ESC 退出纵向编辑模式的同时所有选中的字符后都添加了“ >> result0”,回到命令模式

结果如下:

ping -c 4 10.5.5.214 >> result0 ping -c 4 10.5.5.212 >> result0 ping -c 4 10.5.5.210 >> result0

以上三个步骤有一个共同特点,就是都纵向为编辑方向。以上由三行代码为例的方法同样也可以适用于更多的行。


VisIncr 安装与操作

以上例子中所演示的对代码的纵向编辑,通过一般的代码重构功能或者结合正则表达式的查找替换也可以实现。然而 Vim 的纵向编辑模式还可以通过插件 VisIncr 的扩展,实现更丰富的功能,如纵向的生成数列。

Vim 的官方网站上搜索找到 VisIncr 插件的安装文件,并下载到 Vim 工作目录。执行以下命令即可安装该插件:

vim visincr.vba.gz :so % :q

操作方法以示例 1 的代码为例:

使用 ctrl-v和移动光标选择最后都为数字“0”的一列

:键入冒号触发 Vim 进入命令行模式

:I以第一个数字为出发点,纵向生成增量数列,幅度为 1

ENTER 键入驾车键执行命令

结果如下:

ping -c 4 10.5.5.214 >> result0 ping -c 4 10.5.5.212 >> result1 ping -c 4 10.5.5.210 >> result2

示例 2:VisIncr 在生成测试数据的应用演示

在应用程序开发过程中经常要生成一个简单有规律的测试数据。比如对一张表:

testTable (”ipaddr” ,”filename”, ”owner”)

生成如下 SQL 语句:

insert into test values("10.5.5.214”,”result0”,”testa”); insert into test values(”10.5.5.212”,”result1”,”testb”); insert into test values(”10.5.5.210”,”result2”,”testc”);

这个纵向有规律的语句序列,可以借助 VinIncr 应用纵向编辑功能来构造。

第一步:准备

打开一个新的 Vim 编辑页面,在命令模式下先输入一个“3”,然后键入“i”进入编辑模式。数字“3”代表本次输入的内容会重复输 3 遍。

在 VIM 中先输入第一行:

insert into test values(”10.5.5.214”,”result0”,”testa”);

以回车结束行输入并新开一行,按 ESC 键退出编辑模式。

如果如下:

insert into test values(”10.5.5.214”,”result0”,”testa”); insert into test values(”10.5.5.214”,”result0”,”testa”); insert into test values(”10.5.5.214”,”result0”,”testa”);

第二步:构造递减数列

对于 ipaddr 列,使用 ctrl-v和移动光标选择 IP 地址最后一段以 2 为幅度递减的部分:

: 键入冒号触发 Vim 进入命令行模式

:I -2 以第一个数字为出发点,纵向生成递减数列,幅度为 2

ENTER 键入驾车键执行命令

结果如下:

insert into test values(”10.5.5.214”,”result0”,”testa”); insert into test values(”10.5.5.212”,”result0”,”testa”); insert into test values(”10.5.5.210”,”result0”,”testa”);

第三步:构造递增数列

对于 filename 列,使用上一节介绍的方式,结果如下:

insert into test values(”10.5.5.214”,”result0”,”testa”); insert into test values(”10.5.5.212”,”result1”,”testa”); insert into test values(”10.5.5.210”,”result2”,”testa”);

第四步:构造字母递增数列

对于 owner 列,使用 ctrl-v和移动光标选择英文字母将要递增的部分。

: 键入冒号触发 Vim 进入命令行模式

:IA 以第一个字母为出发点,纵向生成按字母表排序的序列

ENTER 键入回车键执行命令

结果如下:

insert into test values(”10.5.5.214”,”result0”,”testa”); insert into test values(”10.5.5.212”,”result1”,”testb”); insert into test values(”10.5.5.210”,”result2”,”testc”);

以上步骤即演示了借助 Vim 插件 VisIncr 对代码的纵向编辑,生成在纵向有逻辑规律的数列。


总结

Vim 不仅是一个编辑工具还是一套思考方法,Vim 有很多引导思维方向的技巧,让 Vim 在这个各种编辑器层出不穷的时候历久弥新。本文从纵向编辑为切入点,结合 VisIncr 演示了开发、测试过程中可以使用的实例。

参考资料

学习

要了解有关 Vim 编辑器及其众多特性的更多内容,请访问 Vim 主页

查看在 Vim 网站的 VisIncr 页面

developerWorks Linux 专区寻找为 Linux 开发人员(包括 Linux 新手入门)准备的更多参考资料,查阅我们 最受欢迎的文章和教程

在 developerWorks 上查阅所有 Linux 技巧Linux 教程

随时关注 developerWorks 技术活动网络广播

讨论

欢迎加入 developerWorks 中文社区

作者简介

张曜民是一名软件工程师,目前从事数据中心解决方案的前期研究工作。在这之前,张从事过软件开发,软件测试,并创办过机械工厂及商务咨询公司。张业余时间喜欢阅读、烹饪、太极拳。

卢丹,IBM CDL 软件工程师,所在团队目前从事 WAS CE/Apache Geronimo 产品相关的开发及测试工作。活跃于 Apache 开源社区。

shell脚本测试多服务器网络速度

经常需要对多台服务器进行测试,以便选择对我们最优的服务器使用,需测的服务器不多时,手工跑跑就行了,但到几十上百台的时候,就需要写个脚本了。

服务器测试的url为:http://server/speedtesting.zip,speedtesting.zip文件需要上传到服务器上。

/root/shell/vpn.txt文件内存放服务器的域名,一行一个。

测试结果存放在:/root/shell/result.txt

脚本如下:

#!/bin/sh

vpnlist="/root/shell/vpn.txt"
testfile="/speedtesting.zip"
result="/root/shell/result.txt"

echo "" > $result

cat $vpnlist | while read vpnserver
do
        url="http://$vpnserver$testfile"
        wget -o /tmp/vpn.log $url -O /dev/null

        speed=`cat /tmp/vpn.log | grep ‘saved’ | awk -F ‘{print $3}’ | cut -c2-`
        unit=`cat /tmp/vpn.log | grep ‘saved’ | awk -F ‘{print $4}’ | cut -c-2`

        if [ "$unit" == "MB" ]; then
                speed=`echo $speed*1024 | bc`
                unit="KB"
        fi

        echo "$url      $speed $unit/s" >> $result
        echo "$url      $speed $unit/s"

done

echo "VPN speed test finish,sort result display:"

cat $result | sort -k2 -rn