天天看點

資訊安全系統設計基礎第三周學習總結

第三周(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

資訊安全系統設計基礎第三周學習總結

關閉高亮

資訊安全系統設計基礎第三周學習總結

第六講小結

資訊安全系統設計基礎第三周學習總結

擷取幫助資訊

資訊安全系統設計基礎第三周學習總結

建立啟動腳本

資訊安全系統設計基礎第三周學習總結

補全功能

資訊安全系統設計基礎第三周學習總結

第七講小結

資訊安全系統設計基礎第三周學習總結

練習操作以及截圖:

打入代碼

資訊安全系統設計基礎第三周學習總結
資訊安全系統設計基礎第三周學習總結
資訊安全系統設計基礎第三周學習總結
資訊安全系統設計基礎第三周學習總結
資訊安全系統設計基礎第三周學習總結

建議多加一項:加載實驗樓虛拟環境所花費的時間