Linux下軟件包的多種安裝方式

1.源碼包安裝

        在Linux下的不少軟件都是經過源碼包方式發佈的,雖然相對於二進制軟件包,配置和編譯起來繁瑣點,可是它的可移植性卻好得多,針對不一樣的體系結構,軟件開發者每每僅需發佈同一份源碼包,不一樣的最終用戶通過編譯就能夠正確運行。
安裝的具體步驟:
$ tar zxvf XXXX.tar.gz (or tar jxvf XXXX.tar.bz2)
$ cd XXXX
$ ./configure
$ make
# make install            ##安裝
$ make clean              ##安裝完成後用來清理臨時文件
$ake uninstall            ##用來卸載軟件

一、解壓:

        最多見源碼包的就兩種(XXXX.tar.gz or XXXX.tar.bz2),其實這些源碼包都是由2個工具壓縮而成的,tar.gz結尾的文件用到的工具是tar和gunzip,而tar.bz2結尾的文件所使用的工具是tar和bzip2,之因此這樣作是由於,tar僅僅可以打包多個文件可是沒有壓縮的功能,而gz和bz2卻恰好相反,僅可以壓縮單個文件,這樣咱們常見的源碼包其實是經過tar先將不一樣的源文件打包,而後再經過gunzip或者bzip2壓縮後發佈的,固然這兩個步驟能夠經過一條命令實現:
$ tar zcvf XXXX.tar.gz XXXX(or tar jcvf XXXX.tar.bz2 XXXX)
解壓的相關命令以下:
$ tar zxvf XXXX.tar.gz
$ tar jxvf XXXX.tar.bz2

二、./configure:

        解壓完成就正式開始安裝了(補充一點,開始configure以前,若有必要,請使用patch工具爲源碼打上相應的補丁),首先跳轉到源碼的解壓目錄,衆所周知,開始configure前仍是應該仔細閱讀源碼目錄下的README或者INSTALL文件,好多安裝中的注意事項在這裏都有所羅列,configure其實是一個腳本文件,在當前目錄中鍵入"./configure",shell就會運行當前目錄下的configure腳本,有一點必須說明,在整個configure過程,其實編譯還沒有進行,configure僅僅是作編譯相關的準備工做,它主要對您當前的工做平臺作一些依賴性檢查,好比編譯器是否安裝,鏈接器是否存在,若是在檢測的過程沒有任何錯誤,你很幸運,configure腳本會在當前目錄下生成下一步編譯連接所要用到的另外一個文件Makefile,固然configure支持及其豐富的命令行參數,能夠鍵入"./configre --help"獲取具體的信息,最經常使用的恐怕就是:
$ ./configure --prefix=/opt/XXX    它用來設置軟件的安裝目錄.

三、make:

        若是configure過程正確完成,那麼在源碼目錄,會生成相應的Makefile文件,Makefile文件簡單來講包括的是一組文件依賴關係以及編譯連接的相關步驟,事實上真正的編譯連接工做也不是make所作的,make只是一個通用的工具,通常狀況下,make會根據Makefile中的規則調用合適的編譯器編譯全部與當前軟件相依賴的源碼,生成全部相關的目標文件,最後再使用連接器生成最終的可執行程序:
$ make

四、make install:

        當上面兩個步驟正確完成,表明着編譯連接過程已經徹底結束,最後要作的就是將可執行程序安裝到正確的位置,在這個步驟,普通用戶可能沒有相關目錄的操做權限,臨時切換到root是一個不錯的選擇,"install"只是Makefile文件中的一個標號,"make install"表明着make工具執行Makefile文件中"install"標號下的全部相關操做,若是在configure階段沒有使用"--prefix=/opt/XXX"指定應用程序的安裝目錄,那麼應用程序通常會被默認安裝到/usr/local/bin,若是/usr/local/bin已經存在於您的PATH中,那麼安裝已經基本結束:
$make install

執行完上述操做就能夠等待安裝完成了。 java

$make clean
$make uninstall

        這兩個步驟只是安裝的後續操做,有一點必須注意,"clean"和"uninstall"也是Makefile文件中相應的兩個標號,執行這兩個步驟的時候Makefile文件必要保留,"make clean"用來清除編譯鏈接過程當中的一些臨時文件,"make uninstall"是卸載相關應用程序,與make install相似,make uninstall也須要切換到root執行,不過"uninstall"標號在好多Makefile中都被省略掉了。 node

