How to run multiple commands in sudo under Linux or Unix

I am a new Linux user. How do I run two commands from a bash shell? I need to run apt-get update and apt-get -y upgrade without typing sudo command two times from a command line on Ubuntu Linux AWS cloud server. How can I two commands in sudo ‘command1 && command2’?

The sudo command used to execute a command as another user typically as a root user. This quick tutorial shows you how to use sudo command to run multiple commands via a Linux or Unix shell.
Fig.01: How to run two commands in sudo? How to run multiple commands in sudo?

ADVERTISEMENTS

sudo syntax to run multiple commands

The syntax is:
sudo sh -c 'command1 && command2'
sudo -- sh -c 'command1 && command2'
sudo -u userNameHere -- sh -c 'command1; command2'
sudo -- sh -c 'command1; command2'
sudo -- bash -c 'command1; command2'
sudo -i -- 'command1; command2; command3'
sudo -i -- sh -c 'command1 && command2 && command3'

Examples

Run date and who am i command:
$ sudo -- sh -c 'date; who am i'
Sample outputs:

[sudo] password for vivek: 
Tue May  2 19:52:08 IST 2017
vivek    pts/0        2017-05-02 18:44 (10.8.0.2)

You can run command as mysql user:
$ sudo -u mysql -- sh -c "/home/mysql/backup.sh; /home/mysql/mirror.py"
Update your server in a single go using sudo with the help of apt-get command:
$ sudo -- sh -c 'apt-get update && sudo apt-get -y upgrade'
Sample outputs:

Animated gif 01: sudo command in action

Animated gif 01: sudo command in action

Understanding sudo command options

  1. -- : A — signals the end of options and disables further option processing for sudo command.
  2. sh -c : Run sh shell with given commands
  3. 'apt-get update && sudo apt-get -y upgrade' First update repo and apply upgrades if update was successful.

A note about using sudo command in a shell script

Here is a sample shell script that shows how to use or run multiple commands with sudo:

#!/bin/bash
echo "Running commands as a root user..."
sudo -- -sh -c <<EOF
apt-get update
apt-get -y upgrade
apt-get -y install nginx 
apt-get -y remove nano
apt-get clean
echo "All done."
EOF

A note about using sudo with bash shell aliases

The syntax is as follows for shell aliases:

alias foo="sudo -- sh -c 'cmd1 && cmd2'"
alias bar='sudo -- sh -c "cmd1 && cmd2"'

For example add the following to ~/.bashrc or ~/.bash_aliases file:

# update debian/ubuntu box using apt
# command line when type update 
alias update='sudo -- sh -c "apt update && apt upgrade"'

Conclusion

You learned how to run multiple commands using sudo command under a Linux or Unix-like systems. For more info see sudo man page by typing the following command or visit this page here:
man sudo

🐧 Get the latest tutorials on SysAdmin, Linux/Unix, Open Source/DevOps topics:
CategoryList of Unix and Linux commands
File Managementcat
FirewallCentOS 8 OpenSUSE RHEL 8 Ubuntu 16.04 Ubuntu 18.04 Ubuntu 20.04
Network Utilitiesdig host ip nmap
OpenVPNCentOS 7 CentOS 8 Debian 10 Debian 8/9 Ubuntu 18.04 Ubuntu 20.04
Package Managerapk apt
Processes Managementbg chroot cron disown fg jobs killall kill pidof pstree pwdx time
Searchinggrep whereis which
User Informationgroups id lastcomm last lid/libuser-lid logname members users whoami who w
WireGuard VPNCentOS 8 Debian 10 Firewall Ubuntu 20.04

ADVERTISEMENTS
1 comment… add one
  • OldBlueBear May 5, 2017 @ 9:51

    A simpler solution is su root, then run your commands then ^D to get out. Contrary to what some folks say there is nothing intrinsically wrong with conducting commands as root, you just need to take great care, and think before you push key. If your very concerned, put your commands in a shell script and fire that off as root. The more you do stuff the more confident you become.
    best of luck, OBB

Leave a Reply

Your email address will not be published.

Use HTML <pre>...</pre>, <code>...</code> and <kbd>...</kbd> for code samples.