UNIX Tutorial Two

2.1 Copying Files

cp (copy)

cp file1 file2 is the command which makes a copy of file1 in the current working directory and calls it file2

What we are going to do now, is to take a file stored in an open access area of the file system, and use the cp command to copy it to your unixstuff directory.

First, cd to your unixstuff directory.

% cd ~/unixstuff

Then at the UNIX prompt, type,

% cp /var/tmp/tutorial/science.txt .

(Note: Don't forget the dot (.) at the end. Remember, in UNIX, the dot means the current directory.)

The above command means copy the file science.txt to the current directory, keeping the name the same.

(Note: The directory /var/tmp/tutorial/ is an area to which everyone in the department has read and copy access. If you are from outside the University, you can grab a copy of the file here. Use 'File/Save As..' from the menu bar to save it into your unixstuff directory.)


Exercise 2a

Create a backup of your science.txt file by copying it to a file called science.bak

2.2 Moving files

mv (move)

mv file1 file2 moves (or renames) file1 to file2

To move a file from one place to another, use the mv command. This has the effect of moving rather than copying the file, so you end up with only one file rather than two.

It can also be used to rename a file, by moving the file to the same directory, but giving it a different name.

We are now going to move the file science.bak to your backup directory.

First, change directories to your unixstuff directory (can you remember how?). Then, inside the unixstuff directory, type

% mv science.bak backups/.

Type ls and ls backups to see if it has worked.

2.3 More on copying and moving files

Suppose you already have a file named friends.txt, but that fact is not foremost in your mind at the moment. You've recently downloaded a list from your favorite social media site, Mugbook. The downloaded file is named my_mugs.txt. Without thinking too hard about, suppose you you type the command:

% mv my_mugs.txt friends.txt

That command re-names the file my_mugs.txt and the new name is now friends.txt. But then you realize, wait, I had a file named friends.txt and now the contents are gone, replaced by the contents of my_mugs.txt. Yes, that's the way the cp and mv commands work. Think "racecar with no seat belts".

You are sad. You miss your old friends. You remember their names, but the address and phone numbers that were in friends.txt are gone. Could anything have been done to help prevent such a mistake ?

The "-i" option

As we have already seen (with the ls command), options are given on the command line. The Unix convention is that options start with a minus sign to distinguish them from file names. Both the mv and cp commands support an "interactive mode" via the -i option. With the -i option, both the mv and cp will check to see if the destination file already exists. If so, it will ask the user if they really want to proceed. Let us reconsider the previous example:

% mv -i my_mugs.txt friends.txt
mv: overwrite `friends.txt'? no

The prompt mv: overwrite `friends.txt'? alerts me to the fact that I already have a file friends.txt. I answer 'no and the data loss is avoided. A single letter 'n' is also acceptable.

Unix aliases

You may think the -i option is great. But, it's inconvenient to always type cp -i or mv -i every time you want to copy or rename a file and what if you forget the '-i' ? You might still accidently lose information. Unix aliases provide a mechanism so that a command can be 'aliased' to another command and an alias may include options. Your account on gottlieb at WFU is set up so that the mv is aliased to mv -i. That means when you type:

% mv my_mugs.txt friends.txt

the shell replaces mv in the line above with mv -i.

Aliases have your back.

When an alias is set, it is only effective for the duration of the current instance of the shell. We examine this point further in section 2.4.

2.4 Unix Shells (sh, bash, csh, tcsh ...)

A Unix shell is a software component that displays a prompt, interprets each command you type, runs the command you specify, and returns to the prompt. There are several different shells that are in common use. Your account on gottlieb is configured to use the shell named tcsh. The tcsh shell is an an enhanced version of csh ; the first version of tcsh was released in September 1983.

Shell Commands Automatically Executed When the Shell Starts

Your home directory is supplied with a file named .tcshrc. When tcsh starts, it reads and performs the commands contained in your .tcshrc file. One important group of commands included in the .tcshrc file are the commands needed to establish convenient aliases. For example, the alias for mv described in section 2.3 is established by the command:

alias mv "mv -i"

This alias is included in your .tcshrc file so that it will be in effect for every instance of the shell. Similar alias for the cp (copy) command and the rm (remove) command are also included. These aliases are intended to require confirmation whenever you type a command that removes or overwrites existing information.

2.5 Removing files and directories

rm (remove), rmdir (remove directory)

To delete (remove) a file, use the rm command. As an example, we are going to create a copy of the science.txt file then delete it.

Inside your unixstuff directory, type

% cp science.txt tempfile.txt
% ls (to check if it has created the file)
% rm tempfile.txt
% ls (to check if it has deleted the file)

You can use the rmdir command to remove a directory (make sure it is empty first). Try to remove the backups directory. You will not be able to since UNIX will not let you remove a non-empty directory.


Exercise 2b

Create a directory called tempstuff using mkdir , then remove it using the rmdir command.

2.6 Displaying the contents of a file on the screen

clear (clear screen)

Before you start the next section, you may like to clear the terminal window of the previous commands so the output of the following commands can be clearly understood.

At the prompt, type

% clear

This will clear all text and leave you with the % prompt at the top of the window.


cat (concatenate)

The command cat can be used to display the contents of a file on the screen. Type:

% cat science.txt

As you can see, the file is longer than than the size of the window, so it scrolls past making it unreadable.



The command more writes the contents of a file onto the screen a page at a time. Type

% more science.txt

Press the [space-bar] if you want to see another page, type [q] if you want to quit reading. As you can see, more is used in preference to cat for long files.



The command less writes the contents of a file onto the screen a page at a time. The command less was written as an improvement of more. Most notably, less allows you to navigate both up and down. Type

% less science.txt

Press the [space-bar] if you want to see another page, type [b] if you want go back one page, type [q] if you want to quit reading. As you can see, less is also used in preference to both cat and more for long files.



The head command writes the first ten lines of a file to the screen.

First clear the screen then type

% head science.txt

Then type

% head -5 science.txt

What difference did the -5 do to the head command?



The tail command writes the last ten lines of a file to the screen.

Clear the screen and type

% tail science.txt

How can you view the last 15 lines of the file?


2.7 Searching the contents of a file

Simple searching using less

Using less, you can search though a text file for a keyword (pattern). For example, to search through science.txt for the word 'science', type

% less science.txt

then, still in less (i.e. don't press [q] to quit), type a forward slash [/] followed by the word to search


As you can see, less finds and highlights the keyword. Type [n] to search for the next occurrence of the word.


grep (don't ask why it is called grep)

grep is one of many standard UNIX utilities. It searches files for specified words or patterns. First clear the screen, then type

% grep science science.txt

As you can see, grep has printed out each line containg the word science.

Or has it????

Try typing

% grep Science science.txt

The grep command is case sensitive; it distinguishes between Science and science.

To ignore upper/lower case distinctions, use the -i option, i.e. type

% grep -i science science.txt

To search for a phrase or pattern, you must enclose it in single quotes (the apostrophe symbol). For example to search for spinning top, type

% grep -i 'spinning top' science.txt

Some of the other options of grep are:

-v display those lines that do NOT match
-n precede each maching line with the line number
-c print only the total count of matched lines

Try some of them and see the different results. Don't forget, you can use more than one option at a time, for example, the number of lines without the words science or Science is

% grep -ivc science science.txt


wc (word count)

A handy little utility is the wc command, short for word count. To do a word count on science.txt, type

% wc -w science.txt

To find out how many lines the file has, type

% wc -l science.txt

2.8 Copying a File to Another Computer

sftp (secure file transfer program)

The sftp command is an interactive tool that enables you to copy files securely between two computers.

Prior to 1995 two programs, telnet and ftp were the standard software tools for running an interactive command-line session on a remote machine (telnet), and for copying files between two machines (ftp). The problem with these programs is that they communicate passwords (and all other information) in clear text over the Internet. The rise of security threats in the 1990's forced computer users to develop (and use) more secure methods. The ssh command is a secure replacement for telnet. The sftp command is a secure replacement for ftp. The ssh and sftp commands encrypt all information before it is transmitted on the Internet.

Let us suppose we are running a command-line session on a machine named gottlieb and we have a file named my_program.cpp in our current working directory. We want to make a copy of my_program.cpp on a machine named telesto. If your user name is the same on both gottlieb and telesto, you can use the following command:

% sftp telesto
Password: enter-your-password
Connected to telesto.

The prompt sftp> indicates that you are now entering commands to sftp, not the Unix shell.

Recall that gottlieb is the local machine, and telesto is the remote machine. To copy the file my_program.cpp to telesto, use the put command. E.g.,

sftp> put my_program.cpp

You will then see confirmation from sftp that the file is transferred and a return to the prompt.

Uploading my_program.cpp to /home/your-user-name/my_program.cp
my_program.cpp                           100%   139KB   138.6KB/s   00:01

When you are finished copying files, use the quit command to exit sftp.

sftp> quit

The prompt % indicates that you are communicating with the Unix shell once again.

The get command can be used to copy a file from the remote machine to the local machine.

User Names on Local and Remote Machines May be Different

There is no guarantee that the user names on the local and remote machines are the same in all situations. Suppose we are logged into gottlieb and want to connect to telesto as user joe. We use the command:

% sftp joe@telesto


cp file1 file2 copy file1 and call it file2
cp -i file1 file2 copy file1 to file2, but check if file2 already exists
mv file1 file2 move or rename file1 to file2
mv -i file1 file2 move or rename file1 to file2, but check if file2 already exists  
rm file remove a file
rmdir directory remove a directory
cat file display a file
more file display a file a page at a time; navigate forward only
less file display a file a page at a time; navigate both up and down
head file display the first few lines of a file
tail file display the last few lines of a file
grep 'keyword' file search a file for keywords
wc file count number of lines/words/characters in file
sftp copies files between different computers

Continue with the Tutorial


M.Stonebank@surrey.ac.uk, © 9th October 2000