1. 程式人生 > >01-linux簡介

01-linux簡介

一、Linux發展簡史1、什麼是嵌入式作業系統?         嵌入式作業系統(Embedded Operating System,簡稱EOS):嵌入式系統是以應用為中心,以計算機技術為基礎,並且軟、硬體可裁剪,適用於對功能、可靠性、成本、體積、功耗有嚴格要求的專用性計算機系統。         嵌入式作業系統是一種用途廣泛的系統軟體,通常包括與硬體相關的底層驅動軟體、系統核心、裝置驅動介面、通訊協議、圖形介面、標準化瀏覽器等。

不同於以Windows為代表的個人PC作業系統,以Linux為代表的嵌入式作業系統具有以下特性:     1.專用性:     嵌入式作業系統的個性化很強,其中的軟體系統與硬體系統結合非常緊密,一般要針對特定的硬體進行系統開發移植,即使同一品牌、同一系列的產品也需要根據系統硬體的變化做出修改。     2.可裁剪:

    嵌入式作業系統不要求其功能設計上過於複雜。由於嵌入式系統一般針對小型電子裝置,系統資源有限,因此該產品非必要的功能需要儘可能的刪減。     3.高效可靠:     高實時性是嵌入式作業系統的基本要求,而且軟體程式碼也要求保證高質量與高可靠性。     4.應用廣泛     5.需要開發工具和環境:     嵌入式系統開發需要專用的開發工具與環境。由於其本身不具備自主開發能力,即使設計完成後使用者通常也不能對程式某功能進行修改,必須藉助一套專用的開發工具與環境才能進行開發。開發階段有“主機”和“目標機”的概念,主機用於程式開發,目標機作為最後的執行機。開發階段需要交替結合進行。

常見的嵌入式作業系統:Linux,Windows CE,VxWorks,Symbian,Android,Meego,chromeOS等

2、Linux系統簡介 1)一切要從UNIX系統講起         1969年,AT&T公司(美國電話電報公司)的貝爾實驗室與MIT合作開發了UNIX作業系統,旨在開發一個用於大型、並行、多使用者的作業系統。最早由Ken Thompson、Dennis Ritchie(同時也是C語言創始人)和Douglas McIlroy三人負責研發。 1971年,Ken Thompson向學院申請了一臺PDP-11/24機器(只有24K記憶體與500K磁碟),第一版的UNIX系統就誕生在這臺電腦上。同時著名的fork()系統呼叫(開啟多程序)也是在這一時間段出現的。 到了1973年,Ken Thompson與Dennis Ritchie深感使用匯編語言編寫系統移植太過頭疼,因此他們想採取高階程式語言完成UNIX系統的第三版。一開始他們試圖使用Fortran但是失敗了,後來Dennis Ritchie整合了BCPL語言形成B語言,然後在B語言的基礎上進行大幅度的修改,這就是大名鼎鼎的C語言。於是Dennis Ritchie成功的使用C語言完成了UNIX第三版核心的開發。而C語言與UNIX系統的完美連體,很快就成為了世界的主導。 2)UNIX系統版本內訌戰爭         20世紀70年代,AT&T開始注意到UNIX系統所帶來的商業價值。公司的律師開始著手保護UNIX系統並讓其成為了商業機密。從1979年的UNIXv7版本開始,UNIX禁止大學使用UNIX原始碼,包括在授課過程中學習與研究。1980年,UNIX分成了兩個版本線,一個是Berkeley的BSD UNIX版本,另一個是AT&T的UNIX版本。競爭最終引發了UNIX的戰爭。 1982年,Joy建立了SUN公司並提供了SunOS系統,而隨後幾年AT&T則釋出了UNIX System V的第一版。 3)Linux的橫空出世           林納斯·本納第克特·託瓦茲(Linus Benedict Torvalds, 1969年~ ),出生於芬蘭赫爾辛基市,著名的電腦程式設計師、黑客。在《時代》週刊根據讀者投票評選出的二十世紀100位最重要人物中,林納斯居然排到了第15位,而從20世紀的最後幾年就開始霸佔全球首富稱號的蓋茨不過才是第17位。 1991年4月,Linus為了讓自己寢室內的電腦執行與實驗室的電腦一樣的系統,開始研究minix(Unix系統的一個精簡版)系統。 1991年的10月5日,林納斯·託瓦茲在comp.os.minix新聞組上釋出訊息,正式向外宣佈Linux核心的誕生(Freeminix-like kernel sources for 386-AT)。 1993年,大約有100餘名程式設計師參與了Linux核心程式碼編寫/修改工作,其中核心組由5人組成,此時Linux 0.99的程式碼大約有十萬行,使用者大約有10萬左右。 1994年3月,Linux1.0釋出,程式碼量17萬行,採用GPL協議。

