Чим відрізняються команди видалення пакетів APT?


17

Яка різниця між цими командами?

  1. sudo apt-get autoremove --purge packagenames
  2. sudo apt-get remove --purge packagenames
  3. sudo apt-get purge purge packagenmaes
  4. sudo apt-get remove packagenames
  5. sudo apt-get autoremove

Відповіді:


24

Швидкий відповідь

  • remove видаляє пакети з ім'ям.
  • autoremoveвидаляє всі автоматично встановлені пакети, які більше не потрібні. Невірно перераховувати назви пакетів після autoremove; вони будуть ігноровані (і всі придатні пакети будуть видалені), що, мабуть, не те, що ви маєте намір.
  • --purgeтакож призводить до видалення файлів конфігурації, пов’язаних із загальною системою, пов'язаних із видаленням пакунків Він повинен супроводжуватися командою, такою як removeабо autoremove. --purgeПрапор змінює дію команди; воно не діє самостійно.
  • purgeозначає те саме, що --purge remove(що те саме remove --purge). Невірно сказати purgeдвічі; другий purgeтрактується як назва пакету, який буде purged, що, мабуть, не те, що ви маєте намір.

Повний відповідь

Щоб зрозуміти, що ці команди виконують і чим вони відрізняються, це допомагає (і, мабуть, навіть важливо) зрозуміти два поняття:

  1. відмінність між встановленими вручну та автоматично встановленими пакетами
  2. відмінність між пакетом в файли пакета і його конфігураційні файли

Вручну встановлено проти автоматичного встановлення

Встановлений пакет встановлюється вручну або автоматично .

Коли ви вказуєте пакет для встановлення, і він встановлений, він встановлюється вручну .

Але можуть бути встановлені й інші пакети. Більшість пакетів мають залежності - інші пакети, які необхідно встановити, щоб цей пакет працював за призначенням. При встановленні пакета встановлюються його залежності (тобто інші пакети, від яких це залежить), за винятком тих, які були встановлені раніше.

Якщо пакет не вказаний вами для встановлення, а натомість встановлений як залежність від пакета, який ви вказали для встановлення, він автоматично встановлюється.

Зверніть увагу, що якщо у вас встановлено два пакети, і один з них є залежністю іншого, це не означає, що залежність встановлюється автоматично. Можливо також, що залежність була встановлена ​​вручну (тобто вказана вами, наприклад, встановлена ​​до або одночасно з пакетом, який від неї залежить).

Нарешті:

  • Якщо ви спробуєте вручну встановити пакет, який уже встановлений, він залишається встановленим. Але якщо вона була встановлена ​​автоматично, робиться зміна - намагаючись встановити її вручну, вона позначить її як встановлену вручну.
  • Ви можете позначити будь-який пакет як встановлений вручну або автоматично (за допомогою apt-markкоманди), незалежно від того, як і за яких обставин вони були фактично встановлені.
  • Пакети, які попередньо встановлені у вашій системі Ubuntu, не всі автоматично встановлюються; деякі з них позначаються автоматично встановленими, а інші позначаються вручну. Це потрібно для задоволення логіки розрізнення пакетів, встановлених вручну та автоматично, - ідея про те, що деякі пакети потрібні лише для обслуговування інших.

Як правило, для кожного автоматично встановленого пакета у вас буде принаймні один пакунок, встановлений вручну, який залежить від нього (і який призвів до його автоматичного встановлення). Однак якщо потім видалити всі встановлені вручну пакети, які залежать від автоматично встановленого пакету, автоматично встановлений пакет більше не буде необхідним, але все одно буде встановлений.

apt-get autoremove видаляє автоматично встановлені пакети, у яких більше немає встановлених вручну пакетів залежно від них.

Файли пакунків та файли конфігурації

Пакет надає файли, які повинні бути і залишатись однаковими для кожної системи, де встановлена ​​версія цього пакета. Такі файли надають виконувані файли, ресурси, документацію та інші "активи" для встановлених програм. Ми зазвичай просто називали ці "файли", які надає пакет.

Але пакет містить і інші файли, які призначені (можливо) змінити. Вони називаються глобальними (або загальносистемними) файлами конфігурації. Вони майже завжди встановлюються в /etcкаталозі, і їх можна автоматично та вручну змінювати, щоб змінити поведінку встановлених програм. Наприклад, sudoє файл конфігурації /etc/sudoersта каталог для додаткових файлів конфігурації /etc/sudoers.d. Цей файл та будь-які файли, додані до цього каталогу, вказують, кому дозволено використовувати sudoякими способами.

Як правило, бажано, щоб видалення пакета та його встановлення назад не змінювали його поведінку (якщо, звичайно, не були пошкоджені файли пакунків , і, звичайно, ви його встановили). Тому, як правило, коли пакет видалено, файли його пакетів видаляються, але його конфігураційні файли, що зберігаються в цілому, залишаються недоторканими.

