Вопрос или проблема
Чтобы не печатать все команды apt-get при обновлении компьютера, я создал простую команду-алиас. Но мне действительно хочется просто ввести мой алиас и пусть он делает свое дело, а не ждать запроса да/нет на ввод “y”. Есть ли простой способ обойти этот запрос или, возможно, добавить “yes” где-нибудь в алиасе?
Конечно, хотя я никогда не пытался сделать это как алиас, но это должно сработать:
sudo apt-get update && sudo apt-get -y upgrade
apt-get -o Dpkg::Options::='--force-confold' --force-yes -fuy dist-upgrade
Чтобы уточнить Dpkg::Options::='--force-confold'
из руководства:
--force-confold
: не изменять текущий файл конфигурации, новая версия устанавливается с суффиксом.dpkg-dist
. С этой опцией даже конфигурационные файлы, которые вы не изменяли, остаются нетронутыми. Вам нужно объединить ее с--force-confdef
, чтобы dpkg переписывал конфигурационные файлы, которые вы не изменяли.
apt-get update && apt-get upgrade -y && apt-get autoremove && apt-get autoclean
Это обновляет пакеты, обновляет их, удаляет неиспользуемые пакеты, а затем удаляет старые версии пакетов.
Вы можете скопировать это и вставить в:
nano -w yourscript.sh
затем
chmod 777 yourscript.sh
затем
./yourscript.sh
Пока вы используете su
перед всеми этими шагами, что я всегда делаю.
Ответ @wojox верен, но вы можете развить алиас для большей функциональности. Я использую это уже довольно долгое время без проблем. Это выполнит обновления (подтвердив с помощью -y
), а затем проверит, требуется ли перезагрузка. Если требуется перезагрузка, вы можете сделать это, нажав [ENTER]
, или отменить и перезагрузиться позже, нажав [CTRL+C]
. Если перезагрузка не требуется, алиас завершает свою работу и сообщает об этом.
Мой алиас sur
для sudo upgrade reboot
, но вы можете назвать его как угодно. Добавьте следующее в ваш файл .bashrc
:
alias sur="sudo apt update && sudo apt upgrade -y && if sudo test -f /var/run/reboot-required; then read -p "Для завершения установки обновлений требуется перезагрузка. Нажмите [ENTER], чтобы перезагрузиться сейчас или [CTRL+C], чтобы отменить и перезагрузиться позже." && sudo reboot; else echo "Перезагрузка не требуется. Завершение..."; fi"
Вы можете продолжать связывать больше команд, если хотите делать больше с тем же алиасом. Вот полный алиас из моего .bashrc
, который также удалит неиспользуемые пакеты:
alias sur="sudo apt update && sudo apt dist-upgrade -y && sudo apt autoremove -y && if sudo test -f /var/run/reboot-required; then read -p "Для завершения установки обновлений требуется перезагрузка. Нажмите [ENTER], чтобы перезагрузиться сейчас или [CTRL+C], чтобы отменить и перезагрузиться позже." && sudo reboot; else echo "Перезагрузка не требуется. Завершение..."; fi"
Я наткнулся на эту тему, проверяя, есть ли опция пропуска запроса на перезапись файлов конфигурации, который был предоставлен в ответе Вадима выше! Мой новый алиас таков:
alias sur="sudo apt update && sudo apt -o Dpkg::Options::="--force-confdef" dist-upgrade -y && sudo apt autoremove -y && if sudo test -f /var/run/reboot-required; then read -p "Для завершения установки обновлений требуется перезагрузка. Нажмите [ENTER], чтобы перезагрузиться сейчас или [CTRL+C], чтобы отменить и перезагрузиться позже." && sudo reboot; else echo "Перезагрузка не требуется. Завершение..."; fi"
Затем я просто отправляю этот новый файл .bashrc
на каждый из управляемых серверов с помощью:
while read HOST; do scp .bashrc username@$HOST:/home/username; done < managedhosts.txt
Вы также можете сделать это тихо, а затем получить уведомление по завершении. Недостаток заключается в том, что вы увидите только сообщения об ошибках и не увидите, что обновляется.
sudo apt-get update -qq && sudo apt-get dist-upgrade -qq && echo "Все обновлено!" && notify-send "Все обновлено!"
Определение функции оказалось самым простым, универсальным методом, который я нашел.
У меня лично никогда не получалось правильно использовать update && -y upgrade
. У некоторых дистрибутивов возникает проблема с использованием операторов &&
и аргумента -y
вместе в одной команде (или алиасе).
function update ()
{
sudo apt update
sudo apt -y upgrade
}
.
Ответ или решение
Для автоматизации процесса обновления программного обеспечения на вашей системе Linux, основанной на Debian, можно использовать утилиту apt-get
с определенными параметрами, что позволит вам избежать подтверждений и выполнения лишних действий. В этой статье мы рассмотрим способ оптимизации этого процесса, используя команды и функциональные возможности, представленные в apt-get
, чтобы обойти запрос подтверждения при выполнении команд обновления.
Теория
Команда apt-get upgrade
используется для обновления установленных пакетов до новых версий, присутствующих в репозиториях. Однако, стандартное поведение этой команды предполагает запрос подтверждения от пользователя перед началом обновления, что может стать неудобством, если вы хотите автоматизировать процесс. Чтобы обойти этот запрос, можно использовать флаг -y
, который автоматически отвечает утвердительно на все запросы, которые могут появиться во время выполнения команды apt-get upgrade
.
Кроме того, при обновлении пакетов могут возникнуть ситуации конфликта из-за изменений конфигурационных файлов. Для управления поведением системы при таких конфликтах вы можете использовать различные параметры, такие как --force-confold
, чтобы сохранить существующие конфигурационные файлы и минимизировать вмешательство пользователя.
Примеры
Наиболее простым способом применения вышеупомянутых теоретических знаний будет использование состава команд, перечисленных ниже:
sudo apt-get update && sudo apt-get -y upgrade
Эта команда выполняет обновление индекса пакетов перед обновлением самих пакетов, автоматически подтверждая свое действие. Команда также может быть расширена для включения дополнительных действий, таких как удаление ненужных пакетов и очистка кэша:
sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get autoremove -y && sudo apt-get autoclean -y
В этом примере, после обновления, удаляются ненужные пакеты и производится очистка кэша, чтобы освободить место на диске и поддерживать систему в чистоте.
Применение
Чтобы упростить использование этих команд, можно создать alias в файле .bashrc
, что позволит вам запускать целый набор команд одним коротким именем. Например, добавьте следующую строчку:
alias update_system="sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get autoremove -y && sudo apt-get autoclean -y"
Не забудьте обновить текущую оболочку после внесения изменений в .bashrc
, выполнив команду:
source ~/.bashrc
Теперь вы можете выполнить обновление всей системы одной командой:
update_system
Если вы хотите учесть необходимость перезагрузки после обновления системы, можете добавить дополнительный функционал для проверки условий перезагрузки:
alias update_system="sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y && if [ -f /var/run/reboot-required ]; then echo 'Перезагрузка необходима'; else echo 'Перезагрузка не требуется'; fi"
Эта команда выполнит обновление системы и проверит файл /var/run/reboot-required
, который создается, если система требует перезагрузки для завершения процесса установки обновлений.
Для более профессионального подхода, вы можете создать скрипт и распределить его по всем управляемым серверам:
- Создайте скрипт:
nano update_script.sh
- Вставьте следующий код в файл:
#!/bin/bash
sudo apt-get update -qq && sudo apt-get dist-upgrade -y && sudo apt-get autoremove -y && echo "Обновление завершено."
- Сделайте скрипт исполняемым:
chmod +x update_script.sh
- Запустите скрипт:
./update_script.sh
- Распространите на другие серверы:
while read HOST; do scp update_script.sh user@$HOST:/path/to/directory; done < servers_list.txt
Используя эти методы, вы можете упростить процесс управления обновлениями на ваших серверах, делая его более автоматизированным и менее трудозатратным. Эти приемы помогут повысить эффективность и сократить количество времени, затрачиваемое на рутинные операции по поддержке системы в актуальном состоянии.