3、GNU與GPL1)GNU         GNU的英文全稱是"GNU is Not Unix"(遞迴縮寫,程式設計師的幽默),又稱革奴計劃,是由Richard Stallman在1983年9月27日公開發起的。它的目標是建立一套完全自由的作業系統。由於GNU在英文中原意為非洲牛羚,因此GNU計劃的圖示就是一個牛羚。 GNU計劃下的著名軟體有Linux系統、gcc編譯器、make工程管理器、OpenOffice辦公等2)GPL         GNU計劃認為任何軟體都應當以自由軟體釋出。要想讓一款軟體成為“自由軟體”,必須使用自由軟體許可證來發布。通常使用GPL(或與GPL相容的)許可證釋出。

GPL(GNU General Public License,GNU通用公共許可證)。GPL對GNU下的軟體有以下要求: 1.它要求軟體以原始碼的形式釋出,並規定任何使用者能夠以原始碼的形式將軟體複製或釋出給別的使用者。 2.如果使用者的軟體使用了受GPL保護的任何軟體的一部分,那麼該軟體就繼承了GPL軟體,並因此而成為GPL 軟體,也就是說必須隨應用程式一起釋出原始碼。 3.GPL並不排斥對自由軟體進行商業性質的包裝和發行,也不限制在自由軟體的基礎上打包發行其他非自由軟體。 4、脫穎而出的Linux系統——Ubuntu Ubuntu(中譯“烏班圖”)是一個以桌面應用程式為主的Linux系統,其名稱Ubuntu來自非洲南部祖魯語的"Ubuntu"一詞,意為“人性”“人道待人”“我的存在是因為大家存在”,是非洲的一種傳統價值觀,類似中國的“仁愛”“眾生平等”。 Ubuntu由馬克·舍特爾沃斯創立,其首個版本—4.10釋出於2004年10月20日,它以Debian為開發藍本。與Debian穩健的升級策略不同,Ubuntu每六個月便會發佈一個新版,其中每年4月釋出的為穩定版,10月釋出的為測試版(不穩定版)。有些帶有LTS字樣意為長期支援版。 2014年2月20日,Ubuntu作業系統正式登陸魅族MX3國際版。

二、Linux體系結構 Linux系統大致分為Linux核心、Shell、檔案系統、應用程式4大部分 1、核心         核心是作業系統的核心,具有一個作業系統最基本的功能,它負責管理系統的程序、記憶體、裝置驅動、檔案和網路系統,直接決定系統的效能與穩定性。 Linux系統核心大概可分為:記憶體管理部分、程序管理部分、裝置驅動管理部分、檔案系統部分和網路管理部分等。 1.系統呼叫介面(System Call Interface,簡稱SCI):系統呼叫提供了從使用者空間到核心的函式呼叫。 2.程序管理(Process Management):主要用於處理程序/執行緒虛擬化空間、建立、殺死、活動程序間資源共享等需求。 3.記憶體管理(Memory Management):核心負責管理可用記憶體的方式,以及物理和虛擬對映所使用的硬體機制。 4.虛擬檔案系統(Virtual File System,簡稱VFS):虛擬檔案系統是Linux核心中非常重要的組成部分,它提供了一個通用介面物件,隔離了系統呼叫介面與核心支援的檔案系統,在二者之間提供了一個交換層,這樣可以遮蔽不同檔案系統中對不同檔案讀寫操作的差異,簡化程式開發。 5.網路堆疊(Network Stack):網路系統的分層體系結構,例如傳輸控制協議(TCP/UDP)、網路協議(Internet Protocol,簡稱IP)等。 6.裝置驅動(Device Drivers):提供裝置驅動程式,用於運轉特定的硬體裝置。 7.依賴體系結構程式碼(Arch):Linux在執行時雖然採用獨立的體系結構,但是有些元素必須考慮特定體系結構才能正常操作並提高效率。arch子目錄內定義了核心原始碼中依賴於體系結構的部分。例如對於典型的桌面作業系統,使用i386目錄。 Linux核心用於控制程序、輸入與輸出、檔案系統操作、記憶體管理等,並且Linux核心支援多使用者、多工模式。 /**********Linux版本號***********/ 檢視當前計算機版本資訊:uname -a Linux的版本號有兩種版本: 第一種:由三個數字組成:r.x.y r:目前釋出的核心主版本 x:偶數表示穩定版,奇數表示測試版 y:錯誤補丁修補次數 主版本號在核心結構有較大變化時才會變更。 例如2009年釋出的2.6.27版,表示主版本為Linux2,穩定版,修訂了27次 第二種:major.minor.patch-build.desc 1.major:主版本號 2.minor:次版本號,新增功能時會發生變化;偶數表示穩定版,奇數表示測試版 3.patch:對次版本的修訂次數 4.build:表示編譯(或構建)次數,每次編譯可能對少量程式做優化修改但一般沒有大的功能性變化 5.desc:描述當前版本的資訊。例如一些核心版本中有SMP,表示多對稱處理器(Symmetric MultiProcessing)。

