第三周(9.21-9.27):
20135321 餘佳源
學習計時:共8小時 讀書:1 代碼:3 作業:3 部落格:1 |
一、學習目标 |
1. 熟悉Linux系統下的開發環境 2. 熟悉vi的基本操作 3. 熟悉gcc編譯器的基本原理 4. 熟練使用gcc編譯器的常用選項 5 .熟練使用gdb調試技術 6. 熟悉makefile基本原理及文法規範 7. 掌握靜态庫和動态庫的生成 |
vim編輯器
vim模式介紹
從vi演生出來的Vim具有多種模式,這種獨特的設計容易使初學者産生混淆。幾乎所有的編輯器都會有插入和執行指令兩種模式,并且大多數的編輯器使用了與Vim截然不同的方式:指令目錄(滑鼠或者鍵盤驅動),組合鍵(通常通過control鍵(CTRL)和alt鍵(ALT)組成)或者滑鼠輸入。Vim和vi一樣,僅僅通過鍵盤來在這些模式之中切換。這就使得Vim可以不用進行菜單或者滑鼠操作,并且最小化組合鍵的操作。對文字錄入員或者程式員可以大大增強速度和效率。
Vim具有6種基本模式和5種派生模式,我們這裡隻簡單介紹下6種基本模式:
- 普通模式(Normal mode)
在普通模式中,用的編輯器指令,比如移動光标,删除文本等等。這也是Vim啟動後的預設模式。這正好和許多新使用者期待的操作方式相反(大多數編輯器預設模式為插入模式)。
Vim強大的編輯能來自于其普通模式指令。普通模式指令往往需要一個操作符結尾。例如普通模式指令dd删除目前行,但是第一個"d"的後面可以跟另外的移動指令來代替第二個d,比如用移動到下一行的"j"鍵就可以删除目前行和下一行。另外還可以指定指令重複次數,2dd(重複dd兩次),和dj的效果是一樣的。使用者學習了各種各樣的文本間移動/跳轉的指令和其他的普通模式的編輯指令,并且能夠靈活組合使用的話,能夠比那些沒有模式的編輯器更加高效的進行文本編輯。
在普通模式中,有很多方法可以進入插入模式。比較普通的方式是按a(append/追加)鍵或者i(insert/插入)鍵。
- 插入模式(Insert mode)
在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新使用者希望文本編輯器編輯過程中一直保持這個模式。
在插入模式中,可以按ESC鍵回到普通模式。
- 可視模式(Visual mode)
這個模式與普通模式比較相似。但是移動指令會擴大高亮的文本區域。高亮區域可以是字元、行或者是一塊文本。當執行一個非移動指令時,指令會被執行到這塊高亮的區域上。Vim的"文本對象"也能和移動指令一樣用在這個模式中。
- 選擇模式(Select mode)
這個模式和無模式編輯器的行為比較相似(Windows标準文本控件的方式)。這個模式中,可以用滑鼠或者光标鍵高亮選擇文本,不過輸入任何字元的話,Vim會用這個字元替換選擇的高亮文本塊,并且自動進入插入模式。
- 指令行模式(Command line mode)
在指令行模式中可以輸入會被解釋成并執行的文本。例如執行指令(:鍵),搜尋(/和?鍵)或者過濾指令(!鍵)。在指令執行之後,Vim傳回到指令行模式之前的模式,通常是普通模式。
- Ex模式(Ex mode)
這和指令行模式比較相似,在使用:visual指令離開Ex模式前,可以一次執行多條指令。
這其中我們常用到就是普通模式、插入模式和指令行模式,本課程也隻涉及這三個常用模式的内容
2.三種常用模式的切換
vim啟動進入普通模式,處于插入模式或指令行模式時隻需要按Esc或者Ctrl+[(這在vim課程環境中不管用)即可進入普通模式。普通模式中按i(插入)或a(附加)鍵都可以進入插入模式,普通模式中按:進入指令行模式。指令行模式中輸入wq回車後儲存并退出vim。
三、進入vim
1.使用vim指令進入vim界面
vim後面加上你要打開的已存在的檔案名或者不存在(則作為建立檔案)的檔案名。 打開Xfce終端,輸入以下指令
$ vim practice_1.txt
直接使用vim也可以打開vim編輯器,但是不會打開任何檔案。
$ vim
進入指令行模式後輸入:e 檔案路徑 同樣可以打開相應檔案。
2.遊标移動
在進入vim後,按下i鍵進入插入模式。在該模式下您可以輸入文本資訊,下面請輸入如下三行資訊:
12345678
abcdefghijk
shiyanlou.com
按Esc進入普通模式,在該模式下使用方向鍵或者h,j,k,l鍵可以移動遊标。
按鍵 | 說明 |
h | 左 |
l | 右(小寫L) |
j | 下 |
k | 上 |
w | 移動到下一個單詞 |
b | 移動到上一個單詞 |
請嘗試在普通模式下使用方向鍵移動光标到shiyanlou這幾個字母上面。
四、進入插入模式
1.進入插入模式
在普通模式下使用下面的鍵将進入插入模式,并可以從相應的位置開始輸入
指令 | |
i | 在目前光标處進行編輯 |
I | 在行首插入 |
A | 在行末插入 |
a | 在光标後插入編輯 |
o | 在目前行後插入一個新行 |
O | 在目前行前插入一個新行 |
cw | 替換從光标所在位置後到一個單詞結尾的字元 |
請嘗試不同的從普通模式進入插入模式的方法,在最後一行shiyanlou前面加上www.,注意每次要先回到普通模式才能切換成以不同的方式進入插入模式
五、儲存文檔
1.指令行模式下儲存文檔
從普通模式輸入:進入指令行模式,輸入w回車,儲存文檔。輸入:w 檔案名可以将文檔另存為其他檔案名或存到其它路徑下
六、退出vim
1.指令行模式下退出vim
從普通模式輸入:進入指令行模式,輸入wq回車,儲存并退出編輯
以下為其它幾種退出方式:
:q! | 強制退出,不儲存 |
:q | 退出 |
:wq! | 強制儲存并退出 |
:w <檔案路徑> | 另存為 |
:saveas 檔案路徑 | |
:x | 儲存并退出 |
:wq |
2.普通模式下退出vim
普通模式下輸入Shift+zz即可儲存退出vim
七、删除文本
1.普通模式下删除vim文本資訊
進入普通模式,使用下列指令可以進行文本快速删除:
x | 删除遊标所在的字元 |
X | 删除遊标所在前一個字元 |
Delete | 同x |
dd | 删除整行 |
dw | 删除一個單詞(不适用中文) |
d$或D | 删除至行尾 |
d^ | 删除至行首 |
dG | 删除到文檔結尾處 |
d1G | 删至文檔首部 |
除此之外,你還可以在指令之前加上數字,表示一次删除多行,如:
2dd表示一次删除2行
我們來做如下練習:
$ cp /etc/protocols .
$ vim protocols
練習截圖:

Vim practice_1.txt并編輯
嘗試強制退出
嘗試退出
嘗試儲存并退出
嘗試另存為practice_2.txt
練習:8dd
d$
Linux基礎
1 Linux指令
如果使用GUI,Linux和Windows沒有什麼差別。Linux學習應用的一個特點是通過指令行進行使用。
登入Linux後,我們就可以在#或$符後面去輸入指令,有的時候指令後面還會跟着選項(options)或參數(arguments)。即Linux中指令格式為:
command [options] [arguments] //中括号代表是可選的,即有些指令不需要選項也不需要參數
選項是調整指令執行行為的開關,選項不同決定了指令的顯示結果不同。
參數是指指令的作用對象。
如ls指令,ls或ls .顯示是目前目錄的内容,這裡“.”就是參數,表示目前目錄,是預設的可以省略。我們可以用ls -a .顯示目前目錄中的所有内容,包括隐藏檔案和目錄。其中“-a” 就是選項,改變了顯示的内容,如下圖所示:
以上簡要說明了選項及參數的差別,但具體Linux中哪條指令有哪些選項及參數,需要我們靠經驗積累或者檢視Linux的幫助了。
2 man指令
不論學習程式設計還是Linux指令,掌握幫助文檔的使用都是很重要的,是舉一反三的重要途徑。 man是manul的縮寫,我們可以通過man man來檢視man的幫助,如下圖:
幫助文檔包含:
1 Executable programs or shell commands(使用者指令幫助)
2 System calls (系統調用幫助)
3 Library calls (庫函數調用幫助)
4 Special files (usually found in /dev)
5 File formats and conventions eg /etc/passwd(配置檔案幫助)
6 Games
7 Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7)
8 System administration commands (usually only for root)
9 Kernel routines [Non standard]
解釋一下:
1是普通的Linux指令
2是系統調用,作業系統的提供的服務接口
3是庫函數, C語言中的函數
5是指檔案的格式,比如passwd, 就會說明這個檔案中各個字段的含義
6是給遊戲留的,由各個遊戲自己定義
7是附件還有一些變量,比如向environ這種全局變量在這裡就有說明
8是系統管理用的指令,這些指令隻能由root使用,如ifconfig
結合後面學習的grep 指令和管道,可以多關鍵字查找:
man -k key1 | grep key2 | grep key3 | ...
3 cheat 指令
man 雖然很重要,但有些指令看了幫助還不會用,初學者需要例子,cheat就是這個身邊的小抄。 cheat 指令不是Linux自帶的,大家參考這篇文章(英文版)安裝,實驗樓課程實驗系統中已經安裝了。
cheat是作弊,小抄的意思。
cheat指令是在GNU通用公共許可證下,為Linux指令行使用者發行的互動式備忘單應用程式。它提供顯示Linux指令使用案例,包括該指令所有的選項和簡短但尚可了解的功能。
使用cheat指令作弊是可以的。:)
4 其他核心指令
和查找相關的核心指令還有find,locate,grep,whereis,which,其中:
- find查找一個檔案在系統中的什麼位置,locate是神速版本的find(Windows下有個Everything工具和locate類似).
- grep 可以對檔案全文檢索,支援正規表達式,正規表達式也是一個重要的元知識。
- whereis,which告訴你使用的指令工具裝在什麼地方。
上面的指令包括man -k有一個共同特點就是基于“搜尋”,學好了可以舉一反三,大家重點學習,掌握了他們,其他指令就可以自學了。你用 “man find”, “cheat find”試試。
5 課程相關Linux指令
練習及操作圖檔:
Man man指令
找函數
Linux下C語言程式設計基礎
VIMTUTOR
一、實驗目的
1. 熟悉Linux系統下的開發環境
2. 熟悉vi的基本操作
3. 熟悉gcc編譯器的基本原理
4. 熟練使用gcc編譯器的常用選項
5 .熟練使用gdb調試技術
6. 熟悉makefile基本原理及文法規範
二、實驗步驟
1. 快捷鍵
Ubuntu中:
2. vim
VIM是一個非常好的文本編輯器,很多專業程式員使用VIM編輯代碼,即使以後你不編寫程式,隻要跟文本打交道,都應該學學VIM,可以浏覽參考一下普通人的編輯利器——Vim。
VIM學習曲線非常陡峭,各種編輯器學習曲線如下圖(有調侃的意思):
VIMTUTOR是個實踐教程,通過實踐30分鐘讓你對VIM編輯器入門,隻要在指令行中輸入vimtutor,然後跟着教程練習就可以了。如下圖:
程式員有幾個鍵提示一下:
·
大寫“K”可以用來查找函數的幫助資訊:檢視 man page,指令模式下,将光标放在函數名上,按"K"可以直接察看 man page。
幾個設定
:set nu 顯示行号
:set ai 自動縮行
:set ts=4 設定一個 TAB 鍵等于幾個空格
移動光标
[[ 轉到上一個位于第一列的"{"
]] 轉到下一個位于第一列的"{"
{ 轉到上一個空行
} 轉到下一個空行
gd 轉到目前光标所指的局部變量的定義
深入學習參考:
簡明 Vim 練級攻略
七個高效的文本編輯習慣(以Vim為例)(視訊)
所需即所獲:像 IDE 一樣使用 vim
VIM教程與學習資料彙總
3. gcc
GNU CC(簡稱為gcc)是GNU項目中符合ANSI C标準的編譯系統,能夠編譯用C、C++和Object C等語言編寫的程式。gcc又是一個交叉平台編譯器,它能夠在目前CPU平台上為多種不同體系結構的硬體平台開發軟體,是以尤其适合在嵌入式領域的開發編譯。
GCC編譯代碼的過程如下:
我們可以把編譯過程分成四步,以編譯hello.c生成可執行檔案hello為例,如下圖:
- 預處理:gcc –E hello.c –o hello.i;gcc –E調用cpp
- 編 譯:gcc –S hello.i –o hello.s;gcc –S調用ccl
- 彙 編:gcc –c hello.s –o hello.o;gcc -c 調用as
- 鍊 接:gcc hello.o –o hello ;gcc -o 調用ld
編譯過程比較難記,我們簡化一下,前三步,GCC的參數連起來是“ESc”,相應輸入的檔案的字尾是“iso”,這樣記憶起來就容易多了。
學習GCC的另外一個重點是:參考教材《深入了解計算機系統》 7.6,7.10節,學習靜态庫,動态庫的制作。
4. gdb
建議使用CGDB,比GDB好用,熟悉VC的調試方式,可以使用DDD。 注意使用GCC編譯時要加“-g”參數。 參考gdb參考卡GDB最基本的指令有:
- gdb programm(啟動GDB)
- b 設斷點(要會設4種斷點:行斷點、函數斷點、條件斷點、臨時斷點)
- run 開始運作程式
- bt 列印函數調用堆棧
- p 檢視變量值
- c 從目前斷點繼續運作到下一個斷點
- n 單步運作
- s 單步運作
- quit 退出GDB
問題:GDB的n(next)指令讓GDB執行下一行,然後暫停。 s(step)指令的作用與此類似,隻是在函數調用時step指令會進入函數,那麼實際使用中應該優先選用哪個?為什麼?
其他幾個我認為應該掌握的調試指令有:
- display 跟蹤變量值的改變
- until 跳出循環
- finish 跳出函數
- help 幫助
學習參考:
- 陳皓的GDB教程用GDB調試程式
- 軟體調試的藝術(電子版)
5. make與makefile
三、練習
1.練習vimtutuor至少一遍;
2.使用vim 輸入以下代碼,聯系使用“K”查找幫助文檔:
3.練習gcc編譯運作代碼;
4.練習gdb調試代碼;
5.把上述代碼中除了main函數外的代碼制作成一個靜态庫math.a和一個共享庫math.so;
6.編寫makefile,讓代碼編譯,上述靜态庫和共享庫的使用自動化。
作業以及操作截圖:
删除文本
成功删除
文本編輯之插入
成功插入
文本編輯之添加
添加完成
編輯檔案
Vim 【檔案名】進行編輯,:wq儲存退出
第一講小結
删除類指令
删改成功
運用d$删除到行末
更多的删除指令
使用計數指定動作
使用計數删除更多
撤銷類指令
指令撤銷
完成修改之後撤銷
第二講小結
置入類指令
成功歸位
替換類指令
修改完畢
更改類指令
成功修改
使用c更改更多
第三講小結
定位及檔案狀态
搜尋類指令
成功查找
逆向查找用?
配對括号的查找:按%進行括号配對的查找
替換指令
成功替換
全部替換
第四講小結
在VIM執行外部指令的方法
嘗試!dir
關于儲存檔案的更多資訊
建立一個TEST
删除TEST
成功删除TEST
一個具有選擇性的儲存指令
提取和合并檔案
:r TEST + :r !ls
第五講小結
打開類指令
小o下方插入
大O上方插入
附加類指令
插入完成:先e找單詞末尾 再小a進入下一個字元的插入
另一個置換類指令的版本
複制粘貼文本
成功複制粘貼
注意yw可以複制一個單詞
設定類指令的選項
Hlsearch即highlightsearch
關閉高亮
第六講小結
擷取幫助資訊
建立啟動腳本
補全功能
第七講小結
練習操作以及截圖:
打入代碼
建議多加一項:加載實驗樓虛拟環境所花費的時間