Перечислите доступные обновления, но не устанавливайте их

Наиболее заметное отличие - это aptitude обеспечивает интерфейс меню терминалов (во многом как Синаптический в терминале), тогда как apt-get не делает.

Рассматривая только интерфейсы командной строки каждого, они весьма схожи, и по большей части, это действительно не имеет значения, какой Вы используете. Последние версии и отследят, какие пакеты были вручную установлены, и которые были установлены как зависимости (и поэтому имеющие право на автоматическое удаление). На самом деле я полагаю, что еще позже, эти два инструмента были обновлены для фактического совместного использования той же базы данных вручную по сравнению с автоматически установленными пакетами, таким образом, случаи, где Вы устанавливаете что-то с Кв. - добираются, и затем способность хочет удалить ее, главным образом вещь прошлого.

Существует несколько незначительных различий:

  • способность автоматически удалит имеющие право пакеты, тогда как склонный - добираются, требует, чтобы отдельная команда сделала так
  • Команды для обновления по сравнению с dist-обновлением были переименованы в способности к, вероятно, более точному безопасному обновлению имен и полному обновлению, соответственно.
  • способность на самом деле работает, функции не только склонный - добираются, но также и некоторые ее сопутствующие инструменты, такие как способный кэш и способная метка.
  • способность имеет немного отличающийся синтаксис запроса для поиска (по сравнению со способным кэшем)
  • способность имеет, почему и почему - не управляет, чтобы сказать Вам, которые вручную установили пакеты, предотвращают меры, которые Вы могли бы хотеть принять.
  • Если действия (установка, удаление, обновляя пакеты), что Вы хотите взять конфликты причины, способность, могут предложить несколько потенциальных разрешений. склонный - добираются, просто скажет, что "я - жаль Dave, я не могу позволить Вам делать это".

Существуют другие небольшие различия, но это - самые важные, о которых я могу думать.

Короче говоря, способность более правильно принадлежит категории с Синаптическим и другим высокоуровневым диспетчером пакетов frontends. Это просто, оказывается, также имеет интерфейс командной строки, который напоминает склонный - добираются.

Премия Вокруг: Что такое wajig?

Помните, как я упомянул те "сопутствующие" инструменты как способный кэш и способная метка? Ну, существует набор их, и если Вы используете их много, Вы не могли бы помнить, которые обеспечивают который команды. wajig является одним решением той проблемы. Это - по существу диспетчер, обертка вокруг всех тех инструментов. Это также применяет sudo при необходимости. Когда Вы говорите wajig install foo, wajig говорит "хорошо, install обеспечивают apt-get и требует административных привилегий", и это работает sudo apt-get install foo. Когда Вы говорите wajig search foo, wajig говорит "хорошо, search обеспечивают apt-cache и не требует административных привилегий", и это работает apt-cache search foo. Если Вы используете wajig вместо Кв. - добираются, способная метка, способный кэш и другие, то у Вас никогда не будет этой проблемы:

$ apt-get search foo
E: Invalid operation search

Если Вы хотите знать то, что wajig делает негласно, какие инструменты он использует для реализации конкретной команды, он имеет --simulate и --teaching режимы.

Два wajig управляют, чтобы я часто использовал, wajig listfiles foo и wajig whichpkg /usr/bin/foo.

223
19.11.2014, 18:54
15 ответов

склонный

Для современных версий apt существует определенный переключатель для этого:

apt list --upgradable

склонный - добираются

Для старого apt-get управляйте -u переключитесь показывает список пакетов, которые доступны для обновления:

# apt-get -u upgrade --assume-no

От apt-get страница справочника:

- u
- обновленное до шоу
 Шоу обновило пакеты; Распечатайте список всех пакетов, которые должны быть обновлены. Элемент конфигурации: APT:: Доберитесь:: обновленный до шоу.
