更新とアップグレードの分離が存在するのはなぜですか?


12

aptコマンドupdateで利用可能なパッケージのリストを更新することを理解していますが、これらのパッケージから既にインストールされているソフトウェアはアップグレードしません。

またupgradeupdate上記で説明したように、更新したパッケージから既にインストールしたソフトウェアをアップグレードすることも理解しています。

Ubuntu / Debian開発者がこの分割をupdate行い、upgrade代わりに1つのコマンドで両方のタスクを実行する理由は何ですか?

これは、Ubuntu開発者のアーキテクチャ哲学に関する質問です。


多くのアプリをインストールする場合(グループ化するため、1つのコマンドを1つのグループに、次のコマンドを次のグループに、など)、なぜrepo.updateとその後のインストール手順では、帯域幅を節約できます。両方を実行するコマンドが必要な場合は、スクリプトを作成するか、いずれにしても実行できますalias。UNIXの方法は、とにかく1つのコマンドだけで1つのことを行うため、「神学的/哲学的」な議論があなたのものでもある場合、UNIXの方法との分離はより適切です。
ギベルク

同様に、apt dist-upgradeキャンセルするために「n」を押して気が変わったら、apt dist-upgradeコマンドを再実行するために「更新」しないので帯域幅を節約します...「dist-upgrade」が更新を行ったとしても自動的に、「インストール」、「アップグレード」、「dist-upgrade」を含まない「更新」の理由があるため、「更新」コマンドが存在することになります
。– guiverc

私は、ユーザーの観点から分離が存在するべきではなく、必要なときにアクションが自動的に実行されるだけだと主張しましたapt update
ロビーバサック

回答:


7

必要なのはアップグレードだけではありapt-get updateません。パッケージリストを更新するたびにアップグレードする必要はありません。

apt-get upgradeうまく機能することに依存してapt-get updateいない長い前に実行されているが、その後の真であることapt-get removeapt-get install同様と!これらはすべて暗示すべきapt-get updateでしょうか?もちろん違います!リソースの効率性と設計のクリーンさの単純な問題として、ある操作が他の複数の操作に共通している場合は、除外する必要があります。

逆に、最近実行されて正常に終了することに依存している可能性があることを考えるとapt-get remove、の実行ごとに意味がありますか?繰り返しますが、私がやろうとしていることは、やろうとすることと矛盾する可能性があります。apt-get installapt-get updateapt-get upgradeapt-get updateapt-get upgrade


6

ソフトウェアソースを変更するたびにsudo apt update、使用可能なソフトウェアのリストを更新するためにコマンドを実行する必要があります。その後、追加したばかりの新しいソフトウェアソースで使用可能なパッケージを検索したり、インストールしたりできます。

このコマンドsudo apt upgradeは、Software Updaterアプリケーションを使用してインストール済みパッケージのリストをアップグレードするのと同等のターミナルです。これは、新しいソフトウェアソースを追加し、利用可能なソフトウェアのリストを更新して新しいソフトウェアソースからのパッケージを含め、追加したばかりの新しいソフトウェアソースから新しいパッケージをインストールする通常のワークフローとは異なるため、より便利です混乱を招くことのないsudo apt updatesudo apt upgrade独立したコマンドです。

また、分離することの混乱が少なくなります。また、正常に実行するsudo apt updatesudo apt upgradesudo apt updateインターネットに接続できることを確認できます。sudo apt upgrade後で実行するときに問題がある場合、問題はインターネット接続の問題よりもパッケージ管理の問題である可能性が高く、その結果はsudo apt upgrade問題の診断と解決の手がかりを提供します。


5

差の歴史updateupgrade実際にはかなりクールです。

Ubuntuが存在する数年前の2000年頃など、ずっと昔、帯域幅とディスク容量ははるかに限られていましたが、1990年代半ばに比べて拡張性がありました。ブロードバンドはまだ始まったばかりであり、ダイヤルアップは依然としてオンライン接続の重要な方法でした。大きなディスクはまだ数百MBでした。Aptは光沢があり、新しく、急進的で革新的で、dpkgの上に構築されました。

考えてみると、aptデータベースは驚くべきものです。これは、既知のすべてのリポジトリーからのすべてのソフトウェアの正確なデータベースです。aptが依存関係を計算し、利用可能なアップグレードを識別するのに十分なほど詳細ですが、当時のダイヤルアップモデムを介して送信し、当時の小さなドライブに保存するのに十分なほど小さいです。電話でデータベースを更新するには、良好な接続で数分かかる場合があります。それは今では長い時間ですが、パッケージの更新を手動で(aptの前に)検索すると何時間もかかる可能性があります

