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!
I would do it completely differently. Do some intro about history and philosophy. Next:
- everything is a file -explain and actually show /proc & /dev with some fun examples (/Dev/urandom /proc/cpuinfo and so on). Not necessarily CLI
- explain the idea behind Unix way of having lots of small tools. Show examples of grep, cat, ps, head, tail…
- explain piping and streams, show ps | grep and so on
- combine it all and show some fun examples (a one liner to change display setup or something
- explain processes, input output streams, pid, kill
- combine and show how do a one liner to find and kill a process
I like to courses to have natural flow where you keep adding stuff and build more and more complex things. A lot of small tidbits are hard to follow.
I like this idea, but I think you should work a bit of history/philosophy into each lesson by explaining why things work the way they do. The students are unlikely to engage with a history of a system they’ve never used before, so starting with that will lose their attention before you’ve even gotten it. Giving them a bit at a time means that they will slowly build a mental model of how *nix works and is built.