- примите - нет Автоматический "нет" ко всем подсказкам. <==, Чтобы препятствовать тому, чтобы он начал устанавливать
245
27.01.2020, 19:28
  • 1
    я надеялся, что это могло быть сделано без корневого –  ThorSummoner 06.02.2015, 19:33
  • 2
    Тип "Y" и нажимает Enter, эта команда, при установке обновлений. Я определенно рекомендовал бы добавить "-s", иначе этот ответ вводит в заблуждение –  Murmel 17.06.2015, 10:26
  • 3
    Это - очень неправильный ответ, потому что (без дополнительных опций) команда ожидает входа и если пользователь вводит неправильный вход, пакет установлены, который изменяет систему, которая не является тем, что OP хочет (просто произошел в моей системе) –  Daniel Alder 01.11.2015, 15:11
  • 4
    И btw: -u опция по умолчанию apt-get –  Daniel Alder 01.11.2015, 15:17
  • 5
    @ThorSummoner 'сделают то, что Вы хотите, и работы без корневого –  nevelis 17.12.2015, 01:47

Смотрите на пакет "apticron":

apticron - Инструмент Simple к почте о незаконченных обновлениях пакета

Apticron является простым сценарием, который ежедневно посылает электронные письма о незаконченных обновлениях пакета, таких как обновления системы защиты, правильно обрабатывая пакеты в ожидании и dselect и способностью.

https://packages.debian.org/buster/apticron

11
27.01.2020, 19:28

Можно работать

aptitude -F%p --disable-columns search ~U

или недокументированное

/usr/lib/update-notifier/apt-check -p; echo

Другой метод с помощью apt-get моделирование:

apt-get -s dist-upgrade | awk '/^Inst/ { print $2 }'
19
27.01.2020, 19:28
  • 1
    Эта команда способности, работавшая отлично для меня и, не потребовала корневого –  JamesCW 05.05.2016, 21:22
  • 2
    Да, это создаст снимки каждого потомка набора данных mypool/home ---------121 склонный--------188152----получает работы dist-обновления-s, хорошие также, и имеет тот же вывод, когда Вы передаете его по каналу через тот awker –  ychaouche 09.02.2017, 11:28
  • 3
    ! это вышло из довольно мало ада зависимости. пытался dist-upgrade но не проигрывают, некоторые пакеты так должны были использовать aptitude. aptitude install $(apt-get -s dist-upgrade | awk '/^Inst/ { print $2 }') добился цели! –  Jayen 03.12.2017, 12:18

Другая опция, вдохновленная enzotib:

aptitude search '~U' | wc -l

Эта команда будет использовать способность для вывода новых пакетов и затем туалета, чтобы просто считать строки.

На заметке на полях я нашел, что решение enzotib без одинарных кавычек вокруг ~U не работало на меня. (Хрипящий, ZSH, способность 0.6.8.2)

Обновление:

С новой Кв. можно сделать теперь:

apt list --upgradable
34
27.01.2020, 19:28
  • 1
    Спасибо за это способная команда списка была точно, что я хотел. –  dvorak 22.06.2017, 19:19
  • 2
    Хороший с этим решением то, что Вам не нужен sudo/root. –  Gunni 10.10.2017, 18:17
apt-get --just-print upgrade

Не читается, что легко, ниже жемчуг один лайнер для парсинга способного-get's вывода:

apt-get --just-print upgrade 2>&1 | perl -ne 'if (/Inst\s([\w,\-,\d,\.,~,:,\+]+)\s\[([\w,\-,\d,\.,~,:,\+]+)\]\s\(([\w,\-,\d,\.,~,:,\+]+)\)? /i) {print "PROGRAM: $1 INSTALLED: $2 AVAILABLE: $3\n"}'

Это должно произвести что-то как:

PROGRAM: grub-pc INSTALLED: 1.99-21ubuntu3.1 AVAILABLE: 1.99-21ubuntu3.9

Надо надеяться, это поможет кому-то еще,

