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
- 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, 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
- CLI text editors as an “extra” if we have time (VIM, nano, elvis… no emacs : )
- 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!
+1 for the FOSS philosophy and why that’s important when it comes to privacy (ie closed source crypto implementation back doors etc) + full system control, lack of spyware etc. KVM for the VM demo - keep it Linux, right? Introduce the concept of how almost everything in Linux is a file and can be read from / written to. This is important when understanding pipes. Show pipelines - logical && ie cat x | grep y | grep z. Logical || ie grep -E ‘x|y|z’ Useful commands like top and ps. Explain selinux and why it’s a good idea.