58

I know that there are three command to update and then upgrade the whole system, these are:

Is there a super-upgrade command that combines all these commands to one?

4
  • 2
    No, you can do at most sudo apt-get update && sudo apt-get dist-upgrade
    – heemayl
    Feb 14, 2016 at 8:46
  • 1
    It's still one command-line! ;-)
    – Fabby
    Aug 30, 2018 at 18:33
  • For those who shall stumble upon this question someday, here's a related one to run update and upgrade as one-liners askubuntu.com/a/1086022/295286 Oct 22, 2018 at 8:28
  • I have a folder that contains all of the custom commands I run /NSCS/bin
    – Nate
    Sep 23, 2020 at 18:22

9 Answers 9

54

There are 3 decent choices:

  1. You could create a script something like the following:

    #!/bin/bash
    set -e
    sudo apt-get update
    sudo apt-get upgrade
    sudo apt-get dist-upgrade
    

    Call it something like update.sh and place it in /usr/local/bin and then make the script executable by running:

    sudo chmod +x /usr/local/bin/update.sh
    
  2. Another method would be to create a bash alias (in ~/.bashrc) or wherever you normally store your aliases:

    alias update='sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade'
    
  3. A final method would be to simply string the 3 commands together on the commandline:

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

A few choices...

Reference:

5
  • 11
    When you are using dist-upgrade there is no point in doing upgrade beforehand..
    – heemayl
    Feb 14, 2016 at 9:03
  • 5
    @heemayl: In theory yes. In practice there are corner cases where a direct dist-upgrade may fail but upgrade followed by dist-upgrade will not. This is largely due package dependency definition bugs or mixing packages from different releases/distributions/PPAs. If one only uses packages from Canonical's official repositories for exactly one release (the default), such errors should be extremely rare and fixed quickly. Sep 21, 2016 at 17:50
  • 4
    There's also the impress-friends variant of #3: for x in update {,dist-}upgrade; do sudo apt $x; done Jun 7, 2018 at 23:30
  • 4
    In step 1, what does "set -e" do? Dec 19, 2018 at 3:43
  • 3
    @karjedavpalaa - "-e Exit immediately if a command exits with a non-zero status."
    – Josh
    Aug 24, 2020 at 16:30
41

We can have a one-liner command (no need to scripts, just copy-paste)

sudo apt update -y && sudo apt full-upgrade -y && sudo apt autoremove -y && sudo apt clean -y && sudo apt autoclean -y
  • update - updates the list of packages but do not install
  • upgrade - install new versions of packages if new versions are available
  • full-upgrade - performs the function of upgrade but will remove currently installed packages if this is needed to upgrade the system as a whole (fixing bad dependencies then)
  • autoremove, autoclean and clean - clean old packages which are not needed any more
  • option -y does not request for permission on every step
  • && states that it just runs the next command if the previous was successfully executed

Alias

You can also create an alias. Add the following line to your ~/.bashrc or ~/.bash_aliases (if you have it)

alias upev='sudo apt update -y && sudo apt full-upgrade -y && sudo apt autoremove -y && sudo apt clean -y && sudo apt autoclean -y'

Run source ~/.bashrc or source ~/.bash_aliases accordingly to fetch your new alias, and now simply run

upev 

note: I chose upev for UPgrade EVerything, but you may chose anything you want.

4
  • You can skip the apt autoremove if you add --auto-remove to apt upgrade Jul 18, 2021 at 6:12
  • @CameronTacklind: For me, it is better to have autoremove in a different step to double-check if something would get removed which I use.
    – emk2203
    Sep 10, 2021 at 13:56
  • @emk2203 It will ask you to confirm the removals as well, unless you add -y. Sep 10, 2021 at 19:44
  • Good to know, should have just tried it once before commenting. Thanks.
    – emk2203
    Sep 11, 2021 at 8:05
9

If you are annoyed by too much typing, you can define yourself an "alias". This can be done e.g. by adding a line to the end of your $HOME/.profile like this:

alias sau='sudo aptitude update && sudo aptitude upgrade'

