「Linuxのサーバーを触ることになったけど、パッケージ管理って何…?」
「linux パッケージ 確認 ってどうやるの?」
「aptとyumの違いがわからないし、リポジトリとは一体…??」
ある日突然、Linuxの管理を任されたり、学習を始めたりして、そんな疑問でいっぱいになって、スマホで慌てて検索して、このページにたどり着いてくれたんじゃないでしょうか。
もしかして、Pythonのライブラリを入れたくて「linux pip」を使おうとしたらOS標準の方法と違って戸惑っていたり…?
それとも、「linux java インストール」が必要なのに、どのコマンドを使えばいいか分からず途方に暮れていたり…?
わかります、わかります!私も最初は全く同じでした。
Windowsの「exeファイルをクリック」とは全然違う文化だし、黒い画面(ターミナル)にコマンドを打つのも緊張しますよね😥
「変なコマンド打って、システムを壊したらどうしよう…」って、もうパニックになっちゃいますよね。
でも、大丈夫です!
その戸惑う気持ち、よーくわかります。でも、パッケージ管理はLinuxを安全で便利に使うための、すっごく強力な味方なんです!
一度仕組みを理解してしまえば、Windowsよりもはるかに高速かつ安全にソフトウェアを管理できるんですよ😲
この記事は、そんな「Linuxのパッケージ管理、怖い…」に陥ってしまったあなたを救うための、安全な知識と操作方法をステップバイステップで徹底的に解説する「完全ガイド」です🕵️♀️✨
「aptとyum (dnf) の違い」という基本から、「linux パッケージ 確認」の具体的なコマンド、そして「linux pip」や「linux java インストール」の実践まで。
私と一緒に、一つずつ冷静に確認していきましょうね🥰
- Linuxパッケージ管理の基本概念:パッケージ・管理システム・リポジトリ
- なぜパッケージ管理が重要なのか?そのメリットを解説
- 主要パッケージ管理システム:apt と yum (dnf) の違い
- 【基本操作】インストール済みパッケージの確認方法 (apt/yum)
- 【基本操作】パッケージの検索・インストール・アップデート・削除
- Linuxリポジトリの概念と管理
- 【実践編】Pythonのパッケージ管理「pip」の使い方
- 【実践編】Java (JDK) のインストール方法 (apt/yum)
- パッケージ管理におけるトラブルシューティングとベストプラクティス
- (PR)本格的なLinux環境を学ぶならVPSがおすすめ
- まとめ
Linuxパッケージ管理の基本概念:パッケージ・管理システム・リポジトリ
Linuxでソフトウェアを扱う上で、まず最初に理解しなくちゃいけない、すっごく大事な3つの登場人物がいます。
それが「パッケージ」「パッケージ管理システム」「リポジトリ」です。
この3つはチームで働いていて、Windowsの「.exe」ファイルやMacの「.dmg」ファイルをダブルクリックしてインストールする感覚とは、根本的に考え方が違うんです。
パッケージ(Package)とは?
「パッケージ」っていうのは、特定のソフトウェア(例えばWebサーバーのNginxやテキストエディタのVim)を動かすために必要なファイルたちを、ぜーんぶひとまとめにした「圧縮ファイル(お届けセット)」のことです。
具体的には、こんなものが入っています。
- 実行ファイル(バイナリ): ソフトウェア本体のプログラムです。
- 設定ファイル: デフォルトの設定が書かれたファイルです。
- ライブラリ: そのソフトが動くために必要な「共通部品」です。
- ドキュメント: マニュアル(manページ)や説明書ですね。
- メタ情報: 「このパッケージの名前は?」「バージョンは?」「他のどのパッケージが必要(依存)ですか?」っていう、パッケージ自身に関する大切な情報(依存関係情報)です。
この最後の「メタ情報」が、すっごく重要なんです!
これが、次に説明するパッケージ管理システムが賢く働くための「指示書」になるんですね。
パッケージ管理システム(Package Management System)とは?
「パッケージ管理システム」っていうのは、これらパッケージのインストール、アップデート、アンインストール(削除)、そして「依存関係の解決」をぜーんぶ自動でやってくれる、執事みたいなソフトウェアのことです。
もしこの執事(管理システム)がいなかったら…。
あるソフトAを動かすために必要な部品Bを探してきて、その部品Bを動かすために必要な部品Cを探してきて…っていう、「依存関係の地獄」を手動で解決しないといけなくなっちゃいます😭
パッケージ管理システムは、パッケージのメタ情報(指示書)を読んで、「Aさんをインストールしたいんですね?かしこまりました。それならBさんとCさんも必要ですので、まとめてお連れしますね!」って判断して、自動でぜーんぶインストールしてくれるんです!
代表的なシステムには、Debian系(Ubuntuなど)で使われるaptや、Red Hat系(CentOS, Rocky Linuxなど)で使われるyum(最近はdnfが主流です)がありますよ。
リポジトリ(Repository)とは?
この記事の大事なキーワードでもある「linux リポジトリとは」、すっごく簡単に言っちゃうと「パッケージが保管されている、信頼できる公式の倉庫」のことです。
インターネット上(または会社のネットワーク内)にあるサーバーに、膨大な数のパッケージが分類・整理されて、安全に格納されています。
パッケージ管理システム(aptやyum)は、私たちから「このソフトをインストールして!」って命令されると、まずシステムに登録されている「倉庫のリスト(設定ファイル)」を見に行きます。
そして、そのリストにある倉庫(リポジトリ)に接続して、お目当てのパッケージと、それが必要とする依存パッケージをまとめてダウンロードして、インストールを実行してくれるんです。
つまり!
私たちがLinuxにソフトを入れる時って、Windowsみたいに開発元のWebサイトを一個一個まわってインストーラーを探してくる必要は、ほとんどないんです😲
ぜーんぶ、パッケージ管理システムが、信頼できる公式の「倉庫(リポジトリ)」から安全かつ効率的に調達してくれるんですね。
この仕組みこそが、Linuxシステムの安定性とセキュリティを支える、とっても大事な土台になっているんですよ🥰
なぜパッケージ管理が重要なのか?そのメリットを解説
WindowsやMacに慣れていると、「なんでそんな面倒な仕組み(リポジトリとか)を使うの?」って疑問に思っちゃうかもしれませんよね。
その理由は、この仕組みがもたらす、すっごく大きなメリットにあるんです!
1. 依存関係の自動解決
これがもう、最大のメリットです!
今のソフトウェアって、いろんな共通部品(ライブラリ)や他のプログラムに頼って動いているので、すっごく複雑なんです。
パッケージ管理システムは、インストールしたいパッケージが必要とする他のパッケージ(依存関係)をぜーんぶ自動で検出して、正しい順番でインストールしてくれます。
これのおかげで、私たちは複雑な依存関係をぜんぜん意識しなくても、目的のソフトを確実に動かすことができるんですね💪
2. インストール・アンインストールの簡略化
ソフトウェアのインストールは、基本的にコマンド一つ(例:apt install nginx)で終わっちゃいます。
関連するファイルはぜんぶ管理システムのデータベースで追跡されてて、アンインストールする時もコマンド一つ(例:apt remove nginx)で、関連ファイルや設定ファイルをキレイさっぱり削除できます(設定ファイルだけ残すこともできますよ)。
手動でインストールした時みたいに、システムのあちこちにファイルが散らばって「ゴミ」が残っちゃう心配がないんです🥰
3. システム全体の一元的なアップデート
システムに入っているすべてのパッケージ(OSの心臓部から、個別のアプリまで)を、パッケージ管理システムがぜんぶまとめて管理してくれています。
だから、コマンド一つ(例:apt upgrade)で、システム全体のソフトウェアを最新の状態にアップデートできちゃうんです!
これにはセキュリティパッチ(穴を塞ぐ修正)の適用も含まれているので、システムをいつも安全な状態に保つために、ぜったいに欠かせない機能なんですね。
4. 品質の担保とセキュリティ
公式リポジトリ(公式の倉庫)から提供されるパッケージは、各ディストリビューション(UbuntuやRed Hatとか)の担当者さんによって、すっごく厳しく検査・検証されています。
これによって、変なウイルス(マルウェア)が混入するリスクが最小限に抑えられて、システムの他の部分とケンカしないように調整された、品質の高いパッケージだけが提供されるんです。
それに、パッケージはふつう、GPGキー(電子署名)っていうもので「本物ですよ」「途中で改ざんされてませんよ」っていうのが保証されているので、とっても安心なんですよ。
5. システムの整合性と再現性の確保
パッケージ管理システムは、「どのパッケージの、どのバージョンが入っているか」をぜーんぶ正確に把握しています。
だから、システムの状態が明確になって、もし何かトラブルが起きた時も原因を突き止めやすくなるんです。
それに、同じ設定のリポジトリとパッケージリストを使えば、別のマシンにも「まったく同じ環境」をかんたんに再現できちゃいます!
こんな風に、パッケージ管理システムは、Linuxの「便利さ」「安定性」「安全性」を根本から支えている、すっごくすっごく重要な仕組みなんです✨
主要パッケージ管理システム:apt と yum (dnf) の違い
Linuxのパッケージ管理システムは、大きく分けて2つの系統があるんです。
Debian系(Ubuntu, Debian, Linux Mintとか)で採用されている「apt」と、Red Hat系(Red Hat Enterprise Linux (RHEL), CentOS, Rocky Linux, AlmaLinux, Fedoraとか)で採用されている「yum」です。
ちょっと補足💡
実は最近のRed Hat系では、yumの課題(パフォーマンスとか)を解決した後継コマンド「dnf」が標準になっています。
でも、dnfはyumとほとんど同じコマンド(互換性)を持っていますし、まだまだyumっていう名前の方が有名なので、この記事では「yum (dnf)」って一緒に書いちゃいますね!
「linux yum」について知りたかった方も、基本的にはaptとの違いで理解するのが、一番わかりやすいですよ。
基本的な思想の違い
▼apt (Debian系)
- パッケージ形式:
.debファイル - 管理データベース:
/var/lib/dpkg/ - 特徴: もともと
dpkgっていう低レベルなツールがあって、そのお世話役としてapt-getとかが開発されました。今はそれらを統合して使いやすくしたaptコマンドが主流です。依存関係の解決能力がすっごく高いって言われてます。
▼yum / dnf (Red Hat系)
- パッケージ形式:
.rpmファイル - 管理データベース:
/var/lib/rpm/ - 特徴: もともと
rpmっていう低レベルなツールがあります。yum(Yellowdog Updater, Modified) は、そのお世話役として開発されて、リポジトリからの依存関係解決をできるようにしました。dnf(Dandified YUM) は、yumの依存関係解決アルゴリズムを新しくして、パフォーマンスと安定性をすっごく向上させた後継ツールなんですよ。
表1: apt と yum (dnf) の主要コマンド比較
| 目的 | apt (Debian / Ubuntu系) | yum / dnf (Red Hat / CentOS系) |
|---|---|---|
| パッケージの検索 | apt search [キーワード] | yum search [キーワード] (dnfも同じ) |
| パッケージ情報の表示 | apt show [パッケージ名] | yum info [パッケージ名] (dnfも同じ) |
| パッケージのインストール | apt install [パッケージ名] | yum install [パッケージ名] (dnfも同じ) |
| パッケージのアップデート | apt upgrade [パッケージ名] | yum update [パッケージ名] (dnfも同じ) |
| 全パッケージのアップデート | apt update (リスト更新) apt upgrade (実行) | yum update (リスト更新と実行) |
| パッケージの削除 | apt remove [パッケージ名] | yum remove [パッケージ名] (dnfも同じ) |
| 設定ファイルごと削除 | apt purge [パッケージ名] | (removeで通常削除される) |
| インストール済み一覧 | apt list --installed | yum list installed (dnfも同じ) |
| 利用可能な全パッケージ | apt list | yum list available (dnfも同じ) |
| 依存関係の清掃 | apt autoremove | yum autoremove (dnfも同じ) |
| キャッシュの削除 | apt clean | yum clean all (dnfも同じ) |
最大の違いは「コミュニティ」と「リポジトリ」
コマンドの書き方はなんとなく似てますけど、最大の違いはパッケージ形式(.deb / .rpm)と、それを提供してくれる「倉庫(リポジトリ)」の文化なんです。
Ubuntu (apt) は、デスクトップPCでの利用や、最新のオープンソースソフトウェアを積極的に取り入れる傾向があります。
PPA (Personal Package Archives) っていう仕組みで、個人がリポジトリ(倉庫)を追加しやすい文化があるんですね。
一方、RHEL系 (yum/dnf) は、ビジネスで使うサーバーとしての「安定性」をいっちばん大事にする傾向が強いです。
公式リポジトリに入ってるパッケージはすっごく厳しくテストされてて、長期間の安定サポートが提供されます。
公式リポジトリにないソフトは、EPEL (Extra Packages for Enterprise Linux) みたいな、信頼できる「追加倉庫(サードパーティリポジトリ)」を追加して補うのが一般的なんですよ。
どっちが良いっていうものじゃなくて、ディストリビューションの設計思想(最新の機能が好きか、カッチリした安定性が好きか)が、パッケージ管理システムの使い方にも反映されてるんですね🥰
【基本操作】インストール済みパッケージの確認方法 (apt/yum)
この記事にたどり着いたあなたが一番知りたかったかもしれない、「linux パッケージ 確認」の具体的な方法を解説しますね!
Linuxシステムを管理していく上で、今「どのソフトが」「どのバージョンで」入っているかを把握することは、セキュリティやトラブル解決の基本中の基本なんです。
1. apt (Debian/Ubuntu) でパッケージを確認する方法
DebianやUbuntu系のシステムでは、aptコマンド(やdpkgコマンド)を使います。
▼すべてのインストール済みパッケージを表示する
これが一番基本的なコマンドです。
apt list --installed
<実行結果の例>
Listing... Done adduser/jammy,now 3.118ubuntu8 all [installed] apparmor/jammy-updates,jammy-security,now 3.0.4-2ubuntu2.3 amd64 [installed] apport/jammy-updates,jammy-security,now 2.20.11-0ubuntu82.5 all [installed] apt/jammy-updates,now 2.4.11 amd64 [installed,automatic] ... (すっごく大量に出力されます) ...
[installed]って表示されてるのが、インストール済みのパッケージです。[installed,automatic]は、他のパッケージの「おまけ(依存関係)」として自動的にインストールされたことを示してますよ。
▼grepと組み合わせて特定のパッケージを探す
一覧が多すぎちゃって読めない!って時は、grepコマンドとパイプ(|)っていう記号を使って絞り込みます。
例えば、「nginx」に関連するインストール済みパッケージだけを探したい時は、こうです!
apt list --installed | grep nginx
▼特定のパッケージがインストールされているか正確に確認する (dpkg)
aptコマンドは高機能なんですけど、シンプルに「入ってる?入ってない?」だけを知りたい時は、低レベルなdpkgコマンドが便利だったりします。
dpkg -l [パッケージ名]
<実行結果の例 (nginx-core がインストールされている場合)>
$ dpkg -l nginx-core Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ Name Version Architecture Description +++-==============-================-============-================================= ii nginx-core 1.18.0-6ubuntu14.4 amd64 nginx core module
先頭の「ii」っていうのが、「インストール済み(Installed)で、状態は正常(OK)」ですよーっていう意味なんです。
<実行結果の例 (インストールされていない場合)>
$ dpkg -l apache2 dpkg-query: no packages found matching apache2
こんな風に、「no packages found(パッケージが見つかりません)」って表示されたら、そのパッケージはインストールされてないってことですね。
2. yum / dnf (Red Hat/CentOS/Rocky) でパッケージを確認する方法
RHELやCentOS、Rocky Linux系のシステムでは、yumまたはdnfコマンド(やrpmコマンド)を使います。
▼すべてのインストール済みパッケージを表示する
aptとすっごくよく似たコマンドです。
yum list installed
(dnfの場合も同じ: dnf list installed)
<実行結果の例>
Installed Packages NetworkManager.x86_64 1:1.40.16-7.el9_3 @baseos NetworkManager-libnm.x86_64 1:1.40.16-7.el9_3 @baseos NetworkManager-team.x86_64 1:1.40.16-7.el9_3 @baseos NetworkManager-tui.x86_64 1:1.40.16-7.el9_3 @baseos audit.x86_64 3.0.7-104.el9 @baseos audit-libs.x86_64 3.0.7-104.el9 @baseos ... (すっごく大量に出力されます) ...
@baseos みたいに @ がついてるものは、「どの倉庫(リポジトリ)からインストールされたか」を示してるんですよ。
▼grepと組み合わせて特定のパッケージを探す
aptと同じように、grepを使って絞り込めます。
yum list installed | grep nginx
▼特定のパッケージがインストールされているか正確に確認する (rpm)
yum/dnfも、低レベルなrpmコマンドで確認するのが確実です!
rpm -q [パッケージ名]
<実行結果の例 (nginx がインストールされている場合)>
$ rpm -q nginx nginx-1.20.1-12.el8s.x86_64
バージョン情報が表示されれば、インストールされていますね!
<実行結果の例 (インストールされていない場合)>
$ rpm -q apache2 package apache2 is not installed
「package … is not installed(インストールされてませんよ)」って、親切に教えてくれます😅
3. 【応用】特定のファイルがどのパッケージに含まれているか確認する
システムを管理してると、「あれ、このファイル(例:/usr/sbin/nginx)って、一体どのパッケージ(お届けセット)に入ってたんだっけ?」って疑問に思うことがあるんです。
これも「パッケージの確認」の、すっごく大事なテクニックですよ!
▼apt (Debian/Ubuntu) の場合:
dpkg -S [ファイルへのフルパス]
例:
$ dpkg -S /usr/sbin/nginx nginx-core: /usr/sbin/nginx
nginx-core パッケージに含まれていることが、一発で分かりました!
▼yum / dnf (Red Hat系) の場合:
rpm -qf [ファイルへのフルパス]
例:
$ rpm -qf /usr/sbin/nginx nginx-1.20.1-12.el8s.x86_64
nginx パッケージ(の特定バージョン)に含まれていることが分かりましたね。
これらの「linux パッケージ 確認」コマンドを使いこなせることが、安定したシステム管理への第一歩になりますよ!
【基本操作】パッケージの検索・インストール・アップデート・削除
パッケージの確認方法がわかったら、次はパッケージを実際に操作(インストール、アップデート、削除)する方法を学んでいきましょう!
ここでもaptとyum (dnf)を比べながら見ていきましょうね。
1. パッケージの検索 (Search)
インストールしたいパッケージの正確な名前がわからない…そんな時は、キーワードで倉庫(リポジトリ)を検索してみます。
▼apt (Debian/Ubuntu) の場合:
apt search [検索キーワード]
例:
$ apt search nginx Sorting... Done Full Text Search... Done nginx/jammy-updates,jammy-security 1.18.0-6ubuntu14.4 amd64 small, powerful, scalable web/proxy server ...
▼yum / dnf (Red Hat系) の場合:
yum search [検索キーワード]
例:
$ yum search nginx ======================= Name Exactly Matched: nginx ======================== nginx.x86_64 : A high performance web server and a reverse proxy server ===================== Summary & Name Matched: nginx ====================== nginx-all-modules.noarch : A meta package that installs all available Nginx modules ...
2. パッケージのインストール (Install)
検索して見つけたパッケージをインストールします!この操作には、管理者権限(sudo)が必要ですよ。
▼apt (Debian/Ubuntu) の場合:
sudo apt install [パッケージ名]
例:
sudo apt install nginx
これを実行すると、Nginx本体と、それが依存するたくさんのパッケージ(nginx-core, libnginx-mod-http-core, …)が一覧で表示されて、「続けますか? [Y/n]」って聞かれます。
▼yum / dnf (Red Hat系) の場合:
sudo yum install [パッケージ名]
例:
sudo yum install nginx
aptと同じように、依存パッケージを含めたインストール内容が表示されて、「これでOK? [y/N]:」って聞かれますよ。
3. パッケージのアップデート (Update / Upgrade)
インストール済みのパッケージを、最新バージョンに更新します。
▼ステップ1:パッケージリストの更新(aptのみ必要)
apt (Debian/Ubuntu) の場合:
aptは、まず「ローカルにあるパッケージリスト(倉庫に何があるかの目録)」を最新にする操作が、ぜったいに必要なんです。
sudo apt update
これを実行しないと、システムは古い目録を見たまんまなので、新しいバージョンが倉庫(リポジトリ)にあっても、それに気づけないんですね😥
yum / dnf (Red Hat系) の場合:
yum (dnf)は、インストールやアップデートのコマンドを実行する時に、自動でリポジトリの最新情報をチェックしてくれるので、apt updateみたいな独立したコマンドは、ふつうは要りません。
(厳密には yum check-update っていう確認コマンドもありますが、必須じゃないんですよ)
▼ステップ2:パッケージのアップグレード実行
apt (Debian/Ubuntu) の場合:
apt update で最新の目録をゲットした後、実際のアップグレードを実行します。
sudo apt upgrade
これで、updateで検出された「アップグレードできるパッケージぜんぶ」が更新されます!
yum / dnf (Red Hat系) の場合:
このコマンド一つで、リストのチェックとアップグレードの両方をやってくれます。
sudo yum update
4. パッケージの削除 (Remove)
いらなくなったパッケージを削除します。
▼apt (Debian/Ubuntu) の場合:
sudo apt remove [パッケージ名]
これはパッケージ本体を削除しますけど、設定ファイルは残してくれたりします。
設定ファイルごと、跡形もなくキレイに削除したい!っていう時は、purge(パージ:追放する、っていう意味です)を使います。
sudo apt purge [パッケージ名]
▼yum / dnf (Red Hat系) の場合:
sudo yum remove [パッケージ名]
yum remove は、apt purge に近い動作で、関連するファイルも削除しちゃうのが一般的です。
5. 不要な依存パッケージの削除 (Autoremove)
パッケージを削除しても、そのパッケージが「おまけ(依存関係)」として連れてきた他のパッケージが、残っちゃうことがあるんです。
こんないらなくなった「おまけ」たちを自動的に見つけて削除してくれる、お掃除コマンドがautoremoveです!
▼apt (Debian/Ubuntu) の場合:
sudo apt autoremove
▼yum / dnf (Red Hat系) の場合:
sudo yum autoremove
定期的にautoremoveを実行してあげると、システムをキレイに保つことができますよ🥰
Linuxリポジトリの概念と管理
パッケージ管理システム(apt, yum)が「お店の店員さん」だとすれば、「linux リポジトリ」は「商品の倉庫」だって言いましたよね。
この「倉庫」の仕組みと管理方法を理解することは、Linuxをもっともっと深く使いこなすために、ぜったいに必要なんです。
リポジトリの役割と種類
さっきも言った通り、リポジトリはパッケージが保管されているサーバーです。
でも、リポジトリはただの倉庫じゃなくて、すっごく高度な機能を持ってるんですよ。
- メタデータの提供: パッケージ本体だけじゃなくて、「どのパッケージがどのバージョンか」「どのパッケージに依存しているか」っていう情報(メタデータ)のデータベースも提供してくれます。
apt updateやyum updateは、主にこのメタデータをダウンロードしてるんですね。 - GPGキーによる署名: 倉庫(リポジトリ)に入ってるパッケージは、提供元を保証するために電子署名(GPGキー)されています。パッケージ管理システムは、インストールする前にこの署名をチェックして、パッケージが改ざんされてないこと、信頼できる提供元から来たものであることを確認してくれるんです。
リポジトリには、いくつか種類があります。
- 公式リポジトリ:
- 各ディストリビューション(Ubuntu, RHELとか)が公式に運営・管理している倉庫です。
- 最も信頼性が高くて、厳しくテストされたパッケージだけが提供されます。
- 例: Ubuntuの
main,universe。CentOS/RHELのbaseos,appstream。
- サードパーティリポジトリ:
- ディストリビューション公式じゃない、別の会社やコミュニティ、個人が運営している倉庫です。
- 公式倉庫には入ってない最新版のソフトや、特別なソフト(例:Google Chrome, Nginxの最新安定版とか)が提供されます。
- 例: RHEL系の
EPEL(Extra Packages for Enterprise Linux)、UbuntuのPPA(Personal Package Archives)。
- ローカルリポジトリ / ミラーリポジトリ:
- インターネットに繋げない閉じたネットワークでLinuxを運用する時や、たくさんのマシンに高速でパッケージを配るために、組織の中に公式リポジトリのコピー(ミラー)を立てて利用する形態です。
リポジトリの設定ファイルはどこにある?
パッケージ管理システムが、どこの倉庫(リポジトリ)に接続しに行くかは、ぜんぶ「設定ファイル」によって決まっています。
▼apt (Debian/Ubuntu) の場合:
- メイン設定ファイル:
/etc/apt/sources.list - 追加リポジトリ用ディレクトリ:
/etc/apt/sources.list.d/
PPAやサードパーティリポジトリを追加(add-apt-repository コマンドとか)すると、ふつうは /etc/apt/sources.list.d/ ディレクトリの中に [リポジトリ名].list っていう名前のファイルが作られます。
sources.list ファイルの中身(例):
deb http://jp.archive.ubuntu.com/ubuntu/ jammy main restricted deb http://jp.archive.ubuntu.com/ubuntu/ jammy-updates main restricted ...
deb はDebianパッケージ、http://... は倉庫のURL、jammy はOSのコードネーム(Ubuntu 22.04)、main restricted は倉庫の中の区分(コンポーネント)を意味してます。
▼yum / dnf (Red Hat系) の場合:
- メイン設定ファイル:
/etc/yum.conf(dnfの場合は/etc/dnf/dnf.conf) - リポジトリ定義ディレクトリ:
/etc/yum.repos.d/
yum (dnf) では、リポジトリは /etc/yum.repos.d/ ディレクトリの中にある .repo ファイルで管理するのが一般的です。
.repo ファイルの中身(例: Rocky-BaseOS.repo):
[baseos] name=Rocky Linux 9 - BaseOS mirrorlist=https://www.google.com/search?q=https://mirrors.rockylinux.org/mirrorlist%3Farch%3D$basearch&repo=baseos-9
baseurl=https://www.google.com/search?q=http://mirror.rockylinux.org/pub/rocky/9/BaseOS/$basearch/os/
gpgcheck=1 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Rocky-9
[baseos]: リポジトリID(他とかぶっちゃダメです)name: 人間が読むための倉庫の名前mirrorlist/baseurl: パッケージを取ってくるURLgpgcheck=1: GPG署名をチェックする (1=有効)enabled=1: この倉庫を有効にする (0=無効)gpgkey: GPG署名のチェックに使う公開鍵の場所
リポジトリの管理(追加・無効化)
倉庫(リポジトリ)を管理することは、システムの安定性やセキュリティに、直接関係してくるんです!
▼リポジトリの追加(サードパーティ):
新しいソフト(例:Nginxの最新版)を入れるために、公式じゃない倉庫(nginx.orgが提供するものとか)を追加する場合があります。
- aptの場合:
add-apt-repositoryコマンドを使ったり、提供元の指示に従って.listファイルとGPGキーを手動で置いたりします。 - yum/dnfの場合: 提供されてる
.rpmパッケージ(リポジトリ定義ファイル自体がパッケージになってる)をyum installしたり、.repoファイルを手動で/etc/yum.repos.d/に置いたりします。
▼リポジトリの無効化:
トラブルが起きた時や、特定のパッケージバージョンで固定したい時、特定の倉庫を一時的に無効化することがあります。
- aptの場合:
/etc/apt/sources.list.d/の中の該当ファイルの行の先頭に#を付けてコメントアウト(無効化)します。 - yum/dnfの場合: 該当する
.repoファイルの中のenabled=1をenabled=0に変更します。
または、コマンド実行の時だけ一時的に無効化するオプション(例:yum --disablerepo=epel install ...)も使えますよ。
⚠️警告:すっごく大事な注意点です!⚠️
むやみやたらにサードパーティリポジトリ(野良倉庫)を追加するのは、とっても危険です!
システムの安定性をめちゃくちゃに壊しちゃう可能性があります😭
- 依存関係の競合: A倉庫のパッケージとB倉庫のパッケージが、同じ部品の違うバージョンを欲しがって、システムが混乱しちゃう(依存関係地獄)。
- セキュリティリスク: 信頼できない倉庫を追加すると、ウイルスが仕込まれたパッケージをインストールしちゃうかもしれません!
リポジトリの追加は、EPEL や信頼できる開発者の PPA、またはソフト開発元(Nginx, Googleとか)が公式に提供してるものだけにしてくださいね!
【実践編】Pythonのパッケージ管理「pip」の使い方
Linuxのパッケージ管理を学ぶ上で、OSのパッケージ管理(apt, yum)と、プログラミング言語ごとのパッケージ管理(「linux pip」とか)の違いを理解することは、すっごくすっごく重要です!
pip っていうのは、Python言語専用のパッケージ管理システムなんです。
OSのパッケージ管理 (apt/yum) vs 言語のパッケージ管理 (pip)
「あれ? apt や yum があるのに、なんで pip が必要なの?」って思いますよね。
▼OSのパッケージ管理 (apt/ yum)
- 目的: OS全体の安定した動作。
- 対象: システム全体で使うソフト(Webサーバー、データベース、OSの基本コマンドとか)。
- 特徴: バージョンは安定性重視で、ちょっと古いことが多いです。セキュリティ修正はすばやく提供されます。
▼言語のパッケージ管理 (pip)
- 目的: 特定のアプリ(Pythonプロジェクト)の開発や実行。
- 対象: Pythonライブラリ(例:
requests,numpy,tensorflowとか)。 - 特徴: 常に最新のライブラリが使えます。プロジェクトごとに違うバージョンのライブラリを使い分けたいんです。
<使い分けの鉄則>
nginx,mysql,vim,gitみたいな、OS上で直接実行するアプリはaptやyumでインストールします。- Pythonのライブラリ(プログラムから
importして使う部品)はpipでインストールします。 pipコマンド自体は、aptやyumでインストールします(例:sudo apt install python3-pip)。
pipの最大の問題点と「仮想環境」の必要性
pip を使う上で、初心者の人がいちばん落ちいりやすい罠が、「システムのPython」に直接ライブラリをインストールしちゃうことなんです…。
# やってはいけない例 (ぜったいに非推奨!) sudo pip install requests
sudo を使って pip を実行すると、OSが管理してるPython(/usr/bin/python3)のライブラリ置き場(例:/usr/lib/python3/dist-packages/)に、ライブラリがインストールされちゃいます。
これがなんで問題なの!?
- OSとの競合: OS(aptやyum)が使っている大事なライブラリ(例えば
yum自体がPythonで書かれてたりします)を、pipが新しいバージョンに上書きしちゃって、yum やOSの基本機能が動かなくなる可能性があるんです!(怖) - プロジェクト間の競合: プロジェクトAは
requestsのバージョン2.0が必要で、プロジェクトBはバージョン3.0が必要…なんて時に、システム全体にインストールしちゃうと両立できませんよね😥
解決策:仮想環境 (Virtual Environment)
この問題をぜーんぶ解決してくれるのが、「仮想環境」です!
仮想環境(venv)っていうのは、プロジェクトごとに「独立したPython実行環境とライブラリ保管場所」を作っちゃう仕組みなんです。
# 1. プロジェクト用のディレクトリ(フォルダ)を作成 mkdir my_project cd my_project
2. そのディレクトリ内に仮想環境を作成 (例: "venv" っていう名前で)
python3 -m venv venv
3. 仮想環境を有効化(アクティベート)する
source venv/bin/activate
アクティベートすると、コマンドプロンプトの先頭に (venv) って表示されます。
(venv) $
この状態になると、python や pip コマンドは、システムのもんじゃなくて、今作った venv ディレクトリの中にあるものが使われるようになります!
# 4. この状態で pip を使ってライブラリをインストールする (sudoはぜったいに不要!) (venv) $ pip install requests (venv) $ pip install numpy
インストールされたライブラリは、my_project/venv/lib/python3.X/site-packages/ の中にだけ格納されて、システム全体には一切影響を与えません!
別のプロジェクト(my_project_2)では、また新しく python3 -m venv venv を実行すれば、そこではまた別のライブラリやバージョンを自由に入れられます。
仮想環境を終了したい時は、deactivate コマンドを実行するだけです。
(venv) $ deactivate $
pipの基本コマンド(仮想環境内での使用を強く推奨!)
仮想環境をアクティベートした、っていう前提で、pip の基本的な使い方を解説しますね。
▼1. パッケージのインストール
pip install [パッケージ名] pip install [パッケージ名]==[バージョン] # バージョンを指定する場合
▼2. インストール済みパッケージの確認 (linux パッケージ 確認 のpip版)
pip list
<実行結果の例>
Package Version
numpy 1.26.4 pip 24.0 requests 2.31.0
▼3. パッケージのアンインストール
pip uninstall [パッケージ名]
▼4. プロジェクトの依存関係をファイルにまとめる (requirements.txt)
今の環境(仮想環境)に入ってるパッケージ一覧を、ファイルに出力します。
pip freeze > requirements.txt
requirements.txt の中身:
numpy==1.26.4 requests==2.31.0
▼5. ファイルから依存関係を一括インストール
別の環境(例えば本番サーバーとか、他の開発者のPC)で、この requirements.txt を使って、まったく同じライブラリ環境を再現します。
# (新しい環境で仮想環境をアクティベートした後に) pip install -r requirements.txt
結論です!
「linux pip」を使う時は、OSの apt や yum との「住み分け」をちゃんと考えましょう!
そして、ぜったいに「仮想環境 (venv)」を作成してから pip install を実行するのが、今のPython開発での「鉄則」ですよ!💪
【実践編】Java (JDK) のインストール方法 (apt/yum)
もう一つの具体的な実践例として、「linux java インストール」の方法を解説しますね。
Java (JDK: Java Development Kit) のインストールは、pip とは違って、OSのパッケージ管理システム(apt, yum)を使うのが、ふつうのやり方です。
Javaはシステム全体で共有して使われる「実行環境」として使われることが多いからなんですね。
OpenJDK vs Oracle JDK
まず、Javaには大きく分けて2つの主要なディストリビューション(配布形態)があるんです。
- OpenJDK: オープンソース(GPLライセンス)で開発されているJavaです。今のJavaコミュニティの主流で、Linuxディストリビューションの公式リポジトリ(倉庫)で提供されてるのは、基本ぜんぶこっちです。
- Oracle JDK: Oracle社が提供する商用のJDKです。昔はこれが標準だったんですけど、今は特定の商用利用(2019年以降のバージョン)でお金(サブスクリプション)が必要になっちゃうので、特別な理由がない限り、サーバー用途ではOpenJDKを選ぶのが一般的ですよ。
この記事では、公式リポジトリからかんたんにインストールできる「OpenJDK」の導入方法に絞って解説しますね!
1. apt (Debian/Ubuntu) でJava (OpenJDK) をインストールする
▼ステップ1:利用可能なJDKバージョンを確認する (apt search)
どのバージョンのOpenJDKが倉庫にあるか、まず確認してみましょう。
apt search openjdk-
openjdk-11-jdk, openjdk-17-jdk, openjdk-21-jdk なんかが見つかるはずです(これらがLTS: 長期サポート版です)。
▼ステップ2:特定のバージョンのJDKをインストールする
ここでは、今の主流なLTS(長期サポート版)である OpenJDK 17 をインストールしてみましょう!
# まずパッケージリストを更新します(さっきやりましたね!) sudo apt update
OpenJDK 17 JDK をインストールします
sudo apt install openjdk-17-jdk
jdk(開発キット)をインストールすると、実行に必要な jre (Java Runtime Environment) も「おまけ(依存関係)」として自動でインストールされますよ。
▼ステップ3:インストールされたJavaのバージョンを確認する
「linux パッケージ 確認」のJava版ですね!
java -version
<実行結果の例>
openjdk version "17.0.10" 2024-01-16 OpenJDK Runtime Environment (build 17.0.10+7-Ubuntu-122.04) OpenJDK 64-Bit Server VM (build 17.0.10+7-Ubuntu-122.04, mixed mode, sharing)
2. yum / dnf (Red Hat系) でJava (OpenJDK) をインストールする
▼ステップ1:利用可能なJDKバージョンを確認する (yum search)
yum search openjdk
(dnfの場合: dnf search openjdk)
java-11-openjdk-devel, java-17-openjdk-devel, java-21-openjdk-devel なんかが見つかります。
(Red Hat系だと、JDK(開発キット)は devel っていう名前で提供されることが多いんですよ)
▼ステップ2:特定のバージョンのJDKをインストールする
RHEL/CentOS 9系で、OpenJDK 17 をインストールしてみます。
sudo yum install java-17-openjdk-devel
▼ステップ3:インストールされたJavaのバージョンを確認する
java -version
<実行結果の例>
openjdk version "17.0.9" 2023-10-17 LTS OpenJDK Runtime Environment (Red_Hat-17.0.9.0.9-2) (build 17.0.9+9-LTS) OpenJDK 64-Bit Server VM (Red_Hat-17.0.9.0.9-2) (build 17.0.9+9-LTS, mixed mode, sharing)
表2: Java (OpenJDK) のインストールパッケージ名 (代表的なLTS)
| ディストリビューション | OpenJDK 11 (LTS) | OpenJDK 17 (LTS) | OpenJDK 21 (LTS) |
|---|---|---|---|
| Debian / Ubuntu (apt) | openjdk-11-jdk | openjdk-17-jdk | openjdk-21-jdk |
| Red Hat / CentOS系 (yum) | java-11-openjdk-devel | java-17-openjdk-devel | java-21-openjdk-devel |
3. 【応用】複数のJavaバージョンを切り替える
システムに複数のJDKバージョン(例えば11と17)をインストールしちゃった場合、どっちを「デフォルト(標準)」として使うか、切り替える必要が出てきます。
Linuxでは、この「デフォルトのコマンド」を管理するために alternatives(代替)っていう仕組みが使われるんです。
▼apt (Debian/Ubuntu) の場合:
update-alternatives っていうコマンドを使います。
# どのJavaが alternatives に登録されてるか確認 sudo update-alternatives --config java
<実行結果の例>
There are 2 choices for the alternative java (providing /usr/bin/java).
Selection Path Priority Status
0 /usr/lib/jvm/java-17-openjdk-amd64/bin/java 1711 auto mode 1 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 manual mode 2 /usr/lib/jvm/java-17-openjdk-amd64/bin/java 1711 manual mode
Press to keep the current choice[*], or type selection number:
ここでキーボードの「1」を入力してEnterキーを押せば、デフォルトの java コマンドが OpenJDK 11 に切り替わるんです!
▼yum / dnf (Red Hat系) の場合:
Red Hat系でも alternatives コマンドが使えますよ。
sudo alternatives --config java
操作方法はUbuntuとほとんど同じで、こんなふうに対話的に番号を選んで、デフォルトのJavaを切り替えることができます。
こんな風に、「linux java インストール」は、OSのパッケージ管理システムと alternatives の仕組みを理解することで、安全で柔軟にできちゃうんですよ🥰
パッケージ管理におけるトラブルシューティングとベストプラクティス
パッケージ管理はすっごく強力なんですけど、たまーに問題が発生することもあります😥
ここでは、よくある問題とその対処法、そして安全に運用するための「心構え(ベストプラクティス)」を紹介しますね。
よくあるトラブルシューティング
▼1. (apt) E: Unable to locate package [パッケージ名]
「パッケージが見つかりません!」っていうエラーです。焦りますよね…!
- 原因1: パッケージ名が間違ってる。
- 対処:
apt searchで正しい名前をもう一度確認してみてくださいね。
- 対処:
- 原因2: パッケージリスト(目録)が古い。
- 対処:
sudo apt updateを実行してから、もう一度apt installを試してみてください!
- 対処:
- 原因3: 必要な倉庫(リポジトリ)が有効になってない。
- 対処: Ubuntuの場合、
universeやmultiverseリポジトリに必要なパッケージがあるかもしれません。あと、サードパーティリポジトリの追加が必要かどうかも確認してみましょう。
- 対処: Ubuntuの場合、
▼2. (apt) dpkg was interrupted, you must manually run 'sudo dpkg --configure -a'
インストールやアップデートの途中でプロセスが中断されちゃった(例:SSH接続が切れちゃった)時に出ます…。
- 対処: エラーメッセージが親切に教えてくれてる通り、以下のコマンドを実行して、中断された設定処理を完了させてあげてください。
そのあと、sudo dpkg --configure -asudo apt install -f(壊れた依存関係の修復)も実行しておくとバッチリです!
▼3. (yum/dnf) Could not resolve host: mirrors.rockylinux.org
倉庫(リポジトリ)のURL(ホスト名)の名前解決ができないよーっていうエラーです。
- 原因: ネットワーク設定が間違ってるか、DNSサーバーに問題があります。
- 対処:
ping google.comとかで、インターネットに繋がってるか確認して、/etc/resolv.confのDNS設定を見直してみてください。
- 対処:
▼4. (yum/dnf) [package name] requires [library.so.X], but none provides it
「依存関係が解決できません!」っていうエラーです。これも困りますよね…。
- 原因: 必要な部品(ライブラリ)がどの倉庫にもないか、リポジトリが無効化されてます。
- 対処:
EPELみたいな主要なサードパーティリポジトリがインストールされて、有効になってるか確認してみてください。(例:sudo yum install epel-release)
- 対処:
▼5. (pip) ERROR: This environment is externally managed
これ! Ubuntu 23.04 や Debian 12 以降で sudo pip install を実行しようとすると発生する、最近すっごく多いエラーです!
- 原因: OS(apt)が管理してるPython環境を、
pipで直接変更できないように保護する仕組み(PEP 668)が導入されたからなんです。 - 対処: ぜったいに
sudo pipを使ってはいけません!
さっきこの記事で解説した通り、python3 -m venv venvで「仮想環境を作成」して、それをアクティベートしてからpip installを実行してくださいね!
パッケージ管理のベストプラクティス(心構え)
- (apt)
install/upgradeの前には、必ずsudo apt updateを実行する。- 古い目録(パッケージリスト)のままだと、依存関係がおかしくなったり、最新のセキュリティパッチが当たらなかったりする原因になっちゃいますからね!
sudo pipはぜったいに使わず、常に仮想環境 (venv) を使う。- システムのPython環境を汚染から守って、プロジェクトの依存関係をキレイに保つための「鉄則」です!
- 信頼できないリポジトリ(PPAやサードパーティ)をむやみに追加しない。
- システムの安定性を壊したり、セキュリティリスクを増やしたりしちゃいます。追加する時は、提供元が本当に信頼できるか確認して、必要最小限にしてくださいね。
- 定期的にアップデートとお掃除(クリーンアップ)を行う。
sudo apt upgrade/sudo yum updateを定期的に実行して、セキュリティパッチを当てましょう。sudo apt autoremove/sudo yum autoremoveで、いらなくなったパッケージを削除して、ディスク容量を節約しましょう。
- 本番環境のアップデートはすっごく慎重に。
- 大事な本番サーバーで、いきなり
yum updateを実行しちゃうと、ミドルウェアのバージョンが意図せず上がって、アプリが動かなくなるかも…😥 - アップデートの前にバックアップ(スナップショット)を取ったり、別の検証環境で事前にテストしたりしてくださいね。
- 特定のパッケージだけアップデートする(
yum update nginx)とか、セキュリティアップデートだけ適用する(yum update --security)みたいな運用も考えましょう。
- 大事な本番サーバーで、いきなり
(PR)本格的なLinux環境を学ぶならVPSがおすすめ
ここまでLinuxのパッケージ管理について学んできましたけど、これらのコマンドを実際に試してみる環境がないと、なかなか身につきませんよね😥
ローカルマシンに仮想マシン(VirtualBoxとか)を作ることもできますけど、設定がちょっと面倒だったり、PCのパワーを使っちゃったりします。
そこでオススメなのが、「VPS(仮想プライベートサーバー)」なんです!
VPSっていうのは、月額数百円から利用できる、インターネット上の「あなた専用のLinuxサーバー」のことです。
- すぐに試せる: 契約したらすぐに、まっさらなUbuntuやCentOS (Rocky Linux/AlmaLinux) の環境が手に入ります!
- 壊しても大丈夫: OSの再インストール(初期化)が、数クリックで完了しちゃいます。パッケージ管理の実験でシステムを壊しちゃっても、すぐに元に戻せるので安心です🥰
- 実践的なスキルが身につく:
aptやyumだけじゃなくて、SSHでの接続、ファイアウォールの設定、Webサーバー(Nginx)の構築とか、サーバー管理の実践的なスキルを学ぶ最高の環境なんですよ!
Linuxのスキルって、Web開発、インフラエンジニア、データサイエンティストみたいに、ITの分野で幅広〜く求められています。
apt や yum の違いを実際に体感して、pip で仮想環境を作って、Java アプリを動かしてみる――
こんな経験を積むために、VPSは最適な学習環境と言えますよね!
(※ここに具体的なVPSサービスへのアフィリエイトリンクや紹介が入ります)
まとめ
「Linuxのパッケージ管理、なんだか怖い…」から「あ、こういうことか!」って、少しでも思ってもらえたら嬉しいです!
この記事で解説した大事なポイントを、もう一度おさらいしますね。
✅ 基本概念:
ソフトウェアは「パッケージ(お届けセット)」としてまとめられ、「リポジトリ(公式の倉庫)」に保管されています。
✅ 管理システム:
「パッケージ管理システム(apt や yum)」っていう執事みたいなソフトが、倉庫からパッケージを取ってきて、依存関係も自動で解決しながらインストール・管理してくれます。
✅ apt vs yum (dnf):
Debian系 (Ubuntu) では apt を、Red Hat系 (CentOS/Rocky) では yum (dnf) を使います。コマンドは似てますけど、リポジトリの文化やパッケージ形式(.deb vs .rpm)が違います。
✅ パッケージの確認:
「linux パッケージ 確認」の基本コマンドは、apt list --installed (Debian系) と yum list installed (Red Hat系) です!
✅ リポジトリの重要性:
「linux リポジトリとは」、パッケージの品質と信頼性を守る大事な仕組みです。設定ファイル(/etc/apt/sources.list.d/ や /etc/yum.repos.d/)の管理がすっごく重要なんですね。
✅ OS管理 vs 言語管理の使い分け:apt や yum はOS全体の管理に使います。
でも、「linux pip」みたいな言語(Python)専用のパッケージ管理は、OSを汚さないように、ぜったいに「仮想環境 (venv)」の中で使うのが鉄則です!
✅ 実践的なインストール:
「linux java インストール」は、apt install openjdk-17-jdk や yum install java-17-openjdk-devel みたいに、OSのパッケージ管理システムを使うのが一般的ですよ。
パッケージ管理の仕組みをちゃんと理解して、apt や yum を正しく使いこなすことは、Linuxシステムを安全で安定して運用するための、本当に大事な第一歩です。
ぜひ、VPSみたいなクリーンな環境で、怖がらずに(でも慎重に!)コマンドを試してみて、この便利な仕組みを体感してみてくださいね!💪✨


コメント