# Linux的軟件安裝管理
[TOC]
# 軟件包管理簡介
## 軟件包分類
### 源碼包
#### **源碼包優點**
>[success] 1. 開源,如果有足夠的能力,可以對源代碼行修改
>2. 可以自由選擇所需功能
>3. 軟件是編譯安裝,所以更加適合自己的系統,更加穩定也效率更高
>4. 卸載方便
#### **源碼包缺點**
> 1. 安裝過程步驟較多,較容易出錯
>2. 編譯過程時間較長,安裝比二進制包安裝時間上
>3. 編譯安裝一旦報錯新手很難解決
* * * * *
### 二進制包(RPM軟件包和系統默認包)
#### **二進制包優點**
>[success] 1. 包管理系統簡單,只通過幾個命令就可以實現包的安裝、升級、查詢和卸載
> 2. 安裝速度比源碼安裝快很多
#### **二進制包缺點**
> 1. 經過編譯,不能在看到源碼
> 2. 功能選擇不如源碼包靈活
> 3. 依賴性
# RPM命令管理
## RPM軟件包來源
答:RPM軟件包在系統光盤中
~~~
mkdir /mnt/cdrom # 創建光盤掛載點
mount /dev/cdrom /mnt/cdrom/ # 將光盤掛在到掛載點
mount: block device /dev/sr0 is write-protected, mounting read-only
[root@luo.centos6.5 ~]
# df -Th # 查看掛載情況
Filesystem Type Size Used Avail Use% Mounted on
... ...
/dev/sr0 iso9660 4.2G 4.2G 0 100% /mnt/cdrom
[root@luo.centos6.5 ~]
# cd /mnt/cdrom/Packages/ # 進入到packages目錄
[root@luo.centos6.5 /mnt/cdrom/Packages/]
# ls # 查看光盤下的rpm軟件包
... ...
zlib-1.2.3-29.el6.i686.rpm
zlib-1.2.3-29.el6.x86_64.rpm
zlib-devel-1.2.3-29.el6.i686.rpm
zlib-devel-1.2.3-29.el6.x86_64.rpm
~~~
## RPM軟件包命名規則
這里以`httpd-2.2.15-29.el6.centos.x86_64.rpm`為例:
`httpd` 軟件包名稱
`2.2.15` 軟件版本
`29` 軟件發布的次數
`el6.centos`適合的Linux平臺
`x86_64` 適合的硬件平臺
`rpm` rpm軟件包擴展名
## RPM軟件包依賴性(樹形、環形、模塊)
* 樹形依賴:a->b->c
* 環形依賴:a->b->c->a
* 模塊依賴:查詢網站 www.rpmfind.net
## RPM軟件包安裝
### 軟件包全名與軟件包名
**軟件包全名**:操作的軟件包是沒有安裝的軟件包時,使用軟件包全名,而且要注意路徑
**軟件包名**:操作依據安裝的軟件包時,使用軟件包名,是搜索`/var/lib/rpm`中的數據庫
### RPM軟件包的安裝命令
* * * * *
`rpm -ivh 軟件包全名`
**選項釋意**
-i (install) 安裝
-v (verbose) 顯示詳細信息
-h (hash) 顯示進度
--nodeps 不檢測依賴性安裝選項 (不建議使用的選項)
例如:使用 `rpm -ivh httpd-2.2.15-29.el6.centos.x86_64.rpm` 安裝http軟件包。
### RPM軟件包的卸載命令
* * * * *
`rpm -e 軟件包名`
**選項釋意**
-e (erase) 卸載
--nodeps 不檢查依賴性卸載選項
例如:使用 `rpm -e httpd-2.2.15-29.el6.centos.x86_64.rpm` 卸載http軟件包。
### RPM軟件包的升級命令
* * * * *
`rpm -Uvh 軟件包全名`
**選項釋意**
-U (upgrade) 升級
例如:使用 `rpm -Uvh httpd-2.2.15-29.el6.centos.x86_64.rpm` 升級http軟件包。
## RPM相關查詢命令
### 查詢軟件是否安裝
`rpm -q 軟件包名` 查詢軟件是否安裝
**選項釋意**
-q (query) 查詢
例如:使用 `rpm -q gcc` 查詢gcc軟件包是否安裝。
* * * * *
`rpm -qa 軟件包名` 查詢所有已經安裝過得RPM軟件包
**選項釋意**
-q (query) 查詢
-a (all) 所有
例如:
~~~
[root@luo.centos6.5 /mnt/cdrom/Packages]
# rpm -qa |grep gcc # 配合管道,查詢gcc相關的RPM軟件包名
gcc-4.4.7-16.el6.x86_64
gcc-c++-4.4.7-16.el6.x86_64
gcc-gfortran-4.4.7-16.el6.x86_64
libgcc-4.4.7-16.el6.i686
libgcc-4.4.7-16.el6.x86_64
~~~
### 查詢軟件包詳細信息
`rpm -qi 軟件包名`
**選項釋意**
-q (query) 查詢
-i (information) 軟件信息
-p (package) 未安裝的軟件包
例如:
~~~
[root@luo.centos6.5 /mnt/cdrom/Packages]
# rpm -qi gcc # 查詢已安裝的軟件包詳細信息
Name : gcc Relocations: (not relocatable)
Version : 4.4.7 Vendor: CentOS
Release : 16.el6 Build Date: 2015年07月23日 星期四 10時43分01秒
Install Date: 2015年10月30日 星期五 21時46分11秒 Build Host: c6b8.bsys.dev.centos.org
Group : Development/Languages Source RPM: gcc-4.4.7-16.el6.src.rpm
Size : 19496512 License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions
Signature : RSA/SHA1, 2015年07月25日 星期六 04時41分11秒, Key ID 0946fca2c105b9de
Packager : CentOS BuildSystem <http://bugs.centos.org>
URL : http://gcc.gnu.org
Summary : Various compilers (C, C++, Objective-C, Java, ...)
Description :
The gcc package contains the GNU Compiler Collection version 4.4.
You'll need this package in order to compile C code.
[root@luo.centos6.5 /mnt/cdrom/Packages]
# rpm -qip httpd-2.2.15-29.el6.centos.x86_64.rpm # 查詢未安裝包的詳細信息
Name : httpd Relocations: (not relocatable)
Version : 2.2.15 Vendor: CentOS
Release : 29.el6.centos Build Date: 2013年08月14日 星期三 01時30分33秒
Install Date: (not installed) Build Host: c6b8.bsys.dev.centos.org
Group : System Environment/Daemons Source RPM: httpd-2.2.15-29.el6.centos.src.rpm
Size : 3076447 License: ASL 2.0
Signature : RSA/SHA1, 2013年08月14日 星期三 01時32分39秒, Key ID 0946fca2c105b9de
Packager : CentOS BuildSystem <http://bugs.centos.org>
URL : http://httpd.apache.org/
Summary : Apache HTTP Server
Description :
The Apache HTTP Server is a powerful, efficient, and extensible
web server.
~~~
### 查詢軟件包文件安裝位置
`rpm -ql 軟件包名`
**選項釋意**
-q (query) 查詢
-l (list) 列表
-p (package) 未安裝的軟件包
例如:
~~~
[root@luo.centos6.5 /mnt/cdrom/Packages]
# rpm -ql gcc
/usr/bin/c89
/usr/bin/c99
/usr/bin/cc
/usr/bin/gcc
/usr/bin/gcov
/usr/bin/protoize
/usr/bin/unprotoize
/usr/bin/x86_64-redhat-linux-gcc
~~~
#### RPM軟件包默認安裝位置
| 安裝目錄 | 文件說明 |
| -- | -- |
| `/etc` | 配置文件安裝目錄 |
| `/usr/bin` | 可執行的命令安裝目錄 |
| `/usr/lib` | 程序所使用的函數庫保存位置 |
| `/usr/share/doc` | 基本的軟件使用手冊保存位置 |
| `/usr/share/man` | 幫助文件保存位置 |
### 查詢系統文件屬于哪個RPM軟件包
rpm -qf 系統文件名
**選項釋意**
-q (query) 查詢
-f (file) 查詢系統文件屬于那么RPM軟件包
例如:
~~~
[root@luo.centos6.5 /mnt/cdrom/Packages]
# rpm -qf /usr/share/man/man1/gcc.1.gz # 查看gcc.1.gz文件屬于哪個rpm軟件包
gcc-4.4.7-16.el6.x86_64
~~~
### 查詢軟件包的依賴性
rpm -qR 軟件包名
**選項釋意**
-q (query) 查詢
-R (requires) 查詢軟件包的依賴性
-p (package) 查詢未安裝包的信息
## RPM軟件包校驗
`rpm -V 已經安裝的軟件包名`
~~~
[root@luo.centos6.5 /etc/httpd]
# rpm -V httpd # 檢測出我們修改了apache的配置文件大小
S.5....T. c /etc/httpd/conf/httpd.conf
~~~
**1. 驗證內容中的8個信息的具體內容如下:**
> S 文件大小是否改變
M 文件的類型或文件的權限(rwx)是否被改變
5 文件MD5校驗是否改變(可以看成文件內容是否改變)
D 設備的主從代碼是否改變
L 文件路徑是否改變
U 文件的屬主(所有者)是否改變
G 文件的屬組是否改變
T 文件的修改時間是否改變
**2. 文件類型:**
> c (config file) 配置文件
d (documentation) 普通文檔
g (ghost file) 很少見,就是該文件不應該被這個RPM包包含
L (license file) 授權文件
r (read me) 描述文件
## RPM軟件包中文件的提取
`rpm2cpio 軟件包全名 |cpio -idv .文件絕對路徑`
rpm2cpio 將RPM軟件包轉換成cpio格式的命令
cpio 是一個標準工具,它用于創建軟件檔案文件和從檔案文件中提取文件
例如:系統重要文件丟失
~~~
rpm -qf /bin/ls # 查詢ls命令屬于哪個軟件包
mv /bin/ls /tmp/. # 模擬系統ls命令刪除
cat /mnt/cdrom/Packages/coreutils-8.4-31.el6.x86_64.rpm |cpio -idv ./bin/ls # 提起RPM包中ls命令到當前目錄的/bin/ls下(注意因為光盤是寫保護,執行該命令的時候不要在光盤目錄下)
cp /root/bin/ls /bin/. # 把ls命令復制回/bin/目錄下,修復文件丟失
~~~
* * * * *
# yum在線管理
優點:將所有軟件包放在官方服務器上,當進行yum在線安裝的時候,可以自動解決依賴性問題。
## yum源文件
`cat /etc/yum.repos.d/CetnOS-Base.repo`
|配置|說明|
|-|-|
|`[base]`| 容器名稱,一定要放在[]中,可以自定義|
|`name`| 容器說明,可以自定義|
|`mirrorlist`| 鏡像站點,可以注釋掉|
|**`baseurl`**| 我們的yum源服務器的地址,默認是CentOS官方的yum源服務器,是可以使用的,如果覺得慢可以改變成自定義的yum源地址|
|**`enabled`**| 次容器是否生效,如果不寫或者寫成enable=1都是生效,寫成enabled=0就是不生效|
|`gpgcheck`| 如果是1是指rpm的數字證書生效,如果是0則不生效|
|`gpgkey`| 數字證書的公鑰文件保存位置,不用修改|
## 光盤搭建yum源
### 掛載光盤
1. `mkdir /mnt/cdrom` 建立掛載點
2. `mount /dev/cdrom /mnt/cdrom` 掛載光盤
3. `mv CentOS-Base.repo CentOS-Base.repo.luo.20151101` # 修改yum源文件后綴名,使其失效
4. `vim CentOS-Media.repo`編輯光盤yum源
~~~
[c6-media]
name=CentOS-$releasever - Media
baseurl=file:///mnt/cdrom/ # 地址為當前光盤掛載的地址
# file:///media/cdrom/ # 注釋不存在的地址
# file:///media/cdrecorder/
gpgcheck=1
enabled=1 # 把enabled=0改為1,讓這個yum源配置文件生效
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
~~~
**如圖:**

