用镜头记录,用心灵体验 | 订阅本站 | 所有笔记 | 亲和力设计 | 流量

DB2 学习笔记

博客话题:DB2,Linux,Web,业余无线电,户外,摄影,截拳道,Thankpad,其他

February 2008

emacs 学习笔记

如何阅读  以下emacs 命令中 C 代表Contral 键,M 代表Alt 键,ret 是回车。C-x 的含义是按住Contral 再按x 空格用于分隔控制字符和命令,其它字符是emacs 命令,按顺序输入。 尖括号<> 当中的内容不是emacs 命令,按语义输入。...

如何阅读 

以下emacs 命令中

  1. C 代表Contral 键,M 代表Alt 键,ret 是回车。C-x 的含义是按住Contral 再按x
  • 空格用于分隔控制字符和命令,其它字符是emacs 命令,按顺序输入。
  • 尖括号<> 当中的内容不是emacs 命令,按语义输入。
  • 斜杠/用于隔开多个类似的命令和描述。

常用命令

打开文件
C-x f <FilePath> ret
多窗口间切换(窗口1... 窗口N)
C-x 1...<N>
多窗口间切换(上一个/下一个)
C-x 左/右箭头键
关闭当前Buffer 
C-x k ret
保存
C-x C-s
退出
C-x C-c
光标上、下、左、右移动
C-p/C-n/C-b/C-f
光标移动到行首、行尾 
C-a/C-e 
光标前/后移动一个单词
 M-f/M-b
光标前/后移动一个句子
 M-a/M-e
光标前/后移动一个段落
 M-{/M-}
光标到buffer 首/尾
 M-</M->
光标到第N行
 M-g-g N ret
删除后一个字符
 Del/C-d
删除前一个单词
 M-Del/M-Backspace
删除后一个单词
 M-d
删除到句首/尾
 M-k/C-x Backspace/Del
删除到行尾
 
C-k
将当前行与上一行进行合并,空格分隔
M-^ 

类似于vi 的Shift+j ,不过合并的方向相反。

向前/后搜索
C-r/C-s 
向上/下翻页
M-v/C-v 
光标行居中
C-l
选择一个范围 
C-空格

或者

C-2个空格 

上面的命令将当前光标所在位置设为选择起始点,然后移动光标,移动到那就选择到那,直接执行命令即可。后面的用法,会高亮选中的区域,更利于识别。

也可以用鼠标滑亮所选区域。

注:如果输入法占用了"C-空格"的快捷键,最好改成其它。

复制所选文本
 M-w
剪切所选文本
C-w
插入^G或其它控制字符
C-q C-G
dos2unix
C-x ret f unix ret
刷新一个文件内容的tricky 方法(reload)
C-x C-v ret
字符替换
M-x replace-string ret <OldStr> ret <NewStr> ret
替换行尾为换行(正则表达式)
M-x replace-regexp ret $ ret C-q C-J ret

以上2个命令作用范围是当前光标至buffer 末尾。

范围替换
 高亮选中范围 M-x replace-string ret <OldStr> ret <NewStr> ret
列替换
选中范围 C-x r t <NewStr> ret
列删除
选中范围 C-x r d
列剪切 
选中范围 C-x r k
列粘贴
C-x r y
替换Tab为空格
选中范围 M-x untabify ret
删除文件所有行尾空格 
M-x delete-trailing-whitespace ret
批量大小写转换 
选中范围 C-x C-u/C-l
光标后一个单词大小写转换
M-u/M-l
光标所在单词首字母变为大写
M-c
版本比较 diff
C-x v =
版本提交 commit
C-x v v <"message here"> C-c C-c
如果有个emace命令记不起来,可以根据几个字母或者单词搜索,也可用来发现新的命令
C-h a <CmdStr>
更改文件的编码方式

从当前编码变更UTF-8:

C-x ret f utf-8 ret

从当前编码变更到GB2312:

C-x ret f gb2312 ret