67
27.01.2020, 19:28
  • 1
    только для смеха: склонный - получают обновление-s | awk-F' [] [()] +' '/^Inst/{printf "Прогр: %s\tcur: %s\tavail: %s\n", 2$, 3$, 4$}' –  tink 17.05.2013, 06:19
  • 2
    Это могло также быть намного более симпатично, если использование column как это: apt-get --just-print upgrade 2>&1 | perl -ne 'if (/Inst\s([\w,\-,\d,\.,~,:,\+]+)\s\[([\w,\-,\d,\.,~,:,\+]+)\]\s\(([\w,\-,\d,\.,~,:,\+]+)\)? /i) {print "PROGRAM: $1 INSTALLED: $2 AVAILABLE: $3\n"}' | column -s " " -t –  AntonioK 14.07.2015, 14:35
  • 3
    @AntonioK! –  nick 10.11.2016, 07:47
apt-get update && apt-get -s upgrade

перечислит доступные обновления без фактической установки.

Сначала индексные файлы пакета обновлений команды, прежде чем моделируется (таким образом-s) обновление сделаны. "-s" сделает моделируемый показ обновления пакеты, которые были бы установлены, но ничего на самом деле не установят.

Наоборот "-u" вместо "-s" на самом деле установил бы после подтверждения.

10
27.01.2020, 19:28
  • 1
    Моделировать опция может быть инициирована с любым из -s, --simulate, --just-print, --dry-run, --recon, --no-act, переобманный и пробный прогон является моими любимыми. –  ThorSummoner 17.12.2015, 19:24

Мне нужна была полная информация о возможных обновлениях, поэтому я использовал модификацию ответа Jasonwryan:

apt-get -V -u upgrade

Она проста и имеет разумное форматирование по IMO.

