Introducing the Shell

Overview

Teaching: 20 min
Exercises: 10 min
Questions
  • What is a command shell and why would I use one?

  • How can I move around on my computer?

  • How can I see what files and directories I have?

  • How can I specify the location of a file or directory on my computer?

Objectives
  • Describe key reasons for learning shell.

  • Navigate your file system using the command line.

  • Access and read help files for bash programs and use help files to identify useful command options.

  • Demonstrate the use of tab completion, and explain its advantages.

What is a shell and why should I care?

A shell is a computer program that presents a command line interface which allows you to control your computer using commands entered with a keyboard instead of controlling graphical user interfaces (GUIs) with a mouse/keyboard combination.

There are many reasons to learn about the shell.

In this lesson you will learn how to use the command line interface to move around in your file system.

How to access the shell

On a Mac or Linux machine, you can access a shell through a program called Terminal, which is already available on your computer. On the University’s Windows supported desktop, the recommended program is MobaXterm, which is already installed. An alternative program is PuTTY.

We will spend most of our time learning about the basics of the shell by manipulating some experimental data. Some of the data we’re going to be working with is quite large, and we’re also going to be using several bioinformatics packages in later lessons to work with this data. To avoid having to spend time downloading the data and downloading and installing all of the software, we’re going to be working with data on the University’s compute cluster, Eddie.

Eddie’s network address is eddie3.ecdf.ed.ac.uk. When logging-in you need to use your University username and password.

Instructions for logging-in to a remote server are provided at here. Note: please use your University username and not dcuser when following these instructions. This covers logging-in from Linux, MacOS and Windows with PuTTY. Please ask for help with MobaXterm.