这与前面的dos2unix的原理是一样的,在f命令之后可以用TAB键查看编码名称的列表。

需要注意的是,在某些情况下,emacs在保存文件之前会对字符集做些判断,并自动的修改他们,这可能会导致上面的命令事实上的失效。比如,对于一个HTML文档,若在META标签中指定了UTF-8字符集,那么即使你使用上面命令将文件编码修改成任何其它,在emacs执行保存之后,它会自动回到UTF-8编码方式,即使你使用 将META 标签注释也是如此。

查看光标所在那个字符的编码方式
M-x describe-char ret

结果中file code: 后面的内容指出了这个字符在文件中的内码以及编码方式,这里显示的编码方式与emace内部处理文件所采用的编码无关,是文件中真实的、二进制code所用的编码方式。而charset: 后面显示的字符集并不总是与file code一致,似乎这里仅仅表明了与这个字符最亲近的一种字符集。

DB2 相关命令

建立一个db2 进程,并将当前emacs 实例中的buffers 与其关联
M-x sql-db2 ret 
将当前buffer 与emacs实例中已经存在的db2 进程进行关联
M-x sql-set-sqli-buffer ret

在db2 进程已经建立并且关联之后,可以使用以下命令执行db2 CLP命令或SQL语句。

执行整个buffer的语句
M-x sql-send-buffer 
执行选中的语句
选中范围 M-x sql-send-region
执行光标所在段落的语句
M-x sql-send-paragraph

段落的默认分隔符是空行(或者仅含有空格和TAB)。

在命令编辑区编辑新语句并执行
M-x sql-send-string

以上执行语句的部分命令有快捷键可调用,也可以使用global-set-key 命令将其更改为自己习惯的按键。

emacs环境配置

将emacs加入Windows 右键菜单

为了能使用鼠标右键菜单,快捷的将任何文件以emacs方式打开,可以通过以下两种方式实现:

  • 使用"发送到(Send to)

为runemacs.exe 创建一个快捷方式,并放至"发送到(Send to)"文件夹,一般位于:"C:\Documents and Settings\***\SendTo"。

  • 右键菜单直接打开

这种方式需要修改注册表,参照以下注册表内容,可以修改路径后导入,也可以独立创建注册表项目

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\Open with emacs]

[HKEY_CLASSES_ROOT\*\shell\Open with emacs\command]
@="C:\\emacs-23.1\\bin\\runemacs.exe\" \"%1\""

这种方式会为每个文件创建一个单独的编辑窗口(多个emacs实例),若希望共享一个emacs编辑窗口(共享emacs实例),请参照下面一个小节。

更友好的右键菜单

为了实现多次打开的文件共享同一个emacs编辑窗口,需要以下步骤:

  1. 将以下命令加入.emacs文件(一般位于: "C:\Documents and Settings\***\Application Data\.emacs")
    (server-start)
  2. 新建以下Windows 环境变量:
    EMACS_SERVER_FILE=C:\Documents and Settings\***\Application Data\.emacs.d\server\server
    在完成第一步以后,启动emacs,查看以上环境变量路径中的文件是否创建成功,若没有找到此文件,请核对你的emacs版本修改为正确的路径。以上文件在emacs关闭后自动删除。
    环境变量设置完毕需要重新启动Windows才能生效。
  3. 修改注册表,添加右键菜单项。若前面已经创建此注册表项目,对照这里修改即可。
    Windows Registry Editor Version 5.00
    
    [HKEY_CLASSES_ROOT\*\shell\Open with emacs]
    
    [HKEY_CLASSES_ROOT\*\shell\Open with emacs\command]
    @="C:\\emacs-23.1\\bin\\emacsclientw.exe -a \"C:\\emacs-23.1\\bin\\runemacs.exe\" \"%1\""
    emacsclientw.exe 将不启动新的实例,而是在当前实例中打开新的文件,而"-a"参数通知emacs若没有实例在运行,则启动新的实例runemacs.exe。
    这个方式简单有效,可以满足大部分需求,但有一个缺陷,即在没有任何emacs实例运行的情况下,一次选中多个文件打开时,会打开等同于文件数目的emacs窗口,即第一次无效。原因是打开文件的请求是同时处理的,第一个emacs实例创建的服务(前述的server文件)还来不及被检测到。
    解决这个问题要稍微复杂点,请参考接下来的小节。

