Hello fellow Linux Lemmings!

I’ve been tasked with putting together a 20 hour class for “Introduction to Linux” and I’d like to solicit your opinions for topics that should be covered.

The class is targeted for at least minimally technical people - maybe developers, or future developers, but regardless of background they’ve never seen or worked with Linux before.

I plan to do a VERY short overview of installing Linux (to a VM - so they have a “real” environment to learn with) and the GUI but the primary focus will be CLI. Imagine tools and tasks you come across while working on a “real” server (or VM).

A high level overview of the topics I currently have allocated is :

  • Super brief history of Linux
  • Benefits and use cases of Linux
  • General overview of the file system and the purposes of the pre-defined directories (/dev, /proc, /etc, /home, /bin, etc)
  • “Everything is a file”
  • File extensions don’t matter (windows users : )
  • Note on responsibility - you can delete “in use” files. It will do exactly what you tell it with sometimes minimal guardrails.
  • Everything from here down is CLI only!
  • What is a terminal/CLI and how do we use it?
  • How do we navigate the file system using the CLI
  • How to list, create, copy, move, delete, and read files/directories
  • EDIT: Basic file editing with nano
  • How to search for files (find… maybe locate)
  • Archives and compression (tar, gzip, bzip2)
  • Overview of permissions (read/write/execute, owner, group, chmod, chown)
  • Brief overview of different shells (bash, zsh, etc)
  • How to get help on the CLI (man, info, --help)
  • Tab completion, history
  • Shortcuts / control codes (ctrl+c, ctrl+d, ctrl+a, ctrl+e, and coverage of ctrl+z later)
  • grep
  • Checking processes (top, ps, kill)
  • Signals (sigterm, sigkill, etc - related to kill above)
  • Backgrounding and multitasking (ctrl+z, fg, bg, jobs, nohup, &)
  • Linking (ln)
  • STDIN, STDERR, STDOUT and redirection
  • Redirection (>, >>, <)
  • Command pipes ( | )
  • How to access a remote machine via SSH with UN/PW
  • How to access a remote machine via SSH with key auth (think cloud VMs like EC2)
  • Administrative commands and tasks (su, sudo, how it works, when to use it)
  • Add users and groups
  • How to change your passwd (maybe how to change your default shell too)
  • Restart, shutdown, halt
  • How to install/remove software (package managers, packages, pre-compiled binaries, maybe compilation with make if time allows)
  • Configuring your profile for customizing your environment
  • ENV variables and aliases
  • Network information (ifconfig) and tools (curl, wget, netcat, etc)

Everything from here down is “extra” if time allows (AKA - ensuring I don’t run out of material :)

  • Encryption (gpg - symmetric and asymmetric)
  • Backups (rsync, maybe dd)
  • screen/tmux
  • How to setup key based logins/auth
  • EDIT: More advanced CLI text editing with vim
  • sysreq commands
  • srm/shred
  • Shell scripting basics
  • init vs systemd, how to start/stop/status services.
  • Maybe how to create a simple service
  • Run levels
  • sed, awk basics
  • File system types, file system checking, formatting… I hesitate to get into partitioning but it’s always an option if I need it.
  • Alternatives to well known win/mac utilities and how to find them. EG: GIMP to replace Photoshop.

What do you think?

Did I miss anything that you deem super important?

Anything that I should definitely keep in the “only if I run out of material” category?

O, and if you have any good ideas for practical exercises I’d love to hear those too. I want to keep them <15min but things like “create a new directory, cd into it, touch a file, list the contents of / and write the output into the file you just created” are perfect.

Thanks!