1. 程式人生 > >Linux學習筆記六【應用程序安裝篇】

Linux學習筆記六【應用程序安裝篇】

導入公鑰 rpm -e + - tab window 原本 編譯 software ORC

同windows操作系統一樣,使用一個操作系統,肯定要安裝一些軟件,這篇隨筆主要介紹Linux上軟件的安裝。首先我們應該了解Linux應用程序的組成、熟悉RPM軟件包的管理機制,接著就是會使用RPM包管理工具,並且從源碼包編譯安裝應用程序。

  一、Linux應用程序簡介

  1、Linux命令與應用程序的關系

   (1)、文件位置

系統命令:一般在/bin和/sbin目錄中,或為Shell內部指令 應用程序:通常在/usr/bin和/usr/sbin目錄中 (2)、主要用途 系統命令:完成對系統的基本管理工作,例如IP配置工具 應用程序:完成相對獨立的其他輔助任務,例如網頁瀏覽器 (3)、適用環境 系統命令:一般只在字符操作界面中運行 應用程序:根據實際需要,有些程序可在圖形界面中運行 (4)、運行格式 系統命令:一般包括命令字、命令選項和命令參數 應用程序:通常沒有固定的執行格式

   (個人理解:在Linux中嚴格區分命令和程序也並無太大意義,對於“安裝軟件包”與“安裝應用程序”這兩種說法,也並不做嚴格的區分 )

  2、Linux應用程序的組成

  這部分與Linux的目錄層次有緊密關系,下面列出的是典型應用程序的目錄結構:

文件類型

保存目錄

普通執行程序文件

/usr/bin

服務器執行程序文件和管理程序文件

/usr/sbin

應用程序配置文件

/etc

日誌文件

/var/log

應用程序文檔文件

/usr/share/doc

應用程序手冊頁文件

/usr/share/man

   如果應用程序的配置文件較多,通常會以軟件名建立專門的子文件夾來保存,如“/etc/httpd”

   例如查看sendmail軟件包時,執行rpm -ql sendmail查看。

  3、軟件包的封裝類型

  封裝類型有多種,常見的是RPM軟件包,擴展名為“.rpm”,源代碼軟件包,一般為“.tar.gz”、“.tar.bz2”等格式的壓縮包包含程序的原始代碼;這兩種較常用。其它的有deb軟件包,擴展名為“.deb”,提供安裝程序的軟件包,一般是install.sh、setup、.bin格式的文件,類似windows中的exe安裝文件,還有綠色免安裝的軟件包,在壓縮包內提供已編譯好的執行程序文件,解開壓縮包後的文件即可直接使用。(備註:使用tar命令制作而成的源代碼包文件,經常被稱為“TarBall” ,即“Tar包”)

  二、使用RPM包管理工具

  1、RPM簡介

  PRM:RedHat Package Manager,因為這個RPM格式的關鍵包格式是由Red Hat公司首先提出並使用的,後得到廣泛使用。它建立統一的數據庫文件,詳細記錄軟件包安裝、卸載等變化信息,能夠自動分析軟件包依賴關系。

  RPM包的一般格式為:bash-3.1-16.1.i386.rpm(軟件名稱,版本號,發布次數,硬件平臺,擴展名)

  當然這個格式不固定,因為有時候可能還會加上所適用的操作系統信息,如:wget-1.10.2-7.el5.i386.rpm

  2、使用RPM包管理命令

  RPM命令的主要功能是:

(1). 查詢RPM軟件、包文件的相關信息 查詢已安裝的RPM軟件信息:rpm -q[子選項] [軟件名] 查詢文件/目錄屬於哪個RPM軟件 :rpm -qf 文件/目錄名 (備註:使用“-q”選項時實際上調用了“/usr/bin/rpmquery”程序完成查詢工作,對於“-qa”查詢選項,命令參數(即軟件包名)是非必須的;一般查詢時,軟件名不需要指定版本號)
[root@localhost ~]# rpm -q bash     ==>查詢是否已安裝有bash軟件包
bash-3.1-16.1
[root@localhost ~]# rpm -qa | grep bash
bash-3.1-16.1

