Linux基礎之軟件安裝

萱蘇的運維日常 2024-04-07 14:17:34
RPM(二進制)安裝特點

優點:

包管理系統簡單,只通過幾個命令就可以實現包的安裝、升級、查詢和卸載

安裝速度比源碼包安裝快的多

缺點:

經過編譯,不再可以看到源代碼

功能選擇不如源碼包靈活

依賴性

有時我們會發現需要安裝軟件包a時需要先安裝b和c,而安裝b時需要安裝d和e。這是需要先安裝d和e,再安裝b和c,最後才能安裝a包。比如說,我買了個漂亮的燈具,打算安裝到我們家客廳,可是在安裝燈具之前我們家客廳總要有頂棚吧,頂棚總要是做好了防水和刷好油漆了吧,這個裝修和安裝軟件其實類似總要有一定的順序的。可是有時依賴性會非常繁瑣。

若在安裝rpm包提示缺少依賴時,可通過www.rpmfind.net查找該依賴存在哪個包中,安裝包含該依賴的包即可。

命名規則

httpd-2.2.15-15.e16.centos.1.i686.rpm

httpd 軟件包名

2.15 軟件版本

15 軟件發布的次數

e16軟件發行商。el6 是RedHat 公司發布,適合x(Red Hat Enterprise Linux)和Cent0S6.x下使用。

i686 適合的硬件平台。RPM包可以在不同的硬件平台安裝,選擇適合不同CPU的軟件版本,可以最大化的發揮CPU性能,所以出現了所謂的i386(386以上計算機都可以安裝)、i586(586以上的計算機都可以安裝)、i686(奔騰II以上計算機都可以安裝,目前所有的CPU都是奔騰II以上,所以這個軟件版本居多)、x86_64(64位CPU可以安裝)和noarch(沒有硬件限制)等文件名了。

rpm rpm包的擴展名。我們說過Linux下文件不是靠擴展名區分文件類型,也就是Linux中擴展名沒有任何含義。可是這裏怎麽又出現了擴展名呢?原因很簡單,如果我不把RPM的擴展名叫做".rpm",管理員很難知道這是一個RPM包,當然也就無法正確安裝了。也就是說如果RPM包不用".rpm"作爲擴展名,系統可以正確識別沒有問題,可是管理員很難識別這是個什麽樣的軟件。

包全名:如果操作的是未安裝軟件包,則使用包全名,而且需要注意絕對路徑

包名:如果操作的是已經安裝的軟件包,則使用包名即可,系統會生産RPM包的數據庫

默認安裝位置

/etc/配置文件安裝目錄/usr/bin/可執行的命令安裝目錄/usr/lib/程序所使用的函數庫保存位置/usr/share/doc/基本的軟件使用手冊保存位置/usr/share/man/幫助文件保存位置

rpm安裝命令

[root@aliyun ~]# rpm [選項] 包全名

-a 查詢所有的軟件包

-b或-t 設置包裝套件的完成階段,並指定套件檔的文件名稱;

-c 只列出組態配置文件,本參數需配合”-l”參數使用

-d 只列出文本文件,本參數需配合”-l”參數使用

-e 卸載軟件包

-f 查詢文件或命令屬于哪個軟件包

-h 安裝軟件包時列出標記

-i 安裝軟件包

-l 顯示軟件包的文件列表

-p 查詢指定的rpm軟件包

-q 查詢軟件包

-R 顯示軟件包的依賴關系

-s 顯示文件狀態,本參數需配合”-l”參數使用

-U 升級軟件包

-v 顯示命令執行過程

-vv 詳細顯示指令執行過程

--nodeps 不檢測依賴性安裝。軟件時會檢測依賴性,確定所需的底層軟件是否安裝。

如果沒有安裝則會報錯。如果我不管依賴性,想強行安裝,可以使用這個選項。注意:這樣不檢測依賴性安裝的軟件基本是不能使用的,所以不建議這樣做

