目錄??????開講之前我們先慶祝我國贏得38金牌。??????中國加油!!?????? 

??1、前言 操作系統(tǒng)演進如下: 1、無操作系統(tǒng) 人工操作,用戶獨占,CPU等待人工操作,資源利用率很低。 2、批處理系統(tǒng) 無需等待人工操作,批量輸入任務,資源利用率提升,多道程序設計。 3、分時系統(tǒng) 人-機交互,多用戶共享,及時調試程序,資源利用率提升。 多道程序設計設計: 早起批處理系統(tǒng)只能一次處理一個任務,多道程序設計使得批處理系統(tǒng)可以一次處理多個任務。對多道程序的管理是操作系統(tǒng)的重要功能。 多道程序設計是指在計算機內存中同時存放多個程序。 多道程序在計算機的管理程序之下相互穿插運行。
操作系統(tǒng)對多道程序的管理分為五大功能: ??2、操作系統(tǒng)概述 ??2.1、操作系統(tǒng)概念 操作系統(tǒng)是管理計算機硬件和軟件資源的計算機程序;管理配置內存、決定資源供需順序、控制輸入輸出設備等;操作系統(tǒng)提供 讓用戶和系統(tǒng)交互的操作界面。該定義不局限于計算機。 ??2.2、操作系統(tǒng)的基本功能 處理器資源、存儲器資源、IO設備資源、文件資源。操作系統(tǒng)統(tǒng)一管理這這些計算機資源。 用戶無需面向硬件接口編程。 IO設備管理軟件,提供讀寫接口。 文件管理軟件,提供操作文件接口。 實現(xiàn)了對計算機資源的抽象。 提供了用戶于計算機之間的接口。 圖像窗口形式、命令形式、系統(tǒng)調用形式。 ??2.3、操作系統(tǒng)的相關概念 并發(fā)性 并行是指兩個或多個事件可以在同一個時刻發(fā)生,并發(fā)是指兩個或多個事件可以在同一個時刻間隔發(fā)生。 對于單處理器來說,有兩個程序交替運行,兩個程序并發(fā)關系;對雙處理器來說,兩個程序可同一時刻運行,是并行關系,但是對于單個核心,依然是并發(fā)關系。 共享性 表現(xiàn)為操作系統(tǒng)中的資源可供多個并發(fā)的程序共同使用,這種共同使用的形式稱之為資源共享。 資源共享根據屬性可以分為兩種方式:互斥共享形式、同時訪問形式。 互斥共享: 當資源被程序或進程A占用時,只有A使用完之后,其他才可以使用(如打印機); 同時訪問: 某種資源在一段時間內并發(fā)地被多個程序訪問。 虛擬性 虛擬性表現(xiàn)為把一個物理實體轉變?yōu)槿舾蓚€邏輯實體,虛擬的技術主要有時分復用技術 和空分復用技術 。 時分復用技術: 資源在時間上進行復用,不同程序并發(fā)使用,多道程序分時使用計算機的硬件資源,提高資源的利用率。其中虛擬處理器技術是借用多道程序設計為每個程序建立進程,多個程序分時復用處理器;虛擬設備技術是物理設備虛擬為多個邏輯設備,每個程序占用一個邏輯設備,多個程序并發(fā)訪問。 空分復用技術: 用來實現(xiàn)虛擬磁盤、虛擬內存等,提高資源的利用率,提升編程效率。 異步性 表現(xiàn)為多道程序環(huán)境下,允許多個進程并發(fā)執(zhí)行;進程在使用資源時可能需要等待或放棄;進程的執(zhí)行并不是一氣呵成的,而是以走走停停的形式推進。 ??3、進程管理之進程實體 ??3.1、為什么需要進程 進程是系統(tǒng)進行資源分配和調度的基本單位。 進程作為程序獨立運行的載體保障程序正常執(zhí)行。 進程的存在使得操作系統(tǒng)的資源利用率大幅提升。
??3.2、進程的實體 標識符,唯一標記一個進程,用于區(qū)別其他進程。 狀態(tài),標記進程的進程狀態(tài),如:運行態(tài)。 程序計數器,程序即將被執(zhí)行的下一條指令的地址。 內存指針,程序代碼、進程數據相關指針。 上下文數據,進程執(zhí)行時處理器存儲的數據 。 IO狀態(tài)信息,被進程IO操作所占用的文件列表。 記賬信息,使用處理器時間、時鐘數總和等。 進程控制塊(PCB): 用于描述和控制進程運行的通用數據結構,記錄進程當前狀態(tài)和控制進程運行的全部信息。是使得進程能夠獨立運行的基本單位。 PCB是操作系統(tǒng)進行調度進程會被讀取的信息,PCB是常駐內存的,存放在系統(tǒng)專門開辟的PCB區(qū)域內。 進程(Process)與線程(Thread): 一個進程可以有多個線程。線程是操作系統(tǒng)進行運行調度的最小單位,包含在進程之中,是進程中實際運行工作的單位。一個進程可以并發(fā)多個線程,每個線程執(zhí)行不同的任務。
| 進程 | 線程 |
---|
資源 | 資源分配的基本單位 | 不擁有資源 | 調度 | 獨立調度的基本單位 | 獨立調度的最小單位 | 系統(tǒng)開銷 | 進程系統(tǒng)開銷大 | 線程系統(tǒng)開銷小 | 通信 | 進程IPC | 讀寫同一進程數據通信 |
??4、進程管理之五狀態(tài)模型 ??4.1、就緒狀態(tài) 當進程被分配到除CPU以外所有必要的資源后,只要再獲得CPU的使用權,就可以立即運行。 其他資源都準備好,只差CPU資源的狀態(tài)為就緒狀態(tài)。 在一個系統(tǒng)中多個處于就緒狀態(tài)的進程通常排成一個隊列。
??4.2、執(zhí)行狀態(tài) ??4.2、執(zhí)行狀態(tài) ??4.3、阻塞狀態(tài) ??4.4、創(chuàng)建狀態(tài) 操作系統(tǒng)提供fork函數接口 創(chuàng)建進程 ??4.5、終止狀態(tài) ??5、進程管理之進程同步 需要同步的原因:實現(xiàn)進程彼此之間的同步,對競爭資源在多進程間進行使用次序的協(xié)調,使得并發(fā)執(zhí)行的多個進程之間可以有效使用資源和相互合作。 ??5.1、進程間同步的原則 臨界資源: 臨界資源指的是一些雖作為共享資源卻又無法同時被多個線程共同訪問的共享資源。當有進程在使用臨界資源時,其他進程必須依據操作系統(tǒng)額同步機制等待占用進程釋放該共享資源才可重新競爭使用資源。 為了對臨界資源使用進行約束,有四個使用原則: 同步方法: 消息隊列 共享存儲 信號量(詳見下文) ??5.2、線程同步 進程內多線程也需要同步 線程同步的方法: 互斥量 讀寫鎖 自旋鎖 條件變量(詳見下文) ??6、Linux的進程管理 ??6.1、Linux進程相關概念 進程的類型: 前臺進程 后臺進程 守護進程。 **前臺進程:**具有終端,可以和用戶交互的進程。 **后臺進程:**與前臺進程相對,沒有占用終端的就是后臺進程;后臺程序基本上不和用戶交互,優(yōu)先級比前臺進程低,不影響前臺進程。將需要執(zhí)行的命令以“&”符號結束。 **守護進程:**守護(daemon)進程是特殊的后臺進程;很多守護進程在系統(tǒng)引導的時候啟動,一直運行知道系統(tǒng)關閉。crond hhtpd sshd mysqld等。 進程名字以'd’結尾的一般都是守護進程。 進程的標記 進程ID是進程的唯一標識,每個進程擁有不同的ID。 進程ID表現(xiàn)為一個非負整數,最大值由操作系統(tǒng)限定。 top命令查看系統(tǒng)進程。 ID為0的進程為idle進程,是系統(tǒng)創(chuàng)建的第一個進程。 ID為1的進程是init進程,是0號進程的子進程,完成系統(tǒng)初始化。 Init進程是所有用戶進程的祖先進程。 進程的狀態(tài)標記 狀態(tài)符號 | 狀態(tài)說明 |
---|
R | (TASK_RUNNING),進程正處于運行狀態(tài) | S | (TASK_INTERRUPTIBLE),進程正處于睡眠狀態(tài) | D | (TASK_UNINTERRUPTIBLE),進程正處于IO等待的睡眠狀態(tài) | T | (TASK_STOPPED),進程正處于暫停狀態(tài) | Z | (TASK_DEAD or EXIT_ZOMBIE),進程正處于退出狀態(tài),或僵尸進程 |
man ps 命令顯示進程相關的命令說明 后臺運行一個python程序,打印該進程狀態(tài) S狀態(tài),處于睡眠狀態(tài)  ??6.2、操作Linux進程的相關命令 ps命令: ps 列出當前的進程
ps aux 打印進程詳細信息
ps -u root 查看root用戶進程
ps -aux | grep 'pyhton3' 查看python3進程。
ps -ef --forest 可打印進程父子狀態(tài)。
ps -aux --sort=pcpu 按cpu頻率查看進程 pmem 按內存排序。
top命令: 1、 2500毫秒刷新一次TOP內容,總共5次,輸出內容存放到performace.txt文件中 top -b -d 2.5 -n 5 > performace.txt 注:要將內容輸出到文件中,必須使用-b,表示批處理選項
2、 TOP命令如何快速按%CPU、%MEM、TIME+列排序 a) %CPU:使用大寫字母按鍵:P
b) %MEM:使用大寫字母按鍵:M
c) T IME+使用大寫字母按鍵: T1234512345 注:TOP默認排序為倒序,如果確實需要升序排序,可以使用大寫字母按鍵:R
3、TOP命令中顯示其它列值、將兩列互換等 a). 選擇顯示列或隱藏列:使用小寫字母按鍵:f
c). 交換列顯示順序:使用小寫字母按鍵: o
b). 選擇需要排序的列:使用大寫字母按鍵:F kill命令:  數字表示信號的序號,字符串表示信號名稱,傳送信號時可以使用信號序號也可以使用信號名稱。
◆傳送信號時使用kill命令,語法如下: kill -信號序號 PID,如:kill -9 1234 kill -信號名稱 PID,如:kill -SIGKILL 1234 或者 kill -KILL 1234 PID是指進程號,這樣該進程會收到對應的信號,如果要對信號進行特殊的處理可以自定義,否則會按照默認的。 ◆常用的信號 信號名稱 | 信號序號 | 說明 |
---|
INT | 2 | 按Ctrl-C鍵產生該信號,中斷程序 | TERM | 15 | kill命令默認傳送該信號(即kill PID),終止程序 | KILL | 9 | 強制刪除進程,一般kill PID無效時,使用kill -9 PID強制結束進程 | TSTP | 20 | 按Ctrl-C鍵產生該信號,在終端中暫停該進程。 |
??7、作業(yè)管理之進程調度進程調度是指計算機通過決策哪個就緒進程可以獲得CPU使用權。 進程調度的三種機制 : 1、就緒隊列的排隊機制 將就緒進程按照一定的方式排成隊列,以便調度程序可以最快找到就緒進程。 2、選擇運行進程的委派機制 調度程序以一定的策略選擇就緒進程,將CPU資源分配給它。 3、新老進程的上下文切換機制 保存當前進程的上下文信息,裝入被委派執(zhí)行進程的運行上下文。 如果進程調度時候,老進程還沒執(zhí)行完,有兩種調度方式: 1、非搶占式的調度搶 處理器一旦分配給某個進程,就讓該進程一直使用下去,調度程序不以任何原因搶占正在被使用的處理器,直到進程完成工作或因為IO阻塞才會讓出處理器。 2、搶占式的調 允許調度程序以一定的策略暫停當前運行的進程,保存好進程的上下文信息,分配處理器給新進程。
| 搶占式調度 | 非搶占式調度 |
---|
系統(tǒng)開銷 | 頻繁切換、開銷大 | 切換次數少、開銷小 | 公平性 | 相對公平 | 不公平 | 應用 | 通用系統(tǒng) | 專用系統(tǒng) |
??7.1、進程調度的算法先來先服務調度算法 優(yōu)先取出隊列前面的進程進行調度。 短進程優(yōu)先調度算法 調度程序優(yōu)先選擇就緒隊列中估計運行時間最短的進程,短進程優(yōu)先調度算法不利于長作業(yè)進程的執(zhí)行。 高優(yōu)先權先調度算法 進程附帶優(yōu)先權,調度程序優(yōu)先選擇權重高的進程,高優(yōu)先權優(yōu)先調度算法使得緊迫的任務可以優(yōu)先處理。 時間片輪轉調度算法 按先來先服務的原則排 列就緒進程,每次從隊列頭部去除待執(zhí)行進程,分配一個時間片執(zhí)行,是相對公平的調度算法,但不能保證及時響應用戶。 ??8、作業(yè)管理之死鎖 **死鎖:**死鎖是指兩個或兩個以上的線程在執(zhí)行過程中,由于競爭資源或者由于彼此通信而造成的一種阻塞的現(xiàn)象,若無外力作用,它們都將無法推進下去。此時稱系統(tǒng)處于死鎖狀態(tài)或系統(tǒng)產生了死鎖,這些永遠在互相等待的進程稱為死鎖進程。 ??8.1、死鎖的產生1、競爭資源:共享資源數量不滿足各個進程的需求,各個進程之間發(fā)生資源進程導致死鎖。 2、調用順序不當。 死鎖產生的四個必要條件:
1、互斥條件 進程對資源的使用時排他性的使用,某資源只能由一個進程使用,其他進程需要使用只能等待。 2、請求保持條件 進程至少保持一個資源,又提出新的資源請求,新資源被占用,被阻塞的進程不釋放自己保持的資源。 3、不可剝奪條件 進程獲得的資源在未完成使用前不能被剝奪,獲得的資源只能由進程自身釋放。 4、環(huán)路等待條件 發(fā)生死鎖時,必然存在進程-資源環(huán)形鏈。 ??8.2、死鎖的處理 預防死鎖的方法 破壞四個必要條件之一 1、摒棄請求保持條件 系統(tǒng)規(guī)定進程運行之前,一次性申請所有需要的資源,進程在運行期間不會提出資源請求,從而摒棄請求保持條件。 2、摒棄不可剝奪條件 當一個進程請求新的資源得不到滿足時,必須釋放占有的資源,進程運行時占有的資源可以被釋放,意味著可以被剝奪。 3、摒棄環(huán)路等待條件 可用資源線性排序,申請必須按照需要遞增申請,線性申請不再形成環(huán)路,從而摒棄了環(huán)路等待條件。 銀行家算法 策略原理: 客戶申請的貸款是有限的,每次申請需要申請最大資金量,銀行家在能夠滿足貸款時,都應該給用戶貸款,客戶在使用貸款后,能夠及時歸還貸款。 
??9、存儲管理之內存分配與回收早期計算機編程并不需要過多的存儲管理,隨著計算機和程序越來越復雜,存儲管理成為必要。 存儲管理的作用: 確保計算機有足夠的內存 處理數據。 確保程序可以從可用內存中獲取一部分內存使用。 確保程序可以歸還使用后的內存以供其他程序使用。
??9.1、內存分配的過程單一連續(xù)分配是最簡單的內存分配方式,只能在單用戶、單進程的操作系統(tǒng)中使用。 固定分區(qū)分配:支持多道程序的最簡單存儲分配方式,內存空間被劃分為若干固定大小的區(qū)域,每個分區(qū)只提供給一個程序使用,互不干擾。 **動態(tài)分區(qū)分配:**根據進程實際需要,動態(tài)分配內存空間,涉及相關數據結構、分配算法。 動態(tài)分區(qū)空閑表數據結構:將內存分為若干個分區(qū),用一張表來表示分區(qū)使用情況:  0表示沒有被占用,1表示被占用。 動態(tài)分區(qū)空閑鏈數據結構: 通過鏈把未被使用的分區(qū)以節(jié)點的形式連接起來,同時相鄰的分區(qū)節(jié)點可以進行合并,節(jié)點需記錄可存儲容量。  動態(tài)分區(qū)分配算法: 首次適應算法(FF算法):分配內存時從開始順序查找適合內存區(qū),若沒有合適的空閑區(qū),則該次分配失敗。每次從頭部開始,使得頭部空間不斷被劃分。 最佳適應算法(BF算法):最佳適應算法要求空閑鏈表按照容量大小排序,遍歷空閑區(qū)鏈表找到最佳合適空閑區(qū)。  快速適應算法(QF算法):快速適應算法要求有多個空閑區(qū)鏈表,每個空閑區(qū)鏈表存儲一種容量的空閑區(qū)。  ??9.2、內存回收的過程
| 情況1 | 情況2 | 情況3 | 情況4 |
---|
| … | … | … | … |
| 空閑區(qū)1 | 回收區(qū) | 空閑區(qū)1 | … |
| 回收區(qū) | 空閑區(qū)1 | 回收區(qū) | 回收區(qū) |
| … | … | 空閑區(qū)2 | … |
| … | … | … | … | 解決方案 | 不需要新建空閑鏈表節(jié)點,只需要把空閑區(qū)1的容量增大為空閑區(qū)即可 | 將回收區(qū)與空閑區(qū)合并,新的空閑區(qū)使用回收區(qū)的地址 | 將空閑區(qū)1、空閑區(qū)2和回收區(qū)合并,新的空閑區(qū)使用空閑區(qū)1的地址 | 為回收區(qū)創(chuàng)建新的空閑節(jié)點,插入到相應的空閑區(qū)鏈表中去 |
??10、存存儲管理之段頁式存儲管理 ??10.1、頁式存儲管理頁面和字塊都是大小一樣的一塊內存,字塊是相對物理設備的定義,頁面則是相對邏輯空間的定義。 概念: 將進程邏輯空間等分成若干大小的頁面,相應的把物理內存空間分成與頁面大小的物理塊,以頁面為單位把進程空間裝進物理內存中分散的物理塊。  頁面大小應該適用,過大難以分配,過小內存碎片過多,頁面大小通常是512B~8K 頁表:記錄進程邏輯空間與物理空間的映射 在現(xiàn)代計算機系統(tǒng)中,可以支持非常大的邏輯地址空間(232~264),這樣,頁表就變得非常大,要占用非常大的內存空間,如,具有32位邏輯地址空間的分頁系統(tǒng),規(guī)定頁面大小為4KB,則在每個進程中的頁表項可達1M(220)個,如果每個頁表項占用1Byte,故每個進程僅僅頁表就要占用1MB的內存空間。 32位系統(tǒng)進程的尋址空間是4G,4G/4KB=220。 但是如果有一段連續(xù)的邏輯分布在多個頁面中,將大大降低執(zhí)行效率。 ??10.2、段式存儲管理 將進程邏輯空間劃分成若干段(非等分),段的長度由連續(xù)邏輯的長度決定,主函數MAIN、子程序段X、子函數Y等。  段表相比頁表多了段長,用來記錄邏輯長度。 對比: 段氏存儲和頁式存儲都離散地管理了進程的邏輯空間 頁是物理單位,段是邏輯單位。 分頁是為了合理利用空間,分段是滿足用戶要求。 頁大小由硬件固定,段長度可動態(tài)變化。 頁表信息是一維的,段表信息是二維的。
??10.3、段頁式存儲管理 分頁可以有效提高內存利用率(雖然說存在頁內碎片),分段可以更好滿足用戶需求,兩者結合,形成段頁式存儲管理。 先將邏輯空間按段式管理分成若干段,再把段內空間按頁式管理等分成若干頁。  ??11、存儲管理之虛擬內存虛擬內存 是操作系統(tǒng)內存管理的關鍵技術,使得多道程序運行和大程序運行成為現(xiàn)實,把程序使用內存劃分,將不封暫時不使用的內存放置在輔存。
程序的局部性原理 指的是CPU訪問存儲器時,無論是存取指令還是存取數據,所訪問的存儲單元都趨于聚集在一個較小的連續(xù)區(qū)域中。
程序運行時,無需全部裝入內存,裝載部分即可,如果訪問頁不在內存,則發(fā)出缺頁中斷,發(fā)起頁面置換、從用戶層面看,程序擁有很大的空間,即是虛擬內存。 虛擬內存實際是對物理內存的補充,速度接近于內存,成本接近于輔存。 虛擬內存的置換算法: 先進先出算法(FIFO)、最不經常使用算法(LFU)、最近最少使用算法(LRU)。主存和輔存的替換。
在計算機組成原理中有提到這些算法,應用于高速緩存與主存的替換。在這里將著重對比兩種替換而不是算法。 ??12、Linux的存儲管理 ??12.1、Buddy內存管理算法Buddy算法是經典的內存管理算法,算法基于計算機處理二進制的優(yōu)勢具有極高的效率,算法主要是為了解決內存外碎片 的問題,實際上是將內存外碎片問題轉移為了內存內碎片的問題。 頁內碎片是已經被分配出去(能明確指出屬于哪個進程)的內存空間大于請求所需的內存空間,不能被利用的內存空間就是內部碎片。 頁外碎片是指還沒有分配出去(不屬于任何進程),但是由于太小而無法分配給申請內幕才能空間的新進程的內存空間塊。 該算法努力讓內存分配與相鄰內幕才能合并能快速進行,內存分配原則: 伙伴系統(tǒng): '伙伴’指的是內存的'伙伴’,一片連續(xù)內存的'伙伴’是相鄰的另一片大小一樣的連續(xù)內存。 假設存儲空間有1M大小,來分配100k的內存: 1、100k向上取2的冪; 2、 查詢是否有128k的空閑內存塊; 3、 沒有!查詢是否有256k空閑內存塊; 4、沒有!查詢是否有512k空閑內存塊; 5、沒有!查詢是否有1M的空閑內存塊; 6、有,摘下1M空閑內存塊,分配出去; 7、拆下512k放在512k的空閑鏈表,其余的分配出去; 8、拆下256k放在256k的空閑鏈表,其余的分配出去; 9、拆下128k的空閑鏈表,其余的分配出去; 10、分配完畢; 回收剛才分配的內存: 1、判斷剛才分配的內存伙伴在空閑鏈表上嗎? 2、 在!移除伙伴,合并為256k空閑內存,判斷 3、 在!移除伙伴,合并為512k空閑內存,判斷; 4、 在!移除伙伴,合并為1M空閑內存; 5、插入1M空閑鏈表,回收完成; ??13、Linux交換空間交換空間(Swap)是磁盤的一個分區(qū),Linux物理內存滿時,會把一些內存交換至Swap空間,Swap空間是初始化系統(tǒng)時配置的。top命令可以查詢到: 冷啟動內存依賴。 系統(tǒng)睡眠依賴。 大進程空間依賴。
交換空間與虛擬內存對比: Swap空間存在于磁盤,虛擬內存也存在于磁盤。 Swap空間與主存發(fā)生置換 ,虛擬內存也是與主存發(fā)生置換。 Swap空間是操作系統(tǒng)概念,虛擬內存是進程概念。 Swap空間解決系統(tǒng)物理內存不足的問題,虛擬內存解決物理內存不足的問題。
??14、操作系統(tǒng)的文件管理 ??14.1、文件的邏輯結構 有結構文件:有結構內容由定長記錄和可變長記錄組成,定長記錄存儲格式、文件描述等結構化數據項,可變長記錄存儲文件具體內容:
比如png圖片文件,分為png文件標記、png數據塊和文件結束標記。定長記錄存儲文件格式、文件描述等結構化數據項,如png文件標記和文件結束標記。可變長記錄存儲文件具體內容。 無結構文件: 也稱為流式文件,文件內容長度以字節(jié)為單位,比如exe,dll,so文件等。 順序文件: 順序文件是指按順序存放在存儲介質中的文件,磁帶的存儲特征使得磁帶文件只能存儲順序文件,順序文件是所有邏輯文件當中存儲效率最高的。 索引文件: 可變長文件不適合使用順序文件格式存儲,索引文件是為了解決可變長文件存儲而發(fā)明的一種文件格式,索引文件需要配合索引表完成存儲的操作。 ??15、輔存的存儲空間分配輔存的分配方式  空閑表: 空閑盤區(qū)分分配與內存分配類似,首次適應算法、循環(huán)適應算法等,回收過程也與內存回收類似。 空閑鏈表: 空閑鏈表法把所有空閑盤區(qū)組成一個空閑鏈表,每個鏈表節(jié)點存儲空閑盤塊和空閑的數目。 位示圖: 每個盤塊有0/1比特位表示是否被占用。位示圖維護成本低,位示圖可以非常容易找到空閑盤塊,位示圖使用0/1比特位,占用空間很小。該方法在輔存中最為常用。 目錄管理  任何文件或目錄都只有唯一路徑 例如 A/D/M ??16、Linux文件基本操作 ??16.1、Linux目錄 Linux一切皆是文件  絕對路徑 相對路徑 ??16.2、Linux文件常用操作創(chuàng)建文件 touch 文件名 創(chuàng)建并修改文件 vim 文件名 查看文件vim 也可以使用cat 文件名 刪除文件 rm 文件名 創(chuàng)建文件夾 mkdir名字 刪除文件夾 rm -r 名字 ??16.3、Linux文件類型Linux有這些文件類型:套接字(s)、普通文件(-)、目錄文件(d)、符號鏈接(l)、設備文件(b、c)、FIFO§。 通過ls -al可以查看文件屬性,首字母表示文件類型。其中b和c分別表示塊設備、字符設備。  ??17、Linux文件類型 ??17.1、文件系統(tǒng)概覽FAT、NTFS、EXT2/3/4 FAT(File Allocation Table),分為FAT16、FAT32等,微軟Dos/Windows使用的文件系統(tǒng),使用一張表來保存盤塊的信息。 NTFS(New Technology File System),WindowsNT環(huán)境的文件系統(tǒng),NTFS對FAT進行了改進,取代了舊的文件系統(tǒng)。Windows、Linux、MacOS均可識別。 EXT(Extended file system),擴展文件系統(tǒng)。Linux的文件系統(tǒng)。數字表示第幾代。Window不能識別。 ??17.2、Ext文件系統(tǒng) Boot Sector:啟動扇區(qū),安裝開機管理程序。Block Group:塊組,存儲數據的實際位置。
每一個Block Group有這些信息:  Inode Table:存放文件Inode的地方,每一個文件(目錄)都有一個Inode,是每一個文件(目錄)的索引節(jié)點, 也是該文件唯一標記。Inode存放了文件類型、文件權限、文件物理地址、文件長度、文件連接計數、文件存取時間、文件狀態(tài)、索引節(jié)點編號、訪問計數、鏈接指針等等。 需要注意的是文件名不是存放在Inode節(jié)點上的,而是存放在目錄的Inode節(jié)點,目的在于列出目錄文件的時候無需加載文件的Inode。 Inode bitmap,Inode的位示圖,記錄已分配的Inode和未分配的Inode。 Data block,存放文件內容的地方,每個block都有唯一的編號,文件的block記錄在文件的Inode上 Block bitmap,功能與Inode bitmap類似,記錄Data block的使用情況。 Superblock,記錄整個文件系統(tǒng)相關信息的地方,Block和Inode的使用情況,時間信息、控制信息等。 df -T 查看系統(tǒng)掛載的磁盤信息 dumpe2fs 設備名 查看其中的文件系統(tǒng)信息。
stat 文件名 查看具體的文件信息。 
??18、操作系統(tǒng)的設備管理 ??18.1、廣義的IO設備對CPU而言,凡是對CPU進行數據輸入的都是輸入設備,對CPU而言,凡是CPU進行數據輸出的都是輸出設備。 可以分別按使用特性分類、按設備的共享屬性分類、按信息交換的單位分類、按傳輸速率分類。 使用特性分類:存儲設備(內存、硬盤等)、交互IO設備(鍵盤、顯示器等)。 信息交換單位分配:塊設備(磁盤、SD卡)、字符設備(打印機、shell終端)。 共享屬性分類:共享設備、獨占設備、虛擬設備。 傳輸速率分類:低速設備、中速、高速。 ??18.2、IO設備緩沖區(qū)CPU與IO設備的速率不匹配問題,所以有個各個存儲器的層次結構。而緩沖區(qū)也是為了解決這個問題,它可以減少CPU處理IO請求的頻率,提高CPU與IO設備之間的并行性。 可以把需要多次交互的請求放入一個緩沖區(qū),將多個請求寫入緩沖區(qū),減少交互次數。 緩沖池:專用緩沖區(qū)只適用于特定的IO進程,當這樣的IO進程比較多時,對內存的消耗也很大,操作系統(tǒng)劃出可供多個進程使用的公共緩沖區(qū),稱之為緩沖池。 ??18.3、SPOOLing技術是一種慢速字符設備如何與計算機主機交換信息的一種技術,利用高速共享設備將低俗的獨享設備模擬為高速的共享設備。邏輯上,系統(tǒng)為每一個用戶都分配了一臺獨立的高速獨享設備,所以這是一種虛擬設備技術。  假設有三個進程要使用打印機,同步調用的效率會比較低。從磁盤中劃出一部分空間叫輸出井,各個進程將調用請求放入輸出井,由SPOOLing技術來完成輸出井到打印機的交互。
SPOOLing技術把同步調用的低速設備改為異步調用
總結起來該技術就是: 在輸入、輸出之間增加了派對轉存儲環(huán)節(jié)(輸入井、輸出井)。 SPOOLing負責輸入(出)井與低速設備之間的調用。 邏輯上,進程直接與高速設備交互,減少了進程等待時間。
??19、Linux文本編輯器及軟件安裝Nano文本編輯器 復制、剪貼和粘貼 復制一整行:Alt+6 剪貼一整行:Ctrl+K 粘貼:Ctrl+U 如果需要復制/剪貼多行或者一行中的一部分,先將光標移動到需要復制/剪貼的文本的開頭,按Ctrl+6(或者Alt+A)做標記,然后移動光標到 待復制/剪貼的文本末尾。這時選定的文本會反白,用Alt+6來復制,Ctrl+K來剪貼。若在選擇文本過程中要取消,只需要再按一次Ctrl+6。 搜索 按Ctrl+W,然后輸入你要搜索的關鍵字,回車確定。這將會定位到第一個匹配的文本,接著可以用Alt+W來定位到下一個匹配的文本。 保存 使用Ctrl+O來保存所做的修改 退出 按Ctrl+X nano file
可以直接路徑,沒有該文件的話,就會創(chuàng)建一個再編輯。 配置nano編輯器 單個用戶配置: 一般通過/home/username路徑下的.nanorc文件修改。nano .nanorc 配置語言以set開頭: # 相當于命令后面加 -m 參數 鼠標生效set mouse# 相當于 -i 參數 自動縮進set autoindent# 激活職能home鍵 -A參數set smarthome123456123456 全局配置: /etc/nanorc文件中修改(root用戶)sudo nano /etc/nanorc 配置終端: 單個用戶的終端配置文件/home/username/.bashrc nano ~/.bashrc bash其實是一種shell,shell用于解釋我們輸入終端的各種命令的,是用戶和操作系統(tǒng)之間的一個命令解釋器。 配置.bashrc文件可以修改終端的各種配置,如命令提示符樣式,創(chuàng)建命令別名 # 創(chuàng)建別名 alias xx='command'alias ll='ls -alF'alias la='ls -A'alias l='ls -CF'12341234 全局配置的路徑:/etc/bash.bashrc,但是家目錄下的優(yōu)先級高于系統(tǒng)的bash.bashrc文件。 profile配置文件 單個用戶:~/.profile ,全局/etc/profile 。 bashrc應用于圖形化終端,profile應用于TTY1-TTY6這種需要用戶登錄的終端。profile文件會調用.bashrc。  bashrc 和 profile二者修改后都是下次登陸生效,需要立即生效使用source命令:
source .bashrcsource .profile ??20、Ubuntu軟件倉庫對于ubuntu系統(tǒng),在全世界各地分布有軟件倉庫。Linux的.deb軟件包相較于windows的exe安裝包文件,包含了依賴關系的管理,對于依賴的軟件會自動下載。 管理軟件倉庫 如果我們要切換軟件倉庫,可以通過編輯軟件倉庫列表文件/etc/apt/sources.list(root模式) 一般來說,這個文件中有作用的行是由以下兩個指令開頭: # 舉例其中一行deb http://cn.archive./ubuntu/ bionic universe1212 第二個是倉庫地址,第三個bionic是Ubuntu版本代號,第三個universe是軟件倉庫的區(qū)域,也就是要查看的代碼倉庫的不同分區(qū)。 Ubuntu圖形界面中software&update中可以直接切換軟件倉庫,更加方便。 ??21、終端包管理工具apt-get/apt 管理包命令
aptitude :這個命令再卸載軟件時可以卸載不用的依賴
sudo apt update 更新軟件包緩存;sudo apt-cache search 搜索軟件包;sudo apt install 安裝軟件包; sudo apt upgrade 升級所有已安裝軟件包;sudo apt autoremove
dpkg 命令時apt-get和aptitude兩個命令的后端(backend)命令
依賴鏈:dpkg-->apt-get,aptitude-->Ubuntu Software 使用dpkg可以安裝本地的軟件包:sudo dpkg -i *.deb ,卸載:sudo dpkg -r 包名 ??22、閱讀手冊man命令 例如man ls,會出現(xiàn)ls命令的使用說明。手冊的各部分區(qū)域說明: NAME 命令的全稱 SYNOPSIS 概要,使用此命令的方法 ls [OPTION]... [FILE]...  粗體:原封不動輸入。
下劃線:用實際內容替代。 [-hvc] 中括號內為可選參數。
a|b 輸入a或b選項。
OPTION參數,省略號表示可輸入多個參數。 DESCRIPTION 列出所有參數和用法 其他區(qū)域:AUTHOR, REPROTIONG BUGS, COPYRIGHT, SEE ALSO apropos查找命令 apropos命令后面添加關鍵字即可(根據手冊中的關鍵字) 例如需要查找控制音量的方法 apropos sound  ??23、其他查閱手冊的方法很多命令都支持-h 參數 比man命令的內容稍顯簡便 whatis命令 man的精簡版,顯示man的NAME區(qū)域 文件查找命令 locate命令 查找速度極快,查找包含關鍵字的文件。 locate xxx
會查找并列出xxx(目錄或文件名包含xxx)所在的所有目錄。 缺陷:如果是剛新建的文件locate是查不到的,因為locate不是查找硬盤,是在數據庫(包含文件的列表和文件的位置)中查找記錄。對于剛創(chuàng)建的文件,沒有更新進數據庫(一般24小時自動更新) 當然也可以用updatedb命令強制系統(tǒng)立即更新數據庫 sudo updatedb 。 find命令深入查找 遍歷實際的硬盤的文件,還可以對查找的文件進行操作。 查找文件要完全對應關鍵字,但是可以用正則匹配 功能強大。 find 默認當前子目錄查找,也可以指定目錄查找;用文件名、創(chuàng)建時間等查找;最后可以對找到的文件進行操作。 例如:find -name 'new_file' 根據名字查找當前目錄的文件 ; find /var/log -name 'syslog' 查找其他目錄的文件; 根據文件大小查找 find /var -size +10M 查找/var目錄下大于10m的文件。
根據文件的最近訪問時間查找 find -name '*.txt' -atime -7 查找7天內訪問的txt文件。
僅查找目錄或文件 find -name 'file1' -type d 查找名為file1的目錄
操作查找結果 格式化輸出:find -name 'file1' -printf '%p - %u\n' 將查找到的文件格式化輸出為文件名 - 用戶名 的形式。 刪除操作:xxx -delete 調用其他命令: 加上-exec 參數之后就可以接其他命令了,十分強大 # 將/var目錄下的所有txt文件修改權限為600find /var -name '*.txt' -exec chmod 600 {} \; 大括號表示剛查找到的文件,\; 是exec的結尾。 將-exec 參數換成-ok 參數效果一樣,但是會對每個文件都做確認提示!
|