2.RPM包安裝

一、如何安裝rpm軟件包

rmp軟件包的安裝可使用程序rpm來完成。執行下面的命令
rpm -i your-package.rpm

其中your-package.rpm是你要安裝的rpm包的文件名,通常置於當前目錄下。 mysql

安裝過程當中可能出現下面的警告或者提示:
... conflict with ... 多是要安裝的包裏有一些文件可能會覆蓋現有
的文件,缺省時這樣的狀況下是沒法正確安裝的能夠用
rpm --force -i 強制安裝便可
... is needed by ...
... is not installed ... 此包須要的一些軟件你沒有安裝能夠用
rpm --nodeps -i 來忽略此信息
也就是說,rpm -i --force --nodeps 能夠忽略全部依賴關係和文件問題,什麼包
都能安裝上,但這種強制安裝的軟件包不能保證徹底發揮功能

二、如何安裝.src.rpm軟件包

有些軟件包是以.src.rpm結尾的,這類軟件包是包含了源代碼的rpm包,在安裝時
須要進行編譯。這類軟件包有兩種安裝方法,

方法一:

1.執行rpm -i your-package.src.rpm
2. cd /usr/src/redhat/SPECS
3. rpmbuild -bp your-package.specs 一個和你的軟件包同名的specs文件
4. cd /usr/src/redhat/BUILD/your-package/ 一個和你的軟件包同名的目錄
5. ./configure 這一步和編譯普通的源碼軟件同樣,能夠加上參數
6. make
7. make install

方法二:

1.執行rpm -i you-package.src.rpm
2. cd /usr/src/redhat/SPECS                 前兩步和方法一相同
3. rpmbuild -bb your-package.specs          一個和你的軟件包同名的specs文件

        這時,在/usr/src/redhat/RPM/i386/ (根據具體包的不一樣,也多是i686,noarch等等)目錄下,有一個新的rpm包,這個是編譯好的二進制文件,執行rpm -i new-package.rpm便可安裝完成。 sql

三、如何卸載rpm軟件包

使用命令 rpm -e 包名,包名能夠包含版本號等信息,可是不能夠有後綴.rpm
好比卸載軟件包proftpd-1.2.8-1,可使用下列格式:
rpm -e proftpd-1.2.8-1
rpm -e proftpd-1.2.8
rpm -e proftpd-
rpm -e proftpd

不能夠是下列格式: shell

rpm -e proftpd-1.2.8-1.i386.rpm
rpm -e proftpd-1.2.8-1.i386
rpm -e proftpd-1.2
rpm -e proftpd-1

有時會出現一些錯誤或者警告: vim

... is needed by ... 這說明這個軟件被其餘軟件須要,不能隨便卸載

能夠用rpm -e --nodeps強制卸載 緩存

四、如何不安裝可是獲取rpm包中的文件

使用工具rpm2cpio和cpio
rpm2cpio xxx.rpm | cpio -vi
rpm2cpio xxx.rpm | cpio -idmv
rpm2cpio xxx.rpm | cpio --extract --make-directories

參數i和extract相同,表示提取文件。v表示指示執行進程 工具

d和make-directory相同,表示根據包中文件原來的路徑創建目錄
m表示保持文件的更新時間。

五、如何查看與rpm包相關的文件和其餘信息

下面全部的例子都假設使用軟件包mysql-3.23.54a-11

1.個人系統中安裝了那些rpm軟件包

rpm -qa  列出全部安裝過的包

若是要查找全部安裝過的包含某個字符串sql的軟件包 ui

rpm -qa |grep sql

2.如何得到某個軟件包的文件全名

rpm -q mysql 能夠得到系統中安裝的mysql軟件包全名,從中能夠得到當前軟件包的版本等信息。

這個例子中能夠獲得信息mysql-3.23.54a-11 spa

3.一個rpm包中的文件安裝到那裏去了?

rpm -ql 包名            注意這裏的是不包括.rpm後綴的軟件包的名稱

        也就是說只能用mysql或者mysql-3.23.54a-11而不是mysql-3.23.54a-11.rpm,若是隻是想知道可執行程序放到那裏去了,也能夠用which,好比

which mysql

