プログラマ行進曲第二章

主にソフトウェア関連の技術をネタにした記事を執筆するためのブログ

RPMパッケージを相手にするときによく使うコマンドをメモしておく

Qiitaとか各種色々なところにもっと分かりやすい形でちゃんとまとまってるんですが、自分のブログに書くことで記憶定着を図りたいのでまとめます。

qiita.com

qiita.com

qiita.com

なお、以下に提示する例はCentOS6を使っているので、色々古いソフトが表示されてますが、気にしないでください。

インストールされたrpmを一覧表示する

rpm -qa

「インストールしたんだけど正確なパッケージ名が思い出せない」といった時にはgrepと組み合わせると効果を発揮。

rpm -qa | grep ruby
ruby-devel-1.8.7.374-4.el6_6.x86_64
ruby-1.8.7.374-4.el6_6.x86_64
ruby-irb-1.8.7.374-4.el6_6.x86_64
ruby-libs-1.8.7.374-4.el6_6.x86_64
ruby-augeas-0.4.1-3.el6.x86_64
ruby-shadow-2.2.0-2.el6.x86_64
ruby-rdoc-1.8.7.374-4.el6_6.x86_64
rubygem-json-1.5.5-3.el6.x86_64
libselinux-ruby-2.0.94-7.el6.x86_64
rubygems-1.3.7-5.el6.noarch

逆にパッケージ名を正確に覚えているときは -q オプションだけでいいです。

rpm -q ruby-devel
ruby-devel-1.8.7.374-4.el6_6.x86_64

RPMパッケージ経由でインストールされたファイルを一覧表示する

rpm -ql <package name>
rpm -ql ruby-devel
/usr/lib64/libruby.so
/usr/lib64/ruby/1.8/x86_64-linux/config.h
/usr/lib64/ruby/1.8/x86_64-linux/defines.h
/usr/lib64/ruby/1.8/x86_64-linux/digest.h
/usr/lib64/ruby/1.8/x86_64-linux/dl.h
/usr/lib64/ruby/1.8/x86_64-linux/dlconfig.h
/usr/lib64/ruby/1.8/x86_64-linux/dln.h
/usr/lib64/ruby/1.8/x86_64-linux/dtrace.h
/usr/lib64/ruby/1.8/x86_64-linux/env.h
/usr/lib64/ruby/1.8/x86_64-linux/intern.h
/usr/lib64/ruby/1.8/x86_64-linux/missing.h
/usr/lib64/ruby/1.8/x86_64-linux/node.h
/usr/lib64/ruby/1.8/x86_64-linux/re.h
/usr/lib64/ruby/1.8/x86_64-linux/regex.h
/usr/lib64/ruby/1.8/x86_64-linux/ruby.h
/usr/lib64/ruby/1.8/x86_64-linux/rubyio.h
/usr/lib64/ruby/1.8/x86_64-linux/rubysig.h
/usr/lib64/ruby/1.8/x86_64-linux/st.h
/usr/lib64/ruby/1.8/x86_64-linux/util.h
/usr/lib64/ruby/1.8/x86_64-linux/version.h
/usr/share/doc/ruby-devel-1.8.7.374
/usr/share/doc/ruby-devel-1.8.7.374/COPYING
/usr/share/doc/ruby-devel-1.8.7.374/COPYING.ja
/usr/share/doc/ruby-devel-1.8.7.374/ChangeLog
/usr/share/doc/ruby-devel-1.8.7.374/GPL
/usr/share/doc/ruby-devel-1.8.7.374/LEGAL
/usr/share/doc/ruby-devel-1.8.7.374/LGPL
/usr/share/doc/ruby-devel-1.8.7.374/README.EXT
/usr/share/doc/ruby-devel-1.8.7.374/README.EXT.ja

インストールしているパッケージの情報を表示する

rpm -qi <package name>
rpm -qi ruby-devel
Name        : ruby-devel                   Relocations: (not relocatable)
Version     : 1.8.7.374                         Vendor: CentOS
Release     : 4.el6_6                       Build Date: Mon 02 Mar 2015 09:12:37 AM UTC
Install Date: Thu 10 Nov 2016 10:08:51 AM UTC      Build Host: c6b8.bsys.dev.centos.org
Group       : Development/Languages         Source RPM: ruby-1.8.7.374-4.el6_6.src.rpm
Size        : 1103028                          License: Ruby or GPLv2
Signature   : RSA/SHA1, Mon 02 Mar 2015 12:21:02 PM UTC, Key ID 0946fca2c105b9de
Packager    : CentOS BuildSystem <http://bugs.centos.org>
URL         : http://www.ruby-lang.org/
Summary     : A Ruby development environment
Description :
Header files and libraries for building a extension library for the
Ruby or an application embedded Ruby.