--replacefiles 替換文件安裝。如果安裝軟件包,可是包中部分文件已經存在,那麽正常安裝時候,會報錯“某個文件已經存在”從而導致軟件無法安裝,使用這個選項可以忽視這個報錯,而覆蓋安裝

--replacepkgs 替換軟件包安裝。如果軟件包已經安裝,此選項可以把軟件包重複安裝一遍。

--force 強制安裝。不管是否已經安裝,都重新安裝。就是-replacefiles和--replacepkgs 的綜合。

--test 測試安裝。不會實際安裝,只是檢測一下依賴性。

--prefix 指定安裝路徑。爲安裝軟件指定安裝路徑,而不使用默認安裝路徑。注意:如果指定了安裝路徑,軟件沒有安裝到系統默認路徑中的話,系統會找不到這些安裝的軟件,需要進行手工配置才能被系統識別。所以rpm包我們一般都采用默認路徑安裝。

驗證

基本驗證

rpm -V 已安裝的軟件名列出該軟件被修改過的配置文件

rpm -Vf 文件名稱列出某個文件是否被改動過修改

[root@loaclhost ~]# rpm -Vf /etc/zabbix/zabbix_agentd.confS.5....T. c /etc/zabbix/zabbix_agentd.conf#表示此文件的Size,MD5,modify time不一致,且這是一個配置文件

出現了提示信息,我們來解釋下最前面共有8個信息內容,是表示驗證內容的。文件名前面的c是表示這是個配置文件(configuration)。最後是文件名。那麽驗證內容中的8個信息的具體內容如下:

S 文件大小是否改變

M 文件的類型或文件的權限(rwx)是否被改變

5 文件MD5校驗和是否改變(可以看成文件內容是否改變)

D 設備的主從代碼是否改變

L 文件路徑是否改變

U)文件的屬主(所有者)是否改變

G 文件的屬組是否改變

T0文件的修改時間是否改變

apache配置文件的文件類型是c,那麽還有哪些文件類型呢?

c 配置文件(config file)

d 普通文檔(documentation)

g"鬼”文件(ghost file),很少見,就是該文件不應該被這個RPM包包含1授權文件(license file)

r描述文件(read me)

RPM包中文件的提取

cpio命令

cpio 命令主要有三種基本模式:“-o”模式指的是 copy-out 模式,就是把數據備份到文件庫中;

“-i”模式指的是 copy-in 模式,就是把數據從文件庫中恢複;“-p”模式指的是複制模式,就是不把數據備份到 cpio 庫中,而是直接複制爲其他文件。命令如下:

[root@aliyun ~]# cpio -o[vcB] > [文件|設備]

備份

-o:copy-out 模式,備份

-v:顯示備份過程

-c:使用較新的 portable format 存儲方式

-B:設定輸入輸出塊爲 5120bytes,而不是模式的 512butes

[root@aliyun ~]# cpio -i[vcdu] < [文件|設備]

還原

-i:copy-in 模式,還原

-v:顯示還原過程

-c:使用較新的 portable format 存儲方式

-d:還原時自動新建目錄

-u:自動使用較新的文件覆蓋較舊的文件

[root@aliyun ~]# cpio -p 目標目錄

舉幾個例子吧,先來看看使用 cpio 備份數據的方法,命令如下:

