在windows下安裝一個軟件很輕松,只要雙擊.exe的文件,安裝提示連續(xù)“下一步”即可,然而linux系統(tǒng)下安裝一個軟件似乎并不那么輕松了,因為我們不是在圖形界面下。所以你要學會如何在linux下安裝一個軟件。
在前面的內容中多次提到的yum,這個yum是Redhat所特有的安裝RPM程序包的工具,使用起來相當方便。因為使用RPM安裝某一個程序包有可能會因為該程序包依賴另一個程序包而無法安裝。而使用yum工具就可以連同依賴的程序包一起安裝。當然CentOS同樣可以使用yum工具,而且在CentOS中你可以免費使用yum,但Redhat中只有當你付費后才能使用yum,默認是無法使用yum的。在介紹yum之前先說一說RPM相關的東西。
【RPM工具】
RPM是”Redhat Package Manager”的縮寫,根據(jù)名字也能猜到這是Redhat公司開發(fā)出來的。RPM 是以一種數(shù)據(jù)庫記錄的方式來將你所需要的套件安裝到你的Linux 主機的一套管理程序。也就是說,你的linux系統(tǒng)中存在著一個關于RPM的數(shù)據(jù)庫,它記錄了安裝的包以及包與包之間依賴相關性。RPM包是預先在linux機器上編譯好并打包好的文件,安裝起來非常快捷。但是也有一些缺點,比如安裝的環(huán)境必須與編譯時的環(huán)境一致或者相當;包與包之間存在著相互依賴的情況;卸載包時需要先把依賴的包卸載掉,如果依賴的包是系統(tǒng)所必須的,那就不能卸載這個包,否則會造成系統(tǒng)崩潰。
如果你的光驅中還有系統(tǒng)安裝盤的話,你可以通過”mount /dev/cdrom /mnt”命令把光驅掛載到/mnt目錄下,那么你會在/mnt/CentOS目錄下看到很多.rpm的文件,這就是RPM包了。
http://wiki.jikexueyuan.com/project/linux/images/11_1.png.jpg" alt="11_1.png.jpg" />
每一個rpm包的名稱都由”-“和”.”分成了若干部分。就拿 a2ps-4.13b-57.2.el5.i386.rpm 這個包來解釋一下,a2ps 為包名;4.13b則為版本信息;57.2.el5為發(fā)布版本號;i386為運行平臺。其中運行平臺常見的有i386, i586, i686, x86_64 ,需要你注意的是cpu目前是分32位和64位的,i386,i586和i686都為32位平臺,x86_64則代表為64位的平臺。另外有些rpm包并沒有寫具體的平臺而是noarch,這代表這個rpm包沒有硬件平臺限制。例如 alacarte-0.10.0-1.fc6.noarch.rpm 。下面介紹一下rpm常用的命令。
1)安裝一個rpm包
http://wiki.jikexueyuan.com/project/linux/images/11_7.png.jpg" alt="11_7.png.jpg" />
-i :安裝的意思
-v :可視化
-h :顯示安裝進度
另外在安裝一個rpm包時常用的附帶參數(shù)有:
--force 強制安裝,即使覆蓋屬于其他包的文件也要安裝
--nodeps 當要安裝的rpm包依賴其他包時,即使其他包沒有安裝,也要安裝這個包
2)升級一個rpm包
rpm -Uvh filename -U :即升級的意思
3)卸載一個rpm包
rpm -e filename 這里的filename是通過rpm的查詢功能所查詢到的,稍后會作介紹。
http://wiki.jikexueyuan.com/project/linux/images/11_8.png.jpg" alt="11_8.png.jpg" />
卸載時后邊跟的filename和安裝時的是有區(qū)別的。上面命令提到的 “|”在linux系統(tǒng)中用的非常多也非常有用,它是一個管道符,用來把前面運行的結果傳遞給后面的命令。以后會做詳細介紹,而后出現(xiàn)的grep命令則是用來過濾某個關鍵詞的工具,在后續(xù)章節(jié)中會做詳細介紹。
4)查詢一個包是否安裝
rpm -q rpm包名(這里的包名,是不帶有平臺信息以及后綴名的)
http://wiki.jikexueyuan.com/project/linux/images/11_9.png.jpg" alt="11_9.png.jpg" />
如果加上了平臺信息以及后綴名反而不能查出來。你還可以查詢當前系統(tǒng)中所安裝的所有rpm包。
http://wiki.jikexueyuan.com/project/linux/images/11_10.png.jpg" alt="11_10.png.jpg" />
因為太多,所以筆者列出前十個。
5)得到一個rpm包的相關信息
rpm -qi 包名(同樣不需要加平臺信息與后綴名)
http://wiki.jikexueyuan.com/project/linux/images/11_11.png.jpg" alt="11_11.png.jpg" />
6)列出一個rpm包安裝的文件
rpm -ql 包名
http://wiki.jikexueyuan.com/project/linux/images/11_21.png.jpg" alt="11_21.png.jpg" />
通過上面的命令可以看出vim是通過安裝vim-enhanced-7.0.109-6.el5這個rpm包得來的。那么反過來如何通過一個文件去查找是由安裝哪個rpm包得來的?
7)列出某一個文件屬于哪個rpm包
rpm -qf 文件的絕對路徑
http://wiki.jikexueyuan.com/project/linux/images/11_22.png.jpg" alt="11_22.png.jpg" />
前面講過如何查找一個文件(可執(zhí)行命令)的絕對路徑
http://wiki.jikexueyuan.com/project/linux/images/11_23.png.jpg" alt="11_23.png.jpg" />
所以你也可以把這兩條命令連起來寫
http://wiki.jikexueyuan.com/project/linux/images/11_24.png.jpg" alt="11_24.png.jpg" />
看到了嗎,which vim 這條命令是由兩個反引號引起來的,這代表引用反引號里面的命令所產生的結果。關于rpm工具的使用還有很多內容,筆者就不一一列舉了,只要你掌握上面這些內容,完全夠你平時工作用的了。
【yum工具】
介紹完rpm工具后,還需要你掌握最常用的yum工具,這個工具比rpm工具好用多了,當然前提是你使用的linux系統(tǒng)是支持yum的。yum最大的優(yōu)勢在于可以聯(lián)網(wǎng)去下載所需要的rpm包,然后自動安裝,在這個工程中如果要安裝的rpm包有依賴關系,yum會幫你解決掉這些依賴關系依次安裝所有rpm包。下面筆者介紹常用的yum 命令。
1)列出所有可用的rpm包 “yum list “
http://wiki.jikexueyuan.com/project/linux/images/11_25.png.jpg" alt="11_25.png.jpg" />
限于篇幅,筆者只列舉出來前7個包信息。從上例中可以看到有”mirrors.163.com”信息出現(xiàn),這是在告訴用戶,它是從mirrors.163.com這里下載到的rpm包資源。如果你使用的是CentOS則你可以從/etc/yum.repos.d/CentOS-Base.repo這個文件下看到相關的配置信息。從上面的例子中你還可以看到最左側是rpm包名字,中間是版本信息,最右側是安裝信息,如果安裝了就顯示installed,未安裝則顯示base或者extras,如果是該rpm包已安裝但需要升級則顯示updates。
2)搜索一個rpm包 “yum search [相關關鍵詞]”
http://wiki.jikexueyuan.com/project/linux/images/11_26.png.jpg" alt="11_26.png.jpg" />
除了這樣搜索外,筆者常用的是利用grep來過濾
http://wiki.jikexueyuan.com/project/linux/images/11_27.png.jpg" alt="11_27.png.jpg" />
相信你也會喜歡用后者吧,這樣看起來簡明的多。
3)安裝一個rpm包 “yum install [-y] [rpm包名]”
如果不加-y選項,則會以與用戶交互的方式安裝,首先是列出需要安裝的rpm包信息,然后會問用戶是否需要安裝,輸入y則安裝,輸入n則不安裝。而筆者嫌這樣太麻煩,所以直接加上-y選項,這樣就省略掉了問用戶是否安裝的那一步。http://wiki.jikexueyuan.com/project/linux/images/11_28.png.jpg" alt="11_28.png.jpg" />
4)卸載一個rpm包 “yum remove [-y] [rpm包名]”
http://wiki.jikexueyuan.com/project/linux/images/11_29.png.jpg" alt="11_29.png.jpg" />
卸載和安裝一樣,你也可以直接加上-y選項來省略掉和用戶交互的步驟。在這里筆者要提醒你一下,卸載某個rpm包一定要看清楚了,不要連其他重要的rpm包一起卸載了,以免影響正常的業(yè)務。
4)升級一個rpm包 “yum update [-y] [rpm包]”
http://wiki.jikexueyuan.com/project/linux/images/11_44.png.jpg" alt="11_44.png.jpg" />
以上介紹了如何使用yum搜索、安裝、卸載以及升級一個rpm包,如果你掌握了這些那么你就已經可以解決日常工作中遇到的與rpm包相關問題了。當然yum工具還有好多其他好用的命令,筆者不在列舉出來,如果你感興趣就去man一下吧。除此之外,筆者還會教你一些關于yum的小應用。
1 使用本地的光盤來制作一個yum源
有時候你的linux系統(tǒng)不能聯(lián)網(wǎng),當然就不能很便捷的使用聯(lián)網(wǎng)的yum源了,這時候就需要你自己會利用linux系統(tǒng)光盤制作一個yum源。具體步驟如下:
a.掛載光盤
[root@fortest Server]# mount -t iso9660 -o loop /dev/cdrom /mnt
b.刪除/etc/yum.repos.d目錄所有的repo文件
[root@fortest Server]# rm -rf /etc/yum.repos.d/*
c.創(chuàng)建新文件dvd.repo
[root@fortest Server]# vim /etc/yum.repos.d/dvd.repo
加入以下內容:
[dvd]
name=install dvd
baseurl=file:///mnt
enabled=1
gpgcheck=0
d.刷新repos,生成緩存
[root@fortest Server]#yum makecache
然后就可以使用yum命令安裝你所需要的軟件包了
2 利用yum工具下載一個rpm包
有時,我們需要下載一個rpm包,只是下載下來,拷貝給其他機器使用,前面也介紹過yum安裝rpm包的時候,首先得下載這個rpm包然后再去安裝,所以使用yum完全可以做到只下載而不安裝。
a. 首選要安裝 yum-downloadonly
# yum install -y yum-downloadonly.noarch
b. 下載一個rpm包而不安裝
# yum install test.rpm -y --downloadonly //這樣雖然下載了,但是并沒有保存到我們想要的目錄下,那么如何指定目錄呢?
c. 下載到指定目錄
# yum install test.rpm -y --downloadonly --downloaddir=/usr/local/src
http://wiki.jikexueyuan.com/project/linux/images/11_45.png.jpg" alt="11_45.png.jpg" />
【安裝源碼包】
其實,在linux下面安裝一個源碼包是最常用的,筆者在日常的管理工作中,大部分軟件都是通過源碼安裝的。安裝一個源碼包,是需要我們自己把源代碼編譯成二進制的可執(zhí)行文件。如果你讀得懂這些源代碼,那么你就可以去修改這些源代碼自定義功能,然后再去編譯成你想要的。使用源碼包的好處除了可以自定義修改源代碼外還可以定制相關的功能,因為源碼包在編譯的時候是可以附加額外的選項的。
源碼包的編譯用到了linux系統(tǒng)里的編譯器,常見的源碼包一般都是用C語言開發(fā)的,這也是因為C語言為linux上最標準的程序語言。Linux上的C語言編譯器叫做gcc,利用它就可以把C語言變成可執(zhí)行的二進制文件。所以如果你的機器上沒有安裝gcc就沒有辦法去編譯源碼。你可以使用 yum install -y gcc 來完成安裝。
安裝一個源碼包,通常需要三個步驟:
1. ./config 在這一步可以定制功能,加上相應的選項即可,具有有什么選項可以通過”./config --help ”命令來查看。在這一步會自動檢測你的linux系統(tǒng)與相關的套件是否有編譯該源碼包時需要的庫,因為一旦缺少某個庫就不能完成編譯。只有檢測通過后才會生成一個Makefile文件。
2. make 使用這個命令會根據(jù)Makefile文件中預設的參數(shù)進行編譯,這一步其實就是gcc在工作了。
3. make install 安裝步驟,生成相關的軟件存放目錄和配置文件的過程。
上面介紹的3步并不是所有的源碼包軟件都一樣的,筆者以前也曾經遇到過,安裝步驟并不是這樣,也就是說源碼包的安裝并非具有一定的標準安裝步驟。這就需要你拿到源碼包解壓后,然后進入到目錄找相關的幫助文檔,通常會以INSTALL或者README為文件名。所以,你一定要去看一下。下面筆者會編譯安裝一個源碼包來幫你更深刻的去理解如何安裝源碼包。
1. 下載一個源碼包
http://wiki.jikexueyuan.com/project/linux/images/11_46.png.jpg" alt="11_46.png.jpg" />
這里要提一下,建議以后你把所有下載的源碼包放到/usr/local/src/目錄下,這個并不是必須的,只是一個約定。方便你和你的同事將來更好的去運維這臺服務器。wget即為下載的命令,后邊跟源碼包的下載地址。該地址為筆者從網(wǎng)上找的一個apache的下載地址。
2. 解壓源碼包
http://wiki.jikexueyuan.com/project/linux/images/11_47.png.jpg" alt="11_47.png.jpg" />
一般的源碼包都是一個壓縮包,如何解壓一個.tar.gz的包上一章講過的。
3. 配置相關的選項,并生成Makefile
http://wiki.jikexueyuan.com/project/linux/images/11_48.png.jpg" alt="11_48.png.jpg" />
使用./config --help 可以查看可用的選項。一般常用的有”--prefix=PREFIX “ 這個選項的意思是定義軟件包安裝到哪里。到這里,筆者再提一個小小的約定,通常源碼包都是安裝在/usr/local/目錄下的。比如,我們把apache安裝在/usr/local/apache2下,那么這里就應該這樣寫” --prefix=/usr/local/apache2”。其他還有好多選項,如果你有耐心你可以挨個去看一看都有什么作用。
http://wiki.jikexueyuan.com/project/linux/images/11_49.png.jpg" alt="11_49.png.jpg" />
筆者在這里只定義了apache的安裝目錄,其他都是默認。回車后,開始執(zhí)行check操作。
http://wiki.jikexueyuan.com/project/linux/images/11_50.png.jpg" alt="11_50.png.jpg" />
等check結束后生成了Makefile文件
http://wiki.jikexueyuan.com/project/linux/images/11_51.png.jpg" alt="11_51.png.jpg" />
除了查看有沒有生成Makefile文件來判定有沒有完成./config 的操作外,還可以通過這個命令”echo $?”來判定,如果是0,則表示上一步操作成功完成,否則就是沒有成功。
http://wiki.jikexueyuan.com/project/linux/images/11_52.png.jpg" alt="11_52.png.jpg" />
4. 進行編譯
http://wiki.jikexueyuan.com/project/linux/images/11_53.png.jpg" alt="11_53.png.jpg" />
這一步操作,就是把源代碼編譯成二進制的可執(zhí)行文件,這一步也是最漫長的一步,編譯時間的長短取決于源代碼的多少和機器配置。
5. 安裝
http://wiki.jikexueyuan.com/project/linux/images/11_54.png.jpg" alt="11_54.png.jpg" />
在安裝前,先確認上一步操作是否成功完成。
http://wiki.jikexueyuan.com/project/linux/images/11_55.png.jpg" alt="11_55.png.jpg" />
make install 會創(chuàng)建相應的目錄以及文件。當完成安裝后,會在/usr/local目錄下多了一個apache2目錄,這就是apache所安裝的目錄了。
http://wiki.jikexueyuan.com/project/linux/images/11_56.png.jpg" alt="11_56.png.jpg" />
其實在日常的源碼安裝工作中,并不是每個都像筆者這樣順利完成安裝的,遇到錯誤不能完成安裝的情況是很多的。通常都是因為缺少某一個庫文件導致的。這就需要你仔細琢磨報錯信息或者查看當前目錄下的config.log去得到相關的信息。另外,如果自己不能解決那就去網(wǎng)上google一下吧,通常你會得到你想要的答案。