rpm -i rpm -e, rpm -q チートシート

# CentOS7でyumコマンドしか使えないエンジニアが、rpmコマンドをタタタタと使えるようになる。
rpmコマンドをつかう上で最初に知っておきたいのは、**rpmコマンドには3つのモード(のようなもの)がある**ことです。3つのモードとは、**Installモード、UnInstallモード、Queryモード**です。それぞれ紹介していきます。

## Installモード
Installモードは、RPMパッケージをインストールします。衝撃の事実ですが、**rpmコマンドはRPMパッケージをリポジトリから自動取得してくれないのです。**yumコマンド風にインストールしようとしたら、「No such file or directory」というメッセージが。ガビーん。rpmコマンドをつかうときは、RPMパッケージを入手しないといけないわけですね。RPMパッケージは[CentOS Vault](http://vault.centos.org/)とか、yumdownloaderコマンドとかで入手します。

```
# rpm -i net-tools
error: open of net-tools failed: No such file or directory
```

- yumコマンドならこれでできる。

```
# yum install net-tools
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * epel: mirrors.aliyun.com
 * extras: ftp.iij.ad.jp
 * remi-safe: ftp.riken.jp
 * updates: ftp.iij.ad.jp
Resolving Dependencies
--> Running transaction check
---> Package net-tools.x86_64 0:2.0-0.22.20131004git.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

==================================================================================================================
 Package                  Arch                  Version                                 Repository           Size
==================================================================================================================
Installing:
 net-tools                x86_64                2.0-0.22.20131004git.el7                base                305 k
```

- [CentOS Vault](http://vault.centos.org/)からRPMパッケージを入手してみます。Web上のファイルをダウンロードするときはwgetコマンドをつかいます。

```
# wget http://vault.centos.org/7.2.1511/updates/x86_64/Packages/python-2.7.5-38.el7_2.x86_64.rpm
--2018-08-13 10:24:37--  http://vault.centos.org/7.2.1511/updates/x86_64/Packages/python-2.7.5-38.el7_2.x86_64.rpm
Resolving vault.centos.org (vault.centos.org)... 162.251.108.7, 2607:f128:40:1600:225:90ff:fe00:bde6
Connecting to vault.centos.org (vault.centos.org)|162.251.108.7|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 90752 (89K) [application/x-rpm]
Saving to: 'python-2.7.5-38.el7_2.x86_64.rpm'

100%[========================================================================>] 90,752       329KB/s   in 0.3s

2018-08-13 10:24:38 (329 KB/s) - 'python-2.7.5-38.el7_2.x86_64.rpm' saved [90752/90752]
```

- yumdownloaderコマンドでRPMパッケージを入手してみます。

```
# yumdownloader net-tools
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * epel: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * remi-safe: ftp.riken.jp
 * updates: ftp.iij.ad.jp
net-tools-2.0-0.22.20131004git.el7.x86_64.rpm                                              | 305 kB  00:00:00
```

### ①普通にインストール

```
# rpm -i net-tools-2.0-0.22.20131004git.el7.x86_64.rpm
	file /bin/netstat from install of net-tools-2.0-0.22.20131004git.el7.x86_64 conflicts with file from package net-tools-2.0-0.17.20131004git.el7.x86_64
	file /sbin/arp from install of net-tools-2.0-0.22.20131004git.el7.x86_64 conflicts with file from package net-tools-2.0-0.17.20131004git.el7.x86_64
	file /sbin/ether-wake from install of net-tools-2.0-0.22.20131004git.el7.x86_64 conflicts with file from package net-tools-2.0-0.17.20131004git.el7.x86_64
	file /sbin/ifconfig from install of net-tools-2.0-0.22.20131004git.el7.x86_64 conflicts with file from package net-tools-2.0-0.17.20131004git.el7.x86_64`
```

[使い方]
\# rpm -i RPMパッケージのパス

[オプションの説明]
-i: Install (インストール)

### ②詳細に進行状況をみながらインストール

```
# rpm -ivh net-tools-2.0-0.22.20131004git.el7.x86_64.rpm
Preparing...                          ################################# [100%]
Updating / installing...
   1:net-tools-2.0-0.22.20131004git.el################################# [100%]
```

[使い方]
\# rpm -ihv RPMパッケージのパス

[オプションの説明]
-i: Install (インストール)
-v: Verbose (詳細)
-h: Hash (ハッシュ)

### ③インストールしてアップグレード

```
# rpm -U net-tools-2.0-0.22.20131004git.el7.x86_64.rpm
```
[使い方]
\# rpm -U RPMパッケージのパス

[オプションの説明]
-U: Upgrade (アップグレード)

### ④詳細に進行状況をみながらインストールしてアップグレード

```
# rpm -Uvh net-tools-2.0-0.22.20131004git.el7.x86_64.rpm
Preparing...                          ################################# [100%]
Updating / installing...
   1:net-tools-2.0-0.22.20131004git.el################################# [100%]
```

[使い方]
\# rpm -Uvh RPMパッケージのパス

[オプションの説明]
-U: Upgrade (アップグレード)
-v: Verbose (詳細)
-h: Hash (ハッシュ)

### ④アップデートだけ
```
# rpm -F net-tools-2.0-0.22.20131004git.el7.x86_64.rpm
```

[使い方]
\# rpm -F RPMパッケージのパス

[オプションの説明]
-F: Freshen (アップグレード)

[補足]
-Uオプションは、RPMパッケージがインストールされていなかったら、インストールしてからアップグレードします。
-Fオプションは、RPMパッケージがインストールされていなかったら、アップグレードしません。

## UnInstallモード
UnInstallモードは、RPMパッケージをアンインストールします。Installモードとは異なり、RPMパッケージのパスではなく、RPMパッケージ名を指定します。

### ①普通にアンインストール

```
# rpm -e net-tools
```

[使い方]
\# rpm -e RPMパッケージ名

[オプションの説明]
-e: Erase (アンインストール)

### ②詳細に進行状況をみながらアンインストール

```
# rpm -evh net-tools
Preparing...                          ################################# [100%]
Cleaning up / removing...
   1:net-tools-2.0-0.22.20131004git.el################################# [100%]
```

[使い方]
\# rpm -evh RPMパッケージ名

[オプションの説明]
-e: Erase (アンインストール)
-v: Verbose (詳細)
-h: Hash (ハッシュ)

## Queryモード
Queryモードは、インストール済みのRPMパッケージについて詳しく調べることができます。
Queryモードは基本的に-qオプションを頭につけます。

### ①インストール済みRPMパッケージを表示する

```
$ rpm -q net-tools
net-tools-2.0-0.22.20131004git.el7.x86_64
```

[使い方]
$ rpm -q パッケージ名

[オプションの説明]
-q: Query (問い合わせ)

### ②インストール済みRPMパッケージを全部表示する

```
$ rpm -qa
php-mbstring-5.4.16-45.el7.x86_64
setserial-2.17-33.el7.x86_64
mailx-12.5-12.el7_0.x86_64
filesystem-3.2-20.el7.x86_64
iwl6050-firmware-41.28.5.1-43.el7.noarch
net-tools-2.0-0.22.20131004git.el7.x86_64
rootfiles-8.1-11.el7.noarch
mariadb-libs-5.5.50-1.el7_2.x86_64
gettext-common-devel-0.18.2.1-4.el7.noarch
iwl6000g2a-firmware-17.168.5.3-43.el7.noarch
```

[使い方]
$ rpm -qa

[オプションの説明]
-q: Query (問い合わせ)
-a: All (全部)

### ③インストール済みRPMパッケージの情報を表示する

```
$ rpm -qi net-tools
Name        : net-tools
Version     : 2.0
Release     : 0.22.20131004git.el7
Architecture: x86_64
Install Date: 2018年08月13日 11時45分15秒
Group       : System Environment/Base
Size        : 938986
License     : GPLv2+
Signature   : RSA/SHA256, 2017年08月11日 03時30分02秒, Key ID 24c6a8a7f4a80eb5
Source RPM  : net-tools-2.0-0.22.20131004git.el7.src.rpm
Build Date  : 2017年08月03日 18時17分34秒
Build Host  : c1bm.rdu2.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://sourceforge.net/projects/net-tools/
Summary     : Basic networking tools
Description :
The net-tools package contains basic networking tools,
including ifconfig, netstat, route, and others.
Most of them are obsolete. For replacement check iproute package.
```
[使い方]
$ rpm -qi パッケージ名

[オプションの説明]
-q: Query (問い合わせ)
-i: Info (情報)

### ④インストール済みRPMパッケージの設定ファイルを表示する

```
$ rpm -qc php
/etc/httpd/conf.d/php.conf
/etc/httpd/conf.modules.d/10-php.conf
```

[使い方]
$ rpm -qc パッケージ名

[オプションの説明]
-q: Query (問い合わせ)
-c: Configfiles (設定ファイル)

### ⑤あるファイルがどのRPMパッケージに含まれているのか調べる

```
$ rpm -qf /etc/php.ini
php-common-5.4.16-45.el7.x86_64
```

[使い方]
$ rpm -qf ファイルのパス

[オプションの説明]
-q: Query (問い合わせ)
-f: file (ファイル)

### ⑥インストール済みRPMパッケージのドキュメントファイルを表示する

```
$ rpm -qd net-tools
/usr/share/doc/net-tools-2.0/COPYING
/usr/share/man/de/man5/ethers.5.gz
/usr/share/man/de/man8/arp.8.gz
/usr/share/man/de/man8/ifconfig.8.gz
/usr/share/man/de/man8/netstat.8.gz
/usr/share/man/de/man8/plipconfig.8.gz
/usr/share/man/de/man8/route.8.gz
/usr/share/man/de/man8/slattach.8.gz
/usr/share/man/fr/man5/ethers.5.gz
/usr/share/man/fr/man8/arp.8.gz
```

[使い方]
$ rpm -qd パッケージ名

[オプションの説明]
-q: Query (問い合わせ)
-d: Docfiles (ドキュメントファイル)

### ⑦インストール済みRPMパッケージに含まれるファイルを全部表示する

```
$ rpm -ql net-tools
/bin/netstat
/sbin/arp
/sbin/ether-wake
/sbin/ifconfig
/sbin/ipmaddr
/sbin/iptunnel
/sbin/mii-diag
/sbin/mii-tool
/sbin/nameif
/sbin/plipconfig
```

[使い方]
$ rpm -ql パッケージ名

[オプションの説明]
-q: Query (問い合わせ)
-l: List (リスト)

### ⑧インストール済みRPMパッケージの依存関係を表示する

```
$ rpm -qR httpd
/etc/mime.types
system-logos >= 7.92.1-1
httpd-tools = 2.4.6-67.el7.centos.6
/usr/sbin/useradd
/usr/sbin/groupadd
systemd-units
systemd-units
systemd-units
/bin/sh
/bin/sh
/bin/sh
/bin/sh
/bin/sh
/bin/sh
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(FileCaps) <= 4.6.1-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(CompressedFileNames) <= 3.0.4-1
```

[使い方]
$ rpm -qR パッケージ名

[オプションの説明]
-q: Query (問い合わせ)
-R: Requires (必要)

### ⑨インストールしていないRPMパッケージについていろいろ調べる

```
$ rpm -qp php-5.4.16-45.el7.x86_64.rpm
php-5.4.16-45.el7.x86_64
```

[使い方]
$ rpm -qp パッケージ名

[オプションの説明]
-q: Query (問い合わせ)
-p: Package (パッケージ)

- いろいろ調べられます。

```
$ rpm -qpi php-5.4.16-45.el7.x86_64.rpm
Name        : php
Version     : 5.4.16
Release     : 45.el7
Architecture: x86_64
Install Date: (not installed)
Group       : Development/Languages
Size        : 4591806
License     : PHP and Zend and BSD
Signature   : RSA/SHA256, 2018年04月25日 20時36分24秒, Key ID 24c6a8a7f4a80eb5
Source RPM  : php-5.4.16-45.el7.src.rpm
```

```
$ rpm -qpc php-5.4.16-45.el7.x86_64.rpm
/etc/httpd/conf.d/php.conf
/etc/httpd/conf.modules.d/10-php.conf
```

```
$ rpm -qpR php-5.4.16-45.el7.x86_64.rpm
httpd-mmn = 20120211x8664
php-common(x86-64) = 5.4.16-45.el7
php-cli(x86-64) = 5.4.16-45.el7
httpd
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(CompressedFileNames) <= 3.0.4-1
libbz2.so.1()(64bit)
libcom_err.so.2()(64bit)
libcrypto.so.10()(64bit)
```

# yumコマンドでできなくて、rpmコマンドでしかできないことがあるのか?調べる。

## 結論
RPMパッケージのインストール/アンインストールはyumコマンドがよいです。
RPMパッケージについて詳しく調べたいときは、rpmコマンドがよいです。**rpmコマンドビギナーは、Queryモードをタタタタとつかえると1UPできそうですね。**