9
27.01.2020, 19:28
files=$(echo $line/processed/*)
yafc ftp://blabla@192.168.178.54  <<**
put $files
close
quit
**

Команда find разделяет найденные файлы на новые (по одному файлу на строку). Поскольку вам фактически не нужна функциональность поиска, вы можете использовать files = $ (echo $ line/processed/*) .

Здесь документ расширен до

put file1
file2
file3
...

Когда вы пробовали цикл, вы не использовали кавычки, поэтому новые строки были интерпретированы как разделители полей, и поэтому каждый файл был разделен добавляемым космосом.

При использовании простого files = $ (echo $ line/processed/*) $ files теперь просто имеет места между файлами, поэтому положить $ files должны делать то, что вы хотите.

-121--186687-

Это действительно плохая идея , но вы можете передать пароль при стандартном вводе:

passwd --stdin test-user <<< "Password here?"
-121--146154-

Просто отфильтруйте вывод

apt-get update && apt-get -s -V -u upgrade

, чтобы в журнале была только предпочитаемая информация.

Скорее всего, вам понадобится красивая часть после строки

...

Следующие пакеты будут обновлены:

...

, которая имеет мало места в начале.

3
27.01.2020, 19:28
..

Вызовите еще одного на линию, вдохновленный этим ответом :

function a { read input;dpkg -l ${input} | grep " ${input} " | awk '{$1=$2=$3=$4="";print $0}' | sed 's/^ *//';unset input;};{ apt-get --just-print upgrade 2>&1 | perl -ne 'if (/Inst\s([\w,\-,\d,\.,~,:,\+]+)\s\[([\w,\-,\d,\.,~,:,\+]+)\]\s\(([\w,\-,\d,\.,~,:,\+]+)\)? /i) {print "$1 (\e[1;34m$2\e[0m -> \e[1;32m$3\e[0m)\n"}';} | while read -r line; do echo -en "$line $(echo $line | awk '{print $1}' | a )\n"; done;

Выход выглядит так (цветной):

locales (2.13-38+deb7u7 -> 2.13-38+deb7u8) Embedded GNU C Library: National Language (locale) data [support]
linux-headers-3.2.0-4-amd64 (3.2.65-1+deb7u1 -> 3.2.65-1+deb7u2) Header files for Linux 3.2.0-4-amd64
linux-headers-3.2.0-4-common (3.2.65-1+deb7u1 -> 3.2.65-1+deb7u2) Common header files for Linux 3.2.0-4
sudo (1.8.5p2-1+nmu1 -> 1.8.5p2-1+nmu2) Provide limited super user privileges to specific users

Если вы не хотите, чтобы короткое описание использовалось это:

{ apt-get --just-print upgrade 2>&1 | perl -ne 'if (/Inst\s([\w,\-,\d,\.,~,:,\+]+)\s\[([\w,\-,\d,\.,~,:,\+]+)\]\s\(([\w,\-,\d,\.,~,:,\+]+)\)? /i) {print "$1 (\e[1;34m$2\e[0m -> \e[1;32m$3\e[0m)\n"}';} | while read -r line; do echo -en "$line\n"; done;

Выход:

locales (2.13-38+deb7u7 -> 2.13-38+deb7u8)
linux-headers-3.2.0-4-amd64 (3.2.65-1+deb7u1 -> 3.2.65-1+deb7u2)
linux-headers-3.2.0-4-common (3.2.65-1+deb7u1 -> 3.2.65-1+deb7u2)
sudo (1.8.5p2-1+nmu1 -> 1.8.5p2-1+nmu2)
2
27.01.2020, 19:28

Написав предупреждение на ответ @ jasonwryan, я хочу предоставить свое собственное решение:

apt-get dist-upgrade --assume-no

К сожалению, это не работает с debian wheezy, и мне пришлось проверить некоторые контейнеры lxc, которые все еще не обновлены. Эта форма будет работать всегда:

apt-get dist-upgrade </dev/null

Наконец, я также хотел переформатировать вывод. Я решил изменить вызов еще раз (используя - пробный прогон , но игнорируя весь дополнительный вывод), потому что это кажется более безопасным:

apt-get --dry-run dist-upgrade | awk '
BEGIN{p=0}
/^The/{p=1;t=$0}
/no longer required/{p=0}
#optional: /been kept back/{p=0}
p && t{print t;t=""}
/^  / && p{print $0}
'

Возвращает:

The following packages have been kept back:
  iproute
The following packages will be upgraded:
  unzip
1
27.01.2020, 19:28

apt-check , вероятно, самый эффективный метод написания сценариев.

/usr/lib/update-notifier/apt-check 2>&1 | cut -d ';' -f 1

Очень небольшая модификация показывает только обновления безопасности.

/usr/lib/update-notifier/apt-check 2>&1 | cut -d ';' -f 2
1
27.01.2020, 19:28

В качестве варианта я использую следующее:

apt-get -V -s dist-upgrade \
    |grep -E "^   .*=>.*" \
    |awk 'BEGIN {
        ul=sprintf("%*s",40,""); gsub(/ /,"-",ul);
        printf "%-30s %-30s %-30s\n", "Package", "Installed", "Available";
        printf "%-30.30s %-30.30s %-30.30s\n", ul, ul, ul;
     }
     {
        printf "%-30s %-30s %-30s\n",
               $1,
               substr($2,2),
               substr($4,1,length($4)-1)
     }'

Вставьте его в сценарий с именем apt-updates , и вы можете затем вызвать apt-updates , чтобы получить список всех обновлений независимо от пользователя.

Вам по-прежнему нужно вызвать apt-get update с привилегированным доступом.

0
27.01.2020, 19:28

Самый простой:

apt list --upgradable
27
27.01.2020, 19:28
apt-get update > /dev/null && apt-get --just-print upgrade | grep "Inst "

является самым простым для писем cron; нет пользовательской итерации, а если нет обновлений, то нет и вывода.

5
27.01.2020, 19:28

Мне нравится использовать это:

apt-get -qq update && apt-get -qq -s upgrade

Вы получите вывод, подобный этому:

Inst linux-base [3.5] (4.5~deb8u1 Debian-Security:8/oldstable [all])
Conf linux-base (4.5~deb8u1 Debian-Security:8/oldstable [all])

, если есть доступные обновления, и нет, если их нет. Таким образом, вы можете просто соединить его с решением для мониторинга.

3
27.01.2020, 19:28

Теги

Похожие вопросы