Litblue.net

…游荡在黑夜的灵魂…

Archive for the '技术相关' Category

python中readlines和split配合使用的问题

tempfile = open('./dicttest.txt','r')
lines = tempfile.readlines()
tempfile.close()

for line in lines:
item = line.split('\t')
print item

结果是:

['a@qq.com', '111\n']
['b@qq.com', '4214312\n']
['c@qq.com', '3214\n']
['cc@qq.com', '432\n']
['a@qq.com', '43\n']

list最后一个元素多一个了\n
这显然不是我们要的结果。
解决方案,简单地把\n删除就好了:
tempfile = open('./dicttest.txt','r')
lines = tempfile.readlines()
tempfile.close()

for line in lines:
item = line.strip('\n').split('\t')
print item

posted by blues in 技术相关 and have No Comments

win7:unable to create a new system partition

x200没有光驱,手上只有一个4G的sd卡,于是想到用sd卡做成启动盘去安装。
按网上的教程使用diskpart格好盘,然后把win7的安装文件复制过去。
启动一切正常,结果到了选择分区时出现:Setup was unable to create a new system partition or locate an existing system partition. See the setup log files for more information.
自从rc7100开始装这个就遇到这个错误,当时有winpe在手上,折腾了一会顺利装上了,没想到这回又遇到了,试一下手中的winpe,启动不了。
系统盘被我格式化了,手中唯一一个能引导的就是这个sd卡了。
想啊想。
最后用如下方式搞定。
先用SD卡引导,进入系统修复模式。
格式化系统分区C,然后xcopy 把win7的安装文件都复制到C分区。
同时,把安装文件复制到另外一个非系统安装分区一份。
然后bootsect /nt60 c:
最后重启,这回从硬盘可以引导了。
还是到系统修复模式,格式化C分区。
到另一个有安装文件的分区里运行setup。
剩下就是普通的安装过程了。


大概记录下,省得下次再走弯路。

想不出来是什么问题,为什么一定要从硬盘引导起来才可以顺利安装。

PS:软改bios的方式激活还不错。

posted by blues in 技术相关 and have No Comments

提高工作效率,记住bash和vim的几个快捷键

对我来说最应该记住的就是光标定位
另外有些键能按一个键搞定的就不要去按两个键
毕竟记住一个容易些

bash:

Ctrl-A 相当于HOME键,用于将光标定位到本行最前面
Ctrl-E 相当于End键,即将光标移动到本行末尾
Ctrl-K 用于删除从光标处开始到结尾处的所有字符
Ctrl-L 清屏,相当于clear命令
Ctrl-R 进入历史命令查找状态,然后你输入几个关键字符,就可以找到你使用过的命令
Ctrl-U 用于删除从光标开始到行首的所有字符。一般在密码或命令输入错误时常用
Ctrl-W 用于删除当前光标左侧的一个单词
bind -P命令可以查看所有键盘绑定。

vim:
vim太多了,我只记住几个我一直记不住的定位快捷键

按数字「0」:移到文章的开头。
按「G」:移动到文章的最后。
按「$」:移动到光标所在行的“行尾”。
按「^」:移动到光标所在行的“行首”
按「w」:光标跳到下个字的开头
按「e」:光标跳到下个字的字尾
按「b」:光标回到上个字的开头

posted by blues in 技术相关 and have No Comments

shell脚本中ftp下载函数

downlog()
{
(
echo "open ${1} ${2}";
echo "user ${3} ${4}";
echo "bell"
echo "hash";
echo "binary";
echo "get ${5} ${6}";
echo "close";
echo "bye";
) | ftp -n -i;
};

函数调用
downlog ${Ip} ${Port} ${User} ${Pass} ${FileName} ${LocalName}

当然,如果你是多文件下载,例如做目录同步,建议使用lftp
lftp -u user,passwd -e "mirror -R ‘$path’ –ignore-time –verbose && quit" IP

posted by blues in 技术相关 and have No Comments

openvpn推出OpenVPN-AS