# 利用 find 指定要備份/etc/目錄,使用>導出到 etc.cpio 文件[root@aliyun ~]# find /etc -print | cpio -ocvB > /root/etc.cpio[root@aliyun ~]# ll -h etc.cpio- rw-r--r--. 1 root root 21M 6 月 5 12:29 etc.cpio #etc.cpio 文件生成# 再來看看如何恢複 cpio 的備份數據,命令如下:[root@aliyun ~]# cpio -idvcu < /root/etc.cpio  #還原 etc 的備份# 但是如果大家查看下當前目錄/root,會發現沒有生成 etc 目錄。這是因爲備份是/etc 目錄使用的是絕對路徑,所以恢複的數據直接恢複到了/etc 系統目錄中,而沒有生成在/root/etc 中。# 在 CentOS5.x 的版本中,是可以利用上面的命令備份與恢複指定的文件。但是到 CentOS6.x 當中,需要更加嚴謹。如果備份時使用絕對路徑,則恢複的數據會直接到絕對路徑指定的路徑中,如果需要把數據恢複到當前目錄中,則需要使用相對路徑,例如:# 備份:[root@aliyun ~]# cd /etc  #進入/etc 目錄# 利用 find 指定要備份/etc/目錄,使用>導出到 etc.cpio 文件[root@aliyun ~]# find . -print | cpio -ocvB > /root/etc.cpio#恢複:[root@aliyun ~]# cd /root  #回到/root 目錄中[root@aliyun ~]# mkdir etc_test  #建立恢複測試目錄[root@aliyun ~]# cd etc_test  #進入測試目錄,數據恢複到此#還原/etc 目錄的數據,因爲備份時使用的是相對路徑,則會還原到/root/etc_test/目錄下[root@localhost etc_test]# cpio -idvcu < /root/etc.cpio#最後來演示一下 cpio 命令的“-p”複制模式,命令如下:[root@aliyun ~]# cd /tmp/  #進入/tmp 目錄[root@localhost tmp]# rm -rf *  #刪除/tmp 目錄中所有數據[root@localhost tmp]# mkdir test  #建立備份目錄#備份/boot/目錄到/tmp/test/目錄中[root@localhost tmp]# find /boot/ -print | cpio -p /tmp/test

提取 RPM 包中文件

[root@aliyun ~]# rpm2cpio 包全名 | cpio -idv .文件絕對路徑

rpm2cpio  #將 rpm 包轉換爲 cpio 格式的命令

cpio       #是一個標准工具,它用于創建軟件檔案文件和從檔案文件中提取文件

舉個例子,現在我假設把系統中的/bin/ls 命令不小心誤刪除了,那麽我可以修複回來嗎?這時有兩種方法修複,要不就是使用—force 選項覆蓋安裝一遍 coreutils-8.4-19.el6.i686 包,要不就可以使用 cpio 命令提取出/bin/ls 命令文件,再把它拷貝到對應位置就可以了。不過我是怎麽知道/bin/ls命令是屬于 coreutils-8.4-19.el6.i686 這個軟件包的呢?還記得-qf 選項嗎?命令如下:

[root@aliyun ~]# rpm -qf /bin/ls   #查看 ls 文件屬于哪個軟件包# 那麽我們在講 RPM 包中文件提取,所以我們使用第二章方法,cpio 命令提取出 ls 命令文件,然後拷貝到對應位置,命令如下:#把/bin/ls 命令移動到/root 目錄下,造成誤刪除的假象[root@aliyun ~]# mv /bin/ls /root/[root@aliyun ~]# ls- bash: ls: command not found #這時執行 ls 命令,系統會報錯“命令沒有找到”# 提取 ls 命令文件到當前目錄下[root@aliyun ~]# rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.el6.i686.rpm | cpio -idv  ./bin/ls ./bin/ls[root@aliyun ~]# cp /root/bin/ls  /bin/  #把提取出來的 ls 命令文件複制到/bin 目錄下[root@aliyun ~]# lsanaconda-ks.cfg  bin  inittab  install.log  install.log.syslog  ls#恭喜你,ls 命令又可以正常使用了

yum安裝

yum源文件解析

yum 源配置文件保存在/etc/yum.repos.d/目錄中,文件的擴展名一定是“.repo”。也就是說,yum 源配置文件只要擴展名是“.repo”就會生效。

[root@aliyun ~]# ls  /etc/yum.repos.d/CentOS-Base.repo CentOS-Debuginfo.repo CentOS-fasttrack.repo CentOS-Media.repo CentOS-Vault.repo

這個目錄中有 5 個 yum 源配置文件,默認情況下 CentOS-Base.repo 文件生效。我們打開這個文

