-- 簡書作者 謝恩銘 轉載請註明出處
內容簡介
- 第二部分第七課:軟體安裝,如虎添翼
- 第二部分第八課預告:RTFM 閱讀那該死的手冊
軟體安裝,如虎添翼
上一課 Linux探索之旅 | 第二部分第六課:Nano文字編輯器和終端配置 挺輕鬆的。
這一課也會比較輕鬆,所以好好享受吧~
我們來談談Linux下軟體的安裝,會在我們的Ubuntu這個Linux發行版中演示。
一般提到軟體安裝,有過Windows系統使用經驗的朋友肯定深有體會,那個麻煩啊,大致流程是這樣的:
在搜尋引擎(比如百度或google)中搜尋我們的軟體名稱。
看到一個不錯的結果,點選進入。如果是官網一般會進入官網。
下載此軟體的安裝程式。
雙擊下載下來的安裝程式,開始安裝。一直按“下一步”,直到“完成”。
但是:
有的軟體還會問你要安裝在何處。
有的還會在你不知情的狀況下安裝捆綁軟體,相當不開心。
有的還有病毒... 這日子口簡直沒法過了...
但是在Linux系統中,特別是Ubuntu中,安裝軟體的流程絕對不是這樣的,比Windows中安裝軟體方便、安全、捷多了。
而且,你會發現在Linux中安裝軟體是一種樂趣,就是這個feel,倍兒爽。
這也是Linux相對Windows的一個優點。我們一起來體驗。
初體驗軟體包和依賴關係
首先,我們得宣告:小編是純爺們... 不好意思,搞錯了,應該是:
這一課涉及到的軟體包安裝等知識點是基於Debian一族的Linux發行版,包括Ubuntu。
其他不是Debian一族的Linux發行版,例如Fedora,Redhat,CentOS,等等。其實安裝軟體的方式大同小異,就是每個Linux發行版之間所用的命令不一樣,軟體包的名稱有點區別罷了。所以一通百通。
在Windows下,我們如果要安裝軟體,一般都是使用“安裝程式”,一般是.exe結尾的可執行程式,雙擊即可執行。一般會把我們的軟體安裝到Program Files這個資料夾下。
例如我們常用的QQ這個軟體的安裝包就是.exe檔案,如下:
在Ubuntu下,我們也有類似的程式,但是我們不稱之為“安裝程式”,而稱之為“軟體包”,英語是Package。
一個軟體包其實是軟體的所有檔案的壓縮包,二進位制形式的,包含了安裝軟體的所有指令。在Debian一族裡,軟體包的字尾是.deb(是Debian的前三個字母),Ubuntu作為Debian一族的一員,當然也是用.deb的軟體包。而如果是Red Hat一族(包括Red Hat,Fedora,等),軟體包是.rpm為字尾。
那麼,一個.deb格式的軟體包,其實是類似Windows下的.exe的安裝程式咯?
確實很像,但是其實它們的運作方式不一樣。我們列出主要的兩個不同點:
軟體包管理包括了依賴關係的管理
軟體包不需要我們通過搜尋引擎來找到並下載,幾乎所有的.deb軟體包都存放在相同地方,稱為軟體倉庫,英語叫repository。
這兩個方面我們會一一來講解。
依賴關係
通常來說,很少有一個軟體可以單獨在Linux上執行,也就是說它不依賴於其他程式。一個軟體經常需要使用到其他程式或者其他程式的片段(我們稱之為庫)。我們說這個軟體依賴其他程式,這就是依賴關係。
比如說,Linux下類似Photoshop的軟體GIMP,它不能單獨執行,它的正常運作還需要呼叫圖片讀取的庫(比如說如何讀取一個JPG圖片),往往依賴關係還有下層依賴關係,環環相扣。
當然,在Windows裡面你也遇到過依賴問題,比如你執行Eclipse軟體,它會說你還沒安裝Java環境;你執行一個大型遊戲,它提示你先安裝Direct X,等等。
幸運的是,Debian的包管理系統非常智慧。每一個軟體包都“知道”它依賴於哪幾個程式。這可以讓系統去尋找並安裝缺失的依賴程式。
所以,你只要告訴包管理系統“我要安裝某某軟體”,包管理系統會為你打理一切。
軟體倉庫
上面我們說了,Linux的軟體包都存放在一個地方,叫做軟體倉庫,repository。
對於Windows的各種軟體,可沒有這樣一個集中存放的地方,所以網上有軟體的各種版本、各種型號任君選擇。
因為Linux是在Windows之後誕生的(1991年前後),所以為了避免Windows的這個“弊端”,Linux選擇建立一個集中存放軟體的地方。
當然了,Linux的這一優勢也得益於它的開源性。Linux中的軟體基本都是開源自由的,任何人都可以分發,傳播軟體,只要遵守一定軟體協議。因此把這些軟體集中存放在某個地方是可行的。
但是Windows的大部分軟體都是有版權的,閉源的,不開放,甚至收費的,這些軟體的作者不會同意把他們本該賺錢的軟體存放到一個公共倉庫任大家分發,使用。
軟體倉庫的概念
前面我們說了,Linux的軟體會集中存放在一個地方,叫做軟體倉庫,英語是repository。
但是你也許會問:假如全球的Linux使用者都到同一個地方去下載軟體,那麼存放軟體的那個伺服器豈不是會當機?
好問題,很有道理。所以,其實軟體倉庫絕不只是存放在一臺伺服器上,全球有很多個軟體倉庫(也就是有很多伺服器),大部分軟體倉庫裡的軟體都是一樣的,只不過是拷貝而已。
有一些特別的軟體倉庫,會存放其他軟體倉庫沒有的軟體,但一般我們用不到這樣的軟體倉庫。
為了加深理解,我們可以用下圖來表現軟體倉庫的原理:
所以是使用者選擇軟體倉庫,因為基本上各個軟體倉庫中的軟體都是一樣的。
我們一般建議使用者選擇離自己所在地較近的軟體倉庫的伺服器,這樣下載速度會比較快。
在法國(小編住在法國),Ubuntu預設會使用 fr.archive.ubuntu.com 這個伺服器上的軟體倉庫,但是使用官方的軟體倉庫並不一定很好,因為有時候這些伺服器會比較卡,例如Ubuntu更新版本和其下軟體的時候。
我們來學習如何切換軟體倉庫。
管理軟體倉庫
上面說了,用預設的官方版本沒有太大壞處,但是有時候會卡。所以我們要學習如何切換軟體倉庫。
我們Ubuntu系統使用的軟體倉庫的列表是記錄在一個檔案中。為了修改這個檔案,我們要用文字編輯器,幸好上一課Linux探索之旅 | 第二部分第六課:Nano文字編輯器和終端配置我們已經接觸了文字編輯器,知道如何使用了。
那現在就是將上一課學習的內容付諸實踐的時刻了。我們要編輯的那個包含軟體倉庫的列表的檔案是:
/etc/apt/sources.list複製程式碼
這個檔案是系統檔案,只能被root使用者修改。所以我們有兩種選擇:
暫時性地成為root,用nano來編輯此檔案
sudo nano /etc/apt/sources.list複製程式碼
先永久成為root
sudo su複製程式碼
再用nano來編輯此檔案
nano /etc/apt/sources.list複製程式碼
用nano開啟此檔案之後,我們看到檔案內容類似如下:
上圖中,由#開始的行是註釋,會被忽略,不會被處理。
通常來說,這個檔案中有作用的行是由以下兩個指令開頭:
deb:用於下載軟體的二進位制版本,大多數情況下我們都是用這個。
deb-src:用於下載軟體的原始碼。一般我們用不到,除非你很好奇想檢視軟體的原始碼。這也是自由軟體運動的一個好處。
以下是一行的例子:
deb http://fr.archive.ubuntu.com/ubuntu/ trusty universe複製程式碼
第一個引數 fr.archive.ubuntu.com/ubuntu 是法國Ubuntu官方軟體倉庫的伺服器。
第二個引數trusty,是我們所使用的Ubuntu的版本號,trusty是Ubuntu 14.04的代號。14.04全稱是 Trusty Tahr(值得信賴的塔爾羊)。
最後一個引數(或者後面還有其他引數)是軟體倉庫的區域,也就是你要檢視的程式碼倉庫的不同分割槽。
上面的概念稍微有點複雜。但其實你只要知道一件事:如果要切換其他的軟體倉庫,只需要將/etc/apt/sources.list這個檔案中的fr.archive.ubuntu.com/ubuntu 這個伺服器地址替換為其他軟體倉庫的伺服器地址即可。
那麼問題來了:我怎麼知道其他軟體倉庫的伺服器地址呢?
你可以用搜尋引擎來尋找,比如可以搜“Ubuntu repository”。
但是我們要演示一個更快捷方便的方式,也就是要用到圖形介面的方式了。
圖形介面工具
Ubuntu提供了一個圖形化的程式碼倉庫管理軟體,可以按以下步驟啟動:
選單欄中的System->Administration->Software Sources
單擊開啟後,如下圖:
上圖中,我們可以看到預設的伺服器是法國的:Server for France
我們可以將這個下拉選單選成Other...,那麼會開啟另一個視窗,如下圖:
可以看到列表中有很多伺服器可供選擇,這些都是軟體倉庫的伺服器地址,按國家分類有:United States(美國),United Kingdom(英國),Ukraine(烏克蘭),Turkey(土耳其),等等。
為了選出最快的伺服器,我們可以做一個實際測試:
點選右上角的Select Best Server (選出最佳伺服器)按鈕,然後Ubuntu就會啟動測試,測試各個伺服器的速度:
測試完之後,最快的伺服器會被選中,如下圖:
點選右下角Choose Server(選擇伺服器)來選擇這個最快的伺服器(小編的情況是ftp.crihan.fr)。
選擇之後,會關閉當前小視窗,回到主視窗,我們可以看到Download from後面的下拉選單已經變為了最快的那個伺服器的地址:
ftp.crihan.fr/ubuntu (小編的情況)
重新用nano來開啟我們的/etc/apt/sources.list這個檔案,可以看到伺服器的地址都已經換成了新的ftp.crihan.fr/ubuntu 。
所以,圖形介面的方式更方便,更直觀,比直接用文字編輯器逐行修改/etc/apt/sources.list這個檔案快多了。
包管理工具
我們來總結一下:
package:包。這是軟體的二進位制安裝包。類似Windows中軟體的安裝程式(大多以.exe結尾)。
dependency:依賴。一個軟體包可能需要其他的軟體包作為執行的基礎。這是依賴關係。
repository:倉庫。軟體的倉庫,就是存放軟體的伺服器,我們從這些伺服器上下載軟體。
我們上面演示瞭如何切換其他軟體倉庫,但也不一定要切換,用預設的軟體倉庫也是可以的。
在Ubuntu中,我們可以使用圖形介面的軟體包管理,例如 Synaptic Package Manager(新立得軟體包管理器),要開啟很簡單:
選單欄中的System->Administration->Synaptic Package Manager
單擊開啟後,如下圖:
當然了,我們也可以使用終端來管理軟體包,終端的軟體包管理命令一般用兩個:
apt-get:最常用的,一般小編用這個比較多。
aptitude:這個命令在解除安裝軟體時可以解除安裝不用的依賴。
以後的課程我們會使用apt-get一族來演示。
以下我們再學習幾個常用的終端的軟體包命令,記得這些命令都需要root身份來執行:
apt-get update:軟體包快取的更新
一般是
sudo apt-get update複製程式碼
apt-cache search:搜尋軟體包
一般是
sudo apt-cache search複製程式碼
apt-get install:安裝軟體包
一般是
sudo apt-get install xxx複製程式碼
xxx是對應軟體包名
apt-get autoremove:刪除軟體包
一般是
sudo apt-get autoremove xxx #xxx是對應軟體包名複製程式碼
apt-get upgrade:升級所有已安裝的軟體包
一般是
sudo apt-get upgrade複製程式碼
總結
大部分Linux的發行版都提供了集中式的軟體包下載和安裝方式,因此軟體的安裝比Windows下來得簡單很多。這些集中存放軟體的伺服器被稱為軟體倉庫。
在Ubuntu下,我們可以使用圖形介面的軟體包管理來安裝軟體,當然我們也可以使用終端命令來安裝軟體,就用apt-get命令族。
apt-get update命令:更新可安裝的軟體列表。
apt-cache search命令:在軟體列表裡搜尋可用軟體。
apt-get install命令:安裝軟體。
apt-get autoremove命令:解除安裝軟體。
apt-get upgrade命令:升級所有已安裝軟體。
第二部分第八課預告
今天的課就到這裡,一起加油吧!
下一課我們學習:Linux探索之旅 | 第二部分第八課:RTFM 閱讀那該死的手冊
微信公眾號「程式設計師聯盟」ProgrammerLeague
我是謝恩銘,在巴黎奮鬥的軟體工程師。
我的簡介
我的經歷
熱愛生活,喜歡游泳,略懂烹飪。
人生格言:“向著標杆直跑”