Course pages 2016–17
Unix Tools
Principal lecturer: Dr Markus Kuhn
Taken by: Part IB
No. of lectures: 8
Suggested hours of supervisions: 0-1 (non-examinable course with exercises)
Prerequisite courses: Operating Systems.
This course is a prerequisite for Security I.
Aims
This 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.
Lectures
- 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.
- Revision control systems. 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]
Objectives
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 revision control systems 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. & Phoenix, T. (2011). Learning Perl. O’Reilly (6th ed.).