4.一個rpm包中包含那些文件

一個沒有安裝過的軟件包,使用:rpm -qlp ****.rpm
一個已經安裝過的軟件包,還可使用:rpm -ql ****.rpm

5.如何獲取關於一個軟件包的版本,用途等相關信息?

一個沒有安裝過的軟件包,使用rpm -qip ****.rpm
一個已經安裝過的軟件包,還可使用rpm -qi ****.rpm

6.某個程序是哪一個軟件包安裝的,或者哪一個軟件包包含這個程序

rpm -qf `which 程序名` 返回軟件包的全名
rpm -qif `which 程序名` 返回軟件包的有關信息
rpm -qlf `which 程序名` 返回軟件包的文件列表

注意,這裏不是引號,而是`,就是鍵盤左上角的那個鍵,也可使用rpm -qilf,同時輸出軟件包信息和文件列表

7.某個文件是哪一個軟件包安裝的,或者哪一個軟件包包含這個文件

        注意,前一個問題中的方法,只適用與可執行的程序,而下面的方法,不只能夠用於可執行程序,也能夠用於普通的任何文件,前提是知道這個文件名,首先得到這個程序的完整路徑,能夠用whereis或者which,而後使用rpm -qf例如:
# whereis ftptop
ftptop: /usr/bin/ftptop /usr/share/man/man1/ftptop.1.gz
# rpm -qf /usr/bin/ftptop
proftpd-1.2.8-1
# rpm -qf /usr/share/doc/proftpd-1.2.8/rfc/rfc0959.txt
proftpd-1.2.8-1

得到軟件包相關的信息用rpm -q,q表示查詢query,後面能夠跟其餘選項,好比

i 表示info,得到軟件包的信息;
l 表示list,得到文件列表;
a 表示all,在全部包中執行查詢;
f 表示file,根據文件進行相關的查詢;
p 表示package,根據軟件包進行查詢
須要的查詢條件可使用grep產生,或者從"` `"中的命令行產生

3.yum安裝

自動搜索最快鏡像插件:yum install yum-fastestmirror
安裝yum圖形窗口插件:yum install yumex

一、安裝

yum install 所有安裝
yum install package1 安裝指定的安裝包package1
yum groupinsall group1 安裝程序組group1

二、更新和升級

yum update 所有更新
yum update package1 更新指定程序包package1
yum check-update 檢查可更新的程序
yum upgrade package1 升級指定程序包package1
yum groupupdate group1 升級程序組group1

三、查找和顯示

yum info package1 顯示安裝包信息package1
yum list 顯示全部已經安裝和能夠安裝的程序包
yum list package1 顯示指定程序包安裝狀況package1
yum groupinfo group1 顯示程序組group1信息yum search string 根據關鍵字string查找安裝包

四、刪除程序

yum remove | erase package1 刪除程序包package1
yum groupremove group1 刪除程序組group1
yum deplist package1 查看程序package1依賴狀況

五、清除緩存

yum clean packages 清除緩存目錄下的軟件包
yum clean headers 清除緩存目錄下的 headers
yum clean oldheaders 清除緩存目錄下舊的 headers
yum clean, yum clean all (= yum clean packages; yum clean oldheaders) 清除緩存目錄下的軟件包及舊的headers

六、TIPS

1.讓yum命令下載軟件包,可是不安裝

yum有一個plugin叫作yum-downloadonly,它就能夠爲用戶實現只下載軟件包的功能。
咱們可使用如下命令安裝這個插件:
yum install yum-downloadonly
完成安裝後,yum就多了兩個命令參數,分別是:
--downloadonly
--downloaddir=/path/to/dir

這兩個命令參數的含義很是明確,不用多做解釋了,這樣,用戶就能夠作到使用yum只下載軟件包,不自動安裝了

2.不用yum-downloadonly插件,安裝或者升級軟件時保留下安裝包

yum 默認狀況下,升級或者安裝後,會刪除下載的rpm包。
不過,咱們也能夠以下設置升級後不刪除下載的rpm包
vim /etc/yum.conf
[main]
cachedir=/var/cache/yum
keepcache=0

將 keepcache=0 修改成 keepcache=1, 安裝或者升級後,在目錄 /var/cache/yum 下就會有下載的 rpm 包了。

相關文章
相關標籤/搜索