http://www.openvpn.net/index.php/access-server/download-openvpn-as.html
OpenVPN Access Server (OpenVPN-AS) is a set of installation and configuration tools that simplify the rapid deployment of a VPN remote access solution. It is based on the popular OpenVPN open-source software, making the deployed VPN immediately compatible with OpenVPN client software across multiple user platforms.
OpenVPN-AS features include:
■A simple, Web-based Admin UI for configuration and management.
■An easy-to-use, GUI-based OpenVPN Client software package for Windows.
■A Client Web Server that automatically generates a client configuration and a pre-configured Windows VPN Client software installer for the user upon successful login.
■Integration with existing authentication systems using RADIUS, LDAP, and PAM
OpenVPN-AS gives you the broad support and robust security of the OpenVPN open-source software project, coupled with the configuration and management tools needed to deploy the VPN solution easily and quickly.

posted by blues in 技术相关 and have Comment (1)

WL530g-V2与x200的intel 5100AGN网卡兼容性问题

换上x200的第一天回到家
连接上无线后感觉上网非常慢
但我ping任何一个地址延时都很正常
打开网页却响应奇慢

依稀记得在公司的时候无线连接是没有问题的
于是去掉无线路由器
又回到了飞快的感觉

一周后
再次折腾无线路由器
发现只要把路由器无线的规模强制为802.11g
就不会有问题了


还是无线好用
不需要插线不需要拨号

posted by blues in 技术相关 and have No Comments

blog中图片又回来了

自从将url静态化变成http://litblue.net/p/850这样的形式后
blog中的很多图片就无法显示了
原因是我从pjblog转过来的
附件的引用地址是相对地址如”attachments/jpg.jpg”
原来的http://litblue.net/a.asp?850这样的文章中引用是不会有问题的
但现在多了一层“目录”/p/后相对地址出来的图片url就是http://litblue.net/p/attachments/jpg.jpg
执行如下命令,将数据库中的url全部替换一下,搞定了!

UPDATE wp_posts SET post_content=REPLACE(post_content,'\"attachments','\"/attachments');

posted by blues in 技术相关 and have Comments (2)

[转载]netfilter技术分析

  netfilter是由Rusty Russell提出的Linux 2.4内核防火墙框架,该框架既简洁又灵活,可实现安全策略应用中的许多功能,如数据包过滤、数据包处理、地址伪装、透明代理、动态网络地址转换(Network Address Translation,NAT),以及基于用户及媒体访问控制(Media Access Control,MAC)地址的过滤和基于状态的过滤、包速率限制等。
  1.1 netfilter框架
  netfilter提供了一个抽象、通用化的框架[1],作为中间件,为每种网络协议(IPv4、IPv6等)定义一套钩子函数。Ipv4定义了5个钩子函数,这些钩子函数在数据报流过协议栈的5个关键点被调用,也就是说,IPv4协议栈上定义了5个“允许垂钓点”。在每一个“垂钓点”,都可以让netfilter放置一个“鱼钩”,把经过的网络包(Packet)钓上来,与相应的规则链进行比较,并根据审查的结果,决定包的下一步命运,即是被原封不动地放回IPv4协议栈,继续向上层递交;还是经过一些修改,再放回网络;或者干脆丢弃掉。
  Ipv4中的一个数据包通过netfilter系统的过程如图1所示。
  图1 Netfilter的功能框架
  1.2 netfilter的关键技术
  netfilter主要采用连线跟踪(Connection Tracking)、包过滤(Packet Filtering)、地址转换、包处理(Packet Mangling)4种关键技术。
  1.2.1 连线跟踪
  连线跟踪是包过滤、地址转换的基础,它作为一个独立的模块运行。采用连线跟踪技术在协议栈低层截取数据包,将当前数据包及其状态信息与历史数据包及其状态信息进行比较,从而得到当前数据包的控制信息,根据这些信息决定对网络数据包的操作,达到保护网络的目的。
  当下层网络接收到初始化连接同步(Synchronize,SYN)包,将被netfilter规则库检查。该数据包将在规则链中依次序进行比较。如果该包应被丢弃,发送一个复位(Reset,RST)包到远端主机,否则连接接收。这次连接的信息将被保存在连线跟踪信息表中,并表明该数据包所应有的状态。这个连线跟踪信息表位于内核模式下,其后的网络包就将与此连线跟踪信息表中的内容进行比较,根据信息表中的信息来决定该数据包的操作。因为数据包首先是与连线跟踪信息表进行比较,只有SYN包才与规则库进行比较,数据包与连线跟踪信息表的比较都是在内核模式下进行的,所以速度很快。
  1.2.2 包过滤
  包过滤检查通过的每个数据包的头部,然后决定如何处置它们,可以选择丢弃,让包通过,或者更复杂的操作。
  1.2.3 地址转换
  网络地址转换源(NAT)分为(Source NAT,SNAT)和目的NAT(Destination NAT, DNAT)2种不同的类型。SNAT是指修改数据包的源地址(改变连接的源IP)。SNAT会在数据包送出之前的最后一刻做好转换工作。地址伪装(Masquerading)是SNAT的一种特殊形式。DNAT 是指修改数据包的目标地址(改变连接的目的IP)。DNAT 总是在数据包进入以后立即完成转换。端口转发、负载均衡和透明代理都属于DNAT。
  1.2.4 包处理
  利用包处理可以设置或改变数据包的服务类型(Type of Service, TOS)字段;改变包的生存期(Time to Live, TTL)字段;在包中设置标志值,利用该标志值可以进行带宽限制和分类查询

