I am LAZY bones ? all linux

分类: '备忘' 的归档

python里强大的re模块

今天遇到一个小问题,用脚本把某web页面抓取下来时,里面的中文都是类似”帮助”这样的格式.这当然不是我想要的,我需要把它转化为可读的汉字.
为了解决这个问题,首先要用到内建函数unichr:
unichr(24110) 能得到”帮”字, unichr(21161) 能到”助”字,问题是我怎么批量吧html里面的所有 &#nnnnn; 替换掉呢?
干这类事情当然需要正则表达式了,于是,去翻re的文档,还真让我给找到了,方法如下:

1
2
3
4
5
6
7
8
9
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re
 
str='<a href="/music/html/faq.html">&#24110;&#21161;</a>'
def unistr(m):
    return unichr(int(m.group(0)[2:-1]))
 
print re.sub(r'&#[0-9]{5};',unistr,str)

运行这段示例代码就可以得到我想要的结果了,哈哈.
觉得python的这个re好强大,居然替换字符串还可以是个函数…太佩服这个设计了.

mldonkey相关备忘

其实,比起 BT/ED2K/迅雷 等P2P的下载方式,我更喜欢传统的ftp. 但是ftp里面不是什么都能下载到的,最近想下载一些老电影,于是还是用上了mldonkey.
EE的blog里搜出来一些东西,不过这家伙的写东西基本上都看不懂而且也不能用的,呵呵,改了改,基本上好了.如下:
先是按需启动mlnet,建立一个 autostart.sh ,chmod +x 以后,加到gnome的会话里面(这样以后有其他需要自启动的东西也方便了),内容如下:

