信息安全系统设计基础第期中学习总结
第一部分——Linux命令
1、 man命令
· 在 Linux 環(huán)境中,如果你遇到困難,可以使用man 命令,它是Manual page的縮寫。要查看相應區(qū)段的內容,就在 man 后面加上相應區(qū)段的數字即可
· man命令通常與管道命令結合使用
man -k k1 | grep k2 | grep 2
· man -k 填空:Linux中顯示文件(file )屬性(status)的命令是( stat )
數據結構中有線性查找算法,C標準庫中沒有這個功能的函數,但Linux中有,這個函數是(lfind或lsearch)
2、grep命令
· 用于查找內容包含指定的范本樣式的文件,如果發(fā)現某文件的內容符合所指定的范本樣式,預設grep指令會把含有范本樣式的那一列顯示出來。若不指定任何文件名稱,
或是所給予的文件名為“-”,則grep指令會從標準輸入設備讀取數據。
· -n:在顯示符合范本樣式的那一列之前,標示出該列的列數編號。
-r:為遞歸查找
· grep 填空:
~/test 文件夾下有很多c源文件,查找main函數在哪個文件中的命令( grep main .c )
Linux Bash中,使用grep查找當前目錄下.c中main函數在那個文件中的命令是( grep main *.c )
查找宏 STDIN_FILENO 的值的命令是(grep -nr XXX /usr/include)
3、cheat命令
· cheat是非常好用的“打小抄”搜索工具,能夠方便的告訴你你想要的內容。
· 填空:
To list the content of /path/to/foo.tgz archive using tar ( tar -jtvf /path/to/foo.tgz )
使用du命令對當前目錄下的目錄或文件按大小排序 的命令是( du -sk *| sort -rn )
一、文件管理類命令:
1 cat命令
· 使用方式:cat [-AbeEnstTuv] [--help] [--version] fileName
說明:把檔案串連接后傳到基本輸出
· 參數:
-n 由 1 開始對所有輸出的行數編號
-b 和 -n 相似,只不過對于空白行不編號
-s 當遇到有連續(xù)兩行以上的空白行,就代換為一行的空白行
· 判斷:Linux Bash中,cat -n 和 nl 命令功能等價。對
2 find命令
· 用法 : find
使用說明: 將檔案系統內符合 expression 的檔案列出來。你可以指要檔案的名稱、類別、時間、大小、權限等不同資訊的組合,只有完全相符的才會被列出來。
· 范例:
將目前目錄及其子目錄下所有延伸檔名是 c 的檔案列出來:# find . -name "*.c"
將目前目錄其其下子目錄中所有一般檔案列出:# find . -ftype f
將目前目錄及其子目錄下所有最近 20 分鐘內更新過的檔案列出:# find . -ctime -20
· find 填空:
查找當前目錄下所有目錄的find命令是(find . -type d)
查找當前目錄下2天前被更改過的文件 (find . -mtime +2 -type f -print)
3 locate命令:
· 使用方式: locate [-q] [-d ] [--database=]
說明:locate 讓使用者可以很快速的搜尋檔案系統內是否有指定的檔案。其方法是先建立一個包括系統內所有檔案名稱及路徑的數據庫,之后當尋找時就只需查詢這個數
據庫,而不必實際深入檔案系統之中了。
二、文檔編輯類命令:
1 sort命令
· 將文本文件內容加以排序。可針對文本文件的內容,以行為單位來排序。
· 參數:
-m:將幾個排序好的文件進行合并。
-n:依照數值的大小排序
· Linux Bash中,ls . | sort 命令的功能是( 顯示當前目錄內容并排序 )
三、磁盤管理類命令
1 du命令
· 顯示目錄或文件的大小。du會顯示指定的目錄或文件所占用的磁盤空間。
· 參數:
-a:顯示目錄中個別文件的大小。
-b:顯示目錄或文件大小時,以byte為單位。
-c: 除了顯示個別目錄或文件的大小外,同時也顯示所有目錄或文件的總和。
· 判斷:Linux Bash中,df和 du 命令功能等價。錯
2 ls命令
· 顯示指定工作目錄下之內容(列出目前工作目錄所含之檔案及子目錄)。
· 參數:
-a 顯示所有檔案及目錄
-A 同 -a ,但不列出 "." (目前目錄) 及 ".." (父目錄)
-t 將檔案依建立時間之先后次序列出
· 列出目前工作目錄下所有檔案及目錄;目錄于名稱后加 "/", 可執(zhí)行檔于名稱后加 "*" : ls -AF
· 填空:
Linux Bash中,把ls命令顯示當前目錄的結果存入ls.txt的命令輸出重定向命令是(ls > ls.txt)
3 who命令
· 使用方式 : who - [husfV] [user]
說明 : 顯示系統中有那些使用者正在上面,顯示的資料包含了使用者 ID,使用的終端機,從那邊連上來的,上線時間,呆滯時間,CPU 使用量,動作等等。
· 參數 :
-h : 不要顯示標題列
-u : 不要顯示使用者的動作/工作
-s : 使用簡短的格式來顯示
第二部分——Linux編程基礎
一、vim編輯器
1 vim的三種模式:
命令行模式:只能移動光標,刪除,復制,粘貼
插入模式:編輯文字
底行模式:文件保存或退出,設置編輯環(huán)境
2 操作:
· 插入:i 在當前光標處進行編輯
I 在行首插入
A 在行末插入
a 在光標后插入編輯
o 在當前行后插入一個新行
cw 替換從光標所在位置后到一個單詞結尾的字符
· 保存文檔:進入命令行模式,輸入w回車,保存文檔;輸入:w 文件名可以將文檔另存為其他文件名或存到其它路徑下
· 退出vim:進入命令行模式,輸入wq回車,保存并退出編輯
3 剪切及粘貼:
· 刪除:dd刪除整行
· 復制:yy復制整行
· 粘貼:p
4 查找:
· 快速查找
· 高級查找
二、GCC
1 GCC編譯的四個步驟:
· 預處理(gcc -E)、編譯(gcc -S)、匯編(gcc -c)、鏈接, gcc 選項可以簡記為“ESc”,相應的產出文件的后綴可以簡記為“iso”
2 編譯過程:
· 預處理: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** 創(chuàng)建可執(zhí)行目標文件
3 gcc -m32 可以在64位機上生成32位的代碼
gcc -S xxx.c -o xxx.s 獲得匯編代碼,也可以用objdump -d xxx 反匯編; 注意函數前兩條和后兩條匯編代碼,所有函數都有,建立函數調用棧幀,應該理解、熟記。
三、GDB
1 使用GCC編譯時要加“-g”參數,然后才能夠用gdb調試
2 常用命令:
gdb programm(啟動GDB)
l 查看所載入的文件
b 設斷點
info 查看斷點情況
run 開始運行程序
bt 打印函數調用堆棧
p 查看變量值
c 從當前斷點繼續(xù)運行到下一個斷點
n 單步運行(不進入)
s 單步運行(進入)
quit 退出GDB
3 四種斷點(函數、行、條件、臨時)
4 判斷: gdb中next和step都可以單步跟蹤,根據自頂向下原則應該優(yōu)先選用step. 錯
詳細可以看書上3.11的內容
四、靜態(tài)庫和動態(tài)庫
1 靜態(tài)庫:
· 靜態(tài)庫的生成:ar rcsv libxxx.a xxx.o
· 靜態(tài)庫的使用: gcc -o main main.c -L. -lxxx 注意-L -l 的含義
· 創(chuàng)建它的可執(zhí)行文件
gcc -02 -c main2.c
gcc -static -o p2 main2.o ./libvector.a
· 參數:
gcc -c只編譯,不連接成為可執(zhí)行文件。
ar -r:在庫中插入模塊(替換)
-c:創(chuàng)建一個庫
-s:寫入一個目錄文件索引到庫中
2 動態(tài)庫:
· 動態(tài)庫的生成:gcc -fPIC -c xxx.c
gcc -shared -o libxxx.so xxx.o
· 共享庫的使用:gcc -o main main.c -L. -lxxx
3 靜態(tài)庫和動態(tài)庫的區(qū)別與聯系:
· 靜態(tài)函數庫:.a;
利用靜態(tài)函數庫編譯成的文件比較大,因為整個 函數庫的所有數據都會被整合進目標代碼中,
編譯后的執(zhí)行程序不需要外部的函數庫支持,因為所有使用的函數都已經被編譯進去了。
如果靜態(tài)函數庫改變了,那么你的程序必須重新編譯。
· 動態(tài)函數庫:.so;
動態(tài)函數庫在編譯的時候 并沒有被編譯進目標代碼中,你的程序執(zhí)行到相關函數時才調用該函數庫里的相應函數,因此動態(tài)函數庫所產生的可執(zhí)行文件比較小。
由于函數庫沒有被整合進你的程序,而是程序運行時動態(tài)的申請并調用,所以程序的運行環(huán)境中必須提供相應的庫。
動態(tài)函數庫的改變并不影響你的程序,所以動態(tài)函數庫的升級比較方便。
第三部分——教材內容復習整理
第一章——計算機漫游系統:
1.重要思想
·計算機系統中的所有信息都是位串表示的,所謂(信息)就是位+上下文。
·存儲器層次結構的主要思想是上層存儲器作為下層存儲器的(高速緩存)。
·操作系統中最基本的四個抽象是(虛擬機、進程、虛擬存儲器、文件)。
·查看源文件可以用od 命令 : od -tc -tx1 hello.c
·馮式結構,理解p6 CPU執(zhí)行指令的操作(加載、存儲、操作、跳轉)
·存儲系統的核心思想:緩存
第二章——信息的表示和處理:
1.重要思想
·這一章主要是一些關于計算機底層最基本的數值運算,在以前學習過的基礎上又新加了一些更專業(yè)更學術的方法
字節(jié)順序是網絡編程的基礎,記住小端是“高對高、低對低”,大端與之相反就可以了。
·IEEE浮點表示:標準 V=(-1)s*M*2E
符號:s 決定這個數是正數還是負數。
尾數:M 二進制小數。
階碼:E 對浮點數加權,權重是2 的E次冪。
·舍入:浮點運算只能近似的表示示數運算想要找到最接近x的值就是舍入,問題的關鍵在于在兩個可能的值中間確定舍入方向。
a.向偶數舍入:也叫向最接近的值舍入。是默認方法。將數字向上或向下舍入使的結果的最低有效數字是偶數。其他三種方式產生實際值的確界。
·學這章還是要會各種運算,補碼與反碼,有符號數和無符號數,整數和浮點數
第三章——程序的機器表示:
1.重要思想
·這一章類似于之前學過的匯編,有一些機器指令
對于機器級編程來說,兩種重要的抽象是(ISA,虛擬地址)
·數據傳送指令:MOV:源操作數復制到目的操作數。兩個操作數不能都指向寄存器
棧是一個數據結構,可以添加或刪除值,遵循后進先出的原則。
push壓入棧,pop刪除數據。可以插入和刪除元素的一端稱為棧頂。棧頂元素的地址是最低的
·傳送指令的三個變種:movb(傳送字節(jié))movw(傳送字)movl(傳送雙字)
·寄存器使用:
%eax,%edx,%ecx 調用者保存寄存器(Q可覆蓋,P的數據不會被破壞)
%ebx,%esi,%edi 被調用者保存寄存器(Q在覆蓋這些值前必須壓入棧并在返回前回復他們)
%ebp,%esp 慣例保持
%eax用來保存返回值
·棧幀指針:清楚每一句匯編語言棧幀指針都是如何變化的
第四章——處理器體系結構:
1.重要思想
·Y86指令集體系結構
能掌握指令編碼和字節(jié)序列之間的轉換
·確定字節(jié)編碼的方法:
?匯編碼表示的第一個字節(jié)前端的字節(jié)編碼
? 寄存器指示符字節(jié)
? 4字節(jié)常數反序
·Y86中,指令執(zhí)行分為六個階段(取指、譯碼、執(zhí)行、訪存、寫回、更新PC)
第六章——存儲器層次結構:
1.RAM運存:
·靜態(tài)(SRAM):
用來作為高速緩存存儲器。將每個位存儲在一個雙穩(wěn)態(tài)的存儲器單元里。
并無限期的保持在兩個狀態(tài)或配置之一。其他任何狀態(tài)都是不穩(wěn)定的。
在有干擾的情況下,當干擾消除電路恢復穩(wěn)定。
·動態(tài)(DRAM):用來作為主存以及圖形系統的幀緩沖區(qū)。將每個位存儲為對一個電容的充電。
對干擾十分敏感,當電容電壓被擾亂之后就不會恢復了。
靜態(tài)與動態(tài)的區(qū)別:
· 只要有供電SRAM就會保持不變,與DRAM不同不需要刷新
· SRAM的存取比DRAM快
· SRAM對抗干擾能力比DRAM強,而功耗更大
·要掌握有關磁盤的運算
·局部性
局部性又分為時間局部性和空間局部性,一個程序的好壞就看他的局部性是否良好
· 時間局部性:被引用過的存儲器的位置在將來可能被多次引用 (同一存儲器)
· 空間局部性:被引用過的存儲器的位置在將來可能引用附近一個存儲器的位置 (不同存儲器)
· 對于取指令來說,循環(huán)良好的時間和空間局部性,循環(huán)體越小,迭代次數越多,局部性越好。
· 順序引用模式:步長為1的引用模式。隨著步長的增加,空間局部性下降
2.
·存儲器層次結構
· 中心思想:位于k層的更小更快的存儲設備作為位于k+1層更大更慢的存儲設備的緩存
數據總是以塊大小為傳送單元在上下層之間來回拷貝。離CPU越遠,使用的塊越大。
·緩存命中:
當程序需要第k+1層的某個數據對象d時,首先在當前存儲在第k層的一個塊中查找d,如果d剛好緩存在第k層中,就稱為緩存命中。
該程序直接從第k層讀取d,比從第k+1層中讀取d更快。
·緩存不命中:
即第k層中沒有緩存數據對象d。這時第k層緩存會從第k+1層緩存中取出包含d的那個塊。如果第k層緩存已滿,就可能會覆蓋現存的一個塊
替換策略:隨機替換策略-隨機犧牲一個塊,最近最少被使用替換策略LRU-犧牲最后被訪問的時間距離現在最遠的塊。
·緩存不命中的種類
· 強制性不命中/冷不命中:第k層的緩存是空的(稱為冷緩存),對任何數據對象的訪問都不會命中。
· 沖突不命中:由于一個放置策略:將第k+1層的某個塊限制放置在第k層塊的一個小的子集中,這就會導致緩存沒有滿,但是那個對應的塊滿了。
· 容量不命中:當工作集的大小超過緩存的大小時,緩存會經歷容量不命中,就是說緩存太小了,不能處理這個工作集。
·高速緩存的:組相連,行匹配,字選擇
四、體會與不足
學了大半學期的計算機系統,剛開始被超級多的任務嚇到了有點措手不及不知道從哪下手,覺得這些都是艱澀難懂的知識,但是經過一段時間的學習會發(fā)現,這個跟以前學過的很多課都是相通的,比如匯編,和c語言。經過幾周下來找到了適合自己學習的方法,每周都會用一段特定的時間來認真讀這本書,因為我學知識消化吸收比較慢,如果中間有漏掉一部分內容會導致我后面的內容很難理解所以會用去很長的時間看書做筆記,讓自己理解的更透徹一點,這本書應該是我做筆記最多的一本書了哈哈。
自己的不足之處在于不會用這些知識,就比如每章的家庭作業(yè),雖然捋清了知識點但是不能靈活的運用,還有就是抓不住每章的重點。另外之前要在實驗樓里完成的幾個實驗我覺得自己做的不好,離開教程也就不知道該怎么做了。
老師在博客園里答疑的帖子好多都是精華,大家遇到的問題我也會遇到,經常看這些提問與解答也會幫助我解決問題。
參考資料
常用命令:http://itlab.idcquan.com/linux/special/linuxcom/
以前發(fā)過的博客和別人的優(yōu)秀博客
每周測驗的解析老師總結的每周的重點導讀:http://group.cnblogs.com/topic/73069.html
總結
以上是生活随笔為你收集整理的信息安全系统设计基础第期中学习总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#中DataTable中的Comput
- 下一篇: 阅读推荐——深入浅出Mesos