posted by blues in 技术相关 and have No Comments

强大的awk

一直都知道awk是一个很强大的东西
但是一直都没有太多机会去使用
这几天一个离职跳去Tencent的同事在QQ问我一些问题
仔细一想
这不正是当初Tencent笔试的题目吗
看来Tencent的笔试还算实在
都是平时工作遇到最多的问题拿出来考

趁机学习了一下搞懂了当初笔试没弄明白的一个问题

有下面一个文本,包含两个字段,邮箱、发送邮件字节数,分别求出每个邮箱发送字节数总和及平均数
a.txt

42116 tengxun@qq.com
41288 tengyzw@qq.com
41017 tengxun@qq.com
489389 abc@qq.com
848 fkj@qq.com
322 abc@qq.com
904 fkj@qq.com

如果不用关联数组
你可以把不同的邮箱记录提取到不同的文件中然后求和及平均,显然这很麻烦
awk一条命令搞定
cat a.txt |awk ‘{sum[$2]+=$1;count[$2]++}END{for (i in sum) print i,sum[i], sum[i]/count[i] }’
这条简短的语句包含了很多功能,sum[$2]+=$1创建了一个以邮箱字符串为索引的数组并且把不同邮箱的发送字节数求和,count[$2]++则对邮箱出现的次数做了计数相当于uniq -c。
显示结果如下:第一列为邮箱名 第二列为和发送字节数总和 第三列为平均字节数
abc@qq.com 489711 244856
tengyzw@qq.com 41288 41288
tengxun@qq.com 83133 41566.5
fkj@qq.com 1752 876

posted by blues in 技术相关 and have No Comments

HTTP 状态代码

作为一个互联网运维工程师
与http协议打交道和吃饭一样频繁
了解这些有助于更快速地判断故障

HTTP 状态代码

如果某项请求发送到您的服务器要求显示您网站上的某个网页(例如,用户通过浏览器访问您的网页或 Googlebot 抓取网页时),服务器将会返回 HTTP 状态代码以响应请求。

此状态代码提供关于请求状态的信息, 告诉 Googlebot 关于您的网站和请求的网页的信息。

一些常见的状态代码包括:

  • 200 – 服务器成功返回网页
  • 404 – 请求的网页不存在
  • 503 – 服务器暂时不可用

下面提供 HTTP 状态代码的完整列表。 点击链接可了解详情。 您也可以访问有关 HTTP 状态代码的 W3C 网页以获得更多信息

1xx(临时响应)
表示临时响应并需要请求者继续执行操作的状态代码。

