Gentoo – Portage

emerge sync

emerge –pretend kdevelop
–fetchonly:下载安装套件需要的档案以及他依赖的套件。
–emptytree:这个选项让 Portage 以为相依的套件都没有安装。这是一个很有用的选项让 –pretend 显示完整的相依性列表。
–nodeps:Portage 指安装指定的套件而略过任何的相依性。如果你没优安装合适的相依套件,编译时可能会失败。
–onlydeps:只安装相依套件,指定要安装的套件不会被安装。
–noreplace:如果套件已经安装了就略过不装。
–usepkg:不要编译指定的套件,Portage 会使用预先编译好放在指定位置的 tbz2 套件,这个位置在 PKGDIR 环境变数指定。
–debug:ebuild会显示更多东西,这在发展者检查以 bash script 为基础的 ebuild 档的语法错误是很有用的。
–autoclean:强制 emerge 在刊使编译前清除暂可收购存目录。Portage 预设就会执行这个动作,所以这对关闭这个选项的发展者才有用。
–verbose:告诉 emerge 以完整模式执行。这通常和 –pretend 一起使用来显示这个套件可用的 USE 设定。

emerge unmerge \<=dev-utils/ltrace-0.3.15
移除特定的版本

emerge –update system
系统更新(只包含基础套件)
emerge –update –deep world
包含dependencies

emerge –update –deep –newuse world
改变了USE

emerge –update world
可手工编辑 /var/cache/edb/world
例:net-im/gaim
net-www/skipstone
net-www/galeon

emerge –upgradeonly world
只升级(不降级)

emerge clean

# emerge –update –deep –newuse world
# emerge –depclean
# revdep-rebuild // 包含在gentoolkit
因为有些库被移走,故需要重新编译

摘自
http://gentoo.linuxsir.org/doc/cn/portage-manual.xml
http://www.gentoo.org/doc/en/handbook/handbook-x86.xml?part=2&chap=1

VIM笔记

=============================
help
=============================
PREPEND
Visual mode commands v_
Insert mode commands i_
Command-line commands :
Command-line editing c_
Options ‘ // :help ‘textwidth’

=============================
editing
=============================
:g+//+s/foobar/barfoo/g // g[lobal]默认作用范围是整个文件
:g/./,/^$/join

!5Gsort<Enter>
!{motion}{filter}
!!{filter}

set virtualedit=all
set virtualedit=

=============================
motion
=============================
:map <Space> W
g前缀使命令不是linewise的,常在wrap时和原命令有所区别

; Repeat latest f, t, F or T [count] times.
, Repeat latest f, t, F or T in opposite direction [count] times.

word WORD w W
sentences ( )
paragraph { }
section ]] ][ [[ [] // 函数”{“须在第一列
]} [{ ]) [( ]/ [/

// Text object selection
// can only be used while in Visual mode or after an operator
The commands that start with “a” select “a”n object including white space, the
commands starting with “i” select an “inner” object without white space, or
just the white space.

aw aW as ap a] a[ a) a( a> a< a} a{ // s for sentence && p for paragraph
iw iW is ip i] i[ i) i( i> i< i} i{ // excluding ] [ ) ( > < } {

:set guioptions+=b // 显示滚动条

ze when ‘wrap’ off scroll horizontally to position the cursor at the end (right side) of the screen.
zh when ‘wrap’ off scroll screen N characters to the right.
zl when ‘wrap’ off scroll screen N characters to the left.
zs when ‘wrap’ off scroll horizontally to position the cursor at the start (left side) of the screen.

=============================
motion-II
=============================
CTRL-O Go to [count] Older cursor position in jump list (not a motion command).
CTRL-I Go to [count] newer cursor position in jump list (not a motion command).

=============================
programming
=============================
:tags // 显示tag stack
:tag {tagname} // 缺省时至stack的top
CTRL-]
:ptag tagname // preview
CTRL-W }
:pclose
:pedit
:psearch
:stag tagname
CTRL-W ]
CTRL-T

:set tags=./tags,./../tags,./*/tags
:set tags=./*/tags
:!ctags -R *