件看看,命令如下:

[root@localhost yum. repos. d]# vim /etc/yum. repos. d/CentOS-Base. repo[base]name=CentOS-$releasever-Basemirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=osbaseurl=http://mirror.centos. org/centos/$releasever/os/$basearch/gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

在 CentOS-Base.repo 文件中有 5 個 yum 源容器,這裏只列出了 base 容器,其他容器和 base 容

器類似。我們解釋一下 base 這個容器。

[base]:容器名稱,一定要放在[]中。

name:容器說明,可以自己隨便寫。

mirrorlist:鏡像站點,這個可以注釋掉。

baseurl:我們的 yum 源服務器的地址。默認是 CentOS 官方的 yum 源服務器,是可以使用的。如果你覺得慢,則可以改成你喜歡的 yum 源地址。

enabled:此容器是否生效,如果不寫或寫成 enabled=1 則表示此容器生效,寫成 enabled=0則表示此容器不生效。

gpgcheck:如果爲 1 則表示 RPM 的數字證書生效;如果爲 0 則表示 RPM 的數字證書不生效。

gpgkey:數字證書的公鑰文件保存位置。不用修改。

更換 or 搭建本地光盤yum源

通常使用centos官方yum源時會比較慢,可以更換爲國內yum源。當主機無法使用外網時,可以使用本地yum源。這部分在後期文章中介紹。

yum命令

[root@aliyun ~]# yum [選項] 軟件包

-h 顯示幫助信息

-y 對所有的提問都回答“yes”

-c 指定配置文件

-q 安靜模式

-v 詳細模式

-t 檢查外部錯誤

-d 設置調試等級(0-10)

-e 設置錯誤等級(0-10)

-R 設置yum處理一個命令的最大等待時間

-C 完全從緩存中運行,而不去下載或者更新任何頭文件

install 安裝rpm軟件包

update 更新rpm軟件包

check-update 檢查是否有可用的更新rpm軟件包

remove 刪除指定的rpm軟件包

list 顯示軟件包的信息

search 檢查軟件包的信息

info 顯示指定的rpm軟件包的描述信息和概要信息

clean 清理yum過期的緩存

shell 進入yum的shell提示符

resolvedep 顯示rpm軟件包的依賴關系

localinstall 安裝本地的rpm軟件包

localupdate 顯示本地rpm軟件包進行更新

deplist 顯示rpm軟件包的所有依賴關系

yum組管理命令形式就直接在對應的選項前加上group即可。例如查詢組列表 yum grouplist

源碼包安裝注意事項

應該選擇哪種軟件包?

如果軟件包是給大量客戶提供訪問,建議使用源碼包安裝,如LAMP環境搭建,因爲源碼包效率更高。

如果軟件包是給Linux底層使用,或只給少量客戶訪問,建議使用rpm包安裝,因爲rpm包簡單。

源碼包是從哪裏來的?

rpm包是光盤中直接包含的,所以不需要用戶單獨下載。而源碼包是通過官方網站下載的,如果需要使用,是需要單獨下載的。

安裝過程

我們來解釋一下源碼包安裝的具體步驟。

(1)下載軟件包。

(2)解壓縮。

(3)進入解壓目錄。

(4)./configure 編譯前准備

這一步主要有三個作用:

在安裝之前需要檢測系統環境是否符合安裝要求。

定義需要的功能選項。“./configure”支持的功能選項較多,可以執行“./configure --help”命令查詢其支持的功能。一般都會通過“./configure --prefix=安裝路徑”來指定安裝路徑。

把系統環境的檢測結果和定義好的功能選項寫入 Makefile 文件,後續的編譯和安裝需要依賴這個文件的內容。

需要注意的是,configure 不是系統命令,而是源碼包軟件自帶的一個腳本程序,所以必須采用“./configure”方式執行(“./”代表在當前目錄下)。

(5)make編譯

