Jak zainstalować aktualizacje za pomocą wiersza poleceń?

692

Kiedy loguję się do mojego serwera internetowego przez SSH, widzę informacje:

88 packages can be updated.
80 updates are security updates

Próbowałem apt-get updatewtedy, apt-get upgradeale przy każdym logowaniu nadal widzę komunikat o aktualizacjach. Jak je zainstalować?

Marlin
źródło
1
Czy próbowałeś tego najpierw: sudo apt-get clean powinno wyczyścić pamięć podręczną.
user2635584,

Odpowiedzi:

868

Użyj tego:

sudo apt update        # Fetches the list of available updates
sudo apt upgrade       # Installs some updates; does not remove packages
sudo apt full-upgrade  # Installs updates; may also remove some packages, if needed
sudo apt autoremove    # Removes any old packages that are no longer needed

Dokumentację dotyczącą każdej aptopcji można znaleźć na stronach apt dla apt . Są one również dostępne po uruchomieniu man aptw twoim terminalu.

Używanie obu upgradei full-upgraderazem zwykle nie jest potrzebne, ale w niektórych przypadkach może pomóc: zobacz dokumentację Debiana na temat aktualizacji z Debian 9 .

SirCharlo
źródło
29
Czy powinienem zawsze zaczynać od nowa sudo rebootpo tym?
hellboy
1
Musiałem dodać -y, aby to działało. Ubuntu 17.10
T04435
124

Wykonaj wszystkie polecenia, wpisując sudoraz:

sudo -- sh -c 'apt-get update; apt-get upgrade -y; apt-get dist-upgrade -y; apt-get autoremove -y; apt-get autoclean -y'

lub

sudo -s -- <<EOF
apt-get update
apt-get upgrade -y
apt-get dist-upgrade -y
apt-get autoremove -y
apt-get autoclean -y
EOF

lub jeszcze krócej w pętli for (Thanks @dessert)

sudo bash -c 'for i in update {,dist-}upgrade auto{remove,clean}; do apt-get $i -y; done'
Benny
źródło
3
Możesz łączyć dist-upgradei autoremovewg apt-get dist-upgrade --auto-remove.
jarno
3
Nie ma potrzeby uruchamiania zarówno upgradei dist-upgrade.
jarno
3
@jarno dist-upgrademoże usuwać pakiety. Używanie upgradepierwszego może tego uniknąć, na przykład wtedy, gdy nowe wersje pakietów spełniają zależności łatwiej niż stare. Nie wiem, jak często to pomaga podczas aktualizacji pakietów w stabilnej wersji Ubuntu, ale jest zalecane w innych kontekstach . Osobiście rzadko używam dist-upgradew Ubuntu, a kiedy to robię, nigdy nie przechodzę -y. Ale jeśli ktoś ma uciec dist-upgradei zaliczyć -y, myślę, że rozsądnie jest wykonać tę upgradeakcję jako pierwszą.
Eliah Kagan
1
@jarno, podczas gdy możesz łączyć w łańcuch --autoremoverazem z wybranym poleceniem aktualizacji, nie jest wskazane, ponieważ może to doprowadzić do stanu nieczystości, gdy jeden z pakietów ulegnie awarii. Lepszym rozwiązaniem jest użycie autoremovesamego w osobnym wierszu po zakończeniu procesu aktualizacji, jeśli chcesz wyczyścić również stare pliki konfiguracyjne, możesz to połączyć --purge.
Videonauth
@Videonauth oh, to zależy od tego, jak aptjest realizowane. Myślę, że powinien zostać wdrożony, aby nie pozostawiał systemu w stanie nieczystym.
jarno
91

To jest normalne zachowanie.

Wiadomość, którą widzisz podczas logowania, została dodana do statusu serwera „Wiadomość dnia”, która jest aktualizowana tylko każdego dnia kalendarzowego (lub przy starcie / uruchomieniu serwera). Spójrz na zawartość, używając

cat /etc/motd

Po uruchomieniu nadal widzę te same aktualizacje

sudo apt-get update && sudo apt-get upgrade

należy się spodziewać. Jeśli następnie ponownie uruchomić to polecenie będzie tylko zapyta o wszelkich dalszych zmianach czy nawet dalej (nowsze) aktualizacje zostały zwolnione.

