《鳥哥的Linux私房菜》筆記系列——第一章 Linux是什麼與如何學習

第1章    Linux是什麼與如何學習

1.1 Linux是什麼

    Linux的核心是1991年由託瓦茲(Linus Torvalds)基於386的計算機開發的;

1.1.1 Linux是什麼?操作系統 / 應用程序

    Linux就是一套操作系統,擁有操作系統的核心(Kernel)和系統呼叫(System Call)兩層組成;

    軟件移植:同一套操作系統無法在不同的硬件平臺上運行,x86架構上運行的Windows如果放在IBM的Power CPU上運行,需要參考Power架構的硬件功能函數並修改Windows操作系統程序代碼。我們將軟件通過改版來適應不同平臺的動作叫做軟件移植;

    2006年以前Apple公司請IBM公司開發計算機硬件,使用的是【Power 架構CPU】,Apple公司在此基礎上發展自家的Mac,而Windows是基於x86架構開發的操作系統,因此Windows無法安裝在蘋果計算機上;2006年之後,Apple公司轉而請Intel公司設計硬件架構,也就是蘋果電腦的硬件架構已經轉爲【x86架構】,因此2006年之後的蘋果計算機可能可以安裝Windows操作系統,不過可能需要自己處理一些硬件的兼容性問題;

    Windows是基於x86架構開發的操作系統,其他架構無法運行;而Linux是Open Source的操作系統,可以修改成適合各種架構的機器上,基於強大的【可移植性】;

1.1.2 Linux之前,Unix的歷史

    1960年代初期,麻省理工學院(MIT)發展了 兼容分時系統(CTSS,Compatible Time-Sharing System),可以多臺終端機(terminal)利用主機資源,但是提供的終端機太少;

    1965年前後,貝爾實驗室(Bell)、麻省理工學院(MIT)、通用電器(GE)發起 Multics 計劃用於擴大支持終端機的數量,後來由於Multics計劃進度延後,貝爾實驗室退出;

    1969年,Ken Thompson用四個星期的時間,以彙編語言(Assembler)開發出了一組【核心程序】,同時包括一些【核心工具程序】,以及一個小小的【文件系統】,命名爲 Unics,是Unix的雛形;但是Unics由於是彙編語言開發而不是高階語言,安裝到其他架構機器需要重新編寫;

    1973年,Thompson與Ritchie將Unics改用高階程序語言撰寫,現有B語言核心效能不好,Ritchie將B語言改寫成C語言,以C語言改寫和編譯Unics的核心,發行了Unix正式版;   

    1977年,加州伯克利大學Bill Joy基於Unix原始代碼發展適合自己機器的版本,並增加工具軟件和編譯程序,命名爲Berkeley Software Distribution(BSD),BSD是Unix的重要分支,Bill Joy也是Unix業者【Sun公司】的創辦者,Sun公司就是基於BSD發展的核心進行自己的商業Unix版本發展的,後來可以安裝在x86硬件架構上面的FreeBSD就是BSD改版;

    1979年,早先的Unix被各家廠商改寫成適合自己機器的版本但僅能支持自家硬件,所以早先的Unix只能用於服務器(Server)或者是大型工作站(Workstation),1979年,貝爾實驗室隸屬於的美國電話電報公司(AT&T)推出基於Unix研發的System V第七版開始支持x86個人計算機,但是限制了Unix版權不能對學生提供原始碼;

    目前被稱爲 純種Unix 指的就是AT&T公司的System V系統 和 加州伯克利大學的BSD系統;

    1984年,Andrew Tanenbaum(譚振寧)爲了Unix的教學,考慮到1979年Unix第七版在Intelx86架構上的移植,完全不看Unix核心原始碼,撰寫了Minix系統,但是譚寧邦教授認爲Minix主要用於教育,很受歡迎但發展一般;

    1984年,Richard Mathew Stallman(斯托爾曼,網絡ID自稱RMS)開始GNU計劃,目的:建立一個自由開放的Unix操作系統(FreeUnix),創立了 自由軟件基金會(FSF,Free Software Foundation),GNU的幾個重要軟件有:Emacs程序編輯器,GNU C Compiler(gcc)C語言編譯程序,GNU C Library的C語言函數庫,BASH shell,這些是在1990年左右完成;

    1985年,Stallman與律師起草了 通用公共許可證(General Public License,GPL),稱爲copyleft;

    1988年,鑑於 圖形用戶接口(Graphical User Interface,GUI)需求加重,MIT成立非營利組織XFree86,XFree86的GUI界面在Linux 1.0版本1994年發行時被整合與Linux中;

    1991年,芬蘭的赫爾辛基大學的Linus Torvalds在BBS發消息稱,使用bash,gcc等GNU工具開發了一個小核心程序可以在Intel 386機器上運行;