make 會調用 gcc 編譯器,並讀取 Makefile 文件中的信息進行系統軟件編譯。編譯的目的就是把源碼程序轉變爲能被 Linux 識別的可執行文件,這些可執行文件保存在當前目錄下。編譯過程較爲耗時,需要有足夠的耐心。

(6)make clean:清空編譯內容(非必需步驟)。

如果在“./configure”或“make”編譯中報錯,那麽我們在重新執行命令前一定要記得執行 make clean 命令,它會清空 Makefile 文件或編譯産生的“.o”頭文件。

(7)make install:     編譯安裝

這才是真正的安裝過程,一般會寫清楚程序的安裝位置。如果忘記指定安裝目錄,則可以把這個命令的執行過程保存下來,以備將來刪除使用。

刪除

源碼包沒有刪除命令,如果需要刪除,直接刪除安裝目錄即可。

補丁

生成補丁

diff:比較兩個文件的不同

[root@aliyun ~]# diff選項old new

-a 將任何文檔當做文本文檔處理

-b 忽略空格造成的不同

-B 忽略空白行造成的不同

-I 忽略大小寫造成的不同

-N 當比較兩個目錄時,如果某個文件只在一個目錄中,則在另一個目錄中視作空文件

-r 當比較目錄時,遞歸比較子目錄

-u 使用同一的輸出格式

[root@localhost]# mkdir test # 建立測試目錄[root@localhost]# cd test # 進入測試目錄[root@localhost test]#cat > old.txt <<-EOF # 文件 old.txt,爲了一會輸出便于比較,每行分開ourschoolisxuansuEOF[root@localhost test]#cat > new.txt <<-EOFourschoolisxuansuinBeijing# 比較兩個文件的不同,同時生成 txt.patch 補丁文件[root@localhost test]#diff -Naur /root/test/old.txt /root/test/new.txt > txt.patch[root@localhost test]#cat txt.patch # 查看下這個文件----/root/test/old.txt 2012-11-23 05:51:14.347954373 +0800  # 前一個文件++++/root/test/new.txt 2012-11-23 05:50:05.772988210 +0800  # 後一個文件@ @ -2,3 +2,5 @ @schoolisxuansu+in+beijing

後一個文件比前一個文件多兩行,使用 + 號表示

打入補丁

[root@localhost test]# patch –pn < 補丁文件

-pn n 爲數字。代表按照補丁文件中的路徑,指定更新文件的位置。

“-pn”不好理解,我們說明下。補丁文件是要打入舊文件的,但是你當前所在的目錄和補丁文

件中的記錄的目錄是不一定匹配的,所以就需要“-pn”來同步兩個目錄。

比如我當前是在“/root/test”目錄中(我要打補丁的舊文件就在當前目錄下),補丁文件中記錄的文件目錄爲“/root/test/old.txt”,這時如果寫入“-p1”(在補丁文件目錄中取消一級目錄)那麽補丁文件就會打入“/root/test/root/test/old.txt”文件中,這顯然是不對的。那如果寫入的是“-p2”(在補丁文件目錄中取消二級目錄)那麽補丁文件打入的就是“/root/test/test/old.txt”,這顯然也不對。如果寫入的是“-p3”(在補丁文件目錄中取消三級目錄)那麽補丁文件就是打入的“/root/test/old.txt”,我們的 old.txt 文件就在這個目錄下,所以就應該是“-p3”。 那麽我們更新下“old.txt”文件,命令如下:

[root@localhost test]# patch-p3 < txt.patch patching file old.txt # 給 old.txt 文件打補丁[root@localhost test]# cat old.txt # 查看下old.txtourschoolisatguiguinBei jing# 多出來了 in Beijing 兩行

腳本安裝程序腳本程序簡介

腳本程序包並不多見,所以在軟件包分類中並沒有把它列爲一類。它更加類似于 Windows 下的程序安裝,有一個可執行的安裝程序,只要運行安裝程序,然後進行簡單的功能定制選擇(比如指定安裝目錄等),就可以安裝成功,只不過是在字符界面下完成的

0 阅读:1