Коли ви видаляєте пакет, не вказуючи, що його файли конфігурації для загальної системи також повинні бути видалені, це називається "видалення" пакета.

Якщо ви також хочете видалити загальносистемні файли конфігурації пакета під час видалення пакета, це називається "очищення" пакета.

apt-get removeвилучить пакет; тобто він видалить пакет, але залишить його файли конфігурації для всієї системи.

apt-get purgeочистить пакет; тобто він видалить пакет, а також обов’язково видалить його конфігураційні файли для всієї системи.

Ще один спосіб очищення пакетів - використання --purgeпрапора. Це не говорить про apt-getте, що робити; натомість він модифікує те, що терміни (або "команди") removeнаказують виконувати. --purgeПрапор викликає ніяких видалення пакета повинні супроводжуватися видаленням загальносистемних конфігураційних файлів для пакету (ів) бути невстановленим. Іншими словами, --purgeпрапор перетворює видалення в чистки.

Чому у нас --purgeпрапор, коли ми маємо purgeкоманду? Зрештою, це не sudo apt-get --purge remove packagenameрівнозначно sudo apt-get purge packagename. Вони рівноцінні. Де --purgeпригождается, коли ви хочете змінити поведінку команд інших ніж remove.

Наприклад, припустимо, ви хочете видалити автоматично встановлені пакети, які більше не потрібні (оскільки залежно від них більше немає встановлених вручну пакетів), але ви не хочете видаляти ці автоматично встановлені пакети, ви також хочете видалити файли їх конфігурації. Тоді ви можете запустити:

sudo apt-get --purge autoremove

Розглянемо ще одне використання --purge. Є прапор --reinstall, який називається , який перетворює установки на перевстановлення. Це означає, що зазвичай, коли ви намагаєтесь встановити вже встановлений пакет, нічого не відбудеться, або (якщо пакет позначено автоматично встановленим), пакет буде позначений встановленим вручну. Але якщо встановити --reinstallпрапор, встановлення вже встановленого пакету призводить до його видалення та встановлення назад :

sudo apt-get --reinstall install packagename

Але припустимо, ви хочете видалити загальносистемні файли конфігурації з пакету, який ви перевстановлюєте. Це дещо поширене; коли пакет не працює, і ви не знаєте чому, ви можете спробувати перевстановити його, а також видалити його конфігураційні файли, щоб його конфігурація була скинута до стандартної. Для цього можна виконати:

sudo apt-get --purge --reinstall install packagename

--reinstallУстановка перетворюється в переустановку (тобто видалення з подальшою установкою), і --purgeперетворює частину видалення повторної установки в продування.

Поведінка ваших прикладів

Тепер має бути зрозуміло, що саме робить кожна з ваших прикладних apt-getкоманд:

  • sudo apt-get autoremove --purge packagenames

    Це очищає автоматично встановлені пакети, у яких більше немає встановлених вручну пакетів, які залежать від них. Тобто, він видаляє ці пакети (що тягне за собою видалення їх пакетних файлів), а також видаляє їхні файли конфігурації для всієї системи.

    Тут packagenamesнічого не робить. Зокрема, якщо ви мали намір просто видалити пакунки, імена яких вказані там, то це буде не так, як ви планували.

  • sudo apt-get remove --purge packagenames

    Це очищення packagenames; якщо припустити packagenames, що розділений пробілом список назв пакетів, він очистить їх усі. Тобто він видалить їх (що тягне за собою видалення їх пакетних файлів), а також видалить їхні файли конфігурації для всієї системи.

    Якщо будь-який з перерахованих пакетів packagenamesне встановлений, його присутність у списку не матиме ефекту (крім того, що вам повідомлять, що він не встановлений). Якщо ви перелічите назви пакетів, які не є іменем жодного фактичного пакета, команда не вдасться з помилкою.unable to locate packagename

  • sudo apt-get purge purge packagenmaes

    Якщо ви видалили одне із випадків purgeв цій команді, воно було б еквівалентно попередньому. На даний момент він намагається очистити пакет, який називається purge, а також очистити пакунки, перелічені в packagenames. Оскільки purgeце не ім'я жодного пакету, він не вдасться отримати повідомлення про помилку.

  • sudo apt-get remove packagenames

    Це видаляє пакунки, перелічені в packagenames, що тягне за собою видалення їх пакетних файлів. Це не видаляє їхні файли конфігурації для всієї системи (адже це просто видалення, а не очищення).

  • sudo apt-get autoremove

    Це видаляє автоматично встановлені пакети, у яких більше немає встановлених вручну пакетів, які залежать від них. Це тягне за собою видалення їх пакетних файлів, але не їхні файли конфігурації для всієї системи (тобто це видалення, але не очищення).

Для отримання додаткової інформації про використання apt-getя рекомендую його сторінку керівництва . Для отримання більш загальної інформації дивіться це керівництво .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.