(注:內容太多,容納不下,編譯安裝apache單獨成文)
一、程序包管理工具
不同的發行版采用的管理工具不盡相同:
debian: 程序文件以deb結尾,包管理器為dpkg
redhat:程序文件以rpm結尾,包管理器為rpm
前端工具:自動解決依賴關系
yum:rpm包管理器的前段工具
apt-get:deb包管理器的前段工具
1、程序包管理器的功能:
將編譯好的應用程序的各組成文件打包成一個或多個程序包文件,從而方便快捷地實現程序包的安裝、卸載、查看、升級和校驗等管理操作。
2、二進制應用程序的組成部分:
二進制文件、庫文件、配置文件、幫助文件
3、二進制文件包的命名方式:
name-Version-release-arch.rpm
如:zlib-1.2.3-29.el6.x86_64.rpm
zlib:包名
1.2.3:主版本號
29:在主版本的基礎上的打包數。由于修復bug等原因進行修改,每修改一次,增加一次打包數。
el6:應用于哪個發行版。el6標識RHEL的發行版
x86_64:基于哪個架構平臺發行的
常見的架構平臺
32位: i386 i486 i686
64位: x64 x86_64 amd 64
noarch:不局限于某架構平臺的,通用
rpm:軟件包的擴展名
4、二進制文件包的類型
主包:name-Version-release.arch.rpm
支寶:name-function-Version-release.arch.rpm
function:devel,utils,libs…
比如:yum的rpm就由yum主包和多個功能包組成
5、包文件的組成
(1)每個包都單獨實現的:
文件清單
安裝或卸載時運行的腳本
(2)公共的數據庫:
程序包名稱及版本
依賴關系
功能說明
包安裝后生成的各文件路徑及校驗碼信息
6、獲取程序包的途徑:
1、發行版的光盤或官方的文件服務器(或鏡像站點)
http://mirrors.aliyun | sohu | 163.com
2、項目的官方站點
3、第三方組織
a、EPEL
b、搜索引擎,包含但不限于下列搜索引擎:
http://pkgs.org
http://rpmfind.net
http://rpm.phone.net
使用非官方程序包的建議:在使用非官方的程序包時,應檢查其合法性,以保障系統的安全。
合法性包括:
來源合法性:即程序包是從開心來的途徑獲得。
內容合法性:即程序包的內容沒有發生改動。
二、rpm命令的使用
1、安裝
rpm –i|–install [install-options] Package_File1…
常用選項:
-v(verbose):顯示安裝過程詳細信息
-vv:更詳細
-h:hash marks輸出進度條;每個#表示2%的進度
–test:測試安裝是否成功,并報告依賴關系及沖突消息等,并不真正地安裝。
–nosignature:不檢查來源合法性,不檢查包簽名信息
-nodigest:不檢查包完整性
–noscripts:不執行程序包腳本
rpm包可以自帶腳本
腳本分為4類:
preinstall:安裝過程開始之前運行的腳本,以%pre標識,–nopre(不執行該腳本片段)
postinstall:安裝過程完成之后運行的腳本,以%post標識,–nopost(不執行該腳本片段)
preuninstall:卸載過程開始前運行的腳本,以%preun標識,–nopreun(不執行該腳本片段)
postuninstall:卸載過程完成之后運行的腳本,以%postun表示,–nopostun(不執行該腳本片段)
通常使用: rpm –ivh Package_File1…來進行安裝
–test檢測依賴關系,當然也可直接安裝,依賴關系不滿足也會返回錯誤
2、升級
rpm {-U|–upgrade} [install-options] PACKAGE_FILE …
rpm {-F|–freshen} [install-options] PACKAGE_FILE …
rpm -Uvh:升級(若已安裝)或安裝(若未安裝)
rpm -Fvh:只升級
常用選項:
–oldpackage:降級
–force:強制升級
注意:(1)不要對內核做升級操作;內核支持多版本并存,若有需要,可另安裝新版本內核
(2) 如果原程序包的配置文件在安裝之后被修改,升級時,新版本程序提供的同意配置文件不會覆蓋原有的配置文件,而是把新版本的配置文件重命名為(Filename.repnre)后提供。
例:安裝zsh-4.3.10,之后升級至4.3.11
3、卸載
rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts] [–test] PACKAGE_NAME …
–allmatches:卸載所有匹配指定名稱的程序包的各版本
–nodeps:忽略依賴關系
–test:測試卸載,dry run模式
4、查詢
rpm {-q|–query} [select-options] [query-options]
[select-options]
Package_Name:查詢指定的程序包是否已安裝,及其版本信息
-a|–all:查詢所有已安裝過的包
-f File:查詢指定的文件由哪個程序包安裝生產
-p|–package Package_File:用于實現對未安裝的程序包執行查詢操作。
–whatprovides CapAbility :查詢指定的CapAbility由哪個程序包提供
–whatrequires CapAbility:查詢指定的CapAbility被哪個包所依賴
[query-options]
–changelog:查詢rpm包的changelog
-l|–list:程序安裝生產的所有文件列表
-i|–info:程序包相關的信息,版本號、大小、所屬的包組等
-c|–configfiles:查詢指定的程序包提供的配置文件
-d|–docfiles:查詢指定的程序包提供的文檔
–provides:列出所指定的程序包提供的所有的CapAbility
-R|–requires:查詢指定的程序包的依賴關系
–scripts:查詢程序包自帶的腳本片段
用法:
-qi Package :產看程序包的詳細信息
-qf file:查看指定的文件由哪個程序安裝生成
-qc Package:查看指定程序包安裝生成的配置文件
-ql Package:查看指定包安裝產生的所有文件
-qd Package:查看指定程序包提供的文檔
-p選項為查看未安裝程序包的信息,其余選項基本一致,不再解釋
-qpi Package
-qpl Package
-qpc file
例1:查看httpd安裝包自帶的腳本
例2:查看httpd安裝包提供的Capability
例3:查看zsh安裝包生成的配置文件
例4:查看/etc/zshrc文件由哪個程序包安裝生成
例5:查看zsh安裝生成的所有文檔
5、校驗
rpm {-V|–verify} [select-options] [varify-options]
S file Size differs
M Mode differs (includes permissions and file type)
5 digest (formerly MD5 sum) differs
D Device major/minor number mismatch
L readLink(2) path mismatch
U User ownership differs
G Group ownership differs
T mTime differs
P caPabilities differ
包來源合法性驗證和完整性驗證:
來源合法性驗證:數字簽名
完整性驗證:
獲取并導入信任的包制作者的密鑰:
rpm –import /etc/pki/rpm-apg/RPM-GPK-KEY-CentOS-7
驗證:
(1)安裝此組織簽名的程序時,會自動執行驗證
(2)手動驗證:rpm -K Package_File
數據庫重建:
rpm管理器數據庫路徑:/var/lib/rpm
查詢操作:通過此處的數據庫進行
rpm {–initdb|–rebuilddb}
initdb:初始化數據庫,當前無任何數據庫時創建一個新的;當前有時不執行任何操作
-rebuilddb:重新構建,通過讀取當前系統上所有已安裝過的程序包進行創建。
獲取幫助:
CentOS6:man rpm
CentOS7:man rpmdb
三、yum命令
yum命令依賴于rpm命令,但是yum自動解決了包的依賴關系,在使用中較rpm更為方便。
yum repository(yum repo):yum 倉庫,存儲了眾多rpm包,以及包相關的元數據文件,放置于特定目錄下,此目錄需包含軟件包和repodata目錄
1、 yum倉庫提供的方式:
a、本地yum倉庫:
本地yum倉庫多使用光盤作為yum源,如何使用光盤當作本地yum倉庫:
(1)掛載光盤
mount -r -t iso9660 /dev/cdrom /media/cdrom
(2)創建配置文件:yum-config-manager –add-repo=file:///path/to/iso_file
(3)修改配置文件:
設置gpgcheck=0|1;若設置為1;需指定
gpgkey= file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
b、自建yum倉庫
當我們有多個零散的rpm包時,可以將這些包組合在一個目錄中,配置成yum倉庫,方便日常使用
rpm包的獲取方式有多種,下面只介紹在ftp服務器中獲取rpm包:
(1)登錄ftp之后,可以使用!+command使用linux的命令,而不是執行ftp的命令
(2)lcd切換本地目錄,這樣下載的rpm將包存放于該目錄
(3)get下載
如何自建yum 倉庫
(1)下載rpm包,
(2)組合在一個目錄中
(3)創建repodata: createrepo [options] <dirctory>
createrepo -d somedir
(4)創建yum配置文件: yum-config-manager –add-repo=file:///
(5)修改配置文件:
c、遠程yum倉庫。
遠程服務器要提供yum倉庫服務,器本身需要提供以下幾種服務中的一種:
ftp://文件服務器
http://
nfs://
file:///
2、yum客戶端配置:
配置文件:/etc/yum.conf:提供公共配置。通常不要做修改
etc/yum.repos.d/*.repo:為倉庫的指向提供配置。我們使用的常用配置文件。
每個repo結尾的文件對應一個yum服務器,當然也可以將多個yum服務器配置寫在同一個配置文件中。但寫入不同的文件在管理時操作叫方便
3、倉庫的定義:
[repositoryID] #倉庫id
name= #倉庫名,指定與否皆可
baseurl-url=path/to/repository #指定倉庫路徑
enabled={1|0} #是否啟用此倉庫,默認為1,啟用
gpgcheck={1|0} #是否檢查此倉庫中rpm包的合法性,默認為1,檢查
gpgkey=url #若gpgcheck為1,則必須給密鑰文件路徑,否則報錯。
file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
enablegroup={1|0}:是否支持組軟件包管理,默認支持。可不做特別指定
yum命令的用法:
顯示倉庫列表
yum repolist{all|enabled|disabled}
顯示程序包:
yum list [all]
yum list {available|installed|updates}
安裝程序包:
yum install package1 [package2] …
升級程序包
yum update package1 [package2] …
檢查可用升級:
yum check-update
卸載程序包:
yum remove|erase package1 [package2] …
查看程序包information:
yum info […]
查看指定的特性(可以是某文件)是由那個程序包提供:
yum provides | whatprovides feature1 [feature2]…
清理本地緩存
yum clean [all | packages | rpmdb…]
構建緩存
yum makecache
搜索
yum search string1 [string2]…
以指定的關鍵字搜索程序包名及summary信息
查看指定包所以來的capabilities
yum deplist package1 [package2] …
查看yum事務歷史
yum history [list | summary |stats…]
包組管理的相關命令,包組管理使用類似,在此不再做詳細介紹:
yum grouplist #查看包組
groupinstall #安裝包組
groupupdate #升級
groupremove #刪除
groupinfo #查看指定包組的詳細信息
注:低版本的系統可以指向搞版本的yum倉庫,但高版本的系統不能指向低版本的yum源
CentOS6.0的yum源可以指向6.1等更高的6系列的yum源,但反過來不支持
yum的命令行選項:
–nogpgcheck:禁止進行gpg check
-y:自動回答為yes
-q:靜默模式
–disablerepo=[repo]:臨時禁用此repo
–enablerepo=[repo]:臨時啟用此repo
yum的repo配置文件中可用的變量:
應用場景:為多臺pc/server配置yum倉庫時,不用為每臺pc/server指定特別的倉庫路徑,而是通過變量獲取當前系統的基本信息,從而到對應版本的倉庫中獲取yum源。
$releasever:當前OS的發行版的主版本號
$arch:平臺
$basearch:基礎平臺
$YUM0-$YUM9
http://mirrors.163.com/centos/$releasever/$basearch/os
四、程序包編譯安裝:
不同語言的編譯工具:
C、C++:make(configure–>Makefile.in–>makefile)
java:maven
C代碼編譯安裝三步驟:
1 ./configure:
(1)、通過選項傳遞參數,指定啟用特性、安裝路徑等;執行時會參考用戶的指定及Makefile.in文件生成makefile
(2)、檢查依賴的外部環境
2 make:
根據makefile文件,構建應用程序。
3 make install
編譯安裝前建議:安裝前先查看INSTALL、README,可以獲取該程序的幫助信息
開源程序源代碼的獲?。?/span>
官方自建站點
代碼托管站點:
SourceForge
Github.com
code.google.com
c/c++:gcc(GNU C Complier)GNU C編譯器
如何編譯安裝C源代碼程序
前提:準備好開發工具及開發環境。最好安裝開發工具包組,當然,也可以單獨安裝需要的開發工具。
CentOS6: “Development Tools”,“Server Platform Development”
CentOS7: “Development Tools”
開發工具:make、gcc
開發環境:開發庫、頭文件
glibc:標準庫
安裝開發包組:yum groupinstall “Development Tools”
第一步:執行configure腳本
選項:指定安裝位置、指定啟用的特性
–help:獲取其支持使用的選項
選項分類:
安裝路徑設定:
–prefix=/path/to/some_dir:指定默認安裝位置
–sysconfdir=/path/to/somewhere:指定配置文件安裝路徑
System types:
Optional Feature:可選特性
–disable-FEATURE:禁用某特性
–enable-FEATURE[=ARG]:啟用某特性
Optional Packages:可選包
–with-PACKAGE[=arg]
–without-PACKAGE
第二步:make
第三步:make install
安裝后的配置:
(1)、導出二進制程序目錄至PATH環境變量中
編輯/etc/profile.d/NAME.sh (NAME為程序名)
export PATH=/PATH/to/Binary:$PATH
(2)、導出庫文件路徑
編輯/etc/ld.so.conf.d/NAME.conf
添加新的庫文件所在的目錄至此文件中
ldcofig –v
(3)、導出頭文件
基于鏈接的方式實現
ln –sv
(4)、導出幫助手冊
編輯/etc/man.config文件
添加一個MANPATH
五、實戰演練
1、輸入若干個數值存入數組中,采用冒泡算法進行升序或降序排序
#!/bin/bash
#
echo "please enter some random number: "
read -a arr
for ((i=0;i<${#arr[@]};i++))
do
for ((j=0;j<${#arr[@]}-1;j++))
do
if [ ${arr[$j]} -gt ${arr[$j+1]} ]
then
tmp=${arr[$j]}
arr[$j]=${arr[$j+1]}
arr[$j+1]=$tmp
fi
done
done
echo "after sort:"
echo ${arr[@]}
for ((i=0;i<${#arr[@]};i++))
do
for ((j=0;j<${#arr[@]}-1;j++))
do
if [ ${arr[$j]} -lt ${arr[$j+1]} ]
then
tmp=${arr[$j]}
arr[$j]=${arr[$j+1]}
arr[$j+1]=$tmp
fi
done
done
echo "anthoer method: "
echo ${arr[@]}
2、刪除kernel包后,無法啟動,并恢復之
(1)、卸載內核
rpm –e kernel –nodeps
重啟之后,無法登陸系統
(2)、進入救援模式
(3)、重新安裝內核至/mnt/sysimage;安裝耗時較久
rpm -ivh /run/install/repo/Pakages/kernel-3.10.0-327-el7-x86_64.rpm –root=/mnt/sysimage
(4)、重啟系統
發現內核已出現在選擇面板
登錄系統成功
(注:內容太多,容納不下,編譯安裝apache單獨成文)
原創文章,作者:M20-1鐘明波,如若轉載,請注明出處:http://www.www58058.com/39372