skip to content

Department of Computer Science and Technology

Principal lecturer: 
Part IB CST 50%, Part IB CST 75%
Michaelmas term
Course code: 
This course is a pre-requisite for Security.


This video-lecture course gives students who have already basic Unix/Linux experience some additional practical software-engineering knowledge: how to use the shell and related tools as an efficient working environment, how to automate routine tasks, and how version-control and automated-build tools can help to avoid confusion and accidents, especially when working in teams. These are essential skills, both in industrial software development and student projects.


  • Unix concepts. Brief review of Unix history and design philosophy, documentation, terminals, inter-process communication mechanisms and conventions, shell, command-line arguments, environment variables, file descriptors.
  • Shell concepts. Program invocation, redirection, pipes, file-system navigation, argument expansion, quoting, job control, signals, process groups, variables, locale, history and alias functions, security considerations.
  • Scripting. Plain-text formats, executables, #!, shell control structures and functions. Startup scripts.
  • Text, file and networking tools. sed, grep, chmod, find, ssh, rsync, tar, zip, etc.
  • Version control. diff, patch, RCS, Subversion, git.
  • Software development tools. C compiler, linker, debugger, make.
  • Perl. Introduction to a powerful scripting and text-manipulation language. [2 lectures]


At the end of the course students should

  • be confident in performing routine user tasks on a POSIX system, understand command-line user-interface conventions and know how to find more detailed documentation;
  • appreciate how simple tools can be combined to perform a large variety of tasks;
  • be familiar with the most common tools, file formats and configuration practices;
  • be able to understand, write, and maintain shell scripts and makefiles;
  • appreciate how using a version-control system and fully automated build processes help to maintain reproducibility and audit trails during software development;
  • know enough about basic development tools to be able to install, modify and debug C source code;
  • have understood the main concepts of, and gained initial experience in, writing Perl scripts (excluding the facilities for object-oriented programming).

Recommended reading

Robbins, A. (2005). Unix in a nutshell. O’Reilly (4th ed.).
Schwartz, R.L., Foy, B.D. and Phoenix, T. (2011). Learning Perl. O’Reilly (6th ed.).