Liuw's Thinkpad

想要赢就先学会输,想要成功就先学会失败

Archive for the ‘UNIX-like’ Category

惨痛教训一则

without comments

这几天都在装机器,开发机、测试机、测试服务器,费了不少时间。

代码原来就是在测试机上的,所以先git clone到开发机上来,然后把测试机重新格掉了,然后再clone回去。

然后发现我新写的代码都不见了,这才想起来那些代码都只是git stash掉,没有真正commit,所以clone的时候是没有备份的。

老老实实重新写了,又费了一个半小时。

吃一堑长一智。以后一定注意。

Written by liuw

January 29th, 2012 at 5:27 pm

Posted in UNIX-like

Tagged with , ,

Emacs中的Rectangle

without comments

记一下Emacs里面的rectangle相关的操作。

Emacs的rectangle概念,就是你mark的起点和终点之间围起来的区域。由于rectangle没有专门的模式去select,所以在显示方面,transient-mark-mode不能只高亮这个rectangle。像在Vim里面,可以用C-v启用Visual mode blockwise,看起来会漂亮点。不过,看不看得清楚并不影响操作。

在Emacs中输入C-h a,然后输入rectangle就可以得到一些相关的函数。

比较有用的是对rectangle的delete、kill、yank操作。

然后还有replace-rectangle、string-insert-rectangle、string-rectangle。

shortcut就不写了,我是M-x党。

Written by liuw

January 7th, 2012 at 6:32 pm

Posted in UNIX-like

Tagged with ,

配置mutt作为邮件客户端

without comments

我一直是使用Gmail的Web GUI来发邮件的,用起来倒也方便。但是现在要提交patch了,还是换一个常见点的客户端吧。在内核的Documentation/email-clients.txt里面列了一些常见的客户端,由于Gmail会自动把tab换成空格、默认format=flowed的设定以及based64编码的问题,它并不合适作为客户端使用。

上午折腾了一下Alpine和Mutt,最后还是选用Mutt了,觉得用起来还不错。把配置文件记一下。

set from = "YOUREMAIL"
set realname = "YOURNAME"

set imap_user = "YOUREMAIL"
set imap_pass = ""
set imap_keepalive = 900

set smtp_url = "smtp://YOUREMAIL@smtp.gmail.com:587/"
set smtp_pass = ""

set folder = "imaps://imap.gmail.com:993"
set spoolfile = "+INBOX"
set postponed = "+[Gmail]/Drafts"
set trash = "imaps://imap.gmail.com/[Gmail]/Trash"

set header_cache = ~/.mutt/cache/headers
set message_cachedir = ~/.mutt/cache/bodies
set certificate_file = ~/.mutt/certificates

set move = no
#set editor='vim + -c "set textwidth=80" -c "set wrap" -c "set nocp" -c "?^$"'
set editor='emacs -nw -q'

my_hdr Cc: YOUREMAIL

set query_command = "goobook query '%s'"
bind editor <Tab> complete-query

光有Mutt还不够,由于我的联系人都在Gmail上面,写邮件的没有没有address book也是很烦人的。我用的是goobook来同步Gmail联系人,在Mutt里面也能调用。配置文件的最后两行就是goobook在Mutt中的配置。

goobook的缺点就是在Mutt中password的提示不大好使,所以要在goobook配置文件中写入password。这不够安全。折中的办法就是,先同步一次,goobook会做好cache,然后再把配置文件中的password去掉。

Written by liuw

June 3rd, 2011 at 2:32 pm

Posted in UNIX-like

Tagged with , ,

Git让我不爽的一个地方

with 2 comments

这一篇是凑数的,纯属吐槽。

我在看某个项目的代码,想了解一下这个项目是怎么一步一步发展起来的,所以希望从最高的一个commit开始看起,一直看到最新的commit。

可是Git不能很随意在历史里面切换,很怨念啊。Git一旦checkout一个commit之后,它的HEAD就指向这个commit,然后后面的log都没有了。想了再checkout下一个commit,还必须先checkout到master,然后再checkout想要的commit,太繁琐。现在想起SVN的好了。

UPDATE:

其实只要知道SHA值就可以直接checkout了,不一定需要切换到master的。我前面那样写是因为我不知道后面commit的SHA是什么。

