Skip to content
System Programming
Introduction

Introduction to Unix and Linux

Overview

In this first week, we establish the foundation for system programming. Students will explore what an operating system is, how kernels are structured, and how Linux fits into the broader family of operating systems. We also introduce GNU/Linux distributions, the concept of free and open-source software, and the shell as the main interface to the system.

By the end of this week, students will have a working Linux environment, a basic understanding of the command line, and an introduction to version control with Git and GitHub.



Key Concepts

  • What is an operating system? Roles and responsibilities
  • Kernel vs. user space; system calls as the bridge
  • Kernel architectures: monolithic, microkernel, hybrid
  • Unix lineage and Linux history (vs. Windows, macOS, BSD)
  • GNU/Linux ecosystem: distributions and package managers
  • The shell: prompt, commands, redirection, and pipelines

Practice / Lab

  • Set up a Virtual Machine: Install Ubuntu (or another Linux distribution) on VirtualBox/VMware.
  • Command Line Basics:
    • Run and understand ls, cd, pwd, man, echo, cat
    • Try redirection (>, >>) and pipelines (|)
    • Install software with apt or your distro’s package manager
  • Development Environment Setup: Install and test gcc, g++, make, and git. Configure an editor (e.g., VS Code or Vim).
  • Git & GitHub Essentials: Initialize a local repo, make a commit, and push to GitHub.
  • Exploring Distributions: Find your kernel version (uname -a) and distro info (lsb_release -a). Compare Ubuntu, Fedora, Arch, Debian.

Homework


References & Resources

Required

Optional / Enrichment

Tools


Quiz (Self-check)

  1. What is the difference between the kernel and user space?
  2. Name two major differences between Linux and Windows.
  3. Which shell command is used to find your current directory?
  4. What is the purpose of a package manager in Linux?