apt
のコマンドupdate
は、使用可能なパッケージのリストを更新しますが、これらのパッケージから既にインストールされているソフトウェアはアップグレードしません。
また、upgrade
は、上記のようにupdate
で更新したパッケージから既にインストールしたソフトウェアをアップグレードすることも理解しています。
Ubuntu/Debian開発者がupdate
とupgrade
をこのように分割する代わりに、1つのコマンドで両方のタスクを実行する理由は何ですか?
これは、Ubuntu開発者のアーキテクチャ哲学に関する質問です。
apt-get update
が必要になる可能性があるのはアップグレードだけではありません。パッケージリストを単に更新するたびにアップグレードする必要はありません。
apt-get upgrade
は、apt-get update
とapt-get remove
についても、少し前に実行されているapt-get install
に依存する場合があります。これらはすべてapt-get update
を意味しますか?もちろん違います!リソースの効率性と設計のクリーンさの単純な問題として、ある操作が他の複数の操作に共通している場合は、除外する必要があります。
逆に、apt-get remove
とapt-get install
も正常に終了するために最近実行されたapt-get update
に依存する場合、apt-get upgrade
の実行ごとにapt-get update
が意味をなします?いいえ、繰り返しますが、私がしようとしていることは、apt-get upgrade
が行うことと矛盾する可能性があります。
ソフトウェアソースを変更するたびに、使用可能なソフトウェアのリストを更新するために、Sudo apt update
コマンドを実行する必要があります。次に、追加したばかりの新しいソフトウェアソースで使用可能なパッケージを検索したり、インストールしたりできます。
コマンドSudo apt upgrade
は、Software Updaterアプリケーションを使用してインストール済みパッケージのリストをアップグレードするのと同等のターミナルです。これは、新しいソフトウェアソースを追加し、使用可能なソフトウェアのリストを更新して新しいソフトウェアソースからのパッケージを含め、追加したばかりの新しいソフトウェアソースから新しいパッケージをインストールする通常のワークフローとは異なるため、より便利ですSudo apt update
とSudo apt upgrade
が別々のコマンドであることをわかりやすくします。
また、Sudo apt update
とSudo apt upgrade
を分離する方が混乱が少なくなります。これは、Sudo apt update
を正常に実行すると、インターネットに接続できることを確認したためです。 Sudo apt upgrade
の実行後に問題が発生した場合、問題はインターネット接続の問題よりもパッケージ管理の問題である可能性が高く、Sudo apt upgrade
の結果は問題の診断と解決の手がかりを提供します。
update
とupgrade
の違いの歴史は実際にはかなりクールです。
Ubuntuが存在する数年前の2000年頃など、ずっと昔、帯域幅とディスク容量ははるかに限られていましたが、1990年代半ばに比べて拡張性がありました。ブロードバンドはまだ始まったばかりであり、ダイヤルアップは依然としてオンライン接続の重要な方法でした。大きなディスクはまだ数百MBでした。 Aptは光沢があり、新しく、急進的で革新的で、dpkgの上に構築されました。
考えてみると、aptデータベースは驚くべきものです。allall既知のレポジトリからなるソフトウェアの正確なデータベースです。 aptが依存関係を計算し、利用可能なアップグレードを識別するのに十分なほど詳細ですが、当時のダイヤルアップモデムを介して送信し、当時の小さなドライブに保存するのに十分なほど小さいです。電話でデータベースを更新するには、良好な接続でminutesが必要になる場合があります。それは今では長い時間ですが、パッケージの更新を手動で(aptの前に)検索するとhoursを消費する可能性があります。
当時、ディストリビューションの構築は異なっていました-継続的インテグレーションも、煙テストもありません(まあ、テストはあまりありません!)、ビルドファームはまだ始まったばかりです。アップグレードは今よりも頻繁に元に戻す必要がありました。多くのユーザーは、さまざまな理由で特定のパッケージをnotアップグレードするか、今日(手動でテストするため)特定のアップグレードのみを選択し、明日は他のアップグレードを選択することを選択しました。
その後の15年ほどの間、toolsはあまり変更されていないため、update
とupgrade
のアクションが別々にあるのはこのためです。 ユーザーワークフローは、ディストリビューションの信頼性が向上し、かつて手動であったソース/更新/アップグレード管理の多くが、自動化のレイヤーの背後にゆっくりと隠されてきました(software-updater
、unattended-upgrades
)。
ソフトウェアパッケージツールの近代化は、SnapsとAppImageとFlatpackが最近登場した理由の1つですが、それは次の章です。
1つの例は、私が投稿して自己回答した質問です。 GUIを使用してPPAを削除するにはどうすればよいですか? 。この画面でPPAsを削除ソフトウェアをアップグレードしません:
PPAを削除すると、GUIソフトウェアはSudo apt update
を自動的に実行します。コマンドラインからPPAを削除する場合は、Sudo apt update
afterを実行してソースリストからPPAを削除する必要があります。
apt update
関数がなければ、PPAを削除する方法はありません!。別の例は、コマンドラインからSudo apt update
を実行してソースを更新する必要がある場合です。それから、couldアップグレードするものを見つけることができますwithout実際にアップグレードする:
$ apt list --upgradable
Listing... Done
conky-std/xenial 1.10.1-3 AMD64 [upgradable from: 1.9.0-4]
google-chrome-stable/stable 65.0.3325.181-1 AMD64 [upgradable from: 63.0.3239.132-1]
libxnvctrl0/xenial 390.48-0ubuntu0~gpu16.04.1 AMD64 [upgradable from: 387.22-0ubuntu0~gpu16.04.1]
nvidia-settings/xenial 390.48-0ubuntu0~gpu16.04.1 AMD64 [upgradable from: 387.22-0ubuntu0~gpu16.04.1]
peek/xenial 1.3.1-0~ppa23~ubuntu16.04.1 AMD64 [upgradable from: 1.2.1-0~ppa20~ubuntu16.04.1]
出力を見ると、特定のパッケージを「固定」または「保留」し、次回の「Sudo apt upgrade」の実行時にアップグレードしないことを決定できます。単一の「更新/アップグレード」プロセスがある場合、これらの機能は失われます。 。
apt update
がなければ、何がアップグレードされるかわかりません!ディストリビューションがない場合、コマンドの更新とアップグレードが1つあります。それが存在する場合は、事前定義されたエイリアス以外の何ものでもないと思います。これらのエイリアスは〜/ .bashrcを編集することでUbuntuでも簡単に設定できます。
更新は、リポジトリを再同期し、そこにある問題を修正するために使用されます。次に、アップグレードするときに、インストール済みパッケージを実際にアップグレードします。ただし、Dist-Upgradeを実行すると、完全にアップグレードされます。 Arch Linuxでは、Syuによる完全なアップグレードを強調しています。 Ubuntuでも同じことができます。完全アップグレードでは、部分的なアップグレードで発生する可能性のあるシステム上の賢明な依存関係の問題を実際に解決します。
それが役に立てば幸い。電話で書いている生のテキストを許してください。