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