Learning

Now that you've gotten setup with Linux, you might want to learn a bit more about the system you're using and customize it a bit!

Special shoutout to UoB's "Missing Semester" which is a series of courses we're running starting this year (2023) which will cover a lot of this material! Please register and join us!

Shell

One of the most powerful tools to get to grips with is the Linux shell. With the shell you can easily and powerfully perform many operations that are really difficult in a graphical interface. It's quite easy to get the hang of quickly, but you'll find that as long as you make an attempt to use it regularly, you'll continue to pick up skills.

Here are a few places to get started:

If you like interactive tutorials a bit more, then try out:

  • Learn Shell
    • Standard interactive tutorial to introduce you to Bash
    • Very similar in style to tutorials on programming languages
  • Linux Survival
    • Linux command line taught as a visit to the Zoo :)

Practice

If you do some reading, you might find you might want to do some practice!

Here's a few sites you can try out:

  • OverTheWire - Bandit
    • One of the best wargames out there to practice learning the shell
    • Comes at it from a hacking point of view 🎉
  • Commandline Challenge
    • Quiz-style game to test your knowledge of interactice shell usage
    • Also has a really fun variant where all the programs on the system have been removed, and you have to try to perform basic operations.

However, one of the best ways to properly learn bash, is to just use it regularly. Instead of opening up a graphical UI, try and learn how to do things in the terminal. If you recognize yourself doing something repetitive, notice, and try and automate it. Read other people's shell scripts. Customize your prompt. Write your own shell even!

Essentially, just practice!

"Ricing"

There's an awesome community on /r/unixporn that is dedicated to building beautiful Linux desktops (which they call "ricing").

It's a really neat way to learn more about how to build and install lots of different pieces of software, learn some configuration, as well as discover more about display servers.

Here's some common terminology:

  • Desktop Environment
    • A full and complete set of tools that make up "a desktop"
    • Usually includes a window manager, common applications, integrated settings manager, etc.
    • The big ones are GNOME and KDE
  • Display server
    • Piece of software to display windows onto a screen
    • Two choices, the older (and more reliable) X11, and the newer Wayland
  • Window manager
    • Manages windows, layouts, etc
    • Can be grouped into:
      • Stacking, windows are stacked on top of each other, very traditional
      • Tiling, windows are tiled around each other, very flexible
      • Dynamic, a bit of both!
    • Some window managers also include a compositor!
  • Compositor
    • Provide fancy effects
    • Fix common issues like vsync/tearing problems
    • Only really applicable to X11
  • Graphics toolkit
    • Provides widgets, buttons, inputs
    • Two main choices (but others exist), GTK or QT