david6
źródło
Zauważam, że wszelkie zmiany plików w całym systemie nie są widoczne aż do następnego dnia kalendarzowego. Czy istnieje sposób, aby „odświeżenie” od razu zaczęło widzieć zmiany?
aljuaid86
Czy masz na myśli aktualizacje treści Wiadomości dnia , czy nie otrzymujesz tego, czego chcesz po uruchomieniu sudo apt-get update && sudo apt-get upgrade?
david6
3
To nie jest już prawdą w dniu 16.04. Po „apt-get dist-upgrade” i ponownym uruchomieniu widzę „0 pakietów można zaktualizować”.
Bogdan Calmac
1
„.. lub na serwerze restarcie ..” Powyższe stwierdzenie nie pokrywa to.
david6
3
cat: / etc / motd: Brak takiego pliku lub katalogu
xApple
11

Po zalogowaniu się na serwerze uruchom poniższe polecenie.

sudo apt-get upgrade

To powinno wystarczyć. Może po prostu musisz zrestartować serwer.

Mitch
źródło
3
Dziękuję za odpowiedź, ale spróbowałem aktualizacji sudo apt-get. Ponowne uruchomienie serwera nie wchodzi w rachubę, ponieważ mam na nim witryny.
Marlin,
3
jeśli zainstalowano aktualizację, która bezpośrednio wpływa na jądro lub jest to aktualizacja sterownika lub jest to krytyczna aktualizacja zabezpieczeń, należy ponownie uruchomić serwer.
Evandro Silva
Może powinieneś rozważyć błąd 503 przez minutę. Czy wiesz, co to za aktualizacja?
NorTicUs
1
Jak podać 503, jeśli serwer jest offline?
mcont
8

W moim przypadku miałem niepoprawny lub niedostępny URL w /etc/apt/sources.list. Po usunięciu tego adresu URL udało mi się pomyślnie zaktualizować wszystkie pakiety.

Polecenia:

sudo vi /etc/apt/sources.list
sudo apt-get update && sudo apt-get upgrade
burtsevyg
źródło
7

Moje (bardzo późno, lubię odznaki nekromantów :-)) rozwiązanie:

  1. Zainstaluj wajig (raz):

    sudo apt-get install wajig 
    
  2. Gdy chcesz w pełni zaktualizować / zaktualizować swój system

    wajig dailyupgrade
    

    (w razie potrzeby poprosi o hasło i wykona wszystkie aktualizacje, uaktualnienia, dist-upgrade i autorove kroki).

Rmano
źródło
1

ten skrypt jest przydatny do automatyzacji aktualizacji, w tym usuwania niepotrzebnych pakietów i ponownego uruchamiania komputera tylko wtedy, gdy system operacyjny tego chce

remote_user=usernamehere
remote_host=example.com

ssh -A -n -o StrictHostKeyChecking=no ${remote_user}@${remote_host} && \
sudo apt-get update && \
sudo apt-get -f install -y && \
sudo apt-get -o Dpkg::Options::="--force-confnew" -yy dist-upgrade -y && \
sudo apt-get autoremove -y && \
[ -f /var/run/reboot-required ] && \
echo "sudo reboot now" && \
sudo reboot now 

aby uruchomić na lokalnej skrzynce, po prostu wyłącz pierwszą linię, wykonując ssh

oto alias, który zapisuję w ~ / .bashrc

alias doit='echo; kill $( ps -eafww|grep update-manager|grep -v grep | grep update-manager | tr -s " " |cut -d" "  -f2 ) > /dev/null 2>&1;  echo "sudo apt-get update && sudo apt-get dist-upgrade &&  [ -f /var/run/reboot-required ] && echo && echo reboot required && echo";echo;sudo apt-get update && sudo apt-get dist-upgrade &&  [ -f /var/run/reboot-required ] && echo && echo reboot required && echo '

potem na terminalu właśnie wystawiam doit

Scott Stensland
źródło
0

Jeśli uruchomisz apt-get updateponownie po apt-get upgradezakończeniu, wiadomości przy logowaniu ssh powinny zniknąć.

Francisco Luz
źródło