完美的右键菜单
若希望在任何时候发送到emacs的多个文件都只会打开一个实例,所需的工作会有点难看,不过是有效的,会用到DOS batch文件和vbs文件,DOS batch文件用来检测已运行的emacs实例,并等待服务文件创建完毕再继续文件打开操作。而vbs文件用来调用DOS batch文件以隐藏DOS窗口。
  1. 按照上一小节的步骤1与步骤2,配置好.emacs文件与环境变量EMACS_SERVER_FILE
  2. 下面是两个文件(emacs.bat 与emacs.vbs)的代码,保存到emacs的bin目录。
  3. emacs.bat

    tasklist /FI "IMAGENAME eq emacs.exe" /NH | find "emacs.exe" && goto check || goto new
    :new
    C:\emacs-23.1\bin\runemacs.exe
    :check
    if not exist "%EMACS_SERVER_FILE%" goto check
    :existing
    C:\emacs-23.1\bin\emacsclientw.exe -n %1
    emacs.vbs

    DIM objShell
    set objShell=wscript.createObject("wscript.shell")
    iReturn=objShell.Run("cmd.exe /C C:\emacs-23.1\bin\emacs.bat " & """" & WScript.Arguments(0) & """", 0, TRUE)
  4. 修改注册表,添加右键菜单项。若前面已经创建此注册表项目,对照这里修改即可。
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell\Open with emacs]
[HKEY_CLASSES_ROOT\*\shell\Open with emacs\command]
@="Wscript.exe \"C:\\emacs-23.1\\bin\\emacs.vbs\" \"%1\""
经过以上修改,emacs右键菜单在第一次启动emacs时,也可以将多个文件共享在一个实例中打开了。

延展阅读

Posted by Alex at 8:55 PM | Comments (0) | Edit | Taged: emacs (1), Study notes (10)

Dreamhost 系统漏洞可导致帐户被完全控制

安全漏洞:已知任一Dreamhost注册用户的主email地址,即可获得对该帐户的完全访问权限。  适用范围:Dreamhost WebPanel 发现日期:2007-3-10 漏洞描述 在Dreamhost 注册的用户(包括免费帐户),均可通过修改自己的主email地址(primary e-mail contact address)为与系统中其他用户已设置的主email地址相同的方式,来获得对修改后的email地址原所属帐户的完全控制,被入侵用户正常的Dreamhost 服务不受影响,也不会受到任何警告和通知。 背景介绍 Dreamhost 的注册用户可以使用WebID 或者主email地址登录WebPanel...

安全漏洞:已知任一Dreamhost注册用户的主email地址,即可获得对该帐户的完全访问权限。 

适用范围:Dreamhost WebPanel

发现日期:2007-3-10

漏洞描述

在Dreamhost 注册的用户(包括免费帐户),均可通过修改自己的主email地址(primary e-mail contact address)为与系统中其他用户已设置的主email地址相同的方式,来获得对修改后的email地址原所属帐户的完全控制,被入侵用户正常的Dreamhost 服务不受影响,也不会受到任何警告和通知。

背景介绍

Dreamhost 的注册用户可以使用WebID 或者主email地址登录WebPanel ,管理帐户,WebID 由系统根据用户姓名自动生成,主email地址由用户在注册时提供,系统对两者都会进行唯一性检查,不允许重复。主email地址作为用户的联系方式,可以在profile 中随时进行更改,WebID 则不允许更改。