1.1.3 關於GNU計劃、自由軟件、開放源代碼

  • GNU與自由軟件:

    1984年Stallman創立GNU計劃於自由軟件基金會(FSF),並撰寫通用公共證書GPL用於自由軟件專利保護,GPL授權的軟件修改後必須還要有GPL授權,自由軟件不能單純販賣但是可以販賣售後服務,如Linux光盤的售後服務以及自己推出的Linux版本上開發出的軟件的使用權等;Free Software爲自由軟件而非免費軟件;目前GPL授權已經發展到第三版GPLv3,但是使用最廣泛的還是GPLv2,包括Linux核心還是使用的GPLv3;

  • 開源軟件

    1988年,成立了【開放源代碼促進會(Open Source Initiative)】,倡導開放源代碼(Open Source),解決商業公司使用Free Software自由軟件代碼時必須還要GPL授權的問題,開源軟件的代碼可以作爲商業軟件的一部分而無需使用與原來開源代碼相同的授權來發布;

  • 專利軟件與免費軟件

    專利軟件也有免費使用的,授權模式有Freeware和Shareware兩種:

(1)Freeware指免費軟件,使用免費但不一定要公佈源代碼,可能存在卻去用戶信息等安全問題;

(2)Shareware指共享軟件,使用初期免費,到試用期限後必須付費繼續使用或者移除,通常這些共享軟件自帶失效程序,使用期限過後無法使用;

1.2 Torvalds的Linux發展

1.2.1 與Minix之間

    Torvalds通過自己的Intel386接觸學習了Minix系統;

1.2.2 對386硬件的多任務測試

    早期的Intel x86架構計算機對於多任務處理不佳,但是386計算機有很大改善;

1.2.3 初次發佈Linux 0.0.2

    Minix雖然很棒但是譚寧邦不願意進行功能加強;

    利用BASH Shell 以及gcc編譯程序等自由軟件,編寫了並公佈了Linux 0.0.2;

    修改Linux使其兼容Unix;

1.2.4 Linux的發展:虛擬團隊的產生

    單一個人維護階段;

    廣大黑客志願者加入階段:先求能跑,再要改良,進步神速(要求虛擬內存一星期就推出新版Linux);逐漸發展成具有模塊功能;

    核心功能細節分工發展階段:1994年完成了Linux核心正式版 Linux 1.0;

1.2.5 Linux 的核心版本

    3.10.0 -123.e17.x86_64    主版本.次版本.釋出版本-修改版本;

    2.6.x版本之前,次版本爲奇數:發展中版本,次版本爲偶數:穩定版本;

    3.0版本之後:

        核心主要依據主線版本(MainLine)開發,舊版本會結束開發(End of Live,EOL)或者成爲長期維護版本(Longterm),開發者最好選擇長期支持版本;

    Linux核心版本 與 Linux發行版本

        Linux核心版本與Centos 這個distribution(發行版)

1.2.6 Linux distribution

    Linux是一個操作系統最底層的核心及其提供的核心工具,是GNU GPL授權模式;

    Linux參考POSIX設計模式,所以兼容與Unix操作系統,是一種Unix Like;

  • 可完全安裝的Linux發佈套件

    Linux可謂是實現了GNU最初的夢想:建立一個自由開放的Unix操作系統,但是Torvalds開發的Linux只有Kernel和Kernel提供的工具,【Linux+各種軟件】本來可以組成完整的操作系統,但是這就要求使用者自己的能力,許多公司團體將Linux Kernel(含tools)與可以運行的軟件整合起來,加上自己具有創意的工具程序來安裝管理Linux,形成自己的Linux distribution,也就是【Kernel + Tools + Softwares + 可完全安裝程序】=Linux distribution;

  • 各大Linux Distribution 的主要異同:支持標準!

    各大Linux Distribution都是使用Linux的http://www.kernel.org所釋出的kernel,不同的Linux Distributions在開發時也都有Linux Standard Base(LSB)、File system Hierarchy Standard(FHS)等標準規範開發者,所選擇的軟件也都是知名軟件,如網頁服務器的Apache、電子郵件服務器的Postfix/sendmail,文件服務器的Samba等,所以不同Linux distribution除了開發者自家開發出來的管理工具,以及套件管理的模式,其他差異不大,所以差異在架構的嚴謹度和選擇的套件內容;

    現在distribution主要有兩大系統:

