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!
You should probably explain what a distribution, a DE, a WM, and a DM are. I feel like this is something that Windows users lack in particular, as they have little control over these features.
I would consider that ifconfig is deprecated on many distros and would therefore teach about iproute2 (mostly the ip
and ss
commands) instead. Additionally I would consider editing files essential, even if it is with nano.
Maybe mention more modern and simpler help tools like tldr, as they could be even more useful to beginners.
To introduce the shell and utilities, I would try to find a somewhat realistic use case that combines multiple aspects, like analyzing some files or spellchecking instead of simply mentioning every feature one by one.
Now I’m learning something. I’ve defaulted to using ifconfig
for so many years I didn’t even realize that ip
and ss
were around. I’ll look into them, thanks for the pointers.
And yeah, good idea on file editing. Maybe I should move nano
up to the essential category for basic editing and keep vim
in the “extras” since it takes a little more training to use effectively, while providing a lot more functionality if you know how to take advantage of it : D
This looks like an amazing class! I would absolutely take it, it looks awesome to me.
That is an excellent idea on time management.
Yes - I’m planning to walk them through a real install to a VM and have them follow along so they have a local instance that they can play with on their (win or mac) system. It requires me to spend a little extra time for setting up VirtualBox, but I think it’s worth it since they can then play along and experiment as we discuss each topic. I know that’s how I learn best - you can tell me something multiple times but it’s only when I truly do it that it’ll stick in my memory forever.
Covering the intro, history, etc would be perfect topics to go over while the install runs.
EDIT : I should point out that I’m going to distribute thumb drives to the students that will contain VirtualBox (win+mac) installers, a Linux ISO that we’ll use (probably Ubuntu), as well as that thumb drive being a live Linux bootable drive in case they ever want to plug & boot without using a VM. This will hopefully cut down on wasted class time for “now everybody go download this 4GB ISO” - they’ll already have it available and all in the same drive/directory/etc for every student. From past teaching experience, there’s always at least one that doesn’t come prepared with downloads and such no matter how much I harp on it… that and the ever present “I saved it somewhere and now I can’t find it” 😆
It’s missing GNU 🐂 project and free 🕊️ software.
For the love of God make them all practice using tab completion in shells, and show them nice shells that do completion for command options. I spend a significant amount of time dictating commands that could be completed by the shell 😅
Also, some of the other bash/readline niceties - like Ctrl+r for reverse-search, or Ctrl+x Ctrl+e to open the currently typed in command in (saving will execute the command). Good for when you have one of those really long commands and you have to do some more extensive editing.