Linux版本號簡史: 0.02:1991年10月5日,Linus Torvalds將這個版本核心程式碼釋出到了Minix新聞組,很快得到了反應。Linus在其他熱心支持者的幫助下推出了第一個穩定工作版。 0.11:1991年12月8日,釋出在Internet上,已經是可以正常執行的核心版本。 0.95:1992年3月8日,加入了虛擬檔案系統 1.0:1994年3月14日,Linux核心開發團隊正式組建,Linux用於也越來越多 2.0:1996年2月9日 2.6:2003年12月17日,與之前的相比,首次支援多處理器運算和64位計算,支援高效率處理本機POSIX的執行緒庫(NPTL),改進了效能、安全、驅動程式等諸多方面。 有關不同核心版本資訊與下載,可以去Linux核心官網https://www.kernel.org/檢視更多資訊。 2、Shell Shell(中文翻譯為“殼”,為了區別於Kernel“核”)是Linux內的一個命令列直譯器,它為使用者提供使用介面,使用者在Shell內輸入指令,Shell接收使用者的指令然後呼叫相關程式或指令。 另一方面,Shell又是一種程式設計語言。作為一門解釋性語言,提供各種變數、引數、迴圈與分支等。 Shell基本上可以分為兩大類 1)圖形介面Shell:例如Gnome等 2)命令列式Shell:例如Bourne Shell(最早的Shell)、bash、csh以及Windows系統的cmd.exe等 有關Shell的具體介紹我們將在後續課程中講解。 3、其他作業系統元件 Linux還包括圖形使用者介面(GUI)、應用程式管理、程式設計工具(例如GCC、Java eclipse等)、配置伺服器等元件。這裡就不一一介紹。