(1)使用【RPM方式】安裝軟件的系統,如Red Hat公司的RHEL,Fedora,SuSE,OpenSuSE等;

(2)使用【DPKG方式】安裝軟件的系統,如Ubuntu,Debian,B2D等;

此外,還有考慮效能至上的Gentoo;

光盤開機進入Linux的Live CD版本,也就是KNOPPIX這個Linux distribution;

1.3 Linux 當前應用的角色

1.3.1 企業環境的利用

  • 網絡服務器:WWW,Mail Server,File Server等;硬件廠商支持比較廣泛的是Red Hat以及SuSE兩個大廠的Linux;

  • 關鍵任務的應用(金融數據庫):個人計算機性能大幅提高而且便宜,許多企業慢慢開始兼容x86環境,爲了符合企業使用的Unix操作系統平臺上的衆多軟件,轉而開始符合Unix操作系統標準而且可以在x86架構硬件平臺上運行的Linux;特別是企業的關鍵任務,例如金融企業的數據庫;

  • 學術機構的高效能運算任務:Linus Torvalds是一個性能癖,所以Linux運算能力強大,又因爲具有支持度相當廣泛的GCC編譯軟件,所以Linux廣泛用於學術機構的高性能運算任務;

1.3.2 個人環境的使用

  • 桌面計算機:Desktop計算機,用於上網瀏覽、實時通訊、收發電子郵件、Office、網絡接口的公文處理系統,必須有窗口,Linux 1.0版本就已經與X Window System結合,X Window System是Linux上的一套軟件;近年來美觀的KDE與GNOME窗口接口,搭配可兼容微軟Office的OpenOffice/LibreOffice,配合功能強大速度又快的Firefox瀏覽器,以及可下載信件的雷鳥(ThunderBird)軟件(類似微軟的Outlook Express),可臉上多種實時通訊的Pidgin;

  • 手持系統():iphone 4在2010年面世之後,智能手機取代商務掌上電腦(PDA,Personal Digital Assistant),小筆記本電腦也被平板電腦(Pad)打敗;2007年Google成立 開放手機聯盟(Open Handset Alliance)推出安卓(Android)手機專用操作系統,Android就是基於Linux內核;

  • 嵌入式系統:嵌入式系統是直接嵌入到硬件產品中,理論上不會更動到的操作系統;

1.3.3 雲端應用

    早期大型主機昂貴,主機集中運算分配到多個終端機;2010年前個人計算機運算能力增強,大部分運算可以在個人計算機上運算,不需要到大型主機取得運算資源;由於便攜設備的發展,龐大的數據需要集中處理,產生雲計算,集中管理信息資源,終端設備聯機雲設備取得運算資源隨時隨地辦公;

  • 雲程序:公司自己內部的私有云;大型互聯網服務提供商(ISP,Internet Service Provider)提供公有云給企業用戶或個人用戶使用ISP虛擬化產品,可以代管Web、Mail、系統開發環境等操作系統;

  • 端設備:越來越輕量級,智能手機、平板、樹莓派(Raspberry Pi)等;

1.4  linux 該如何學習

捨棄X Window環境,儘量使用指令模式學習Linux;例如Linux本身捉不到網絡卡,該如何以X Window使用這個硬件呢;(X Window通常會吃掉很多系統資源)

1.4.1 從頭學習Linux基礎

(1)計算機概論和硬件基礎知識;

(2)先從Linux的安裝與指令學起;

(3)Linux操作系統的基礎功能;

(4)務必學會vi文字編輯器:所有的Unix like系統都有vi,會被許多軟件所呼叫;

(5)Shell和Shell Script的學習:正規表示法、管線命令、數據流重導向等,Shell Script以後用於便捷的管理服務器;

(6)一定要會軟件管理員:Tarball / RPM / DPKG / YUM / APT等軟件管理員的安裝方式安裝驅動和額外軟件;

(7)網絡基礎的建立:IP、路由等;

計算機基礎:http://www.study-area.org/compu/compu.htm

網絡基礎:http://www.study-area.org/network/network.htm

1.4.2 選擇一本易讀的工具書

http://linux.vbird.org/linux_basic/012howtolinux/0120howtolinux_1.php