* NOTE-2: Each new Web ID MUST have a unique primary e-mail contact address! This is because you can log into the control panel either using your Web ID or your primary e-mail contact address. Also, the primary contact address is also the ONLY address that can be used for referrals! Additional address can also be added if you like, these can be duplicated across other Web IDs, but the primary contact address must be unique.

漏洞测试步骤 

  1. 模拟用户A:在系统中注册免费帐户test1作为被入侵测试帐户,WebID为test1,主email 为test1@domain.com,密码:“111111”
  2. 模拟用户B:在系统中注册免费帐户test2作为入侵测试帐户,WebID为test2,主email 为test2@domain.com,密码:“222222”
  3. 用户B:登录test2帐户,编辑profile,将主email 地址修由test2@domain.com改为test1@domain.com,保存成功,退出登录
  4. 用户B:检查test2@domain.com 收件箱,收到一封email地址变更通知
  5. 用户A:检查test1@domain.com 收件箱,未收到任何来自Dreamhost的通知
  6. 用户B:使用test1@domain.com 和密码“222222” 登录,登录成功,并且获得了与用户A 相同的访问控制
  7. 用户B:使用WebID test1 和密码“222222” 登录,登录成功,获得对原有用户B 的资源访问。
  8. 用户A:使用test1@domain.com 和密码“111111” 登录,一切正常

原因

在进行主email 变更时,系统未进行与注册步骤相同的email唯一性检查,致使作为用户唯一标识之一的主email 可能发生重复。Dreamhost 将会混淆两个原本完全不相关的帐户。结果是,用户A使用更改后的用户B的email 以及自己原有密码可以登录成功,并获得了用户B帐户的完全控制权,而那个不幸的用户B没有得到任何警告,他仍然可以使用自己的email 和密码正常登录自己的管理界面。

此时,Dreamhost WebID 并没有被搞混,用户A可以使用WebID 替代email,保持对自己原有帐户的访问。不过,很多用户大概不会留意WebID , 有两个地方可以查知自己的WebID:

  1. Dreamhost 发送的邮件主题,例如: [xxxxx 8729481] DreamHost Payment Receipt,xxxxx 就是WebID
  2. 登录WebPanel,进入Edit Profile,界面显示:"Welcome, xxxxx. Logout",这里也能找到WebID

已将此问题反映给了Dreamhost 的Support Team,在问题得到修复之前,此篇日志不会被发布。

我会保持关注。

更新 2008-02-26

Dreamhost 已经修复此漏洞,下面是在profile 中修改主email的错误提示。

You cannot make sample@domain.com your primary address because another account already has it as its primary address!

Posted by Alex at 12:02 PM | Comments (0) | Edit | Taged: Dreamhost (4), 安全漏洞 (1)

Gentoo Linux on T43 (14) 内存虚拟盘加速系统

对于一个喜欢折腾系统的人来说,为笔记本电脑建立内存虚拟盘,来弥补笔记本小硬盘天然的性能瓶颈问题,总是免不了的。 内核选项  Linux 内核内建了ramdisk支持,正常情况下,内核中下列选项应该是enable 的。 $ zcat /proc/config.gz |grep -i tmpfs CONFIG_TMPFS=y CONFIG_TMPFS_POSIX_ACL=y 这就表明,可以直接利用mount 命令创建一个内存虚拟盘。...

对于一个喜欢折腾系统的人来说,为笔记本电脑建立内存虚拟盘,来弥补笔记本小硬盘天然的性能瓶颈问题,总是免不了的。

内核选项 

Linux 内核内建了ramdisk支持,正常情况下,内核中下列选项应该是enable 的。

$ zcat /proc/config.gz |grep -i tmpfs
CONFIG_TMPFS=y
CONFIG_TMPFS_POSIX_ACL=y

这就表明,可以直接利用mount 命令创建一个内存虚拟盘。

创建内存盘

我打算把内存虚拟盘放在/mnt/ram 。使用以下简单的命令:

