Backing up and Managing Software

Backup with rsync

Using our /backups directory

To complete this assignment, you must have successfully completed Assignment 5: Logical Volumes.

In Assignment 5: Logical Volumes, we created an additional volume at /backups. In a real production scenario, we'd use separate drives and remote machines to store backups in order to full prepare for and recover from data loss. But for us, this /backups partition will work just fine.

Backup with rsync

In the Managing Users and Groups forum, we created a new user for our system. This means that we have at least two user accounts to backup: ours and the new uers.

Now we'll use the rsync command to backup these users' home directories to the /backups volume/partition. See man rsync for documentation. The basic syntax is:

rsync option source-directory destination-directory

Syntax matters here. Specifically, there are two ways to backup the home directories using rsync depending on a small detail in our commands. Consider the next two examples:

In this first example, the rsync command will back up the home directory and all subdirectories to the /backups directory. Thus, rsync behaves differently whether I include or leave out the trailing slash after the home source-directory.

Thus, if I run rsync this way:

rsync -ahv --delete /home /backups/

The results will look like this:

ls /backups
home
ls /backups/home
linus sean

If I include the trailing slash after the /home/ directory, like so:

rsync -ahv --delete /home/ /backups/

Then rsync will sync the contents of the /home/ directory, and the results will include not /home but the specific directories contained in /home:

ls /backups
linus sean

Delete Option

The --delete option is important. Without it, rsync will add new files to the destination directory when it backs up the source directory. With it, rsync truly syncs. Thus, if a file that was previously backed up to the destination directory and later deleted in the source directory (e.g., because it was no longer needed), then it will be deleted from the destination directory when the --delete option is used. This is how services like Dropbox work.

See other options and functionality for rsync here: https://www.linux.com/tutorials/how-backup-files-linux-rsync-command-line/. One of the most important options is the ability to backup up to remote machines over a network, and this can be done with the the rsync command.

Managing Software

Many modern Linux distros offer some kind of package management for installing, managing, and removing software. On RedHat based systems, package management is based on rpm (the RedHat Package Manager). On Debian based systems, package management is based on dpkg.

There are some advanced things you can do with these base package management systems (rpm or dpkg), but most of the time it will be easier to use their front ends. For RedHat systems, the current front end is called dnf, and for Debian systems, it's apt or apt-get. Since the Fedora distribution is part of the RedHat universe, we'll use the dnf command to manage software. As always, read the man dnf manual for more information. See also the online documentation on dnf.

Let's look at a few of the basic dnf commands.

dnf info and search commands

To see a history of how dnf has been used on the system:

dnf history

We get info on the history of a specific package on our system. Since we haven't installed anything yet, there's nothing to look at yet, but the basic syntax looks like this.

dnf history package_name

To search for a package, we can use the following command to search for the bash package:

dnf search bash

If the output is more than one page, we can pipe it through less.

To get technical information on a specific package, which we might want to do before we install it:

dnf info bash

We can use dnf to search by tag in order to get information about a package. To get a list of possible tags to search by, we can use the following command:

dnf reqoquery --querytags

Then to search by tag, we uset the following format that will show us tag-related information for the bash package:

dnf repoquery --queryformat "%{arch}" bash
dnf repoquery --queryformat "%{name}" bash
dnf repoquery --queryformat "%{release}" bash
dnf repoquery --queryformat "%{reponame}" bash

Software managed by dnf is organized into groups, which contain multiple software packages. We can see a list of groups with this command:

dnf group list

You should see a category called Installed Gruops and listed under that is Headless Management. You might recognize that from when we installed Fedora.

To see what packages would be installed with a group, such as the System Tools group, we can do:

dnf group info "System Tools"

If we want to install the default packages with a group, then:

sudo dnf group install "System Tools"

dnf install process and commands

It's pretty simple to install a software package. The hard part will involve configuring a package after it's installed, if it's a complicated piece of software. For now, let's install tmux, which is a terminal multiplexer that we can use to open and manage multiple terminals in a single window.

dnf search tmux
dnf info tmux
sudo dnf install tmux
dnf history tmux

To use tmux, I like to use the ctrl-a keybinding to control it. By default it's set to use ctrl-b. Let's configure the new keybinding like so. Here we redirect the configuration to the configureation file in our home directory. Since I'm using a single redirect >, this file gets created. Remember to use a double redirect >> if appending to the file.

echo "set-option -g prefix C-a" > $HOME/.tmux.conf

And then start tmux like so:

tmux

When done, just type exit.

Updating the system

It's easy to update the entire system:

sudo dnf update
sudo dnf clean all

The dnf clean all command removes the downloaded files, thereby freeing up storage space, used to update the system. It does not reverse the update.

dnf basics

Here are the basic dnf commands. See man dnf for details:

  • dnf search [name]
  • dnf install [name]
  • dnf remove [name]
  • dnf repolist
  • dnf list installed
  • dnf list available
  • dnf provides /usr/bin/bash
  • dnf info [name]
  • dnf update [name]
  • dnf check-update
  • dnf update OR dnf upgrade
  • dnf autoremove
  • dnf clean all
  • dnf help clean
  • dnf help
  • dnf history
  • dnf group list 'Python Science'
  • dnf group info 'Python Science'
  • dnf group install 'Python Science'
  • dnf group install --with -optional 'Python Science'
  • dnf group upgrade 'Python Science'
  • dnf group remove 'Python Science'