[root@localhost ~]# rpm -qf /usr/bin/vim    ==>查詢vim是由哪個軟件包安裝的
vim-enhanced-7.0.109-3

[root@localhost ~]# rpm -ql dhcp   ==>查詢dhcp軟件包安裝的文件列表
/etc/dhcpd.conf
/etc/rc.d/init.d/dhcpd
……
查詢未安裝的RPM軟件包文件:rpm -qp[子選項] [RPM包文件] 用法:結合不同的子選項 完成不同查詢 -qpi:通過.rpm包文件查看該軟件的詳細信息 -qpl:查看.rpm安裝包內所包含的目錄、文件列表 -qpc:查看.rpm安裝包內包含的配置文件列表 -qpd:查看.rpm安裝包內包含的文檔文件列表
[root@localhost Server]# rpm -qpl lynx-2.8.5-28.1.i386.rpm
/etc/lynx-site.cfg
/etc/lynx.cfg
……
==>查詢lynx安裝包中的文件列表
(2). 安裝、升級、卸載RPM軟件包 安裝或升級RPM軟件:rpm [選項] [RPM包文件]...   用法:不同選項適用於不同情況 -i:安裝一個新的rpm軟件包 -U:升級某個rpm軟件,若原本未裝,則進行安裝 -F:更新某個rpm軟件,若原本未裝,則放棄安裝 卸載指定的RPM軟件:rpm -e 軟件名 (備註:卸載軟件時只需要指定軟件名即可,無需指定版本號) 輔助選項簡單介紹:  --force:強制安裝所指定的rpm軟件包 --nodeps:安裝、升級或卸載軟件時,忽略依賴關系 -h:以“#”號顯示安裝的進度 -v:顯示安裝過程中的詳細信息 (備註:--force 輔助選項主要應用於以下兩種情況:

1)缺失某個軟件包的文件時,需要進行覆蓋安裝以找回丟失文件

2)安裝一個比現有軟件版本陳舊的軟件包(多為測試用途)

當安裝、卸載軟件包時,提示缺少依賴包無法進行時,如果仍要繼續執行,應結合 --nodeps 選項而不 是 --force 選項)

[root@localhost ~]# rpm -ivh lynx-2.8.5-28.1.i386.rpm  ==>安裝一個新的RPM包
warning: lynx-2.8.5-28.1.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing...    ########################################### [100%]
   1:lynx       ########################################### [100%]
                          ==>安裝lynx軟件包同事顯示安裝進度
[root@localhost ~]# rpm -q lynx
lynx-2.8.5-28.1
[root@localhost ~]# rpm -e lynx  ==>卸載lynx軟件包
[root@localhost ~]# rpm -q lynx
package lynx is not installed

(備註:“warning:……NOKEY……”的警告信息是由於沒有導入RedHat提供的公鑰所致,但並不影響安裝效果,可以忽略,如果需要導入公鑰文件,可以參考如下步驟(以後從RHEL5光盤中安裝軟件時,就不會再出現警告提示了):[root@localhost ~]# cd /media/cdrom

                 [root@localhost cdrom]# rpm --import RPM-GPG-KEY-redhat-release)

[root@localhost ~]# rpm -i wget-1.10.2-3.2.1.i386.rpm
[root@localhost ~]# rpm -q  wget
wget-1.10.2-3.2.1
[root@mail ~]# rpm -Uvh /media/cdrom/wget-1.10.2-7.el5.i386.rpm ==>升級wget軟件包
warning: /media/cdrom/wget-1.10.2-7.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing... ########################################### [100%]
   1:wget    ########################################### [100%]
[root@localhost ~]# rpm -q  wget
wget-1.10.2-7.el5

(備註:在系統中不存在被升級的軟件包時,升級命令的功能等同於安裝命令)

  解決軟件包依賴關系:

1)、安裝有依賴關系的多個軟件時 被依賴的軟件包需要先安裝 同時指定多個.rpm包文件進行安裝 (備註:如果需要同時安裝相互依賴的數十個.rpm軟件包,可以結合Shell通配符“*”同時指定這些文件作為參數) 2)、卸載有依賴關系的多個軟件時 依賴其他程序的軟件包需要先卸載 同時指定多個軟件名進行卸載 3)、忽略依賴關系 結合“--nodeps”選項,但可能導致軟件異常 (3). 維護RPM數據庫信息

    當RPM數據庫損壞時,需要進行數據庫重建:rpm --rebuilddb 或者rpm --initdb  

  三、從源碼包編譯安裝程序

  1、源碼編譯簡介

  既然有了RPM安裝,那麽為什麽需要源碼安裝呢?首先它能獲得最新的軟件版本,及時修復bug;然後它那能根據用戶需要,靈活定制軟件功能。它的應用場合也非常廣泛,比如安裝較新版本的應用程序時、當前安裝的程序無法滿足需要時或者需要為應用程序添加新的功能時等。

  Tarball封包:多為.tar.gz或者tar.bz2格式。

  確認源代碼編譯環境:

  需要安裝支持C/C++程序語言的編譯器。

