Axian Software Consulting and Training

Linux Hands-On Programming


Custom Classes:

Axian specializes in customizing our classes to meet your specific needs.  Please call or e-mail us with your requirements.

Axian, Inc.

4800 S.W. Griffth Dr., Suite 202, Beaverton, OR 97005

Phone: (503) 644-6106

Fax: (503) 643-8425

Call 644-6106, ext. 107


e-mail Axian training

for course registration or more information

Course Files and Links:





Linux Hands-On Programming is designed to quickly bring experienced programmers up to speed in a Linux environment. Upon completion of the course, students will be comfortable working with Linux/Unix commands and utilities and doing program development.  Note:  This course combines the content of Axian's two courses: Linux Use and Administration and Linux Programming and Introduction to X.

Students will learn:

  • Programming in C in a Linux environment.
  • What Linux is: The relationship between Linux, Unix, and Microsoft Windows.
  • Installation, basic system administration, and customization.
  • Shell programming.
  • Linux Tools including file operations and utilities, process control, documentation and printing.
  • Linux Concepts/Techniques including standards and compliance, working with files, processes and signals, inter-process communication, semaphores, messages, shared memory and sockets.
  • Linux Programming in C including makefiles, version control, compiling, linking and debugging.
  • GUI Development using the X Window System including X concepts, basic X programming in C, window attributes, the graphics context, drawing graphics and text, color, events, keyboard and mouse.
  • Developing a Netscape plugin.


  • Beginning Linux Programming by Neil Matthew & Richard Stones
  • Linux in a Nutshell by Jessica Perry Hekman
  • Xlib Programming Manual by Adrian Nye
  • Red Hat Linux 5.2 Installation Guide by Red Hat Software
  • Linux/etc by Terry Griffin; articles reprinted from Computer Bits magazine, Nov. 1996 - Jan. 1999


This course will be taught in a classroom with one computer per student. The emphasis will be on hands-on programming, with roughly one half of the total time being spent on labs and exercises. The Red Hat 5.2 Linux distribution will be used with the KDE desktop environment.

The class is divided into 41 sessions, each consisting of both lecture and lab. The lectures are intended to be interactive and will include review of the lab assignments. The sessions range from 0.5 hours to 5 hours, and are presented over a period of 11 days.


Students should be proficient in the C programming language.