1.4.3 實踐實踐實踐

實踐經驗分享:http://www.study-area.org

1.4.4 發生問題怎麼處理

(1)在自己的主機/網絡數據庫查詢How-To或者FAQ(Frequently Asked Questions):

Linux 自己的文件數據:/usr/share/doc(自己的Linux系統中);

CLDP中文文件計劃:http://www.linux.org.tw/CLDP/

The Linux Documentation Project:http://www.tldp.org/:TLDP幾乎列出了所有Linux上面可以看到的文獻數據,各種How-To,雖然是英文的;

鳥哥:http://linux.vbird.org/Searching.php/

(2)注意輸出信息,自行解決疑難雜症

如果是網絡服務的問題,請到/var/log/這個目錄中查閱 log file(登陸文件);

(3)搜尋過後,整理訊息,討論區詢問

酷學園討論區:http://phorum.study-area.org

鳥哥的私房菜討論區:http://phorum.vbird.org

(4)Netman大大給的建議

  • Windows裏出現問題,現將所有其他程序保存並結束,使用救命三連鍵(Ctrl + Alt + Delete)結束工作有問題的程序,不要動不動就直接關機或重啓;

  • 有系統的設計文件目錄;

  • 養成做記錄的習慣,出問題後,把錯誤信息和引發狀況以及解決方法記錄,歸類並定期整理

  • 網絡上的好文章自己留一份copy,定好題目,歸類存檔;

  • 使用者,要遷就機器;開發者,要機器遷就人;

  • Windows裏面設定不好,罵他;Linux裏面設定好設備,感激它;

1.4.5 鳥哥的建議(重點在solution的學習)

  • 選擇Shell深入玩一下,培養興趣;(沒有花時間去了解一下,不要說沒興趣)

  • 多些心得分享,獲得成就感,教會別人東西對自己提升很大;

  • 多回答他人的問題;

  • 多參加討論【酷學園Study Area,SA】

  • 不要有門戶之見,認爲某個產品某個公司產品不好,多接觸,不排斥任何學習的機會:不同環境下,解決問題的方法有很多種,只要行得通,就是好方法;

1.5 重點回顧

  • 操作系統(Operation System):只要在管理與驅動硬件,因此必須要能夠管理內存、管理裝置、負責進程管理以及系統呼叫等,只要能夠讓硬件準備妥當(Ready)就行;

  • Unix的前身是由貝爾實驗室(Bell lab.)的Ken Thompson利用彙編語言攜程的Unics,在1971-1973年間由Dennis Ritchie自創C語言,用C語言改寫成的Unix;

  • 1977年由Bill Joy釋出BSD(Berkeley Software Distribution),是一個純種的Unix like操作系統;

  • 1984年由Andrew Tanenbaum開始製作Minix操作系統,提供原始碼及軟件,但是後期更新不好;

  • 1984年由Richard Stallman提倡GNU計劃,倡導自由軟件(Free Software),強調其軟件可以自由的取得、複製、修改與再發行,並規範出GPL授權模式,任何GPL(General Public License)軟件均不可單純僅販賣其軟件,也不可修改軟件授權;

  • 1991年芬蘭人Linus Torvalds開發出了Linux操作系統,簡而言之,Linux的成功之處在於:Minix(Unix),GNU,Internet,POSIX規範,虛擬團隊;

  • 符合Open Source理念的授權相當多,比較知名的有Apache / BSD / GPL / MIT等;

  • Linux本身只是個單純的操作系統,其開發網站設立在http://www.kernel.org,我們亦稱Linux操作系統最底層的數據位【核心(Kernel)】;

  • 從Linux kernel 3.0開始,捨棄原來次版本奇數爲發展版本,偶數爲穩定版本的核心版本規劃,新的規劃使用主線版本(MainLine)爲依據,並提供長期支持版本(Longterm)來加強某些功能的持續維護;

  • Linux distribution分類有社區、商業分類法,或者RPM、DPKG分類法;

  • 學習Linux最好從頭由基礎學習,找一本適合自己的書籍,加強實踐;

POSIX是一種標準規範,只要針對在Unix操作系統上跑的程序來進行規範,如果你的操作系統符合POSIX規範,那麼符合POSIX規範的程序就可以用在你的操作系統上運行,Linux由於支持POSIX規範,因此許多Unix上的程序可以直接在Linux上面運行,因此程序的移植相當簡易,也讓大家容易轉換平臺,提高Linux的使用率;

 

 

 

    

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章