三、Vim簡介 Linux系統內支援多種文字編輯器,常用的有gedit、OpenOffice、emacs等,但是使用最為廣泛的文字編輯器還是Vim Vim是Linux系統下一個功能強大、高度可定製的文字編輯器,它基於VI,同時又增加了許多新的特性。Vim與Emacs並列為類Unix系統使用者最喜歡的文字編輯器。 Vim的設計理念是“命令組合”。例如指令"2dd",其中2代表重複兩次,第一個d代表刪除,第二個d代表當前行。另外vim的許多快捷鍵與正則表示式類似(^ $等),方便記憶。 由於程式設計師在寫程式碼的時候雙手需要時刻停留在鍵盤上,因此Vim專門針對程式設計師進行了優化,例如分割視窗、多級撤銷、定位程式碼、控制游標等操作,這樣程式設計師的雙手就無需離開鍵盤去點選滑鼠。而且,Vim無需使用圖形化介面,這也就意味著對於某些極端情況(例如圖形桌面系統全面崩潰等)下,Vim是唯一一種可靠的編輯器。 //當然,還有很多人習慣於視覺化的編輯介面,習慣於使用滑鼠操作,對於這些人來說使用Vim反而效率低下,他們更傾向於諸如Notepad++等文字編輯器以及VS等IDE開發環境。 1、Vim指令——開始編輯 Vim有三種模式:命令模式、插入模式、底行模式。進入Vim的時候預設為命令模式,在這個模式下能對文字進行命令操作但是無法輸入文字。若想輸入文字需要進入到插入模式。從命令模式進入插入模式有以下幾種方式,雖然都是進入插入模式,但是有所區別(主要區別在於進入插入模式後的游標位置),使用的時候要選取合適的進入插入模式的方式。 從插入模式退出回到命令模式:按鍵ESC 新增(append,簡寫為a)     a:從游標所在位置後面開始新增     A:從游標所在行最後的地方開始新增 插入(insert,簡寫為i)     i:從游標所在位置前面開始插入     I:從游標行所在的第一個非空白字元前面開始插入 開始(open,簡寫為o)     o:在游標所在行的下一行新增一行並開始插入     O:在游標所在行的上一行新增一行並開始插入 2、Vim指令——刪除與修改 刪除字元     x:刪除游標所在字元(相當於delete)     X:刪除游標前面的字元(相當於backspace)     s:刪除游標所在字元並進入插入模式     S:刪除游標所在行並進入插入模式 刪除多個字元/行     dw:刪除游標所在單詞直至詞尾     dd:刪除游標所在行     dj:刪除游標所在行與下一行     cw或ce:刪除游標所在單詞在游標後的字元並進入插入模式     cb:刪除游標所在單詞在游標前的字元並進入插入模式     cc:刪除當前行並進入插入模式 3、Vim指令——儲存與退出     :q:檔案未修改,不儲存退出     :q!:檔案修改,不儲存強制退出     :wq:檔案修改,儲存退出     :x:等價於:wq     :w:存檔     :w 檔名:存入檔名的檔案中     :w! 檔名:強制存入檔名的檔案中 4、Vim指令——控制游標移動     b:移動到當前單詞開始     e:移動到當前單詞結尾     w:移動到下一個單詞     h:向前移動     j:向下移動     k:向上移動     l:向後移動 5、Vim指令——拷貝與貼上     yw:複製游標所在單詞在游標後的字元至剪貼簿     yy:複製當前行至剪貼簿     p:將剪貼簿內容貼上在游標後     P:將剪貼簿內容貼上在游標前 6、Vim指令——其他指令     u:撤銷操作     /關鍵字:查詢關鍵字,按n檢視下一個     .(小數點符號):重複你的上一個指令 有關Vim的指令還有很多,時間有限,不再介紹更多。有興趣的同學可以查閱相關資料。