RPMパッケージの情報を表示する

インストールしているときは rpm -qi <package name> ですが、まだインストールしてないRPMパッケージの場合は rpm -qpi <package name> で表示できます。

ls | grep ruby-devel
ruby-devel-1.8.7.374-5.el6.x86_64.rpm

rpm -qpi ruby-devel-1.8.7.374-5.el6.x86_64.rpm
Name        : ruby-devel                   Relocations: (not relocatable)
Version     : 1.8.7.374                         Vendor: CentOS
Release     : 5.el6                         Build Date: Wed 22 Mar 2017 05:52:23 AM UTC
Install Date: (not installed)               Build Host: c1bm.rdu2.centos.org
Group       : Development/Languages         Source RPM: ruby-1.8.7.374-5.el6.src.rpm
Size        : 1103263                          License: Ruby or GPLv2
Signature   : RSA/SHA1, Thu 23 Mar 2017 03:00:13 PM UTC, Key ID 0946fca2c105b9de
Packager    : CentOS BuildSystem <http://bugs.centos.org>
URL         : http://www.ruby-lang.org/
Summary     : A Ruby development environment
Description :
Header files and libraries for building a extension library for the
Ruby or an application embedded Ruby.

RPMパッケージに含まれているファイルを一覧表示する

rpm2cpio <package name> | cpio -t

rpm -ql はインストールしているRPMパッケージの時に使えるが、これはインストールしてなくてwgetなどでダウンロードしてきたRPMパッケージなどについて使える

rpm2cpio ruby-devel-1.8.7.374-5.el6.x86_64.rpm | cpio -t
./usr/lib64/libruby.so
./usr/lib64/ruby/1.8/x86_64-linux/config.h
./usr/lib64/ruby/1.8/x86_64-linux/defines.h
./usr/lib64/ruby/1.8/x86_64-linux/digest.h
./usr/lib64/ruby/1.8/x86_64-linux/dl.h
./usr/lib64/ruby/1.8/x86_64-linux/dlconfig.h
./usr/lib64/ruby/1.8/x86_64-linux/dln.h
./usr/lib64/ruby/1.8/x86_64-linux/dtrace.h
./usr/lib64/ruby/1.8/x86_64-linux/env.h
./usr/lib64/ruby/1.8/x86_64-linux/intern.h
./usr/lib64/ruby/1.8/x86_64-linux/missing.h
./usr/lib64/ruby/1.8/x86_64-linux/node.h
./usr/lib64/ruby/1.8/x86_64-linux/re.h
./usr/lib64/ruby/1.8/x86_64-linux/regex.h
./usr/lib64/ruby/1.8/x86_64-linux/ruby.h
./usr/lib64/ruby/1.8/x86_64-linux/rubyio.h
./usr/lib64/ruby/1.8/x86_64-linux/rubysig.h
./usr/lib64/ruby/1.8/x86_64-linux/st.h
./usr/lib64/ruby/1.8/x86_64-linux/util.h
./usr/lib64/ruby/1.8/x86_64-linux/version.h
./usr/share/doc/ruby-devel-1.8.7.374
./usr/share/doc/ruby-devel-1.8.7.374/COPYING
./usr/share/doc/ruby-devel-1.8.7.374/COPYING.ja
./usr/share/doc/ruby-devel-1.8.7.374/ChangeLog
./usr/share/doc/ruby-devel-1.8.7.374/GPL
./usr/share/doc/ruby-devel-1.8.7.374/LEGAL
./usr/share/doc/ruby-devel-1.8.7.374/LGPL
./usr/share/doc/ruby-devel-1.8.7.374/README.EXT
./usr/share/doc/ruby-devel-1.8.7.374/README.EXT.ja
2164 blocks

RPMパッケージからファイルを取り出す

rpm2cpio <package name> | cpio -id
ls
ruby-devel-1.8.7.374-5.el6.x86_64.rpm

 rpm2cpio ruby-devel-1.8.7.374-5.el6.x86_64.rpm | cpio -id
2164 blocks

ls
ruby-devel-1.8.7.374-5.el6.x86_64.rpm  usr

正直な話、「今の仕事を始める前にこれらのことをちゃんと知っておけば無駄な時間を使わなかったのにな」と思いながら書きました。