官术网_书友最值得收藏!

1.1 UNIX、Linux和GNU簡介

近年來,Linux已成為一種現象。幾乎每天,Linux都以某種方式出現在媒體上。我們已經數不清在Linux上有多少應用程序以及有多少機構(包括一些政府部門和城市管理部門)在使用Linux了。主要的硬件廠商(如IBM和Dell)現在都已支持Linux,主要的軟件廠商(如Oracle)也都已支持他們的軟件運行在Linux之上。Linux已真正成為一個切實可行的操作系統,特別是在服務器市場中。

Linux的成功要歸功于在它之前誕生的系統和應用程序——UNIX和GNU軟件。本節將介紹Linux是怎樣產生的,以及它植根于何處。

1.1.1 什么是UNIX

UNIX操作系統最初是由貝爾實驗室開發的,當時的貝爾實驗室是電信業巨頭AT&T(美國電報電話公司)旗下的一員。UNIX是在20世紀70年代為DEC(數字設備公司)的PDP系列計算機設計的,它現在已成為一種非常流行的多用戶、多任務操作系統。UNIX操作系統可以運行在大量不同種類的硬件平臺上,其適用范圍從PC工作站一直到多處理器服務器和超級計算機。

1.UNIX簡史

嚴格來說,UNIX是由Open Group(開放組織)管理的一個商標,它指的是一種遵循特定規范的計算機操作系統。這個規范也稱為單一UNIX規范(The Single UNIX Specification),它定義了所有必需的UNIX操作系統函數的名稱、接口和行為。這個規范在很大程度上是早期由IEEE(電氣和電子工程師協會)開發的P1003或POSIX規范的超集。

許多類UNIX系統都是具有商業性質的,如IBM的AIX、HP的HP-UX和Sun的Solaris。還有一些可以免費獲得,如FreeBSD和Linux。如今只有少數系統完全遵守開放組織的規范,從而允許它們掛上“UNIX”的商標。

在過去,不同UNIX系統之間的兼容性一直是一個實際存在的問題,盡管POSIX規范在這一方面起了很大的幫助。現在,通過遵守一些簡單的規則,創建可以運行在所有UNIX和類UNIX系統上的應用程序已成為可能。關于Linux和UNIX標準的更多細節內容可以在本書的第18章中找到。

2.UNIX哲學

在后續的章節里,我們希望能夠向讀者傳達一種Linux(UNIX)程序設計的風格。雖然不管在哪種平臺上用C語言編程在很多方面都是一樣的,但UNIX和Linux開發者對編程和系統開發確實有其獨特的觀點。

UNIX操作系統(包括Linux)鼓勵一種特定的編程風格。下面列出了一些典型的UNIX程序和系統所具有的特點。

? 簡單性:許多很有用的UNIX工具是非常簡單的,因此也是很小并易于理解的。“小而簡單”(KISS:Keep It Small and Simple)是一種值得學習的技術。越大、越復雜的系統注定包含越大、越復雜的錯誤,而調試是我們所有人都想避免的苦差事。

? 集中性:通常,讓一個程序很好地執行一項任務要好過把所有功能都亂七八糟地堆在一起。功能臃腫的程序難于使用和維護,只有單一目標的程序更容易隨著更好的算法或界面被開發出來而得到改進。在UNIX中,當用戶出現新的需求時,我們通常是把小工具組合起來以完成更復雜的任務,而不是試圖將一個用戶期望的所有功能放在一個大程序里。

? 可重用組件:將應用程序的核心實現為庫。具有簡單而靈活的編程接口、文檔齊備的庫可以幫助其他人開發出同類程序,或者把這些技術應用到新的應用領域。dbm庫就是一個例子,它是一組可重用的函數,而不是單一的數據庫管理程序。

? 過濾器:許多UNIX應用程序可用作過濾器。也就是說,它們對輸入進行轉換并產生輸出。正如你將在后面看到的,UNIX提供了一些機制,讓我們可以把一些UNIX程序通過一種新穎的方式組合起來,以開發出相當復雜的應用程序。當然,這種類型的重用是靠我們前面提到的開發方法支撐的。

? 開放的文件格式:比較成功并流行的UNIX程序都使用純ASCII碼的文本文件或XML文件作為配置文件和數據文件。如果你在開發程序時采用了任一種做法,那你做對了!它使用戶可以用標準工具來修改和搜索配置項,并且可以開發出新工具在數據文件上執行新的功能。ctags源代碼交叉引用系統就是一個好例子,它把符號位置信息以適合于搜索程序使用的正則表達式的形式記錄下來。

? 靈活性:你不能期待用戶都能非常正確地使用你的程序。所以,你在編程時應盡量考慮到靈活性,盡量避免隨意限制字段長度或記錄數目。如果你能做到的話,則你編寫的網絡程序既能在單機上運行,也能跨網絡運行。永遠不要認為你知道用戶想做的一切事。

1.1.2 什么是Linux

可能你已經知道,Linux是一個可以自由發布的類UNIX內核實現,它是一個操作系統的底層核心。因為Linux以UNIX系統為其靈感來源,所以Linux程序和UNIX程序是非常相似的。事實上,幾乎所有為UNIX編寫的程序都可以在Linux上編譯運行。而且,一些專用于UNIX商業版本的商業應用軟件,也可以不加改變地以二進制形式運行在Linux系統上。