# mkdir /mnt/ram 
# mount -t tmpfs -o 128m none /mnt/ram

也可以不指定内存盘大小:

# mount -t tmpfs none /mnt/ram 

在内存盘建立之后,查看top 或者系统监视器,可用内存并未相应减少(明确指定大小的内存盘也是如此)。经过测试,未明确指定大小的内存盘会动态分配内存,可以持续向内存盘中写入文件,当再无可用物理内存时才会报空间不足的错误。 tmpfs 文件系统默认采用1G 的容量,但并未实际分配并占用这部分内存,而是动态分配。这要比Windows下流行的内存虚拟盘方案 方便得多。

启动时自动创建

接下来,将以下行加入/etc/fstab,让系统在每次启动时自动创建内存盘。

none            /mnt/ram    tmpfs       noatime 0 0 

利用内存盘 

最后,可以把一些常用软件的临时文件夹指定到/mnt/ram,如果应用程序不支持临时文件夹配置,也可以将其转换成到/mnt/ram 的符号链接。

Lotus Notes 8

notes 8会在$HOME目录自动建立workplace-tmp 目录来存储临时文件,我们可以将其转移到内存盘中。先关闭notes,然后执行以下命令:

$ mkdir /mnt/ram/workplace-tmp
$ echo ' mkdir /mnt/ram/workplace-tmp' >> ~/.bash_profile
$ mv ~/workplace-tmp ~/workplace-tmp.bak
$ ln -s /mnt/ram/workplace-tmp ~/workplace-tmp
$ ls -l ~/workplace-tmp
lrwxrwxrwx 1 alex users 22 2008-02-19 09:36 /home/alex/workplace-tmp -> /mnt/ram/workplace-tmp  

更新 2008-03-24

将/var/tmp 与/tmp 也加入到tmpfs

/etc/fstab

none			/tmp	    tmpfs		noatime	0 0
none			/var/tmp    tmpfs		noatime	0 0

设置Notes

修改~/.bash_profile

if [ ! -e /var/tmp/workplace-tmp ]; then
mkdir /var/tmp/workplace-tmp
fi

重启后,修改Notes临时文件夹符号连接

$ rm ~/workplace-tmp
$ ln -s /var/tmp/workplace-tmp ~/workplace-tmp

将/var/tmp/ 放入tmpfs 之后,在merge一些巨大的软件包时,中途可能因为临时空间不足而失败退出,这种情况下,可以指定PORTAGE_TMPDIR 到其它具有足够空间的路径来解决。比如:

# PORTAGE_TMPDIR=~/tmp emerge -av openoffice
$ sudo PORTAGE_TMPDIR=~/tmp emerge -av openoffice 

延展阅读

(未完)

Posted by Alex at 12:52 AM | Comments (0) | Edit | Taged: gentoo (21), linux (38), ramdisk (2), tmpfs (1)

Gentoo Linux on T43 (13) 应用程序中字体的纠正