代码 说明
100(继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。
101(切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。

2xx(成功)

表示服务器成功处理了请求的状态代码。

代码 说明
200(成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。 如果针对您的 robots.txt 文件显示此状态,则表示 Googlebot 已成功检索到该文件。
201(已创建) 请求成功并且服务器创建了新的资源。
202(已接受) 服务器已接受请求,但尚未处理。
203(非授权信息) 服务器已成功处理了请求,但返回的信息可能来自另一来源。
204(无内容) 服务器成功处理了请求,但没有返回任何内容。
205(重置内容) 服务器成功处理了请求,但没有返回任何内容。 与 204 响应不同,此响应要求请求者重置文档视图(例如,清除表单内容以输入新内容)。
206(部分内容) 服务器成功处理了部分 GET 请求。

3xx(重定向)
要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。 Google 建议您在每次请求中使用重定向不要超过 5 次。 您可以使用网站管理员工具查看一下 Googlebot 在抓取重定向网页时是否遇到问题。 诊断下的网络抓取页面列出了由于重定向错误而导致 Googlebot 无法抓取的网址。

代码 说明
300(多种选择) 针对请求,服务器可执行多种操作。 服务器可根据请求者(用户代理)选择一项操作,或提供操作列表供请求者选择。
301(永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。 您应使用此代码告诉 Googlebot 某个网页或网站已永久移动到新位置。
302(暂时移动) 服 务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。 此代码与响应 GET 或 HEAD 请求的 301 代码类似,会自动将请求者转到不同的位置,但您不应使用此代码来告诉 Googlebot 某个网页或网站已经移动,因为 Googlebot 会继续抓取原有位置并编入索引。
303(查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。 对于除 HEAD 之外的所有请求,服务器会自动转到其他位置。
304(未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。

如果网页自请求者上次请求后再也没有更改过,您应当将服务器配置为返回此响应(称为 If-Modified-Since HTTP 标头)。 由于服务器可以告诉 Googlebot 自从上次抓取后网页没有更改过,因此可节省带宽和开销

305(使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。
307(暂时重定向) 服 务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。 此代码与响应 GET 和 HEAD 请求的 301 代码类似,会自动将请求者转到不同的位置,但您不应使用此代码来告诉 Googlebot 某个页面或网站已经移动,因为 Googlebot 会继续抓取原有位置并编入索引。

4xx(请求错误)
这些状态代码表示请求可能出错,妨碍了服务器的处理。

代码 说明
400(错误请求) 服务器不理解请求的语法。
401(未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。
403(禁止) 服务器拒绝请求。 如果您看到 Googlebot 在尝试抓取您网站上的有效网页时收到此状态代码(可以在 Google 网站管理员工具诊断下的网络抓取页面上看到此信息),可能是您的服务器或主机拒绝 Googlebot 访问。
404(未找到) 服务器找不到请求的网页。 例如,如果请求服务器上不存在的网页,服务器通常会返回此代码。

如果您的网站上没有 robots.txt 文件,而您在 Google 网站管理员工具”诊断”标签的 robots.txt 页上看到此状态,那么这是正确的状态。 但是,如果您有 robots.txt 文件而又看到此状态,则说明您的 robots.txt 文件可能命名错误或位于错误的位置 (该文件应当位于顶级域名,名为 robots.txt)。

如果您看到有关 Googlebot 尝试抓取的网址的此状态(在”诊断”标签的 HTTP 错误页上),则表示 Googlebot 追踪的可能是另一个页面的无效链接(是旧链接或输入有误的链接)。

405(禁用的方法) 禁用请求中指定的方法。
406(不可接受) 无法使用请求的内容特性响应请求的网页。
407(需要代理授权) 此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理。 如果服务器返回此响应,还会指明请求者应当使用的代理。
408(请求超时) 服务器等候请求时发生超时。
409(冲突) 服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息。 服务器在响应与前一个请求相冲突的 PUT 请求时可能会返回此代码,同时会附上两个请求的差异列表。
410(已删除) 如果请求的资源已永久删除,服务器就会返回此响应。 该代码与 404(未找到)代码相似,但在资源以前存在而现在不存在的情况下,有时会用来替代 404 代码。 如果资源已永久删除,您应当使用 301 指定资源的新位置。
411(需要有效长度) 服务器不接受不含有效内容长度标头字段的请求。
412(未满足前提条件) 服务器未满足请求者在请求中设置的其中一个前提条件。
413(请求实体过大) 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。
414(请求的 URI 过长) 请求的 URI(通常为网址)过长,服务器无法处理。
415(不支持的媒体类型) 请求的格式不受请求页面的支持。
416(请求范围不符合要求) 如果页面无法提供请求的范围,则服务器会返回此状态代码。
417(未满足期望要求) 服务器未满足”期望”请求标头字段的要求。

5xx(服务器错误)
这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错。

代码 说明
500(服务器内部错误) 服务器遇到错误,无法完成请求。
501(尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。
502(错误网关) 服务器充当网关或代理,从上游服务器收到无效响应。
503(服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。
504(网关超时) 服务器充当网关或代理,但没有及时从上游服务器收到请求。
505(HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。

posted by blues in 技术相关 and have No Comments