Linux是由赫爾辛基大學的Linus Torvalds開發的,期間得到了因特網上廣大UNIX程序員的幫助。它最初只是受Andy Tanenbaum教授的Minix(一個小型的類UNIX系統)啟發而開發的程序,純屬個人愛好,但后來它自身逐步發展成為一個完整的系統。其開發目的是保證Linux除包含可以自由發布的代碼外,不會集成任何專有代碼。

現在,使用不同類型CPU的計算機系統都有Linux的版本可以運行其上,包括基于32位和64位Intel x86及其兼容處理器的個人計算機、使用SUN SPARC、IBM PowerPC、AMD Opteron、Intel Itanium的工作站和服務器,甚至一些手持PDA和Sony PS2/PS3游戲機。只要這個設備有處理器,就會有人試圖讓Linux運行其上。

1.1.3 GNU項目和自由軟件基金會

Linux能夠存在并發展到今天是無數人共同努力的結果。操作系統內核本身僅僅是可用開發系統的一小部分。傳統上,商業化的UNIX系統都包含提供系統服務和工具的應用程序。對Linux系統來說,這些額外的程序是由許多程序員編寫并自由發布的。

Linux社區(以及其他的軟件開發組織)支持自由軟件的概念,即軟件本身不應受限,它們應遵守GNU(GNU是GNU's Not UNIX的遞歸縮寫)通用公共許可證(GPL)。雖然獲得軟件可能要支付一定的費用,但此后就可以隨意使用它們,并且它們通常是以源代碼的形式發布。

自由軟件基金會(Free Software Foundation)由Richard Stallman創立,他是UNIX及其他系統上最著名的文本編輯軟件之一GNU Emacs的開發者。Stallman是自由軟件這一概念的倡導者,并發起了GNU項目,這個項目的宗旨是:試圖創建一個與UNIX系統兼容,但并不受UNIX名字和源代碼私有權限制的操作系統和開發環境??赡苡幸惶欤珿NU處理硬件和管理運行程序的方式會變得與UNIX完全不同,但它仍然會繼續支持UNIX類型的應用程序。

GNU項目已為軟件社區提供了許多UNIX系統上應用程序的仿制品。所有這些程序,即GNU軟件,都是在GNU通用公共許可證(GPL)的條款下發布的。你可以在http://www.gnu.org上找到該許可證的一份副本。這份許可證闡述了copyleft(copyleft是一個生造的詞,是英文copyright的反話)的概念。copyleft的目的是防止有人給自由軟件的使用加上限制。

下面是在GPL條款下發布的一些主要的GNU項目軟件。

? GCC:GNU編譯器集,它包括GNU C編譯器。

? G++:C++編譯器,是GCC的一部分。

? GDB:源代碼級的調試器。

? GNU make:UNIX make命令的免費版本。

? Bison:與UNIX yacc兼容的語法分析程序生成器。

? bash:命令解釋器(shell)。

? GNU Emacs:文本編輯器及環境。

許多其他的軟件包也是在遵守自由軟件的原則和GPL條款的情況下開發和發行的,包括電子表格、源代碼控制工具、編譯器和解釋器、因特網工具、圖形圖像處理工具(如Gimp),以及兩個完整的基于對象的環境(GNOME和KDE)。我們將在第16章和第17章討論GNOME和KDE。

現在有這么多可用的自由軟件,再加上Linux內核,我們可以說:創建一個GNU的、自由的類UNIX系統的目標已經通過Linux系統實現了。由于認識到GNU軟件所做出的貢獻,現在許多人通常都把Linux系統稱為GNU/Linux。

你可以在http://www.gnu.org上找到更多關于自由軟件的概念。

1.1.4 Linux發行版

正如我們前面提到的,Linux實際上只是一個內核。你可以獲得內核源代碼,編譯并安裝它,然后獲得并安裝許多其他自由發布的軟件,從而完成一個完整Linux系統的安裝。我們通常將這樣安裝所得的系統稱為Linux系統,這是因為它包含的遠不止一個Linux內核。系統中大多數的工具都來自于自由軟件基金會的GNU項目。

你可能會意識到,僅從源代碼開始創建Linux系統是一件很不容易的事。幸運的是,許多人制作了準備好安裝的Linux發行版(通常稱為flavor),它一般可下載或以CD-ROM/DVD為載體。它不僅包含內核,還包含許多其他編程工具和應用程序。它通常都會包含一個X視窗系統的實現,即在許多UNIX系統上都有的一個圖形化環境。Linux發行版通常還帶有安裝程序和附加文檔(這些一般也都在CD上),幫助你安裝自己的Linux系統。一些著名的Linux發行版(特別是在Intel x86系列處理器上的發行版)有Red Hat Enterprise Linux及其社區開發版的Fedora、Novell SuSE Linux及其免費的openSUSE變體、Ubuntu Linux、Slackware、Gentoo和Debian GNU/Linux,更多Linux發行版的詳細信息可訪問DistroWatch網站http://distrowatch.com

主站蜘蛛池模板: 晋中市| 台州市| 聂荣县| 修水县| 黄陵县| 同德县| 兰州市| 临沧市| 任丘市| 桦南县| 柘荣县| 宜兴市| 桃园县| 囊谦县| 商南县| 巩义市| 阿拉善右旗| 阿荣旗| 黄大仙区| 于田县| 铜梁县| 财经| 兴业县| 灌云县| 德庆县| 读书| 宜丰县| 布尔津县| 常熟市| 东兴市| 江山市| 吴旗县| 云霄县| 昭苏县| 建湖县| 平原县| 昆明市| 唐海县| 兴山县| 潼南县| 龙井市|