这篇日志打算对Gentoo Linux on T43 (7) 中文字体 进行一些补充,继续讨论一些需要单独对字体有所调整的应用程序,这里不追求字体的完美显示,只记录一些必要的调整步骤,以解决字体乱码,或者字体严重变形以至影响辨认的问题。 wine 一些依靠wine 模拟器运行的Windows 应用程序,字体会严重变形,比如BeyondCompare,虽然应用程序选项提供了字体选项,调整后也无法令所有界面显示易于辨识的字体。经过参考设置wine程序的字体一文,我做出调整,将Linux系统主要字体复制给wine使用,解决了问题。 $ ls -1 /usr/local/share/fonts/TTF/*.ttf...

这篇日志打算对Gentoo Linux on T43 (7) 中文字体 进行一些补充,继续讨论一些需要单独对字体有所调整的应用程序,这里不追求字体的完美显示,只记录一些必要的调整步骤,以解决字体乱码,或者字体严重变形以至影响辨认的问题。

wine

一些依靠wine 模拟器运行的Windows 应用程序,字体会严重变形,比如BeyondCompare,虽然应用程序选项提供了字体选项,调整后也无法令所有界面显示易于辨识的字体。经过参考设置wine程序的字体一文,我做出调整,将Linux系统主要字体复制给wine使用,解决了问题。

$ ls -1 /usr/local/share/fonts/TTF/*.ttf
msyhbd.ttf
msyh.ttf
simhei.ttf
simsun18030.ttf
simsun.ttf
sthei.ttf
wqy-zenhei.ttf 
$ cp /usr/local/share/fonts/TTF/*.ttf ~/.wine/drive_c/windows/fonts/ 
$ ls -1 ~/.wine/drive_c/windows/fonts/
msyhbd.ttf
msyh.ttf
simhei.ttf
simsun18030.ttf
simsun.ttf
sthei.ttf
wqy-zenhei.ttf 

仅此一步即可,没有按上文修改.wine/system.reg ,默认的96dpi 很合适,否则字体会过大。

以上几种中文字体,被我的配置文件~/.fonts.conf所引用,你可以使用自己的字体。

$ wine --version
wine-0.9.48 

picasa2

pciasa2 是Google 的一款非常出色的免费图片管理软件,已经推出了Linux版本,并且包含在Gentoo官方Package列表中,Gentoo用户可以直接emerge安装。

其实它不是真正的Linux版本,而是通过wine 来模拟的,但其不依赖于系统的wine, 而是自动单独安装一份经过google team 优化的版本,其也有菜单字体严重变形问题。前面对系统wine 做的配置对picasa2 无效,需要单独配置。

# cp /home/yourname/.wine/drive_c/windows/fonts/* /home/yourname/.picasa/drive_c/windows/fonts/

注意,上一步需要root 权限,因为 .picasa/drive_c/windows/fonts/ 是一个符号连接。

copy 完字体后,picasa2 有以下字体可用:

 $ ls -1 .picasa/drive_c/windows/fonts/
couree.fon
coure.fon
courer.fon
cvgasys.fon
marlett.ttf
msyhbd.ttf
msyh.ttf
simhei.ttf
simsun18030.ttf
simsun.ttf
sserifee.fon
sserife.fon
sserifer.fon
sthei.ttf
svgasys.fon
VeraBd.ttf
VeraBI.ttf
VeraIt.ttf
VeraMoBd.ttf
VeraMoBI.ttf
VeraMoIt.ttf
VeraMono.ttf
VeraSeBd.ttf
VeraSe.ttf
Vera.ttf
vgasyse.fon
vgasys.fon
vgasysr.fon
wineding.ttf
wqy-zenhei.ttf

经过以上配置,菜单中的字体变形问题得到解决,但文件夹管理的文件夹树中,中文显示为黑块,其它的方中文均正常,目前不知道解决方案(据令狐虫介绍 ,Picasa 2.7 beta for linux 已经解决了此问题)。

我的picasa2 版本是2.2-2820-5。

emacs

TODO 

(未完) 

Posted by Alex at 12:14 AM | Comments (3) | Edit | Taged: font (2), gentoo (21), linux (38), picasa (1), wine (1)

Alex's picture

my email address in picture

搜索|Search

订阅更新|Subscribe to Feed

按月归档|By Month

2009
07
2008
11
10
07
05
04
03
02
01
2007
12
10
07
06
05
04
03
02
01
2006
12
11
10
09
08
07
06
05
04
03
02
01
2005
11
10
09
08
07
04
03
2004
12
11
10
09
08
07
06
05
04
03
02
01
2003
12
10
09
08
06
2002
09
08
04
03
02
2001
12
09
07
06
05

我读|My Books

db2

我的链接|My Links

推荐站点|favorite sites

我的朋友|My Friends

Creative Commons License
This blog is licensed under a Creative Commons License.
Movable Type 4 Logo