Linux開發工具的使用
1. Linux開發工具的使用
Vim編譯的使用
Ibm的Vim 實用技術
http://www.ibm.com/developerworks/cn/linux/l-tip-vim1/index.html
http://www.ibm.com/developerworks/cn/linux/l-tip-vim2/index.html
http://www.ibm.com/developerworks/cn/linux/l-tip-vim3/index.html
l 跳轉命令:
^,$ 光標移動至行首、行尾
(,) 一句話的最前面、最后面
{,} 一個段落的最前面、最后面
H 跳到第一行
M 跳到中間一行
L 跳到最后一行
gg 跑到文件開頭
G 跑到文件結尾
查找命令
/?查詢, s/查找內容/替換內容
編輯命令
復制: y復制選擇的內容、yy復制一行、nyy復制n行
剪貼 d
粘貼: p; ]p代碼粘貼
刪除: d刪除選擇的內容、dd刪除一行、dw刪除一個單詞
取消: u
更改: cw更改光標所在位置的一個字
刪除或稱謂剪貼
db 刪除到某個單詞的開始位置
d) 刪除到某個語句的結尾位置
d( 刪除到某個語句的開始位置
d} 刪除到某個段落的結尾位置
d{ 刪除到某個段落的開始位置
D 刪除到某一行的結尾=d$
修改
cl 更改當前字符(等于先按x再按i)
cw 修改到某個單詞的結尾位置(dw再i)
cb 修改到某個單詞的開始位置(db再i)
<< 代碼向前移動
>> 代碼向后移動
窗口命令
:split/vsplit 分隔一個窗口
:new/vnew 創建一個新的窗口
:sf 文件名 在新窗口中打開filename
:only 關閉除當前窗口外所有窗口
:ctrl-w 可進行切換窗口
:ctrl-w h 到左面的窗口
:ctrl-w l 到右面的窗口
:ctrl-w j 到下面的窗口
:ctrl-w k 到上面的窗口
set paste //在粘貼之前使用該命令, 就不會在粘貼的時候將格式搞亂,粘貼之后再使用set nopaste即可將自動格式命令打開 set complete+=k // 自動完成? setlocal omnifunc=syntaxcomplete#Complete //"打開語法打開補全 dw,剪切單詞。d$,剪切到行尾。d0,剪切到行首。[n]dd,剪切一行或下面n行。 yw,復制單詞。y$,復制到行尾。y0,復制到行首。[n]yy,復制一行或下面n行。 寫代碼的時候的快捷鍵: ]p:和 p 的功能差不多,但是它會自動調整被粘貼的文本的縮進去適應當前代碼的位置。 gd:定位到局部變量聲明處 K:在 Man 里面查找光標當前所在處的詞,顯示光標下的C函數的man說明手冊 ^P/^n 自動完成功能;如果沒有合適的就一直按C-P/N ^]:顯示~/.tags中的光標下的函數的原型, ^t:退出函數的原型窗口 在編譯一個文件時候同時打開另外一個文件 :sp [filename] CTRL-W h 跳轉到左邊的窗口 CTRL-W j 跳轉到下面的窗口 CTRL-W k 跳轉到上面的窗口 CTRL-W l 跳轉到右邊的窗口 生成C語言標準函數庫的tag文件 ctags -R -f ~/.vim/systags --c-kinds=+p --fields=+S /usr/include /usr/local/include 再在.vimrc加上 ctags+=~/.vim/systags 這樣每次生成ctags只生成本工程下的,但使用時卻又能包括標準接口。 $ctags -R * (將當前目錄和子目錄中的文件生成tag) $vi -t find (在目錄中查詢find函數) :ts find (查看find函數) :ta find (查看find函數)
Gdb調試工具的使用
gdb代碼調試參考
http://fanqiang.chinaunix.net/program/other/2005-03-23/2993.shtml 1. 設置斷點 (gdb)b test.c:17 //表示在17行設置斷點 (gdb)b test.c:func //表示在test.c文件中func函數開始的地方設置斷點 (gdb)b test.c:21 if result==20 //斷點的觸發的條件是result==20 (gdb)info b //查看斷點的信息 (gdb)delete、enable、disable、clear、// 維護斷點 run[r]//運行 continue[c] //繼續運行 next[n] //下一條語句;不會進出函數內部 step[s] //會進出調用的函數內部 finish //退出函數 注意:在輸入b按兩次tab鍵,會列出所有以b開頭的命令 2. 查看斷點變量內容 backtrace[bt]//打印當前的函數調用棧的所有信息 bt n //是一個正整數,表示只打印棧頂上n層的棧信息 //-n表一個負整數,表示只打印棧底下n層的棧信息 frame(f) n //表示查看當前棧某層信息 info f //打印出更為詳細的當前棧層的信息; info args //打印出當前函數的參數名及其值 info locals //打印出當前函數中所有局部變量及其值 info catch //打印出當前的函數中的異常處理信息 @ //操作數組 (gdb)p/c *array@10 //打印array后面10個字符的內容,按照字符查看 (gdb)p/x *array@10 //按照16進制查看 (gdb)p this //查看this的數據 :: //指定某文件、類、函數中的變量 (gdb)p "test.c"::m_test //查看test.c文件中的變量 {} //一個內存地址為type的對象 3.查看源代碼 (gdb)l n,fun //顯示程序第n行或某函數周圍的代碼 (gdb)l CTest::get_count //查看CTest類中get_count函數
Makefile的編寫
make的基本介紹[Makefile]
make是一個有規則的文本文件,每個規則由三部分組成:目標、依賴文件、命令列表 target: dep1 dep2 dep3 ... command1 command2 ...... 注意:每個命令前面是制表符不能用空格代替! 例如: ipphone : ipphone.o gcc -o ipphone ipphone.o ipphone.o: ipphone.c ipphone.h gcc -c ipphone.c ctl: ctl.o gcc -o ctl ctl.o ctl.o: ctrl.c ipphone.h gcc -c ctl.c 上面有四個規則;如果make命令行中沒有包含規則名就會檢查所有的規則,如果有則只檢查該規則,例如只想生成ctl文件需要make ctl即可! 偽目標例如:all: ctl ipphone //這是因為all并不存在它只是檢查ctl和ipphone作用 例如:clean: rm -f *.o //由于沒有依賴文件所以缺省不會執行,可通過 make clean執行 make定義變量和使用變量
為了make文件的編輯和維護更方便,可在make中定義變量、和shell一樣;make文件中的變量內容實際是一個字符串,定義和使用規則同shell差不多。 CC=gcc -c 使用的時候和shell類似用括號擴起來前面加$;$(CC) 變量定義時候引用了自己make會遞歸展開引發錯誤: make提供的只讀變量: $@ 目標文件名 $< 第一個相關的文件名 $^ 相關文件列表、以空格分開 $? 新于目標文件的相關文件列表 $(@D) 目標文件名的目錄部分 $(@F) 目標文件名的文件名部分 make預定義變量:
AS 匯編器 CC C編譯器,缺省cc CPP C預處理器,缺省值cpp RM 文件刪除程序,缺省rm -f 隱含規則和規則模式
例如:ipphone : ipphone.o gcc -o ipphone ipphone.o 該規則沒有指出ipphone.o怎么得來,這就適合隱含規則make會自動使用 gcc -c ipphone.c -o ipphone.o命令生成ipphone.o文件。這個規則也可通過%.o : %.c重新定義、表示所有的.o文件都是通過.c文件編譯而來;或者通過下面的方式重定義: %.o : %.c $(CC) -c $< -o $@ //表示使用第一個相關的文件名來生成目標文件名 make命令行的選項:
-f 指定make文件名不適用缺省值 -n 顯示所有要執行的命令,但不執行 -s 執行時不顯示命令 -r 禁止make內部規則 -d 顯示調試信息 -i 忽略規則的命令錯誤,繼續執行 -k 忽略模塊編譯錯誤、繼續下面的編譯 編譯的參數 參數信息
-Wall: 輸出所有的警告信息。
-O: 在編譯時進行優化。
-g: 表示編譯debug版本。
基本寫法 filestat: filestat.o
gcc filestat.o -o filestat filestat.o:
gcc -c filestat.c clean:
rm -fr *.o *~ *.*~ filestat ---------------------------------------------- 改善之后的寫法 object = filestat.o // 使用目標文件
cc = gcc // 編譯器定義
cflags = -Wall -O -g // 編譯條件 filestat: $(object) // 由.o文件連接成 程序文件
$(cc) $(object) -o filestat filestat.o: // 由.c文件編譯成 目標文件
$(cc) $(cflag) -c filestat.c -o filestat.o clean:
rm -fr *.o *.*~ *~ filestat ----------------------------------------------optimization
cc = gcc
cflag = -Wall -O -g
TARGET = ./filestat
OBJECTS = $(patsubst %.c,%.o,$(wildcard *.c)) //將當前路徑中所有.c文件擴展替換為
wildcard( %.c); #將目錄中所有以.c后綴的文件名,存入一個列表變量中 patsubst( %.c, %.o, listvar); #表示將listvar中所有以.c為后綴的文件,改為以.o為后綴文件
%.o: %.c
$(cc) $(cflag) -c $< -o $@ //采用gcc -cflag -c第一個相關聯的文件 -o 目標文件 $(TARGET): $(OBJECTS)
$(cc) $(OBJECTS) -o $(TARGET) //將當前.o文件連接成目標程序文件
chmod a+x $(TARGET)
subsystem:
cd subdir && $(MAKE) // 進入子目錄進行make
clean:
rm -fr *.o $(TARGET) *~
======================================================
在test下,建立a.c和b.c2個文件,在sub目錄下,建立sa.c和sb.c2 個文件 建立一個簡單的makefile src=$(wildcard *.c ./sub/*.c) dir=$(notdir $(src)) obj=$(patsubst %.c,%.o,$(dir) ) obj2=$(dir:%.c=%.o) all: @echo $(src) @echo $(dir) @echo $(obj) @echo $(obj2) @echo "end" 第一行輸出:wildcard把指定目錄 ./ 和 ./sub/ 下的所有后綴是c的文件全部展開。 a.c b.c ./sub/sa.c ./sub/sb.c 第二行輸出:notdir把展開的文件去除掉路徑信息 a.c b.c sa.c sb.c 第三行輸出:patsubst把$(dir)中的變量符合后綴是.c的全部替換成.o, a.o b.o sa.o sb.o 第四行輸出:把變量dir中的每一個值結尾用o替換掉c a.o b.o sa.o sb.o
linux跟蹤調試
-Wall 使用它能夠使GCC產生盡可能多的警告信息 1、Linux下的大多數函數都默認: 頭文件放到/usr/include/目錄下 而庫文件則放到/usr/lib/目錄下 -I 選項:增加頭文件目錄 -L 選項:增加庫文件目錄 gdb調試程序 1.顯示數據:print或p 變量print *指針 2.查看數組:人為數組:查看內存中變量h后面的10個整數: print h@10 3.設置斷點:b line-or-func if testvalue==100 顯示斷點:info b 刪除斷點:delete b 1 4.執行: next:單步執行 setp:進入一個內部函數 finish:跳出該內部函數 list列出下面要執行的源代碼 run 開始調試程序 set 變量//給該變量賦值 pype 顯示一個數據結構的內容(C的結構或函數) p/x i //按16進制顯示變量內容,/c按字符/ x/ //examine簡拼為x,n是內存的長度,f 表示顯示的格式,u 表示從當前地址往后請求的字節數 x/3uh 0x54320//表示查看0x54320后面3個字節長度按照無符號 自動顯示: display display/ display/
SSH的使用Linux與Linux之間傳送文件: scp LocalFile username@remoteIP:[path or remoteFile] scp p2p-tracker root@124.127.108.231:/usr/share/p2p-tracker/
subversion的使用
安裝subversion sudo apt-get install subversion subversion-tools
1、將文件checkout到本地目錄
svn checkout path(path是服務器上的目錄)例如:svn checkout svn://192.168.1.1/pro/domain #表示將url中的文件checkout到本地
簡寫:svn co
2、往版本庫中添加新的文件
svn add file例如:svn add test.php(添加test.php) #將test.php添加到svn上面,其路徑是當前目錄所在svn路徑 #add之后commit才能真正將文件加入到svn上面
3、將改動的文件提交到版本庫
svn commit -m "LogMessage"
例如:svn commit -m "add file" test.php #只提交test.php文件
例如:svn ci #提交當前目錄所有的文件
4、加鎖/解鎖
svn lock -m "LockMessage" [--force] PATH例如:svn lock -m "lock test file" test.php
svn unlock PATH
5、更新到某個版本
svn update -r m path例如:
svn update如果后面沒有目錄,默認將當前目錄以及子目錄下的所有文件都更新到最新版本。
svn update -r 200 test.php(將版本庫中的文件test.php還原到版本200)
svn update test.php(更新,于版本庫同步。如果在提交的時候提示過期的話,是因為沖突,需要先update,修改文件,然后清除svn resolved,最后再提交commit)
簡寫:svn up
6、查看文件或者目錄狀態
1)svn status path(目錄下的文件和子目錄的狀態,正常狀態不顯示)【?:不在svn的控制中;M:內容被修改;C:發生沖突;A:預定加入到版本庫;K:被鎖定】
2)svn status -v path(顯示文件和子目錄狀態)
第一列保持相同,第二列顯示工作版本號,第三和第四列顯示最后一次修改的版本號和修改人。
注:svn status、svn diff和 svn revert這三條命令在沒有網絡的情況下也可以執行的,原因是svn在本地的.svn中保留了本地版本的原始拷貝。
簡寫:svn st
7、刪除文件
svn delete path -m "delete test fle"例如:svn delete svn://192.168.1.1/pro/domain/test.php -m "delete test file"
或者直接svn delete test.php 然后再svn ci -m ‘delete test file‘,推薦使用這種
簡寫:svn (del, remove, rm)
8、查看日志
svn log path例如:svn log test.php 顯示這個文件的所有修改記錄,及其版本號的變化
9、查看文件詳細信息
svn info path例如:svn info test.php
10、比較差異
svn diff path(將修改的文件與基礎版本比較)例如:svn diff test.php
svn diff -r m:n path(對版本m和版本n比較差異)
例如:svn diff -r 200:201 test.php
簡寫:svn di
11、將兩個版本之間的差異合并到當前文件
svn merge -r m:n path例如:svn merge -r 200:205 test.php(將版本200與205之間的差異合并到當前文件,但是一般都會產生沖突,需要處理一下)
12、SVN 幫助
svn helpsvn help ci
——————————————————————————
以上是常用命令,下面寫幾個不經常用的
——————————————————————————
13、版本庫下的文件和目錄列表
svn list path顯示path目錄下的所有屬于版本庫的文件和目錄
簡寫:svn ls
14、創建納入版本控制下的新目錄
svn mkdir: 創建納入版本控制下的新目錄。
用法: 1、mkdir PATH…
2、mkdir URL…
創建版本控制的目錄。
1、每一個以工作副本 PATH 指定的目錄,都會創建在本地端,并且加入新增
調度,以待下一次的提交。
2、每個以URL指定的目錄,都會透過立即提交于倉庫中創建。
在這兩個情況下,所有的中間目錄都必須事先存在。
15、恢復本地修改
svn revert: 恢復原始未改變的工作副本文件 (恢復大部份的本地修改)。revert:
用法: revert PATH…
注意: 本子命令不會存取網絡,并且會解除沖突的狀況。但是它不會恢復
被刪除的目錄
16、代碼庫URL變更
svn switch (sw): 更新工作副本至不同的URL。
用法: 1、switch URL [PATH]
2、switch –relocate FROM TO [PATH...]
1、更新你的工作副本,映射到一個新的URL,其行為跟“svn update”很像,也會將
服務器上文件與本地文件合并。這是將工作副本對應到同一倉庫中某個分支或者標記的
方法。
2、改寫工作副本的URL元數據,以反映單純的URL上的改變。當倉庫的根URL變動
(比如方案名或是主機名稱變動),但是工作副本仍舊對映到同一倉庫的同一目錄時使用
這個命令更新工作副本與倉庫的對應關系。
17、解決沖突
svn resolved: 移除工作副本的目錄或文件的“沖突”狀態。
用法: resolved PATH…
注意: 本子命令不會依語法來解決沖突或是移除沖突標記;它只是移除沖突的
相關文件,然后讓 PATH 可以再次提交。
18、輸出指定文件或URL的內容。
svn cat 目標[@版本]…如果指定了版本,將從指定的版本開始查找。
svn cat -r PREV filename > filename (PREV 是上一版本,也可以寫具體版本號,這樣輸出結果是可以提交的)
RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成