# A Quick Introduction to Unix/Redirection

* Components
* Shells and subshells
* Directory Structure
* Changing Directories
* Listing Files and Directories
* Pathnames
* Files and Processes
* Wildcards
* Exercises 1
* Creating Directories
* Creating Files
* Special Directories
* Exercises 2
* Copying Files
* Moving Files
* Deleting Files
* Exercises 3
* Redirection
* Searching Text Files
* More grep examples
* Permissions on Files and Directories
* Editing Text
* Exercises 4
* My First Shell Script
* Job Control
* Links
* Environment Variables

## Redirection

When you issue a command that has some output, we say that by default it will write to the standard output which is the screen. If a command needs input we say it reads from the standard input which is the keyboard. The ls command which we have seen a lot of produces a list of files and directories as its output and it prints it on screen. We are going to use a new command - cat - to investigate how we can 'redirect' streams from the standard input or output.

### Displaying file contents

You can use the command cat to take input and write it to the standard output. Usually you use it like this
and it will put the contents of myfile.txt on screen and then return you to the prompt. It scrolls the contents very fast!

### Using cat to capture from the keyboard

When you use cat in the way described, the input is from a file and it writes to the standard output (you guessed it: the screen). But we can direct cat to take its input from elsewhere than a file and we can send its output to somewhere other than the screen.
You can use cat to capture what is typed at the keyboard and send it to some output. We can try it by typing cat without specifying a file name, like this
You can now type at the keyboard and when you have entered as many characters as you wish press return for a new line. When you are finished typing altogether, type Control-d (written as ^D for short) to end the process. If you run cat like this without naming a file to read, it reads the standard input (the keyboard) and on receiving the 'end of file' (^D), copies it to the standard output (the screen).

### Redirecting the Output

As I have said, you can redirect both the input and the output from commands.
You use the > symbol to redirect the output to a file. For example, to create a file called colours containing a list of colour names, type
Then type in the names of some colours. Press [Return] after each one and end with ^D.
(this means press [Ctrl] and [d] to stop).
The cat command reads the standard input (the keyboard) and the > redirects the output (which would normally go to the screen) into a file called colours
To read the contents of the file, type
(This is not a particularly good way to create text files - normally I would recommend an editor like vi or emacs or pico but we're learning about readirection, not text editing.)

#### Appending to a file

If you use >> to redirect, then standard output will be redirected to the end of the file and appended to the existing contents. So to add more items to the file colours, type
Then type in the names of some more colours
(Control D to stop)
This redirects the keyboard input to the end of the file colours.
To read the contents of the file, type
Now we are going to create create a file colours2
(Control D to stop)
You now have two files. One lists four colours, the other two.

#### Joining two files together

We will now use the cat command to join (concatenate) colours and colours2 into a new file called allcolours. This is in fact the original purpose of the command. You do it like this:
What this is doing is reading the contents of colours and colours2 in turn and combining the results in the file allcolours. To read the contents of the new file, type

### Redirecting the Input

We use the < symbol to redirect the input for a command.
For example, the command sort sorts a list alphabetically or numerically. Type
Then type in the names of some animals. Press [Return] after each one.
(control d to stop)
The output will be

#### Redirecting input to a file

Using < you can redirect the input to come from a file rather than the keyboard. For example, to sort the list of colours, type
and the sorted list will be output to the screen.
To redirect the output of the sorted list to a file, type,
Use cat to display the contents of the file sortedcolours.

### Piping

As well as redirecting the output of a command to a file, we can pass it along to another process using piping. For example
In this case, the output of the sort command is passed on to the wc command and processed before being displayed.