After logging in, you will see a screen showing something like this:

         _______    _     _ _       
        (_______)  | |   | (_)      
         _____   _ | | _ | |_  ____ 
        |  ___) / || |/ || | |/ _  )
        | |____( (_| ( (_| | ( (/ / 
        |_______)____|\____|_|\____)
                            

             WELCOME TO Eddie3

             www.ecdf.ed.ac.uk
_____________________________________________________________________

New service: GitLab

Details can be found at:
https://www.wiki.ed.ac.uk/display/ResearchServices/Version+Control+Services

The service is at:
https://git.ecdf.ed.ac.uk/
_____________________________________________________________________

A guide to getting started is available here:
https://www.wiki.ed.ac.uk/display/ResearchServices/Quickstart

Service documentation is here:
https://www.wiki.ed.ac.uk/display/ResearchServices/Eddie

Please report any issues to IS.Helpline@ed.ac.uk
_____________________________________________________________________

This provides some information and links to documentation on using Eddie. We’re not going to use most of this information for our workshop, so you can clear your screen using the clear command.

$ clear

This will scroll your screen down to give you a fresh screen and will make it easier to read. You haven’t lost any of the information on your screen. If you scroll up, you can see everything that has been output to your screen up until this point.

The part of the operating system responsible for managing files and directories is called the file system. It organizes our data into files, which hold information, and directories (also called “folders”), which hold files or other directories.

Several commands are frequently used to create, inspect, rename, and delete files and directories.

At the bottom left of the screen you should see something like:

[<username>@login03(eddie) ~]$

where <username> will be replaced with your own username. This is a prompt, which shows us that the shell is waiting for input. (Shells on other systems may use a different character as a prompt and may contain more or less information before the prompt.) In the examples in these lessons, we show just the dollar sign to indicate the prompt. When typing commands, either from these lessons or from other sources, do not type the prompt, only the commands that follow it.

Let’s find out where we are by running a command called pwd (which stands for “print working directory”). At any moment, our current working directory is our current default directory, i.e., the directory that the computer assumes we want to run commands in unless we explicitly specify something else. Here, the computer’s response is /home/<username>, where you will see your own username instead of <username>. This is your home directory on Eddie:

$ pwd
/home/<username>

Get files for the lesson

Before we continue, we need to setup a few things, like getting the files needed for these lessons. Simply run the following command (cut and paste may help):

$ source /exports/eddie/scratch/genomics-setup.sh

Now, let’s look at how our file system is organized.

At the top is our home directory, /home/<username>, which holds all our
subdirectories and files.

Inside that directory there is the following:

shell_data

Note: there may be additional files and directories if you have used Eddie before.

We’ll be working within the shell_data subdirectory, and creating new subdirectories, throughout this workshop.

The command to change locations in our file system is cd followed by a directory name to change our working directory. cd stands for “change directory”.

Let’s say we want to navigate to the shell_data directory we saw above. We can use the following command to get there:

$ cd shell_data

We can see files and subdirectories are in this directory by running ls, which stands for “listing”:

$ ls
sra_metadata  untrimmed_fastq

ls prints the names of the files and directories in the current directory in alphabetical order, arranged neatly into columns. We can make its output more comprehensible by using the flag -F, which tells ls to add a trailing / to the names of directories:

$ ls -F
sra_metadata/  untrimmed_fastq/

Anything with a “/” after it is a directory. Things with a “*” after them are programs. If there are no decorations, it’s a file.

ls has lots of other options. To find out what they are, we can type:

$ man ls

Some manual files are very long. You can scroll through the file using your keyboard’s down arrow or use the Space key to go forward one page and the b key to go backwards one page. When you are done reading, hit q to quit.

Challenge

Use the -l option for the ls command to display more information for each item in the directory. What is one piece of additional information this long format gives you that you don’t see with the bare ls command?

Solution

$ ls -l
total 8
drwxr-x--- 2 <username> eddie_users 4096 Jul 30  2015 sra_metadata
drwxr-xr-x 2 <username> eddie_users 4096 Nov 15  2017 untrimmed_fastq

The additional information given includes the name of the owner of the file, when the file was last modified, and whether the current user has permission to read and write to the file.

No one can possibly learn all of these arguments, that’s why the manual page is for. You can (and should) refer to the manual page or other help files as needed.

Let’s go into the untrimmed_fastq directory and see what is in there.

$ cd untrimmed_fastq
$ ls -F
SRR097977.fastq  SRR098026.fastq

This directory contains two files with .fastq extensions. FASTQ is a format for storing information about sequencing reads and their quality. We will be learning more about FASTQ files in a later lesson.

Shortcut: Tab Completion

Typing out file or directory names can waste a lot of time and it’s easy to make typing mistakes. Instead we can use tab complete as a shortcut. When you start typing out the name of a directory or file, then hit the Tab key, the shell will try to fill in the rest of the directory or file name.

Return to your home directory:

$ cd

then enter:

$ cd she<tab>

The shell will fill in the rest of the directory name for shell_data.

Now change directories to untrimmed_fastq in shell_data

$ cd shell_data
$ cd untrimmed_fastq

Using tab complete can be very helpful. However, it will only autocomplete a file or directory name if you’ve typed enough characters to provide a unique identifier for the file or directory you are trying to access.

If we navigate back to our untrimmed_fastq directory and try to access one of our sample files:

$ cd
$ cd shell_data
$ cd untrimmed_fastq
$ ls SR<tab>

The shell auto-completes your command to SRR09, because all file names in the directory begin with this prefix. When you hit Tab again, the shell will list the possible choices.

$ ls SRR09<tab><tab>
SRR097977.fastq  SRR098026.fastq

Tab completion can also fill in the names of programs, which can be useful if you remember the begining of a program name.

$ pw<tab><tab>
pw.x              pw4gww.x          pwconv            pwi2xsf.x         pwunconv
pw2bgw.x          pw_export.x       pwd               pwmake            
pw2gw.x           pwck              pwdx              pwritxnt          
pw2wannier90.x    pwcond.x          pwhistory_helper  pwscore      

Displays the name of every program that starts with pw.

Summary

We now know how to move around our file system using the command line. This gives us an advantage over interacting with the file system through a GUI as it allows us to work on a remote server, carry out the same set of operations on a large number of files quickly, and opens up many opportunities for using bioinformatics software that is only available in command line versions.

In the next few episodes, we’ll be expanding on these skills and seeing how using the command line shell enables us to make our workflow more efficient and reproducible.

Key Points

  • The shell gives you the ability to work more efficiently by using keyboard commands rather than a GUI.

  • Useful commands for navigating your file system include: ls, pwd, and cd.

  • Most commands take options (flags) which begin with a -.

  • Tab completion can reduce errors from mistyping and make work more efficient in the shell.