分类: 'CLI软件' 的归档
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的病毒了.效果还是不错的.
另,命令行参数还可以参考这个帖子
sssh 快速ssh登陆脚本
此脚本对于那些需要经常ssh登陆远程服务器的朋友应该有点用处.尤其是需要中转服务器ssh 2次以上的.
脚本功能:
将服务器IP和密码保存于文本文件中(明文保存,安全性要自己保证),方便登陆,支持多次ssh中转,支持服务器编码自动转换,支持某个用户名的通用密码.
使用方法:
最好将脚本保存在PATH变量包含的路径下,建议保存于 ~/bin 并确保此目录在 PATH 中.
编写 ~/.pass 文件,并执行 chmod 600 ~/.pass
安装 expect 包.
.pass文件的写法
1.最简单的,可以在文件中写下如下一行:
name=hostA usernameA@IP-A passwordA
就可以使用 sssh hostA 登陆此服务器了.
2.中转登陆:
name=hostA usernameA@IP-A passwordA
name-hostA=hostB usernameB@IP-B passwordB
执行 sssh hostA hostB 就相对于先登陆hostA,然后在hostA上登陆hostB
同理,理论上可以中转N次,hostA->hostB->hostC->hostD…,嘿嘿…
3.使用通用用户名的密码.
这是用于这样的例子:有N个服务器,都开通了一个通用用户名(例如:view用户,只有很低的权限),这些view用户的密码都是同一个,而且会定期同步修改.这种情况下,如果修改了view密码的话,.pass文件就要修改N个密码了,为了避免这样的麻烦,可以使用通用用户名和密码功能:
usualName view
usualPSW password-of-view
name=hostA view@IP-A
name=hostB view@IP-B
name=hostC view@IP-C
这样就可以直接用 sssh hostA , sssh hostB 登陆了.
可以看到,这里省略了第3列的密码字段.此法同样适用于多级登陆的服务器.
4.指定服务器使用的编码
usualName view
usualPSW password-of-view
name=hostA usernameA@IP-A passwordA gbk
name=hostB view@IP-B | gbk
在某行服务器的后面(第4列),加上 gbk,就可以指明该服务器使用的是gbk,登陆了以后不会出现乱码了.
如果某行使用了通用用户名和密码的话,为了不致引起混乱,密码那列需要加个 | (竖线)占位.
5.使用通用编码
usualCODING gbk
加上此行,对于没有指定编码的服务器,将默认使用gbk编码.
下载:
由于脚本贴在这里会出现半角引号变全角的状况.所以,请直接在这里下载 这里下载.
哈哈,没想到,脚本没几行,写个说明倒是一堆了…