5. 使用`yum list`命令查看修改結果
~~~
[root@luo.centos6.5 /etc/yum.repos.d]
# yum list
... ...
zlib-static.x86_64 1.2.3-29.el6 c6-media
zsh.x86_64 4.3.10-7.el6 c6-media
zsh-html.x86_64 4.3.10-7.el6 c6-media
~~~
## yum命令
### yum安裝
`yum -y install 軟件包名`
**選項釋意**
-install 安裝
-y (yes) 自動回答yes
**例如:**
`yum -y install gcc` 安裝gcc編譯器軟件包
### yum查詢
`yum list` 查詢所有可用軟件包列表
`yum search 關鍵字` 搜索服務器上所有和關鍵字相關的軟件包
### yum升級
`yum -y update 軟件包名`
**選項釋意**
-update 升級
-y (yes) 自動回答yes
**例如:**
`yum -y update gcc` 升級gcc編譯器軟件包
### yum卸載(不推薦使用)
`yum -y remove 軟件包名`
**選項釋意**
-remove 卸載
-y (yes) 自動回答yes
>[danger] 服務器使用最小化安裝,用什么軟件安裝什么,盡量不卸載。
### yum軟件組管理命令
#### 列出所有可用的軟件組列表
`yum grouplist`
#### 安裝指定軟件組
`yum groupinstall 軟件組名`,組名可以由grouplist查詢得到(注意:此命令指定的軟件組名必須為英文名稱)
如下demo:
##### 給系統安裝中文環境支持
~~~
[root@luo.centos6.5 /etc/yum.repos.d]
# echo $LANG # 查看目前語言環境
zh_CN.UTF-8
[root@luo.centos6.5 /etc/yum.repos.d]
# LANG=en # 將當前會話shell設置為en語言
[root@luo.centos6.5 /etc/yum.repos.d]
# yum grouplist|grep -i chinese # 搜索中文語言包
Failed to set locale, defaulting to C
Chinese Support [zh]
[root@luo.centos6.5 /etc/yum.repos.d]
# yum groupinstall "Chinese Support" # 執行安裝中文語言包支持
[root@luo.centos6.5 /etc/yum.repos.d]
# LANG=zh_CN.UTF-8 # 將當前會話shell設置為en語言
~~~
#### 卸載指定軟件組
`yum groupremove 軟件組名`
# 源碼包管理
## 源碼包和RPM包的區別
安裝前的區別:概念上的區別
安裝后的區別:安裝位置不同
* RPM軟件包安裝的服務可以使用系統服務管理名錄(service)
來管理,例如RPM包安裝apache的啟動方法是:
`/etc/rc.d/init.d/httpd start` Linux的標準啟動命令
`service httpd start` 紅帽系統使用的啟動命令
* 源碼包安裝的服務則不能被服務管理命令管理,因為沒有安裝到默認路徑中,所以只能使用絕對路徑對服務的管理,如: `/usr/local/apache2/bin/apachectl start` 當然也可以將`/usr/local/apache2/bin/apachectl`腳本復制到`/etc/rc.d/init.d/.`下才能使用service命令管理apache
## 源碼包的安裝過程
### 安裝準備
* 安裝C語言編譯器 gcc
* 下載源碼包,這里以apache為例
### 注意事項
* 源代碼保存位置 `/usr/local/src`
* 軟件安裝位置 `/usr/local/.`
* 如何確定安裝過程報錯
* 安裝過程停止
* 出現error、warning或者no等提示
### 源碼包安裝過程
* 下載源碼包
* 解壓縮下載的源碼包
* 進入解壓縮目錄(必須執行)
* ./configure 軟件配置與檢查
* 定義需要的功能選項
* 檢測系統環境是否符合安裝要求
* 把定義好的功能選項和檢測系統環境的信息都寫入Makefile文件用于后續的編輯
* make 編譯
* make clean 清除之前的編譯結果(在編譯報錯時使用)
* make install 編譯安裝
# 腳本安裝包
## 準備工作
* 關閉RPM方式安裝的httpd和MySQL軟件包
* 保證yum源正常使用
* 關閉SELinux和iptables防火墻
## 一鍵安裝腳本分析
所謂的一鍵安裝包,實際上還是安裝的源碼軟件包和RPM軟件包,只是把安裝過程寫成了腳本,便于初學者安裝。
優點:簡單、快速、方便
缺點:1. 不能自定義安裝軟件的版本,2.不能定義所需要的軟件功能 3. 源碼包的優勢喪失
## 下載
下載lnmp安裝包,解壓安裝包并進入安裝包目錄:`wget -c http://soft.vpser.net/lnmp/lnmp1.2-full.tar.gz && tar zxvf lnmp1.2-full.tar.gz && cd lnmp1.2-full`
*詳情參加:http://lnmp.org/download.html*
- Linux的安裝
- Linux的軟件安裝管理
- Linux零碎的命令
- 了解ssh
- 系統調優及安全設置
- Linux系統中的硬鏈接和軟連接
- Linux文件和目錄的屬性及權限
- 命令總結
- 文件目錄管理命令
- cat
- cd
- cp
- ls
- mkdir
- mv
- rm
- touch
- vi
- 硬件檢測內核shell命令
- echo
- alias
- dd
- diff
- date
- grep(重要)
- head
- rpm
- sed(重要)
- tree
- unalias
- yum
- seq
- su
- less
- more
- tail
- awk(重要)
- pwd
- history
- whoami
- find(重要)
- which
- vimdiff
- sudo
- wget
- ln
- chmod
- chown
- vim常用技巧
- scp
- 工作場景應用總結
- 自動刪除n天前日志
- 刪除一個目錄下的所有文件但保留一個文件
- Linux軟件安裝
- php安裝(apache版本)
- vsftpd安裝
- git安裝
- python安裝
- LNMP安裝
- LAMP安裝I
- LAMP安裝II
- svn安裝
- svn在Linux下的命令操作
- svn鉤子簡介
- svn代碼上傳流程
- Crond介紹
- sersync應用指南
- 其他
- 小結一
- 系統調優重新整理tmp
- linux禁止root用戶直接登錄sshd并修改默認端口