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… 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, ctrl+a, ctrl+e, 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
  • EDIT: More advanced CLI text editing with vim
  • 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!

  • eeleech@lemm.ee
    link
    fedilink
    arrow-up
    9
    ·
    2 years ago

    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.

    • clif@lemmy.worldOP
      link
      fedilink
      arrow-up
      5
      ·
      2 years ago

      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

      • eeleech@lemm.ee
        link
        fedilink
        arrow-up
        5
        ·
        2 years ago

        Keeping the details about vim in the extras is what I would do as well, but I would definitely tell the students that vim and vi exist, because they are the only editors available on many systems.

  • Lantern@lemmy.world
    link
    fedilink
    arrow-up
    9
    ·
    2 years ago

    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.

  • selokichtli@lemmy.ml
    link
    fedilink
    arrow-up
    8
    ·
    edit-2
    2 years ago

    It’s too much for 20 hours, if it’s introductory. Also, wouldn’t you want to teach them how to actually install Linux?

  • atlasraven31@lemm.ee
    link
    fedilink
    arrow-up
    7
    ·
    edit-2
    2 years ago

    With files, include user and group permissions (read, write, execute).

    You could talk briefly about the FOSS philosophy.

    • clif@lemmy.worldOP
      link
      fedilink
      arrow-up
      6
      ·
      edit-2
      2 years ago

      Ah, great point on FOSS. I know I have it in my original notes somewhere but I need to be sure it makes it into my outline.

      I added chmod and chown into the permissions bullet.

  • mvirts@lemmy.world
    link
    fedilink
    arrow-up
    6
    ·
    2 years ago

    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 😅

  • Cornelius@lemmy.ml
    link
    fedilink
    arrow-up
    5
    ·
    edit-2
    2 years ago

    I would consider teaching them about a CLI shell, like Fish or ZSH (through oh my zsh), whilst they’re not usually going to have the luxury of a nice shell on a remote server but they will if they’re on a desktop. A good shell makes the CLI soooooo much easier, and faster, to use. Work smarter not harder, install a shell other than bash.

    I would also HIGHLY consider teaching them about desktop app software development on Linux, there’s a surprising number of developers who don’t know about the different ways you can distribute software on Linux:

    • Native system packages
    • Snap packages
    • Flatpaks

    Teaching them about this is definitely a must imho, there are so many OSS projects out there that insist on distributing their software via native system packages (without supporting most distros). They’re also likely to run into it even if they’re just in IT, the server market uses Snaps quite a bit.

  • snowraven@sh.itjust.works
    link
    fedilink
    arrow-up
    5
    ·
    2 years ago

    I think you’ve got it all covered. But for my 2 cents: maybe resources to keep them engaged after these classes, a beginner’s book like “the command line by william schotts” might be an Excellent resource to recommend.

    Throwing in a word for foss as someone else is also a nice idea. It would be even better if you could relate it your own life. For example - I use tons of custom scripts for purposes like creating automated git backups and syncing my gdrive using rclone. If you could show your students a glimpse of what you as a enthusiast could accomplish(and what they might customise someday too) it can leave a very lasting positive impression and desire to learn more in their minds.

    • clif@lemmy.worldOP
      link
      fedilink
      arrow-up
      2
      ·
      edit-2
      2 years ago

      Excellent suggestions.

      I’ve got one example for the shell scripting section - a script I wrote decades ago called serial_killer.sh that’s used to terminate “bad” processes that spin up tens to hundreds of copies of themselves. You do something like serial_killer.sh my-bad-program and it will use a few CLI commands to find the PIDs for all processes named “my-bad-program”, ask you to input the signal (sigterm/sigkill) to use, ask you for confirmation that you want to send that signal to the list of processes (listing all of them with program name, owner, PID, PPID, etc), then kill all of them in one go if you confirm.

      That was a hacky fix to a bad approach/configuration, but it was a fun script : )

  • chi-chan~@lemmy.world
    link
    fedilink
    arrow-up
    4
    ·
    2 years ago

    I’m not sure it’s the ‘right’ topic to learn, but I’d want to learn about some of the terms. At least why there are so much ‘Linuxes’, and what is a distro. It doesn’t have to be a full day, but some background is important, IMO.

    • clif@lemmy.worldOP
      link
      fedilink
      arrow-up
      1
      ·
      2 years ago

      Great point. I think I have a “flavors” note in my margins somewhere but I’ll ensure it makes it into the introduction.

  • Gebruikersnaam@lemmy.ml
    link
    fedilink
    arrow-up
    3
    ·
    edit-2
    2 years ago

    Depending on your audience (don’t overestimate your audience!) you might also want to have a look at the material from The Carpentries. The participatory live coding style works really nicely in workshops for minimally technical beginners. Also don’t make the assignments too hard, or give multiple difficulty levels.

  • gronjo45@lemm.ee
    link
    fedilink
    arrow-up
    1
    ·
    1 year ago

    Personally, I’d enjoy if the class had an aside about how the display graphics are used to render graphics in something like Groff vs. a desktop environment like GNOME or KDE.

    Also, emphasize that your students could choose vim/neovim or emacs to edit text rather than nano.