分类: 'CLI软件' 的归档
查询IP的脚本和增强的traceroute
查询IP的脚本不是我写的,是AutumnCat以前发在ubuntu-cn上的,用的数据库是纯真IP数据库,可以下载脚本放到PATH变量覆盖的目录,并下载数据库文件,解压后把脚本里的 DataFileName 一行指向数据库的真实位置,最终达到这样效果:
|
1 2 3 4 5 6 |
$ myip 211.155.225.207 $ cip 211.155.225.207 浙江省杭州市电信IDC机房 $ myip | cip - 浙江省杭州市电信IDC机房 |
然后就可以这样使用增强的traceroute了:
|
1 2 3 4 5 6 7 8 |
$ traceroute li2z.cn | awk -F"[()]" '{if($2~/[0-9\.]./){printf("%s |",$0);system("cip "$2);}else{print $0}}' traceroute to li2z.cn (122.224.99.37), 30 hops max, 60 byte packets |浙江省杭州市电信 1 192.168.4.1 (192.168.4.1) 0.163 ms 0.159 ms 0.296 ms |局域网对方和您在同一内部网 2 211.155.224.1 (211.155.224.1) 0.675 ms 0.830 ms 0.920 ms |浙江省杭州市电信IDC机房 3 61.130.4.201 (61.130.4.201) 0.761 ms 0.813 ms 0.862 ms |浙江省杭州市电信 4 50.166.175.61.broad.hz.zj.dynamic.163data.com.cn (61.175.166.50) 1.161 ms 1.212 ms 1.232 ms |浙江省杭州市电信 5 122.224.99.254 (122.224.99.254) 0.966 ms 1.034 ms 1.161 ms |浙江省杭州市电信 6 122.224.99.37 (122.224.99.37) 0.992 ms 0.929 ms 0.916 ms |浙江省杭州市电信 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
$ traceroute google.com | awk -F"[()]" '{if($2~/[0-9\.]./){printf("%s |",$0);system("cip "$2);}else{print $0}}' traceroute to google.com (74.125.67.100), 30 hops max, 60 byte packets |美国 CZ88.NET 1 192.168.4.1 (192.168.4.1) 0.174 ms 0.165 ms 0.162 ms |局域网对方和您在同一内部网 2 211.155.224.1 (211.155.224.1) 0.642 ms 0.809 ms 0.901 ms |浙江省杭州市电信IDC机房 3 61.130.4.201 (61.130.4.201) 0.731 ms 0.770 ms 0.828 ms |浙江省杭州市电信 4 61.164.3.93 (61.164.3.93) 1.650 ms 1.720 ms 1.824 ms |浙江省杭州市电信 5 61.130.125.25 (61.130.125.25) 1.508 ms 1.551 ms 1.540 ms |浙江省丽水市电信 6 220.191.158.253 (220.191.158.253) 1.206 ms 1.187 ms 1.173 ms |浙江省杭州市电信 7 (202.97.47.30) 22.003 ms 24.931 ms 24.916 ms |中国电信广州节点 8 (202.97.34.25) 22.040 ms 22.063 ms 22.053 ms |北京市电信 9 202.97.60.142 (202.97.60.142) 22.474 ms 22.475 ms 22.465 ms |中国电信骨干网 10 202.97.61.46 (202.97.61.46) 26.196 ms 26.247 ms 26.232 ms |中国电信骨干网 11 202.97.62.214 (202.97.62.214) 60.140 ms 60.158 ms 60.217 ms |中国电信骨干网 12 209.85.241.58 (209.85.241.58) 59.982 ms 59.934 ms 59.825 ms |美国谷歌(GOOGLE)公司 13 209.85.250.120 (209.85.250.120) 60.237 ms 70.186 ms 60.217 ms |美国谷歌(GOOGLE)公司 14 209.85.250.87 (209.85.250.87) 60.708 ms 60.405 ms 60.680 ms |美国谷歌(GOOGLE)公司 15 216.239.43.212 (216.239.43.212) 143.525 ms 143.562 ms 143.632 ms |美国Google 16 209.85.250.126 (209.85.250.126) 146.837 ms 150.876 ms 146.755 ms |美国谷歌(GOOGLE)公司 17 209.85.242.255 (209.85.242.255) 212.969 ms 212.992 ms 212.880 ms |美国谷歌(GOOGLE)公司 18 209.85.254.249 (209.85.254.249) 211.795 ms 217.885 ms 211.812 ms |美国谷歌(GOOGLE)公司 19 64.233.174.46 (64.233.174.46) 218.950 ms 209.85.255.190 (209.85.255.190) 219.998 ms 64.233.174.46 (64.233.174.46) 218.934 ms |美国加利福尼亚州Google公司 20 gw-in-f100.google.com (74.125.67.100) 212.930 ms 212.912 ms 212.818 ms |美国 CZ88.NET |
以上就是从我这里访问本blog和google的路由信息,很醒目吧,当然如果常用的话,可以保存成脚本更方便。
顺便纪念一下出来40个小时左右就被及.艾服.达不留掉的牛博国际网站:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
$ traceroute bullogger.com | awk -F"[()]" '{if($2~/[0-9\.]./){printf("%s |",$0);system("cip "$2);}else{print $0}}' traceroute to bullogger.com (70.86.20.26), 30 hops max, 60 byte packets |美国 CZ88.NET 1 192.168.4.1 (192.168.4.1) 0.150 ms 0.142 ms 0.132 ms |局域网对方和您在同一内部网 2 211.155.224.1 (211.155.224.1) 0.550 ms 0.640 ms 0.754 ms |浙江省杭州市电信IDC机房 3 61.130.4.201 (61.130.4.201) 0.695 ms 0.683 ms 0.673 ms |浙江省杭州市电信 4 61.164.3.89 (61.164.3.89) 1.610 ms 2.095 ms 2.164 ms |浙江省杭州市电信 5 61.130.125.25 (61.130.125.25) 1.462 ms 1.445 ms 1.426 ms |浙江省丽水市电信 6 61.164.9.185 (61.164.9.185) 1.053 ms 2.020 ms 2.106 ms |浙江省杭州市电信 7 (202.97.47.46) 23.923 ms 23.165 ms 23.157 ms |中国电信广州节点 8 * * * 9 * * * 。。。。。。 |
SQLite简介
SQLite大致就是”SQL lite”,也就是一个微型的SQL解释器.它的赞助商和使用者包括mozilla,adobe,symbian等软件巨头,也算是来头不小了.
说它微型,那么它到底有多微型呢?我们可以看看它的可执行文件的大小,linux版本的打包文件是203.93 KiB,解压以后是350.88 KiB,是不是很微型呢?
除了微型之外,SQLite主要还要以下特点:
- 无须配置: SQLite不需要安装,直接解压可执行文件即可运行.
- 没有服务进程: SQLite无须通过TCP/IP等通信协议提交SQL到服务端,处理后再返回结果.
- 单个数据文件: SQLite将用户数据存于单个普通文件里面.也就是说用户只要有数据文件的读权限,就可以读取所有数据;有写权限也能改变数据.
- 数据文件可跨平台迁移: SQLite本身是跨平台的,它的数据文件同样也是跨平台的.数据文件和平台的字节序无关,也和CPU的位数无关.直接复制数据文件就可以实现数据迁移.
- 紧凑: 如上所述,SQLite的运行环境非常小,如果在编译的时候去掉不需要的功能,可以减小至170KiB,用于嵌入式环境也是没问题的.
- 松散数据类型: 不同于其他数据库的严格的数据类型检查,SQLite在尝试类型转换失败以后,允许在任何表的任何列里面插入任何类型的数据(一个例外是:整型的主键列里面只能存整型数据)
- 变长的数据记录: 任何文本都是VARCHAR
- 可读性很高的源码: 普通的程序员都能读懂,关键的变量和函数都有详细的注释.
- SQL语句编译成虚拟机器语言: SQLite把SQL语句预编译成一种类似机器预言的代码,程序员可以方便得打印出代码及代码的执行结果,这样对debug很有好处.
- 完全的公开: SQLite的源码可以任意下载使用,没有任何约束和版权(一些文档和测试代码是受开源license保护的).
- SQL语言扩展: SQLite可以模块化地添加扩展,以增强其功能
说了这么多特点,那么,SQLite究竟怎么使用呢?
在一般的linux发行版下,安装 sqlite 这个包以后,就可以使用 sqlite3 这个命令来创建和处理数据库文件了.windows/DOS则下载这个文件解压到系统目录,mac则是下载这个文件.
安装完毕以后,就可以用
|
1 |
sqlite3 test.db |
这个命令来创建一个空的数据库文件了.
然后,你可以用以下命令来建立一个含有两个列的表:
|
1 |
sqlite3 test.db "create table memos(text, priority INTEGER);" |
|
1 2 |
sqlite3 test.db "insert into memos values('deliver project description', 10);" sqlite3 test.db "insert into memos values('lunch with Christine', 100);" |
然后可以这样查询出需要的数据:
|
1 2 |
sqlite3 test.db "select * from memos where priority>20;" lunch with Christine|100 |
很简单吧~
下面展示一下,SQLite在C语言下的用法,同样用的是上面那个test.db,我们建立一个test.c,内容为:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
#include <stdio.h> #include <sqlite3.h> static int callback(void *NotUsed, int argc, char **argv, char **azColName){ int i; for(i=0; i<argc; i++){ printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; } int main(int argc, char **argv){ sqlite3 *db; char *zErrMsg = 0; char SQLbuffer[1024]; int rc; if( argc!=2 ){ fprintf(stderr, "Usage: %s num\n", argv[0]); return 1; } rc = sqlite3_open("test.db", &db); if( rc ){ fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); sqlite3_close(db); return 1; } sprintf(SQLbuffer, "select * from memos where priority > %s;", argv[1]); rc = sqlite3_exec(db, SQLbuffer, callback, 0, &zErrMsg); if( rc!=SQLITE_OK ){ fprintf(stderr, "SQL error: %s\n", zErrMsg); sqlite3_free(zErrMsg); } sqlite3_close(db); return 0; } |
用
|
1 |
gcc -lsqlite3 test.c |
进行编译,完成之后,执行
|
1 2 3 |
./a.out 30 text = lunch with Christine priority = 100 |
怎么样,相当简单吧~
注: 文中部分内容翻译和参考自官方文档和man页.
新的dlmp3
两年多前,我写过一个自动下载百度mp3的脚本,后来百度曾经更换过几次页面结构,我也跟进维护了一段时间:一,二.
但再后来,由于觉得自动下的歌曲质量还是不如手工,加上已经有别人写的软件了,这脚本就丢那没管了.
直到昨天,收到 You Sheng 发来的邮件,说他还是比较喜欢那个脚本,百度改了页面之后又帮我修改了脚本,还写了个python来处理那凯撒加密,我觉得很感动,真的要谢谢他.
另外不禁感叹,难道这就是开源的力量?嘿嘿.
来自 You Sheng 的脚本可以在这里下载.
gentoo下的gnome-osd
ubuntu论坛里有个可用性已经不错的歌词脚本,如果用上gnome-osd显示,效果很好的,昨天想在gentoo下试试,结果发现gentoo下根本就没有这个包,汗了,这个应该是gnome组件里面的一部分啊,怎么会没有呢?
于是到overlay里面找,发现了这个,下载了ebuild文件,安装,但是configure的时候就失败了,理由是找不到python2.4和2.3,心想这一定是个比较老的ebuild的,那时候应该还没有python2.5,于是想花点时间修改configure脚本算了,倒也是修改好了,也安装上了,但是gnome-osd-client的时候,却又是一堆错误,而且一看就知道是python的错误.才发现这个代码确实是不兼容python2.5的.
但是回头想想,ubuntu里面的python不也是2.5的嘛,于是肯定只有一个可能,就是这个源码包不是最新的,从那个ebuild的源码包顺藤摸瓜,终于找到了最新的下载地址,于是顺手改了下ebuild的文件,不知道有没有可能放进gentoo-china的overlay呢?
cpu的降频和温度监控
以前一直以为自己的cpu不支持降频,也就没怎么去研究,直到 lerosua 告诉我,那是因为我没配置好,呵呵,汗自己一个。
其实也很简单,ubuntu和gentoo下都只要安装 cpufrequtils 这个包即可。然后确保加载了 acpi_cpufreq 这模块。
然后就可以用 cpufreq-set 命令调解cpu的频率了,默认是调整第一个内核,要调另外一个,只要加 -c1 参数即可。 -g ondemand 可以把cpu置为自动调解状态,会按需条件频率。
另外 cpufreq-info 命令可以查看当前cpu的频率、以及支持的频率等等,也可以在面板上放两个“cpu频率范围监视器”,没个监视一个内核,比较直观。
cpu的温度检测是要安装 lm-sensors 这个包,可以先用 sensors-detect 查看你的硬解有哪些传感器,按照提示做,就会把几个内核模块加进 /etc/modules 里面,也可以手工 modprobe ,完了以后执行 sensors 就应该有输出了,不过我的输出比较奇怪:
$ sensors
coretemp-isa-0000
Adapter: ISA adapter
Core 0: +13.0°C (crit = +100.0°C)coretemp-isa-0001
Adapter: ISA adapter
Core 1: +10.0°C (crit = +100.0°C)
室温都不止这点温度,难道是传感器坏了?
语音播报天气的脚本
我以前写的一个天气预报脚本,由xiooli同学完成了语音部分,嘿嘿,效果还不错的哦~
下载地址: http://ftp.ubuntu.org.cn/home/xiooli/say_weather.tar.gz 或 http://linuxfire.com.cn/~lily/say_weather.tar.gz
ssh-copy-id
每次要在远程服务器上放key的时候,都 scp XXX.再ssh上去将文件写入 .ssh/authorized_keys 的末尾.而且”authorized_keys”这个单词又那么难拼…有没有简单点的办法呢?
于是自己写了一句:
cat ~/.ssh/id_dsa.pub | ssh user@IP “cat – >> ~/.ssh/authorized_keys”
后来才发现,居然有现成的命令的…没想到啊…
ssh-copy-id user@IP
打开 ssh-copy-id 一看,原来也是个几行的小脚本,其实和我写的那行一样简单,娃哈哈哈~
压制视频时带上字幕的 mencoder 参数
给 iPod touch 转视频,源是 avi视频+srt字幕 的格式,想保留字幕,可以用以下参数:
mencoder -ovc lavc -lavcopts vcodec=mpeg4 -vf scale=320:240 -oac faac -sub ssf-tkd.srt -o test.mp4 ssf-tkd.avi
这个参数,字幕是加上了,但估计大部分还是会乱码,解决乱码问题和 mplayer 很像:
建个 ~/.mplayer/mencoder.conf 文件,写上一行 subcp=cp936 就好了.
但是以上转的视频估计还不是最适合 iPod touch 的,还要继续研究.大家有什么好建议不?
帖几个搜索过程中发现的url(有关的或者无关的):
http://www.linuxsir.org/bbs/thread308957.html
http://avisynth.org/
命令行下修改gnome的配置
假如哪天你把你的gnome配置或者X配置搞坏了,不能启动任何gnome的程序了的话,这个也许有用:
大家应该知道,gnome下很多配置可以在 gconf-editor 里修改,那如果你的 gconf-editor 打不开了,或者是想用脚本实现修改里面的某个值,怎么办呢?
这时候就要用到 gconftool 或者 gconftool-2 (在gnome2下,这两者一般是同一个东西的符号链接而已.).
举例说明吧:
得到某个键值的值:
$ gconftool –get /desktop/gnome/interface/gtk_theme
Glossy
设置某个键值:
$ gconftool –type string –set /desktop/gnome/interface/gtk_theme “Human”
要知道,这个命令会即时地修改你的主题哦.就合你在外观里面选择一样.
AntiVir
AntiVir 是个德国的杀毒软件,有linux版,且免费版本功能也不错.
还可以用来杀windows分区下的病毒,很适合windows根本无法启动的时候,用linux光盘或者U盘启动,进行杀毒.还可以做个杀毒启动U盘备用,嘿嘿.
从这里下载linux版后,解压,执行里面的install,回答一系列问题就安装好了.
升级病毒库: sudo antivir –update
为防止误删有用文件,需要创建一个隔离区:
mkdir /path/quarantine
升级完成,开始扫描:
antivir -s -z -v –moveto=/path/quarantine /media/sda1
antivir -s -z -v –moveto=/path/quarantine /media/sda2
需要扫描什么目录都可以,挂载了windows分区,也就可以扫描windows的病毒了.效果还是不错的.
另,命令行参数还可以参考这个帖子