(of course you can replace "sau" by something else -- for me that's an acronym to Sudo Apt-get Update). After saving the file, open a new shell (or "source" the .profile again running . $HOME/.profile. Now you can always simply type "sau" to do the complete job. Works great for me with multiple machines.

4
  • Hm. I guess I was just asking someone to tell me to alias it :P
    – polandeer
    Jul 10, 2012 at 0:09
  • Yeah, but that's the only way to do it with a "single command". And your question did not exclude this ;)
    – Izzy
    Jul 10, 2012 at 8:13
  • Tricky. Anyways, the only reason I asked was because I wanted to understand apt better, not because I'm too lazy to write sudo aptitude update && sudo aptitude upgrade The reason I asked was because you can do it with pacman (sudo pacman -Syu --noconfirm).
    – polandeer
    Jul 12, 2012 at 12:14
  • If you have to do that often and on multiple machines, you're glad you can at least have an alias. However: apt-get update has a parameter -u, according to the man page that shows available updates. Did not try whether it then asks to apply them (have no Ubuntu/Debian near me to check right now).
    – Izzy
    Jul 12, 2012 at 13:31
6
sudo apt install unattended-upgrades

This is the best line yet. All the other solutions, you have to type the one line over and over again every day. This is truly the one-command solution. See official apt documentation from Ubuntu!

By editing the .conf files of this package in /etc you can set the frequency of update, install, clean, autoremove...

Or simply and email including A notification that an update is available with the list of package names.

A nice little log file is generated with each change, and I imagine a little script could be written as a GUI extension to pop up in the desktop notifications too (off-topic).

4

Unfortunately, the two commands have to be executed separately.

0
3

Is there a super-upgrade command that combines all these commands to one?

Well.. bad news is that no, there isn't. Good news though is that here I've put together one.

And to go on with the idea of simplification I've turned its creation into a "single" command line. So here it is:

echo "sudo apt update && sudo apt -y upgrade && sudo apt -y dist-upgrade && sudo apt -y autoremove && sudo apt autoclean" > update && sudo mv update /usr/local/bin/update && sudo chmod +x /usr/local/bin/update

Now, whenever the need for updating arises you just type update in the terminal, input your password and voilà.


This might look like one of those incomprehensible things you only copy-paste from. But it doesn't really have to be ! See it's actually quite simple, so..

What this is :

  1. Every update command (and then further commands) were concatenated using && (including apt autoremove to remove no longer used dependencies).
  2. -y was added to every apt command that would otherwise prompt for a positive answer to perform its actions.
  3. echo was placed in front of the command and the line was surrounded with "" so its characters wouldn't escape.
  4. > was used to redirect/write echo's output (our line) to an "update" file.
  5. The file is moved to /usr/local/bin/ so it is executable from anywhere. Writing on this path requires superuser access which is why it's not possible to do it in the step before.
  6. The file was turned into an executable using chmod.
2

Just copy-paste the following alias command and execute it:

alias fup='sudo apt-get -y update;sudo apt-get -y full-upgrade;sudo apt-get -y autoremove; sudo apt-get -y autoclean'

Now, running fup will automatically do all the jobs defined in the alias.

If you need to use this frequently, do the following.

  1. Create a file named .bash_aliases in your $HOME directory. You can do that form the terminal with the following command:

    touch ./.bash_aliases
    
  2. In the .bash_aliases file paste the alias command mentioned above.

  3. Now save the file and exit.

  4. Edit your .bashrc file to export your .bash_aliases file. So run:

    gedit .bashrc
    

    and paste the following code at the end of file:

    if [ -f /home/abhyam/.bash_aliases ];then
    source /home/abhyam/.bash_aliases
    fi
    
  5. Save the file and exit.

  6. Run:

    source .bashrc
    
  7. Now you can run the command fup to fully update and upgrade your system anytime.

The benefit of creating the .bash_aliases file is that you can also create custom aliases in that file for other actions and that it will automatically get sourced each time you open a terminal.

0

Found this elsewhere:

    sudo -- sh -c "apt update && apt upgrade -y"

Can also alias this to use 'upgrade' in your ~/.bash_aliases with something like:

    alias upgrade="sudo -- sh -c 'apt update && apt upgrade -y'"

and do a 'source ~/.bash_aliases' to make it work

0

I found this thread looking for the same treasure. In case anyone is still interested, I've been working on a git project which runs through the same commands.

#!/usr/bin/bash
    RED='\033[0;31m'
    GREEN='\033[0;32m'
    PURPLE='\033[0;35m'
    NC='\033[0m' # No Color

#Region --- Updates
    echo -e "${PURPLE}RUNNING: sudo apt update --fix-missing${NC}"

for i in {1..100}
do  
    sudo apt clean
    sudo apt update --fix-missing
    status=$?
if test $status -eq 0
then 
    echo -e "${GREEN}SUCCESS: sudo apt update --fix-missing${NC}\n"
    break
else 
    echo -e "${RED}FAILED: sudo apt update --fix-missing${NC}\n"
    sleep 1m
fi
done

#Region --- Upgrades
for i in {1..100}
do  
echo -e "${PURPLE}RUNNING: sudo apt upgrade -y${NC}"
    sudo apt full-upgrade -y
    status=$?
if test $status -eq 0
then
    echo -e "${GREEN}SUCCESS: sudo apt upgrade -y${NC}\n"
    break
else 
    echo -e "${RED}FAILED: sudo apt upgrade -y${NC}\n"
    sleep 1m
fi
done

#Region
for i in {1..100}
do  
echo -e "${PURPLE}RUNNING: sudo apt autoremove -y${NC}"
    sudo apt autoremove -y
    status=$?
if test $status -eq 0
then 
    echo -e "${GREEN}SUCCESS: sudo apt autoremove -y${NC}\n"
    break
else
    echo -e "${RED}FAILED: sudo apt autoremove -y${NC}\n"
    sleep 1m
fi
done

#Region --- Exiting BasherUpdate
    echo -e "${PURPLE}Exiting BasherUpdate...${NC}\n"
    exit 0

Note that I used a loop on the apt update command because I was getting mirror sync in progress errors and wanted it to keep trying. Hope this helps and let me know if you have suggestions!

You must log in to answer this question.