#!/bin/sh
ls ~/.mldonkey/temp/* >/dev/null 2>&1 && mlnet &

这样,只要有未下载完成的内容,都会在登录系统的时候打开mlnet,避免忘记开而浪费时间了.
另外,加这个alias到.bashrc,可以方便地查看下载状态:

alias m='pgrep mlnet >/dev/null 2>&1 && echo vd | nc -q 1 localhost 4000 | awk '"'"'/\[D/{print "\033[0;32m"$7"\t\033[4;31m"$8"%\033[0m\t",$14"KB/s"} /Down:/'"'"

效果如图:
alias效果

=======090121补充firefox关联ed2k到mldonkey的方法========
建立一个脚本文件(我的叫 ed2kml ),内容为:

#!/bin/sh
echo dllink $* | nc -q 1 127.0.0.1 4000

加上可执行权限,然后,firefox的地址栏里输入 about:config ,在里面新建一个布尔型的键,名字为 network.protocol-handler.external.ed2k ,值为true,再建一个字符串型键, 名为 network.protocol-handler.app.ed2k 值为 ed2kml 的绝对路径.
打开mldonkey以后,在firefox里点击一个ed2k链接,firefox会弹出一个选择连接的窗口,记住不要使用默认的,点”其他程序”,再定位到刚才的ed2kml,确定就可以了.可以勾选记住设置,以后就直接点链接就行了.

抓了所有中国手机号段的数据

由于工作需要,我最近要查询大量手机号码的归属地,而本地又没有手机号段-归属地的映射数据,所以随手写了行脚本,运行了N个小时后,终于抓回了166000行的数据.包括13*,151*,1530-1535,155-156,1571,158-159号段的归属地信息.因为据我考查,目前的所有手机号码都应该在以上号段里面,当前的仍在广告中的188和189号段的数据也都还查不到,以后出了,我想我会再更新的.
对了,数据来自手机在线,感谢一下.命令就简单的一行:

for i in `seq 1350000 1350009`; do echo $i `curl -s "http://api.showji.com/Locating/default.aspx?m=$i&output=json&callback=querycallback" | awk -F "[,:\"]+" '{if($9!="PostCode")print $7,$9,$11,$13,$15,$17}'`; done

改一下seq的值就可以得到不同段的结果,但不推荐再大号段地抓数据了,毕竟人家的服务器和流量也是要钱的,如果需要数据的话,从这里下载我抓好的,嘿嘿.

笔记本显示器屏保和电源管理完美解决方案

本文要实现的目标: 完美控制笔记本LCD的屏保和黑屏,具体地说是实现

1. 平时键鼠10分钟无动作,将LCD转入屏保;15分钟无动作,将LCD彻底断电
2. mplayer看电影的时候,持续不屏保不断电.
3. 按下 ctrl+alt+L 的时候,立即锁住屏幕并将LCD断电.

适用人群: linux用户(废话,我没条件测试BSD和其他*nux),gnome用户,compiz用户,用命令行启动mplayer的用户.当然如果不全符合,部分内容也是可以参考的,比如双击电影文件打开mplayer的用户,可以自己修改文件的打开方式;非compiz用户可以用其他方式绑定命令等.

步骤:

1. 在 /etc/X11/xorg.conf 文件的 Section “ServerLayout” 一节里,加上一行 Option “OffTime” “180″ 数值也可以更大些,避免X的影响.
2. 在 ~/bin 下建立一个名为 mplayer 的可执行shell脚本,并把 ~/bin 加入$PATH,位置要在 /usr/bin 前面,不然就自己换名字吧.
脚本内容如下:

#!/bin/sh
 
gnome-screensaver-command -i -n "mplayer" -r "看电影呢!" &
/usr/bin/mplayer "$@"
mreturn=$?
kill %
exit $mreturn

3. 系统 – 首选项 – 键盘快捷键 里面取消”锁住屏幕”的键盘绑定.
4. 打开ccsm,在 General Options – Commands 里面,添加一个 ctrl+alt+l 键的绑定,命令如下:

gnome-screensaver-command -l; sleep 3; xset dpms force off

5. 系统 – 首选项 – 屏幕保护程序,将主题选为”黑屏”(当然看个人爱好,我觉得花CPU去绘制屏保,是种浪费,就选黑屏了).
6. 系统 – 首选项 – 电源管理,设置成15分钟后将显示器转入睡眠.
7. 完成了,哈哈~

一些解释和废话:
此方案里用到了 gnome-screensaver 的控制程序 gnome-screensaver-command ,我觉得很不错,不知道 xscreensaver 和 kscreensaver 是不是也有相应的命令,有的话KDE用户也可以用此方案了.
控制电源,用到了 xset ,没有安装的朋友请自行搞定安装.
mplayer的1.0rc2版本,号称有可以停掉 xscreensaver 甚至 gnome-screensaver 的选项,但根据我的试验,都无效,可能是因为的是SVN版本的mplayer的关系吧.所以不得不自己写个脚本搞定,脚本用于替换 mplayer ,如果你喜欢也可以简写成 mp 之类的.
另外,LCD用户需要注意一下了,其实由于LCD并没有电子束轰击荧光粉,所以适用于CRT的屏幕保护程序对LCD其实是很不适合的,根本起不到保护液晶单元和背光灯管的作用.何况,linux下好看的3D屏保,其实都蛮耗CPU的,如今都流行创建集约型社会了,都提倡节能减排了,所以,离开电脑的最佳选择是用黑屏屏保锁住屏幕+显示器断电.当然,也推荐CRT用户这么干.

ext文件系统的文件大小杂记

事情是这样起源的:
今天用奔流下个电影,由于速度太快(都超过2MB/s了),怕被网管发现,也怕影响人家正常使用网络,我就把BT给暂停了,想看看到底下了多少,于是:

lily@LLY:~/benliud/Downloaded/Mission.Impossible.Trilogy/Mission.Impossible.1996.720P.HDVDRip.X264-TLF$ ls -lh tlf-missionimpossible1.720hdvd.mkv
-rw-r–r– 1 lily lily 4.4G 12-02 13:33 tlf-missionimpossible1.720hdvd.mkv
lily@LLY:~/benliud/Downloaded/Mission.Impossible.Trilogy/Mission.Impossible.1996.720P.HDVDRip.X264-TLF$ du -sh tlf-missionimpossible1.720hdvd.mkv
450M tlf-missionimpossible1.720hdvd.mkv

发现用ls命令看到的大小是4.4G,而du命令看到的却只有450M,于是我就纳闷了.网上找了一下原因,还是蛮好理解的,大致总结如下:
ls的大小应该是从 superblock 里面的文件描述里取的,这样的好处就是处理起来很快,不用去统计这个文件到底占用了多少block,而du命令则是 disk usage的缩写,是会去统计具体占用的block的.而这个文件下载完成以后,应该是有4.4G大的,但是目前还只下载了450M,所以文件描述里面的大小是4.4G,实际占用的确是450M.
而且,ls和du对块大小(block size)的处理,也有点不同,举例来说,如果文件只有1个字节,我们知道它也要占用一整个块,所以ls的时候的大小是1,而du的时候却会是4k.(这个4k是默认值,视所在分区文件系统的参数而定,分区的块大小可以用 tune2fs -l /dev/XXX 来查看.)
当然,ls和du都有相应的选项来改变自己的行为, ls -s 可以在第一列多显示一个实际占用的块大小(和du的值一样);du -b 也可以显示文件描述里面的大小(和ls的值一样),哈哈~

参考文章.

rpm命令用法整理

由于自己用的是deb系的ubuntu,但是很多服务器都是rpm系的,所以很少用又偶尔要用到rpm命令,经常忘记选项,man也还挺长…
写在这里,和deb系的做个对照.

安装:
rpm -ivh XXX.rpm
dpkg -i

卸载:
rpm -e
dpkg -r (一般都用apt-get)

查文件在哪个包:
rpm -qif /usr/bin/g++32
dpkg -S

查看有没有安装某个包:
rpm -qa gcc\* (正则的*号要转义)
dpkg –get-selections gcc*

查询包里的文件:
rpm -ql compat-gcc-32-c++
dpkg -L

mplayer 放大电影的音量

有时候,由于电影制作者的关系,下载的电影本身的音量很小,即使音箱音量开到最大,系统的音量开到最大,声音还是不够大,导致观看的效果大打折扣.
对于强大的mplayer来说,这个问题还是很好解决的,方法就是加上俩差数:

-softvol -softvol-max 200

就可以把音量放大到原来的2倍,一切都是这么简单吧 :)
值得一提的是,后面这个数字参数最大可以到 10000,也就是音量放大100倍,不知道音箱会不会爆掉,反正我是没试过,大家最好也别试了,呵呵~

PS: 发现这个参数还经历了一番风雨呢…之前我看的是mplayer的中文man,里面根本就没这俩参数(可能man页已经过时了),于是到处找人问,最后TX兄告诉我说smplayer里面有个选项叫:Use software volumn control,好像跟一般的音量控制不一样。为此我还特意安装了一堆qt4的库,装上smplayer,打开这个选项,果然有效.想想smplayer不也是调用mplayer的嘛,于是在ps里,终于找到了这两个参数…后来在最新的英文man里找到了这俩选项的介绍:

-softvol
Force the use of the software mixer, instead of using the sound card mixer.

-softvol-max
Set the maximum amplification level in percent (default: 110). A value of 200 will allow you to adjust the volume up to a maximum of double the current level. With values below 100 the initial volume (which is 100%) will be above the maximum, which e.g. the OSD cannot display correctly.

看来,看man还得英文为主,中文为辅啊…

fcitx自定义词组的方法

想在输入gfw的时候,自动打出 及.艾服.达不留 (不然可是会泄漏国家机密的哦…)
我用的是fcitx
方法:
建立一个 ~/.fcitx/pySym.mb 的文本文件,每个词一行,前面是字母,后面是要打出来的词.注意要保存成 GB2313 的编码, 可以用gedit直接保存成GB2312,也可以保存成utf8以后用 iconv 转.如下:

$ cat ~/.fcitx/pySym.mb | iconv -f gb2312 -t utf8
gfw 及.艾服.达不留
haha ^_^

重启fcitx,就可以看到效果了.

PS: 有人能解读搜狗拼音的 scel 细胞词库文件吗?可以的话,就可以全部导入fcitx了…
希望能提高点输入效率.
效果

BOOTP与TFTP

BOOTP远程启动是一种产生于早期UNIX的远程启动方式,在现在的UNIX、Linux的无盘网络中是较常用的远程启动方式之一,在Windows的无盘网络运用较少,但随着Windows 2000不支持RPL远程启动,并且以TCP/IP作为默认安装网络协议,逐步表明今后的Windows也将以TCP/IP协议作为主要的发展方向,纯TCP/IP的网络将是今后发展的方向。

BOOTP服务简介

BOOTP服务的全称是BOOTSTRAP PROTOCOL(中文:自举协议,引导协议),是一种比较早出现的远程启动的协议,我们经常用到的DHCP服务就是从BOOTP服务扩展而来的。BOOTP协议使用TCP/IP网络协议中的UDP 67/68两个通讯端口。 BOOTP主要是用于无磁盘的客户机从服务器得到自己的IP地址、服务器的IP地址、启动映象文件名、网关IP等等。这个过程如下:

第1步,由BOOTROM芯片中的BOOTP启动代码启动客户机,此时客户机还没有IP地址,它就用广播形式以IP地址0.0.0.0(有的资料又说是255.255.255.255)向网络中发出IP地址查询的请求,这个请求帧中包含了客户机的网卡MAC地址。

第2步,网络中的运行BOOTP服务的服务器接收到的这个请求帧,根据这帧中的MAC地址在BOOTPTAB启动数据库中查找这个MAC的记录,如果没有此MAC的记录则不响应这个请求,如果有就将FOUND帧发送回客户机。FOUND帧中包含的主要信息有客户机的IP地址、服务器的IP地址、硬件类型、网关IP地址、客户机MAC地址和启动映象文件名。

第3步,客户机就根据FOUND帧中的信息通过TFTP服务器下载启动映象文件,并将此文件模拟成磁盘,从这个模拟磁盘启动。

TFTP服务简介

TFTP服务的全称是Trivial File Transfer Protocol,可以翻译为“简单文件传输协议”。 FTP大家很熟习了,TFTP可以看成一个简化了的FTP,主要的区别是没有用户权限管理的功能,也就是说TFTP不需要认证客户端的权限,这样远程启动的客户机在启动一个完整的操作系统之前就可以通过TFTP下载启动映象文件,而不需要证明自己是合法的用户。这样TFTP服务也就存在着比较大的安全隐患,现在黑客和网络病毒也经常用TFTP服务来传输文件。所以TFTP在安装时一定要设立一个单独的目录作为TFTP服务的根目录,比如 c:\tftpboot,做为下载启动映象文件的目录,这样除了这个目录以外TFTP服务就不能访问。并且可以设置TFTP服务只能下载,不能上传等等,以减少安全隐患。

来源:http://www.chinaitpower.com/A200508/2005-08-02/182093.html

mplayer的vo换成gl了

之前的配置用了 x11,因为xv有问题,没有看到图形,而gl的话,和其他的opengl程序一样,在我机器上,开着compiz的情况下会很闪。
但是后来发现用-vo gl有个好处,就是可以天然地把字幕放到黑边框里面,而且是窗口模式的话,字幕覆盖在画面上;全屏模式就优先边框处。而x11要实现这样的话,需要加个 vf=expand=0:-50:0:0:0 ,而且效果也不是很好。这点我很满意gl。嘿嘿,于是就决定,在驱动完美之前(希望不会等很久),看电影的时候,暂时关闭compiz了。