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+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
alias
es -
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
sysreq
commandssrm
/shred
- Shell scripting basics
init
vssystemd
, 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!
This looks like an amazing class! I would absolutely take it, it looks awesome to me.
Thanks bud!