:tnext
:tselect tagname
:tag /block 再按tab补齐

[i // 第一个匹配项
[I // [<Tab> 跳转到[I找到的第一条匹配项
]I // start at the current cursor position
[D // 宏定义

:set path+=d:\mingw\include\*
:checkpath

=============================
text formatting
=============================
:set cindent shiftwidth=4
gg=G
:set textwidth=80

<CTRL-V> // <CTRL-Q> for Windows
Istring<Esc>
cstring<Esc>

:center // :{range}center [width]
:right

=============================
map command autocmd
=============================
:omap <F7> a{
:map <F3> oDate: <Esc>:read !date<CR>kJ

:command -nargs=* DoIt :call AFunction(<f-args>)

:autocmd [group] {events} {file_pattern} [nested] {command}

:augroup cprograms
: autocmd BufReadPost *.c,*.h :set sw=4 sts=4
: autocmd BufReadPost *.cpp :set sw=3 sts=3
:augroup END

:autocmd! cprograms //删除

=============================
vim-script
=============================
b:name buffer variable
w:name window variable
g:name global variable (also in a function)
v:name variable predefined by Vim
s:name script variable
l:name local variable
a:name function argument

$NAME environment variable
&name option
@r register

:execute “tag ” . tag_name // . for cancatenate
—> :tag tag_name
:normal gg=G
:execute “normal ” . normal_commands
:execute “normal Inew text \<Esc>”

=============================
useful links for VIM scripts
=============================
c.vim http://vim.sourceforge.net/scripts/script.php?script_id=213
——-
Setting
——-
see doc
——-
Usage
——-
<A-F9> save and compile
<F9> link
<C-F9> run

taglist.vim http://vim.sourceforge.net/scripts/script.php?script_id=273
——-
Notes
——-
noremap <silent> <F11> <Esc><Esc>:Tlist<CR>
inoremap <silent> <F11> <Esc><Esc>:Tlist<CR>
——-
Usage
——-
<CR> Jump to the location where the tag under cursor is
defined.
o Jump to the location where the tag under cursor is
defined in a new window.
p Display the tag definition in the file window and
keep the cursor in the taglist window itself.
<Space> Display the prototype of the tag under the cursor.
u Update the tags listed in the taglist window
s Change the sort order of the tags (by name or by order)
d Remove the tags for the file under the cursor
x Zoom-in or Zoom-out the taglist window
+ Open a fold
– Close a fold
* Open all folds
= Close all folds
[[ Jump to the beginning of the previous file
<Backspace> Jump to the beginning of the previous file
]] Jump to the beginning of the next file
<Tab> Jump to the beginning of the next file

EnhCommentify.vim http://vim.sourceforge.net/scripts/script.php?script_id=23
——-
Setting
——-
let g:EnhCommentifyRespectIndent = ‘yes’
let g:EnhCommentifyPretty = ‘yes’
let g:EnhCommentifyAlignRight = ‘yes’
——-
Usage
——-
\x \c

bufexplorer.zip http://vim.sourceforge.net/scripts/script.php?script_id=42
——-
Notes
——-
Needed by winmanager
——-
Usage
——-
\be \bs

winmanager http://vim.sourceforge.net/scripts/script.php?script_id=95
——-
Notes
——-
noremap <silent> <F4> <Esc><Esc>:WMToggle<CR>
inoremap <silent> <F4> <Esc><Esc>:WMToggle<CR>
——-
Usage
——-
:WManager :WMClose :WMToggle

1: File Explorer Area
<tab> : open the file or directory in a new window in the FileEditing area.
c : change the pwd to the directory currently displayed
C : change the currently displayed directory to pwd (converse of c)
s : select sort field (size, date, name)
r : reverse direction of sort
R : rename file
D : delete file
– : move up one level

cppcomplete http://vim.sourceforge.net/scripts/script.php?script_id=527
——-
Notes
——-
default mapping of <F9> conflicts with c.vim
<F8> <F9> –> <F7> <F8>
——-
Usage
——-
<A-j> <A-l> <F7> <F8> <F5>

a.vim http://vim.sourceforge.net/scripts/script.php?script_id=31
——-
Usage
——-
:A :AS :AV

borland.vim http://vim.sourceforge.net/scripts/script.php?script_id=92
——-
Usage
——-
:colorscheme borland

xmledit http://vim.sourceforge.net/scripts/script.php?script_id=301
cvsmenu.vim http://vim.sourceforge.net/scripts/script.php?script_id=58
project.tar.gz http://vim.sourceforge.net/scripts/script.php?script_id=69
grep.vim http://vim.sourceforge.net/scripts/script.php?script_id=311

————————————————–
摘录自:
VIM USER MANUAL
VIM 手册中文版 by ZhaoRuFei

awk笔记

awk -F”:” ‘{ print “username: ” $1 “\t\tuid:” $3 }’ /etc/passwd

awk ‘FS=”:” {OFS=”-“} {print NR “–>” $1, $2}’ /etc/passwd

awk ‘{x=x+$3} {print NR, $3, x}’ data
awk ‘{x=x+$3} END {print NR, $3, x}’ data

awk ‘{x=x+$3} {print NR, $3, x “sort -nr”}’ data

FS=”[[:space:]+]”

NF The number of fields in the current input record.
NR The total number of input records seen so far.
OFMT The output format for numbers, “%.6g”, by default.
OFS The output field separator, a space by default.
ORS The output record separator, by default a newline.

awk中数组从1开始

for ( x in myarray ) {
print myarray[x]
}
当 awk 在数组下标之间轮转时,它不会依照任何特定的顺序

delete fooarray[1]

print length(mystring)

print index(mystring,”you”)

print tolower(mystring)
print toupper(mystring)
print mystring // unchanged

mysub=substr(mystring,startpos,maxlen)

print match(mystring,/you/), RSTART, RLENGTH
RSTART 包含返回值(第一个匹配的位置),RLENGTH 指定它占据的字符跨度(如果没有找到匹配,则返回 -1)。

sub(regexp,replstring,mystring)
sub() 将替换第一个 regexp 匹配(如果有的话),gsub() 将执行全局替换

numelements=split(“Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec”,mymonths,”,”)

test.awk
———
BEGIN { x=0 }
/^$/ { x=x+1 }
END { print “I found ” x ” blank lines. :)” }
—————
awk -f test.awk inputfile

摘录自:
http://www-128.ibm.com/developerworks/cn/linux/shell/awk/awk-1/index.html
http://www-128.ibm.com/developerworks/cn/linux/shell/awk/awk-2/index.html
http://www-128.ibm.com/developerworks/cn/linux/shell/awk/awk-3/index.html

Makefile笔记

objects := $(wildcard *.o)
all: $(objects)
$(objects): %.o: %.c
$(CC) -c $(CFLAGS) $< -o [email protected]

%.o : %.c
$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o [email protected]

.PHONY : clean
clean :
rm $(objects) # 或-rm或@rm
—————————————————————-
[email protected]
表示规则中的目标文件集。

$%
仅当目标是函数库文件中,表示规则中的目标成员名。例如,如果一个目标是”foo.a(bar.o)”,那么,”$%”就是”bar.o”,”[email protected]”就是”foo.a”。如果目标不是函数库文件(Unix下是[.a],Windows下是[.lib]),那么,其值为空。

$<
依赖目标中的第一个目标名字。如果依赖目标是以模式(即”%”)定义的,那么”$<“将是符合模式的一系列的文件集。注意,其是一个一个取出来的。

$?
所有比目标新的依赖目标的集合。以空格分隔。

当你希望只对更新过的依赖文件进行操作时,”$?”在显式规则中很有用,例如,假设有一个函数库文件叫”lib”,其由其它几个object文件更新。那么把object文件打包的比较有效率的Makefile规则是:

lib : foo.o bar.o lose.o win.o
ar r lib $?

$^
所有的依赖目标的集合。以空格分隔。如果在依赖目标中有多个重复的,那个这个变量会去除重复的依赖目标,只保留一份。

$+
这个变量很像”$^”,也是所有依赖目标的集合。只是它不去除重复的依赖目标。
—————————————————————-
sources = foo.c bar.c
sinclude $(sources:.c=.d)
# 变量$(sources)所有[.c]的字串都替换成[.d]
%.d: %.c
@set -e; rm -f [email protected]; $(CC) -MM $(CPPFLAGS) $< > [email protected]$$$$; sed ‘s,\($*\)\.o[ :]*,\1.o [email protected] : ,g’ < [email protected]$$$$ > [email protected]; rm -f [email protected]$$$$
# main.o : main.c defs.h –> main.o main.d : main.c defs.h
—————————————————————-
make -n 或 –just-print
make -nw

The `-W’ flag provides two features:

* If you also use the `-n’ or `-q’ flag, you can see what `make’
would do if you were to modify some files.

* Without the `-n’ or `-q’ flag, when `make’ is actually executing
commands, the `-W’ flag can direct `make’ to act as if some files
had been modified, without actually modifying the files.

使用”-C”参数来指定make下层Makefile时,”-w”会被自动打开的

make -t 或 –touch
make -q 或 –question
make -s 或 –silent
make -C <dir> 或 –directory=<dir> 指定读取makefile的目录
make -i 或 –ignore-errors
make -k 或 –keep-going 及 .IGNORE目标
—————————————————————-
exec:
cd /home/hchen
pwd

exec:
cd /home/hchen; pwd
—————————————————————-
IMMEDIATE = DEFERRED
IMMEDIATE ?= DEFERRED
# 如果没定义
IMMEDIATE := IMMEDIATE
# 只能使用已定义好的变量
IMMEDIATE += DEFERRED or IMMEDIATE

For the append operator, `+=’, the right-hand side is considered
immediate if the variable was previously set as a simple variable
(`:=’), and deferred otherwise.

define IMMEDIATE
DEFERRED
endef
—————————————————————
ifeq (0,${MAKELEVEL})
cur-dir := $(shell pwd)
whoami := $(shell whoami)
host-type := $(shell arch)
MAKE := ${MAKE} host-type=${host-type} whoami=${whoami}
endif
—————————————————————
nullstring :=
space := $(nullstring) # end of the line
—————————————————————
libs_for_gcc = -lgnu
normal_libs =

ifeq ($(CC),gcc)
libs=$(libs_for_gcc)
else
libs=$(normal_libs)
endif

foo: $(objects)
$(CC) -o foo $(objects) $(libs)
—————————————————————
comma:= ,
empty:=
space:= $(empty) $(empty)
foo:= a b c
bar:= $(subst $(space),$(comma),$(foo))
# 把$(foo)中的空格替换成逗号,所以$(bar)的值是”a,b,c”
—————————————————————
$(subst <from>,<to>,<text>)
$(patsubst <pattern>,<replacement>,<text>)
$(patsubst %.c,%.o,x.c.c bar.c)
$(strip <string>)
去掉<string>字串中开头和结尾的空字符
$(strip a b c )从”a b c “得到”a b c”
—————————————————————
$(dir <names…>)

名称:取目录函数–dir。
功能:从文件名序列<names>中取出目录部分。目录部分是指最后一个反斜杠(”/”)之前的部分。如果没有反斜杠,那么返回”./”。
返回:返回文件名序列<names>的目录部分。
示例: $(dir src/foo.c hacks)返回值是”src/ ./”。

$(notdir <names…>)

名称:取文件函数–notdir。
功能:从文件名序列<names>中取出非目录部分。非目录部分是指最后一个反斜杠(”/”)之后的部分。
返回:返回文件名序列<names>的非目录部分。
示例: $(notdir src/foo.c hacks)返回值是”foo.c hacks”。

$(suffix <names…>)

名称:取后缀函数–suffix。
功能:从文件名序列<names>中取出各个文件名的后缀。
返回:返回文件名序列<names>的后缀序列,如果文件没有后缀,则返回空字串。
示例:$(suffix src/foo.c src-1.0/bar.c hacks)返回值是”.c .c”。

$(basename <names…>)

名称:取前缀函数–basename。
功能:从文件名序列<names>中取出各个文件名的前缀部分。
返回:返回文件名序列<names>的前缀序列,如果文件没有前缀,则返回空字串。
示例:$(basename src/foo.c src-1.0/bar.c hacks)返回值是”src/foo src-1.0/bar hacks”。

$(addsuffix <suffix>,<names…>)

名称:加后缀函数–addsuffix。
功能:把后缀<suffix>加到<names>中的每个单词后面。
返回:返回加过后缀的文件名序列。
示例:$(addsuffix .c,foo bar)返回值是”foo.c bar.c”。

$(addprefix <prefix>,<names…>)

名称:加前缀函数–addprefix。
功能:把前缀<prefix>加到<names>中的每个单词后面。
返回:返回加过前缀的文件名序列。
示例:$(addprefix src/,foo bar)返回值是”src/foo src/bar”。

$(join <list1>,<list2>)

名称:连接函数–join。
功能:把<list2>中的单词对应地加到<list1>的单词后面。如果<list1>的单词个数要比<list2>的多,那么,<list1>中的多出来的单词将保持原样。如果<list2>的单词个数要比<list1>多,那么,<list2>多出来的单词将被复制到<list2>中。
返回:返回连接过后的字符串。
示例:$(join aaa bbb , 111 222 333)返回值是”aaa111 bbb222 333″。
—————————————————————
$(foreach <var>,<list>,<text>)
names := a b c d
files := $(foreach n,$(names),$(n).o)
# $(files)的值是”a.o b.o c.o d.o”。
—————————————————————
reverse = $(2) $(1)

foo = $(call reverse,a,b)
—————————————————————
sources = foo.c bar.c
ifneq ( $(MAKECMDGOALS),clean)
include $(sources:.c=.d)
endif
只要我们输入的命令不是”make clean”,那么makefile会自动包含”foo.d”和”bar.d”这两个makefile。
—————————————————————
There are two reasons to use a phony target: to avoid a
conflict with a file of the same name, and to improve performance.

.PHONY: all
all: prog1 prog2 prog3 prog4

—————————————————————

“-b”
“-m”
这两个参数的作用是忽略和其它版本make的兼容性。

“-B”
“–always-make”
认为所有的目标都需要更新(重编译)。

“-C <dir>;”
“–directory=<dir>;”
指定读取makefile的目录。如果有多个”-C”参数,make的解释是后面的路径以前面的作为相对路径,并以最后的目录作为被指定目录。如:”make -C ~hchen/test -C prog”等价于”make -C ~hchen/test/prog”。

“-debug[=<options>;]”
输出make的调试信息。它有几种不同的级别可供选择,如果没有参数,那就是输出最简单的调试信息。下面是<options>;的取值:
a — 也就是all,输出所有的调试信息。(会非常的多)
b — 也就是basic,只输出简单的调试信息。即输出不需要重编译的目标。
v — 也就是verbose,在b选项的级别之上。输出的信息包括哪个makefile被解析,不需要被重编译的依赖文件(或是依赖目标)等。
i — 也就是implicit,输出所以的隐含规则。
j — 也就是jobs,输出执行规则中命令的详细信息,如命令的PID、返回码等。
m — 也就是makefile,输出make读取makefile,更新makefile,执行makefile的信息。

“-d”
相当于”–debug=a”。

“-e”
“–environment-overrides”
指明环境变量的值覆盖makefile中定义的变量的值。

“-t”
“–touch”
相当于UNIX的touch命令,只是把目标的修改日期变成最新的,也就是阻止生成目标的命令运行

“-W <file>;”
“–what-if=<file>;”
“–new-file=<file>;”
“–assume-file=<file>;”
假定目标<file>;需要更新,如果和”-n”选项使用,那么这个参数会输出该目标更新时的运行动作。如果没有”-n”那么就像运行UNIX的”touch”命令一样,使得<file>;的修改时间为当前时间。
—————————————————————
http://www.chinaunix.net/jh/23/408225.html 及 make manual摘录

CVS-client笔记

cvs -d :pserver:[email protected]:/home/cvsroot/proj login
cvs import -m “msg” modulename
cvs ci -m “msg” modulename
cvs co -m “msg” modulename
cvs up modulename
cvs st modulename
cvs add modulename
cvs remove modulename
cvs update -D “2002-10-19 10:00:0 GMT”
cvs -q update -A
cvs tag tagname
cvs co -r tagname
cvs tag -b branchname

cd main_branch_working_directory
cvs update -j branchname
cvs ci -m “branchname and MAIN merged”

cvs -q export -r rev -d dir module

CVS-server笔记

rpm -q | grep cvs
groupadd cvs
useradd -g cvs -G cvs –d /home/cvsroot cvsroot
passwd cvsroot
chmod –R 770 /home/cvsroot
su – cvsroot
mkdir proj
cvs -d /home/cvsroot/proj init
chmod –R 770 /home/cvsroot/proj
exit
vim /etc/xinetd.d/cvspserver

service cvspserver
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
server= /usr/bin/cvs
server_args= -f –allow-root=/home/cvsroot/proj pserver
log_on_failure += USERID
}

vim /etc/services

cvspserver 2401/tcp #pserver cvs service
cvspserver 2401/udp #pserver cvs service

su – cvsroot
vim proj/CVSROOT/passwd
usrname::cvsroot

VNC笔记

rpm -q vnc vnc-server
sudo vi /etc/sysconfig/vncservers
vncpasswd
ls ~/.vnc
sudo /sbin/service vncserver start
vncviewer localhost:1

sudo vim /etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 5901 -j ACCEPT
sudo /sbin/service iptables restart

c语言下的工厂模式——ipmi源码分析

背景简介
========
IPMI(Intelligent Platform Management Interface)是一套用于硬件平台管理的规范/接口。
官方网址:http://www.intel.com/design/servers/ipmi/index.htm
而IPMItool是用于管理和配置支持IPMI规范硬件的工具。
官方网址http://ipmitool.sourceforge.net/

IPMItool的架构
==============
源码目录如下
+—contrib //用于建立web管理页面的shell脚本
+—control //包含一些安装、配置信息
+—debian //包含changelog等信息
+—doc //man的帮助信息
+—include
| \—ipmitool //头文件定义
+—lib //对IPMI规范的对应实现,如ipmi_session.c处理session
\—src //此目录下是ipmitool的三个主程序
\—plugins // ipmi_intf.c interface一些通用功能的实现
+—bmc // ipmitool与bmc kernel driver之间的接口
+—imb // Intel IMB Interface
+—lan // IPMI v1.5 LAN Interface
+—lanplus // IPMI v2.0 RMCP+ LAN Interface
+—lipmi // Solaris x86 LIPMI interface
\—open // Linux OpenIPMI Interface [default]

C语言下的工厂模式
=================
从上述的目录结构不难看出,IPMItool设计上的一个重要特色就是将不同的interface看作plugin。从而使系统具有清晰的结构和良好的扩充性。

IPMI规范中定义的实体,如session,fru,sdr,chassis,sensor等等,都在lib中做对应的实现。这部分是与具体interface相分离的。interface的通用接口在include\ipmitool\ipmi_intf.h中定义;interface的通用功能实现,在\src\plugins\ipmi_intf.c中。值得注意的是,interface是IPMI规范中定义的概念,普通意义上的接口本文中均使用中文“接口”。

这种将通用接口与具体实现相分离的方式无疑就是一种简单工厂模式了。

实践
====
那么interface具体是怎么实现为plugin的呢?可以从一个具体的例子看一下。

include\ipmitool\ipmi_intf.h中用ipmi_intf定义了了
struct ipmi_intf {

struct ipmi_session * session;
struct ipmi_oem_handle * oem;
uint32_t my_addr;
uint32_t target_addr;

int (*setup)(struct ipmi_intf * intf);
int (*open)(struct ipmi_intf * intf);
void (*close)(struct ipmi_intf * intf);

};

与OO语言类似,struct内部定义了数据和方法。不同的是,方法采用的是函数指针的方式。因为没有this指针,所以函数的形参就是指向自身struct的指针。如setup。

而在具体实现中,如src\plugins\lan\lan.c中给出了具体的函数实现。如ipmi_lan_setup。在ipmi_lan_setup中,即可使用形参定义的intf指针实现对ipmi_intf结构中相应数据的操作。

struct ipmi_intf ipmi_lan_intf = {
name: “lan”,
desc: “IPMI v1.5 LAN Interface”,
setup: ipmi_lan_setup,
open: ipmi_lan_open,
close: ipmi_lan_close,
sendrecv: ipmi_lan_send_cmd,
sendrsp: ipmi_lan_send_rsp,
keepalive: ipmi_lan_keepalive,
target_addr: IPMI_BMC_SLAVE_ADDR,
};

gdb笔记

(gdb) set $i=0
(gdb) while argv[$i] != 0
>print argv[$i++]
>end

(gdb) x /2cb argv[0]
0xfef82b5e: 47 ‘/’ 114 ‘r’
(gdb) x /2tb argv[0]
0xfef82b5e: 00101111 01110010
(gdb) x /2tw argv[0]
0xfef82b5e: 01101111011011110111001000101111 01101111011101110010111101110100

>silent
>set $p=obj
>while $p != 0
>print $p->name
>set $p=$p->next
>end
>cont (断点不停)

backtrace (bt)
info frame
up
info frame
info locals
frame 0
return 10

call printf(“test\0”)
call fflush(0)

disassemble
watchpoint
display
info display show display

http://www.linuxforum.net/books/LinuxFAQ/program-gdb.html

vmware下将RH9内核升级至2.6

虚拟机版本vmware:4.5.1 build-7568
原内核版本Redhat 9 linux-2.4.20-8
待升级版本linux-2.6.11.7

下载内核linux-2.6.11.7.tar.bz2至/usr/src并解压
ln -s linux-2.6.11.7 linux-2.6
在/usr/src/linux/Documentation/Changes查看相应软件的版本要求

下载并安装module-init-tools-3.1.tar.bz2
# configure –prefix=/
# make moveold
# make all install
# ./generate-modprobe.conf /etc/modprobe.conf
下载并安装device-mapper-1.00.19-2.i386.rpm
下载并安装lvm2-2.00.25-1.01.i386.rpm,用rpm -ivph –nodeps –force
下载并安装mkinitrd-4.1.18-2.i386.rpm

在/usr/src/linux-2.6下make mrproper(如果之前未编译过,此步骤可省)
make menuconfig,选择编译的模块。
Device Drivers
Block devices
Default RAM disk size 改为8192
USB support
UHCI HCD 选中(或OHCI,EHCI单独无法工作)
其余模块根据实际情况选择
make all
make modules_install
make install
/etc/modprobe.conf中相应部分更改为
alias usbfs usbcore
alias usb-controller uhci-hcd
鼠标键盘部分(hid, mousedev, keybdev)等部分酌情修改
/etc/rc.sysinit中
usbdevfs改为usbfs
hid改为usbhid
mousedev和keybdev酌情修改(分别改为usbmouse和usbkeybd或注释掉)
/etc/grub.conf中
更改default
2.6内核部分加一句elevator=deadline
reboot

学习总结
openssl+openssh的设置,配合PuTTY的使用
/etc/inetd.conf增加ssh stream tcp nowait root /usr/sbin/tcpd sshd -i
密钥对的生成ssh-keygen(Linux/Win)
公钥拷贝至~/.ssh/authorized_keys,密钥在客户端使用
grep -rnH “pattern” *
find ./ -name ‘*name*’ -print
vim
set foldmethod=indent
zf%; zi; zo; zO; .,$ d
dmesg
cat /proc/version
insmod; lsmod; modprobe -l | grep usb
useradd -s /bin/bash -g lfs -m -k /dev/null lfs

cat > ~/.bash_profile << “EOF”
exec env -i HOME=$HOME TERM=$TERM PS1=’u:w$ ‘ /bin/bash
EOF

cat > ~/.bashrc << “EOF”
set +h
umask 022
LFS=/mnt/lfs
LC_ALL=POSIX
PATH=/tools/bin:/bin:/usr/bin
export LFS LC_ALL PATH
EOF

readelf -l filename | grep interpreter
ld –verbose | grep SEARCH