可以用git log master查看master的log,这样就没必要再切来切去了。

谢谢iveney同学的帮助。

Written by liuw

April 24th, 2011 at 9:38 pm

Posted in UNIX-like

Tagged with

带颜色的less

without comments

习惯在一些有很多输出的命令后面用管道输出到less来分页,但是分页之后就没有颜色了。

要想带上颜色,还得程序们互相配合。例如

$ ls --color=always | less -R

ls命令如果检测到输出不是一个支持颜色terminal,就不会输出颜色的转义序列;less如果不带-R,就不会解析颜色。

Written by liuw

April 1st, 2011 at 10:07 am

Posted in UNIX-like

Tagged with , , ,

PHP这货不稳定,得整整

without comments

昨天把blog迁移到VPS上来,今天nginx就不停地502 gateway error,难不成是我害了大家?

现在的PHP是用spawn-fcgi启动的php5-cgi,死的时候完全没有任何的log,这个是没办法查出来的了。

网上搜了一下,大家的结论是PHP这货不够稳定,可能服务这么多个request之后就会死掉。所以有一个workaround就是设置PHP_FCGI_MAX_REQUESTS这个环境变量,让它在一定的request之后重启。

现在已经改好了,得观察一段时间。

这blog再不写就要发霉了,写一篇凑数吧。

Written by liuw

February 24th, 2011 at 4:22 pm

Posted in UNIX-like

Tagged with , , ,

重置Gnome的Panel

without comments

为自己的Ubuntu装了个Global Menu,没有多想就把原来的两个panel都删除了,到想再加global menu的时候傻眼了——所有panel都没有了,也没有办法加上新的panel了。

Google之后找到了一个重置Gnome Panel的办法。

$ gconftool --recursive-unset /apps/panel

有必要的话再把~/.gconf/apps/panel清理一下,然后把gnome-panel进程重启,默认的panel就回来了。

下次不能再这样傻了。

Written by liuw

January 24th, 2011 at 1:09 pm

Posted in UNIX-like

Tagged with , ,

Linux内核中的per_cpu变量实现

without comments

在init/main.c里面有一个setup_per_cpu_areas,会在start_kernel中调用。

这个函数的主要作用就是使用alloc_bootmem为每个CPU在内存中分配一段专属的内存,然后把使用DEFINE_PER_CPU得到的对象模板(存放在.data.percpu一节)拷贝n次(n为配置CPU的个数),再把每个CPU专属区段相对于__per_cpu_start的offset放在__per_cpu_offset数组中(该数组的下标是CPU的ID)。

每个CPU可以通过__per_cpu_start和__per_cpu_offset找到自己的专属区段。

其实挺简单的。

(完)

Written by liuw

December 27th, 2010 at 11:28 am

Posted in UNIX-like

Tagged with ,

[好文传递]The TTY demystified

without comments

http://www.linusakesson.net/programming/tty/index.php

Written by liuw

December 21st, 2010 at 10:14 am

Posted in UNIX-like,分享

Tagged with ,

LD_PRELOAD的trick

without comments

ld.so(8)在为程序加载动态库时,会根据很多不同的环境变量而有不同的表现。这里关注一个LD_PRELOAD的环境变量,此环境变量指定的动态库可以优先于所有其他的动态库加载。

优先加载的动态库中的symbol会override后加载的symbol,所以LD_PRELOAD有一个比较好用的trick就是把一些程序中用的函数替换成自己的版本。

例如,要把malloc和free替换成为自己的实现,可以用:

$ LD_PRELOAD="path/to/my/malloc.so" program

据目前得到的资料来看,一些memory leak检测库、以及一些改进libc函数的库就是这样做的。

但是这个trick也有一定的安全隐患,一些关键函数被恶意、隐式地替换的话,可以想像后果有多严重,所以正常情况下是不推荐使用的。虽然对于setgid/setuid程序有一定的安全防范措施(For setuid/setgid ELF binaries, only libraries in the standard search directories that are also setgid will be loaded),但是一般程序是不会检查的。

Author:
<liuw AT liuw DOT name>

Date: 2010-12-18 23:10:43

HTML generated by org-mode 6.33x in emacs 23

Written by liuw

December 18th, 2010 at 11:04 pm

Posted in UNIX-like

Tagged with , ,