一、Linux軟件包分類
1.1 源碼包
優點:
- 開源,如果有足夠的能力,
可以修改源代碼
; - 可以自由選擇所需的功能;
- 軟件是編譯安裝,所以更加適合自己的系統,更加穩定、效率更高;
- 卸載方便;
缺點:
- 安裝過程步驟較多,尤其安裝較大的軟件集合時(如
LAMP
環境搭建),容易出現拼寫錯誤; - 編譯過程時間較長,安裝比二進制安裝時間長;
- 因為是編譯安裝,安裝過程中一旦報錯新手很難解決;
注:
對於要求效率的軟件,要安裝源碼包版本,因為是本機編譯,更具有兼容性和效率,
而rpm
包是軟件開發者提供的大眾版本,可用於不注重效率的應用。
1.2 二進制包(RPM
包)
優點:
- 包管理系統簡單,只通過幾個命令就可以實現包的安裝、升級、查詢和卸載;
- 安裝速度比源碼包安裝快的多;
缺點:
- 經過編譯,不再可以看到源代碼;
- 功能選擇不如源碼包靈活;
- 依賴性;
1.3 yum在線安裝
可以方便的解決RPM
安裝依賴文件,一條命令就可以幫用戶從網上(本地也可以)找到安裝包進行安裝。
注:RedHat
的yum
是收費服務,而CentOS
的yum
是免費服務。
1.4 腳本安裝包
所謂的腳本安裝包如:lnmp/lamp
LNMP一鍵安裝包,就是把復雜的軟件包安裝過程寫成了程序腳本,初學者可以執行腳本實現一鍵安裝。但實際安裝的還是源碼包和二進制包
。
優點:安裝簡單、快捷;
缺點:完全喪失了自定義性;
總結:
其實Linux
中軟件包只有源碼包
和二進制(RPM)包
兩種軟件安裝包。
二、源碼包安裝(推薦方式)
2.1 源碼包與RPM包區別
安裝之前的區別: 概念上的區別
安裝之后的區別: 安裝位置不同
2.2 安裝位置不同帶來的影響
2.2.1 rpm包安裝位置
rpm
包安裝的服務可以使用系統服務管理命令(service
)來管理,
例如:RPM
包安裝的apache
的啟動方法是:
/etc/rc.d/init.d/httpd start service httpd start
請注意:rpm
包安裝也是可以指定安裝位置的,service
命令是redhat
的專有命令,所以/etc/rc.d/init.d/XXXX start
是最標准的啟動方式。如果為rpm
包指定了安裝目錄,抱歉,兩個啟動方法都不能用了。
2.2.2 源碼包安裝位置
安裝在指定位置當中,一般是:
/usr/local/軟件名/
源碼包安裝的服務,只能用絕對路徑
進行服務的管理。
2.2.3 總結
- 源碼包是不能使用【
service
】命令來啟動服務,因為源碼包的安裝位置由用戶指定,放在哪並不統一。而rpm包安裝后,通常都是放在【/etc/rc.d/init.d
】目錄中的,而【service
】命令執行時,會自動搜索該目錄,所以rpm
包安裝的服務可以使【service
】命令。 - 綜上所述,安裝位置不同,啟動方法是有區別的。
- 使用絕對路徑啟動程序的方法是通用的,通常軟件包中會寫上啟動程序的方法的。
- 如果將源碼包安裝后的啟動程序復制到【
/etc/rc.d/init.d
】目錄中,則也是可以使用【service
】命令執行的。 - 源碼包一定要指定安裝目錄,不指定的話,會和
rpm
一樣安裝的到處都是。但是,不能用-e
卸載了。一般指定目錄是/usr/local
(可以看出Windows
的Program Files
)。同時,源碼包不能用service
命令啟動的,原因在於service
命令是搜索/etc/rc.d/init.d/
目錄來啟動服務的。
2.3 源碼包安裝步驟(重點
)
2.3.1 安裝准備和源碼包獲取
- 由於源碼都是
c
語言寫的,所以要先安裝c
語言編譯器:gcc
- 從官方網站下載源碼包,若是下載到了
windows
上面,可以使用winSCP
傳到linux
上
注:若已安裝了二進制包,則源碼包也是可以繼續安裝的,因為兩者安裝目錄不一樣。但是,並不建議這樣做,因為端口會沖突。
2.3.2 源碼包安裝詳細過程
下面以安裝apache2
為例
2.3.2.1 確保有gcc
編譯器
gcc -v # 是否能打印你使用gcc版本信息
2.3.2.2 下載源碼包,解壓
http://mirror.bit.edu.cn/apache/httpd/
用winSCP
拖到/local/usr/src
目錄下保存
解壓:tar -zvxf httpd-2.2.31.tar.gz
解壓縮后的目錄為【httpd-2.2.31
】
2.3.2.3 安裝
安裝時必須進入到解壓縮后的目錄【httpd-2.2.31
】中
安裝步驟一
、 執行【./configure
】命令,該命令用於軟件配置與檢查(基本上每個源碼包都會有該命令,即使個別的沒有該命令,也會提供相關替代命令),它有以下幾點功能:
- 定義需要的功能選項;
- 檢測系統環境是否符合安裝要求;
- 把第一項中定義好的功能選項和第二項中檢測系統環境的信息都寫入
Makefile
文件,用於后續的編輯。(后續的【make
】和【make install
】命令都會依賴該文件)
執行命令【./configure --prefix=/usr/local/apache2
】,該命令用於指定安裝位置為:【/usr/local/apache2
】(其中的【apache2
】目錄不需要提前創建,【make install
】命令執行時會自動創建)。命令執行后,會在當前目錄生成Makefile
文件。
檢查依賴庫:make depend
安裝步驟二
、 執行【make
】命令,編譯源碼(這一步通常比較耗時)
安裝步驟三
、 執行【make install
】命令,安裝程序,此時會創建【/usr/local/apache2
】目錄
2.3.2.4 Tips
- 如果命令執行過程中發生終止,並且出現
error、warn
或no
提示,則表明出錯,否則,一切正常。 - 若執行【
./configure
】或【make
】命令時出現錯誤,是不需要刪除【/usr/local/apache2
】目錄的,因為程序還沒有真正安裝。只需要執行【make clean
】命令即可,該命令用於清除緩存、臨時文件等,使安裝環境恢復到未安裝狀態。 - 若執行【
make install
】命令時報錯,則需要刪除【/usr/local/apache2
】目錄,並且執行【make clean
】命令才行。
三、RPM命令管理
3.1 RPM包的來源
所有RPM
包都在系統光盤
的Packages
目錄中
3.2 RPM包命名規則
軟件包名-軟件版本-軟件發布的次數-適合的
Linux
平台-適合的硬件平台-包擴展名
httpd-2.2.15-15.el6.centsos.1.i686.rpm
httpd
軟件包名-2.2.15
軟件版本-15
發布的次數-el6.centos
適合的Linux
平台-i686
適應的硬件平台-rpm
包擴展名,el6
是redhat
的企業版
3.3 RPM包依賴性
a. 樹形依賴:a->b->c
解決方法:從后往前安裝
b. 環形依賴:a->b->c->a
解決方法:放在一條命令中安裝即可
c. 模塊依賴:庫文件依賴,庫也叫模塊,就是linux
當中的函數,它有一個典型的特征,就 是以【.so.數字
】結尾,它依賴的其實是一個文件,而不是軟件包。該文件藏身在某一個軟件包當中。我們只要將該文件所在的軟件包安裝上,該文件也就安裝了。解決方法:登錄www.rpmfind.net
網站,輸入庫文件名稱查詢到對應的rpm
包,然后安裝即可。
yum
在線安裝可以方便的解決依賴文件,一條命令就可以幫用戶從網上(本地也可以)找到安裝包進行安裝。
注:RedHat
的yum
是收費服務,而CentOS
的yum
是免費服務。
3.4 RPM安裝
rpm -ivh 包全名
-i(install) 安裝; -v(verbose) 詳細信息; -h(hash) 進度;
3.5 RPM升級和卸載
升級命令
rpm -Uvh
包全名(要升級到的軟件版本),如果沒有安裝這個軟件的任何版本,這個命令可以代替rpm -ivh
。
卸載命令
rpm -e 包名(比如Httpd,不需要包全名)
這個命令不同於安裝和升級,它可以在任何目錄運行,原理是去/var/lib/rpm
目錄中的數據庫(如__db0
)中查找對應的軟件包(已經安裝過的rpm包都在這些數據庫中),然后卸載。--nodeps
這個選項不管是在安裝和卸載的時候,最好都不要使用。
rpm
安裝包安裝的位置是由軟件包開發者決定的,安裝后的位置會非常凌亂,所以最好是使用rpm -e
命令卸載。
相對於二進制安裝,源碼安裝是指定安裝目錄了,卸載的時候只需要刪除對應的目錄就可以完全的卸載,不留一點殘余。
3.6 RPM包查詢
1.查詢是否安裝
rpm -q 包名 rpm -qa # q ==> query a ==> all
查詢所有已經安裝的RPM包
rpm -qa | grep httpd
grep 后跟正則表達式, find 后跟通配符
2. 查詢軟件包詳細信息
rpm -qi 包名
rpm -qip 包全名
# i ==> infomation
# p ==> package : 查詢**`未安裝包`**信息
有時遇到問題, 可根據未安裝包信息中所提供的網站進行查詢資料
3. 查詢包中文件安裝位置
rpm -ql 包名
# l ==> list # -p ==> package : 查詢未安裝包信息
可查看包作者欲將包安裝的位置
RPM 包默認安裝位置
4. 查詢系統文件屬於哪個 RPM 包
rpm -qf 系統文件名 # f ==> file : 查詢系統文件屬於哪個軟件包
該文件必須是通過 RPM
包安裝的
5. 查詢軟件包的依賴性
rpm -qR 包名
R ==> requires : 查詢軟件包的依賴性
p ==> package : 查詢未安裝包的信息
3.7 RPM 包校驗
rpm -V 已安裝的包名
-V ==> (verify) : 校驗指定RPM包中的文件
執行 rpm -V httpd 后, 無任何提示, 代表該文件沒有被做任何修改
判斷本地的apache
與官方給出的是否一致, 從而判斷是否被人修改。
修改文件 /etc/httpd/conf/httpd.conf
, 在注釋行添加任意內容后, 再次執行
提示 : S.5....T. c /etc/httpd/conf/httpd.conf
驗證內容中的8個信息:
S: 文件大小是否改變 M: 文件的類型或文件的權限( rwx )是否被改變 5: 文件MD5 校驗和是否改變( 可以看成文件內容是否改變 ) D: 設備的主從代碼是否改變 L: 文件路徑是否改變 U: 文件的屬主( 所有者 ) 是否改變 G: 文件的屬組是否改變 T: 文件的修改時間是否改變
驗證內容中的文件類型:
c(config file) : 配置文件 d(documentation) : 普通文檔 g(ghost file) : "鬼"文件, 很少見, 就是該文件不應該被這個RPM包包含 L(license file) : 授權文件 r(read me) : 描述文件 MD5校驗
作用:
用來校驗文件的完整性(文件內容是否被改變)。
例如, 在官網下載的游戲, 官方會給出MD5
校驗碼, 將下載的游戲通過專用的MD5
校驗工具校驗后生成一份MD5
校驗碼, 對比兩份校驗碼是否一致, 不一致則說明,下載的文件可能丟包, 可能文件損壞, 可能被其他人動過手腳一直木馬等。
四、yum在線安裝
4.1 yum源文件
yum的優點:
將所有軟件包放到官方服務器上,當進行yum
在線安裝時,可以自動解決依賴性問題
。(rpm缺點:安裝過程中,rpm
包依賴性太強)。
redhat
的yum
在線安裝需要付費,CentOS
不需要。
在【/etc/yum.repos.d/
】目錄中,默認有4
個yum
源文件,其中【CentOS-Base.repo
】是基本yum
源文件,如果我們能上網,那它是默認生效的,而其他的都是默認不生效的。
4.2 yum命令
- 查詢
yun list
--查詢所有可用軟件包列表yum search
關鍵字 --搜索服務器上所有和關鍵字相關的包 - 安裝
yum -y install
包名 (-y
自動回答yes
)yum
安裝只寫包名即可!eg:yum -y install gcc
--c語言編譯器 - 升級/卸載
升級:yum -y update 包名
-update:升級; -y:自動回答yes;
卸載:yum -y remove 包名
-remove:卸載; -y:自動回答yes;
!!!服務器使用最小化安裝,用什么軟件安裝什么,盡量不要卸載!!!
①LANG=en_US:切換至英文;(臨時生效)
②LANG=zh_CN.utf8:切換至中文;(臨時生效)
五、腳本安裝
5.1 腳本安裝包
所謂的腳本安裝包如:lnmp/lamp
LNMP一鍵安裝包,就是把復雜的軟件包安裝過程寫成了程序腳本,初學者可以執行腳本實現一鍵安裝。但實際安裝的還是源碼包和二進制包
。
優點:加單,快速,方便
缺點:
1.不能定義安裝軟件的版本; 2.不能定義所需要的軟件功能; 3.源碼包的優勢幾乎完全喪失;
5.2 腳本安裝包:准備工作
1、本節以安裝LNMP1.0
為例,所以需要先停止之前安裝的apache
和mysql
服務(最好也將源碼包安裝的apache
【/usr/local/apache2
】刪除)
nignx
非常優秀,可以支持更大的並發量。apache
的默認並發量是400
,如果給它改大,比如到>2000
,就要測一測了,如果穩定才能再繼續增加。nginx不用測試就可以設置到50000
(用戶同一時刻刷新網頁)。可以說一台nignx
服務器頂3
台apache
。
2、保證yum
源正常:可以使用【yum list
】命令測試。(若是光盤yum
源,記得掛載光盤)
3、關閉SELinux
和防火牆:
a、永久關閉SELinux的方法:編輯文件【/etc/selinux/config】,將【SELINUX=enforcing】改為【SELINUX=disabled】,然后重啟系統即可。 b、永久關閉防火牆的方法:【chkconfig iptables off】,開啟為:【chkconfig iptables on】;臨時關閉防火牆的方法:【service iptables stop】,開啟為:【service iptables start】。
4、腳本安裝過程中,會將系統中已有的apache、mysql、php
等卸載掉。下面是安裝腳本【centOS.sh
】的部分內容:
......部分內容省略......
yum install -y ntp ntpdate -u pool.ntp.org date rpm -qa|grep httpd rpm -e httpd rpm -qa|grep mysql rpm -e mysql rpm -qa|grep php rpm -e php yum -y remove httpd* yum -y remove php* yum -y remove mysql-server mysql yum -y remove php-mysql
......部分內容省略......
注:安裝后,如果安裝卡在了【php-fpm
】那里,通常表示已安裝成功,只是【php-fpm
】那里卡住了(物理機少見,但虛擬機比較常見),解決的方法就是:使用命令【pkill -9 php-fpm
】殺掉【php-fpm
】進程,然后重新啟動該進程【/etc/rc.d/init.d/php-fpm start
】即可。
LNMP一鍵安裝包安裝地址
注意:轉發網址:https://segmentfault.com/a/1190000011325357