Course Outline

  • SESSION 1: Starting up: Installation of a Linux distribution (Red Hat 5.2)
    • Preparing the PC/Workstation for Linux
    • Multiple operating systems and disk partitioning
    • Hardware issues and compatibility (graphics accelerators, monitors, network cards, printers...)
    • Methods of Installation (local CDROM, nfs, ftp, smb)
    • Package selection (software choices)

  • SESSION 2: Starting up: Customizing the Linux Desktop
    • Window managers and Desktop environment
    • Installing KDE (K Desktop Environment)
    • User accounts and system administration. Customizing KDE.

  • SESSION 3: Starting up: Text Editing
    • Using Kedit ( the default graphical text editor for this course)
    • Basic vi and emacs 

  • SESSION 4: Starting up: Introduction to the Bash Shell
    • Shell choices (sh, bash, csh, tcsh, ksh, etc.)
    • logging in, logging out, shell initialization
    • Interactive shells
    • Pipes and redirection
    • aliases
    • environmental variables.
    • Creating and executing scripts.
    • Shell syntax. variables, conditionals, functions.
    • Debugging

  • SESSION 5: Linux Fundamentals: History of Linux
    • Unix
    • Other Unix-type OS's for the PC (FreeBSD, OpenBSD, NetBSD)
    • Linux

  • SESSION 6: Linux Fundamentals: Linux today
    • Linux and Open Source Software (OSS) as a development environment. How revisions are made, bugs fixed, drivers written, technical support obtained.
    • Relationship with Gnu and the Free Software Foundation
    • Linux distributions
    • Linux resources.
    • Licenses and legalities.

  • SESSION 7: Linux Fundamentals: Linux architecture
    • Kernel; what is in the kernel, what is not.
    • modules
    • device drivers

  • SESSION 8: Linux Fundamentals: File system
    • layout. Use of /root, /bin, /sbin, /usr, /usr/local, /home, /etc, /tmp, /proc, /dev, etc.
    • symbolic links
    • mounting other file systems, such as MS
    • nfs, samba 

  • SESSION 9: Linux Fundamentals: window managers, desktops, GUIs
    • Relation to OS and the kernel
    • X (servers and toolkits)
    • Window Managers, Desktop Managers and combined window/desktop managers.
    • Virtual terminals
    • Keys (backspace, delete, stty, xmodmap)

  • SESSION 10: Linux Fundamentals: Differences
    • Differences between Linux and Windows 9x and NT
    • Differences between Linux and other commercial Unix operating systems

  • SESSION 11: Linux Tools: File operations
    • Some basics (again); environmental variables,
    • stdin/stdout/stderr, redirection, piping, special characters
    • Files and directory creation and manipulation
    • copying (cp)
    • moving, linking (mv, ln)
    • listing(ls, df, du)
    • finding (find, locate)
    • file types (file)
    • touch
    • security, permissions
    • users, passwords, groups
    • changing ownership, groups, permissions (chown, chgrp, chmod)

  • SESSION 12: Linux Tools: More file utilities
    • comparing files and patching (diff, diff3, cmp, patch)
    • Archiving and compression ( tar, cpio, gzip, zip/unzip)

  • SESSION 13: Linux Tools: Process control
    • starting processes, delayed, background, foreground (use of &, at, cron, bg, fg, nice)
    • killing/interrupting (kill, Ctrl-Z, Ctrl-C)
    • monitoring processes (ps, top, xosview) 

  • SESSION 14: Linux Tools: Documentation
    • man (and xman)
    • info
    • /usr/doc
    • foo -h, foo -help
    • HOWTO's 

  • SESSION 15: Linux Tools: Printing
    • lpr, lpq, lprm
    • local and network printers

  • SESSION 16: Linux Programming: Package Overview
    • ghostview
    • perl
    • java
    • tcl/tk
    • expect
    • tex/latex
    • apache

  • SESSION 17: Linux Programming: Make
    • Makefiles for simple applications
    • more complicated rules
    • making libraries
    • building large projects

  • SESSION 18: Linux Programming: Version control
    • RCS
    • CVS 

  • SESSION 19: Linux Programming: Compilers
    • gcc, g++, ecgs
    • commercially available compilers
    • other languages

  • SESSION 20: Linux Programming: Linking and loading libraries.
    • transition from libc5 to glibc
    • static libraries (*.a, like Windows .LIB)
    • library tools (ar, ranlib)
    • shared libraries (*.so, like Windows DLL)
    • manipulating shared libraries( ldd, ldconfig)
    • stripping executables (strip)
    • ld (loader) 

  • SESSION 21: Linux Programming: Debugging and profiling
    • gdb ( and xxgdb)
    • ddd
    • Electric Fence
    • gprof

  • SESSION 22: Concepts/Techniques: Standards and Compliance
    • Posix compliance
    • Linux standards
    • Living in a heterogeneous world
    • Cross platform issues and portability.

  • SESSION 23: Concepts/Techniques: Working with files
    • Files and Devices
    • System Calls, device drivers
    • Low Level File Access
    • I/O Library
    • File and directory maintenance

  • SESSION 24: Concepts/Techniques: Processes and Signals
    • Process Structure
    • Scheduling
    • Starting New Processes
    • Waiting; zombies, redirection; threads
    • Signals

  • SESSION 25: Concepts/Techniques: Inter-process communication
    • Process Pipes
    • parent and child processes
    • named pipes (FIFO's)

  • SESSION 26: Concepts/Techniques: Semaphores, messages, shared memory
    • Semaphores
    • Shared Memory
    • Message Queues 

  • SESSION 27: Concepts/Techniques: Sockets
    • Socket attributes
    • Using Sockets
    • Socket Addresses
    • Communications
    • Byte Ordering

  • SESSION 28: Concepts/Techniques: Overview of Unix Scripting Languages
    • MS-DOS/MS-Windows Analogy
    • Awk
    • Tcl
    • Perl
    • Python

  • SESSION 29: Concepts/Techniques: Where Java fits in
    • Advantages, disadvantages
    • Java Script
    • Java tools for Linux

  • SESSION 30: X: Overview of GUI Development using the X Window System
    • Versions of X
    • X Window System Concepts
    • X Window System Software Architecture
    • Overview of Xlib

  • SESSION 31: X: Concepts
    • How Xlib works
    • What are windows?
    • Introduction to X Graphics
    • Window Characteristics
    • Introduction to Events

  • SESSION 32: X: Basic Window Program
    • Running the Program
    • The Main of basicwin

  • SESSION 33: X: Window Attributes
    • Setting Window Attributes
    • Window Attribute Structures
    • Program-settable Attributes

  • SESSION 34: X: The Graphics Context
    • Creating and Setting a Graphics Context
    • Switching between Graphics Contexts
    • Controlling the Effect of a Graphics Primitive
    • Line Characteristics
    • Patterning

  • SESSION 35: X: Drawing Graphics and Text
    • Fonts and Text
    • Regions
    • Cursors
    • Bitmap Handling 

  • SESSION 36: X: Color
    • Color Terms and Concepts
    • Allocating Shared Colors
    • Storing Private Colors
    • Standard Colormaps

  • SESSION 37: X: Events
    • Event Processing
    • Event Types
    • The Event Queue
    • Handling Events
    • Selecting Events
    • Sending Events

  • SESSION 38: X: The Keyboard and Pointer
    • The Keyboard
    • The Pointer
    • Border Crossing and Keyboard Focus Events
    • Grabbing the Keyboard and Pointer
    • Keyboard Preferences
    • Pointer Preferences 

  • SESSION 39: X: Netscape Plugins(1)
    • Relationship of browsers (Netscape in particular) to the X window environment and window managers
    • Plugins vs Java applets
    • Obtaining the LiveConnect/Plugin SDK

  • SESSION 40: X: Netscape Plugins(2)
    • Compiling and running simple examples, templates
    • Constructing a plugin

  • SESSION 41: DHTML and Netscape
    • Differences between DHTML in a Microsoft environment vs. DHTML under Netscape running in a Linux environment