[root@localhost ~]# gcc --version  ==>或g++ -v  [--version]
gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-44)
Copyright (C) 2006 Free Software Foundation, Inc.
本程序是自由軟件;請參看源代碼的版權聲明。本軟件沒有任何擔保;
包括沒有適銷性和某一專用目的下的適用性擔保。
[root@localhost ~]# g++ --version
g++ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-44)
……

(備註:在實際編譯安裝軟件的操作中,大多數情況是通過 make 來自動調用gcc或g++進行工作,無需用戶手動執行gcc等命令)

  2、從源碼編譯安裝程序的基本過程

解包 —— tar 解包、釋放出源代碼文件 配置 —— ./configure (configure 一般是位於軟件包目錄中的可執行腳本文件) 針對當前系統、軟件環境,配置好安裝參數 編譯 —— make 將源代碼文件變為二進制的可執行程序 安裝 —— make install 將編譯好的程序文件復制到系統中 3、源碼編譯安裝程序示例   1)、解包 (習慣上將軟件包釋放到 /usr/src/ 目錄;解包後的源代碼文件位置:/usr/src/軟件名-版本號/)
[root@localhost ~]# tar zxvf axel-1.0a.tar.gz -C /usr/src/
[root@localhost ~]# ls /usr/src/axel-1.0a/
API     axelrc.example  configure  CREDITS  gui       nl.po     tcp.c
axel.1  CHANGES         conn.c     de.po    http.c    README    tcp.h
axel.c  conf.c          conn.h     ftp.c    http.h    search.c  text.c
axel.h  conf.h          COPYING    ftp.h    Makefile  search.h

==>configure執行腳本用於下一步的配置,README或INSTALL文件可提供安裝方法

  2)、配置

  (需將工作目錄切換到軟件源碼所在目錄;使用源碼目錄中的 configure 腳本;執行“./configure --help” 可以查看幫助;典型的配置選項: --prefix=軟件安裝目錄)

[root@localhost ~]# cd /usr/src/axel-1.0a
[root@localhost axel-1.0a]# ./configure --prefix=/usr/local/axel 
==>若不指定任何配置選項,將采用默認值

(備註:不同的應用程序其配置參數會存在區別,因此學會使用“./configure --help”非常重要(“./”表示當前目錄);用戶應用程序習慣上安裝到“/usr/local/軟件名”文件夾中;編譯過程中如果出現錯誤,通常是由於缺少依賴軟件包所致;根據軟件大小不同,配置過程可能會需要不同的時間)

  3)、編譯 :執行make命令

  4)、安裝 :執行make install命令

[root@localhost axel-1.0a]# make
[root@localhost axel-1.0a]# make install

    驗證已編譯安裝完成的程序:

[root@localhost axel-1.0a]# ls /usr/local/axel/  /usr/local/axel/bin/
/usr/local/axel/:
bin  etc  share
/usr/local/axel/bin/:
axel
[root@localhost axel-1.0a]# /usr/local/axel/bin/axel –help
Usage: axel [options] url1 [url2] [url...]
--max-speed=x      -s x    Specify maximum speed (bytes per second)
……

Linux學習筆記六【應用程序安裝篇】