当時、ディストリビューションの構築は異なっていました-継続的インテグレーションも、煙テストもありません(テストはそれほど多くありません!)、ビルドファームはまだ始まったばかりです。アップグレードは今よりも頻繁に元に戻す必要がありました。多くのユーザーは、さまざまな理由で特定のパッケージをアップグレードしないか、今日特定のアップグレードのみを選択して(手動でテストする)、明日は他のアップグレードを選択することを選択しました。

その後の15-か-そう長年にわたり、ツールは、我々はまだ別の持っている理由である、あまり変わっていないupdateupgradeアクションを。ユーザは、ワークフローディストリビューションの信頼性が向上しており、手動であることが使用されるソース/更新/アップグレード管理の多くは、ゆっくりと(自動化の層の背後に隠されているように進化しましたsoftware-updaterunattended-upgrades)。

ソフトウェアパッケージツールの近代化は、SnapsとAppImageとFlatpackが最近登場した理由の1つですが、それは次の章です。


2

彼らは多くの理由で別々のことをします。

1つの例は、私が投稿して自己回答した質問です。GUIを使用してPPAを削除するにはどうすればよいですか?。この画面では、ソフトウェアをアップグレードせずにPPA削除します。

PPA.pngを削除します

PPAを削除すると、GUIソフトウェアが自動的に実行されsudo apt updateます。コマンドラインからPPAを削除する場合は、ソースリストからPPAを削除したsudo apt update に実行する必要があります。

個別のapt update機能がなければ、PPAを削除する方法はありません!


別の例はsudo apt update、コマンドラインから実行してソースを更新する必要がある場合です。次に、実際にアップグレードせずにアップグレードできるものを見つけることができます。

$ 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ものがないと、何がアップグレードされるのかわかりません!


2番目のパラは偽です。yumそして、dnf関連する操作を実行するときに自動的にアップデートと同等のものを実行します。例えば、同等のapt list --upgradableIS yum check-updateそれが最近更新されなかった場合、パッケージリストを更新し、。他のパッケージマネージャーで見られるように、これが機能することは確かに可能です。
ムル

@muruこれは、リポジトリを削除した後に実行する必要があるというこの238の賛成投票の回答に基づいてsudo apt updateいます。
WinEunuuchs2Unix

次に、2番目の---区切られたセクション。
ムル

あなたがそれについて言及した今、それはまた偽です。yum/ の例からわかるdnfように、更新操作は自動であるため、無効になったソースは次の操作から自動的に削除されます。繰り返しますが、完全に可能なことです。
ムル

@muruまた、少なくとも私のシステムには、どちらyumdnfインストールされていません。いずれかをインストールして交換するapt updateと、システムのオーバーヘッドと学習時間が増加します。
WinEunuuchs2Unix

0

正式なUbuntuリポジトリからプログラムをダウンロードしてaptインストールする理由を尋ねることができますか?一度にダウンロードしてインストールするのではなく、最初にダウンロードしてからインストールすると、どのような違いが生じますか?

コメントを読んでこれについてもっと考えた後、これは基本的に「各プログラムは1つのことをする」と言うモジュラー哲学であるUnix哲学に起因することを理解しています:最初のダウンロード、次にインストール-独自の専用プログラムを持つ各アクション。


0

ディストリビューションがない場合、コマンドの更新とアップグレードが1つあります。コマンドが存在する場合、それは定義済みのエイリアスに他なりません。これらのエイリアスは〜/ .bashrcを編集することでUbuntuでも簡単に設定できます。

更新は、リポジトリを再同期し、そこにある問題を修正するために使用されます。次に、アップグレードするときに、インストール済みのパッケージを実際にアップグレードします。ただし、Dist-Upgradeを実行すると、完全にアップグレードされます。Arch linuxでは、Syuによる完全なアップグレードを強調しています。Ubuntuでも同じことができます。完全なアップグレードでは、部分的なアップグレードで発生する可能性のあるシステム上の依存関係の問題を実際に解決します。

それが役に立てば幸い。電話で書いている生のテキストを許してください。


2
yumキャッシュされたデータが十分に古い場合、ほとんどの操作dnfと同等のupdate操作を自動的に実行します。例えば、DNFでその動作を変更することについての議論を参照してください。lwn.net/Articles/750334
muru
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.