Topics for a Linux intro course
Topics for a Linux intro course
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... maybelocate) - 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 ofctrl+zlater) 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, STDOUTand 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 
makeif 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, maybedd) screen/tmux- How to setup key based logins/auth
 - EDIT: More advanced CLI text editing with 
vim sysreqcommandssrm/shred- Shell scripting basics
 initvssystemd, how to start/stop/status services.- Maybe how to create a simple service
 - Run levels
 sed,awkbasics- 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!