四、Linux系統軟體包管理機制 最初的Linux系統沒有合理的軟體管理機制,應用程式開發者將二進位制程式直接傳送給使用者,使用者再逐一自行安裝。這樣做十分不便。 Debian系統首次提出了“軟體包”的管理機制——deb軟體包。deb軟體包將應用程式的二進位制檔案、配置檔案、幫助介面(man)等其他與軟體相關的檔案合併打包在一個檔案內,使用者使用軟體包就可以直接完成獲取、安裝、解除安裝、查詢、更新等系列操作。隨後,Redhat系統基於deb的概念也推出了自己的軟體包管理機制——rpm軟體包。 隨著Linux系統的不斷髮展壯大,軟體與軟體之間的依賴關係也愈發變得錯綜複雜,使用者在安裝軟體的時候十分麻煩。這時Debian系統又推出了軟體包管理器——APT。APT可以自動檢測軟體包間的依賴關係,並且可以利用internet自動獲取軟體包並安裝。APT的出現使得deb軟體包被廣泛地使用。由於Ubuntu系統是基於Debian系統研發的,因此Ubuntu系統也採用deb軟體包管理機制。 在Ubuntu系統內有兩種deb軟體包,分別為二進位制軟體包(常見為.deb字尾)和原始碼包(常見.dsc字尾)。可以使用file命令檢視軟體包的型別。 1、軟體包的命名規則 軟體包命名遵循以下規則: Filename_Version-Reversion_Architecture.deb 其中: Filename:軟體包名稱 Version:版本資訊 Reversion:修訂版本資訊 Architecture:體系架構 例如有軟體g++,軟體包名為g++_4.1.2-9ubuntu2_i386.deb,則 g++:軟體包名 4.1.2:軟體版本為4.1.2 9ubuntu2:修訂版本資訊 i386:基於x86架構 2、dpkg與APT 1)dpkg 在Ubuntu系統中,最常用的兩個管理軟體包的工具是dpkg和APT。 dpkg是最早的deb軟體包管理工具,他在Debian提出軟體包管理機制之後就誕生了。使用dpkg可以實現軟體包的安裝、編譯、解除安裝、打包等操作。由於當時系統與Internet的限制,dpkg的功能十分有限,它沒有考慮到未來軟體包間錯綜複雜的依賴關係以及如何幫助使用者從網路上獲取軟體包的問題,因此我們就發明了APT工具。 dpkg相關命令:     dpkg -i 軟體包名:安裝一個在本地檔案系統上的deb軟體包     dpkg -r 軟體包名:移除一個已安裝的軟體包     dpkg -P 軟體包名:移除已安裝的軟體包以及配置檔案     dpkg -L 軟體包名:列出安裝軟體包的清單     dpkg -s 軟體包名:顯示軟體包安裝狀態 2)APT(Advanced Packaging Tool) 由於dpkg有種種弊端,因此人們發明了APT來管理軟體包。APT系列工具可能是deb軟體包管理工具中功能最強大的工具。APT提供軟體包的安裝、更新、查詢、解除安裝、升級以及檢查依賴關係等一系列操作且無需用於操作,自動完成。 Ubuntu採用集中式倉庫機制管理軟體。將每種軟體分門別類地存放在不同的軟體倉庫中進行管理。然後將軟體倉庫存放在許許多多的映象伺服器內供使用者獲取。 由於每一位使用者所處的網路環境不同,因此不可能隨意訪問所有映象伺服器。為了選擇可訪問的伺服器,在Ubuntu系統中,檔案/etc/apt/sources.list用於配置最適合訪問的映象伺服器節點地址。但即便如此,配置檔案只是告知Ubuntu系統可以訪問哪些映象伺服器地址,但是該伺服器上有什麼地址卻並不清楚。因此在每個映象伺服器上都有一個軟體資源列表清單(索引檔案),以便使用者機查詢。同時,藉由索引檔案,APT還可以自動檢測軟體包之間的依賴關係,大大簡化了使用者安裝軟體的流程。因此,APT成為了Ubuntu系統內最受歡迎的軟體包管理工具。 APT的軟體包獲取地址檔案在/etc/apt/sources.list中,這個檔案本質上就是一個普通的文字檔案,在管理員授權下可以用任意文字編輯器編輯。 !!!注意!!!(這是一個悲傷的故事) 不要擅自修改該檔案內容,即使想修改也請事先做好備份工作 修改完畢後,儲存檔案後執行apt-get update命令更新配置檔案 APT提供一組命令供使用者選擇,以下是一些常見的命令: //注意:大多數的apt命令都需要管理員許可權執行,因此使用時常常與sudo一起使用     apt-get:最常用,用於管理軟體包,包括安裝、更新、解除安裝等操作     apt-cache:查詢軟體包資訊     apt-cdrom:安裝CD-ROM內軟體包     …… 在這些命令中,我們最常用的是apt-get。apt-get本身並沒有軟體包管理功能,而是提供了一個軟體包管理平臺,在該平臺上使用子命令來完成具體的操作任務。 1)apt-get命令格式: apt-get 子命令 [可選指令] 軟體包名 子命令:     update:下載更新軟體包列表資訊     upgrade:升級軟體包到最新版本     install:下載軟體包並安裝     remove:解除安裝軟體包     autoremove:自動解除安裝不滿足依賴關係的軟體包     source:下載原始碼     clean:刪除快取內已下載的包     check:檢查系統中依賴關係的完整性 可選指令:     -d:僅下載而不解壓安裝     -f:修復系統中存在的軟體包依賴性問題     --purge:與remove一起使用,完全解除安裝軟體包     --reinstall:與install一起使用,重新安裝該軟體包     -b:下載原始碼包後編譯生成相應的軟體包     -y:對所有詢問都做yes回答,apt在執行時不再進行任何提示     -h:獲取幫助資訊     -v:獲取apt-get版本號 當我們執行apt-get install命令後,APT就可以自動完成整個安裝過程,而無需考慮軟體包的版本、優先順序、依賴關係等。 apt-get install安裝軟體大致分為4步: 1.掃描本地存放的列表,尋找映象伺服器上的軟體包 2.進行軟體包依賴性檢查,找到支援該軟體正常執行的所有軟體包 3.從映象伺服器中下載相關軟體包 4.安裝軟體並配置相關檔案