Advice for people who want to learn Linux

Home About GitHub

This article offers my own personal advice to people who ask questions like:

In brief:

Like any skill, it will take some level of commitment -- some non-trivial number of hours spent studying each week, don't expect to get good after learning that one little secret to make you an expert right away.

  1. Learn the Linux app ecosystem. When you move to Linux, you leave all your old apps behind and get all new apps, that is just something you are going to have to deal with. Shop around for Linux apps to replace your old Windows or Mac apps. Rarely, if ever, will you be able to use a Windows app smoothly on Linux with emulators, or with WINE, so do not get your hopes up. (With all due respect to the WINE project, they do fantastic work.)

  2. Learn Bash programming: it is the de-facto standard shell on Linux, and it is the foundation of Linux programming and automation. You don't need to be a software engineer, just learn the basics of writing scripts, most Linux software is designed to be automated as part of a script, and this is where Linux derives most of it's power.

  3. Learn Vi or Emacs and use it to write Bash code. This is the more difficult road to follow, since neither Vi nor Emacs are as easy to use as other code editors. But the payoff is that you will be able to relate with other people in the Linux community better, as most Linux users use Vi or Emacs to write code. If you want to be a Linux user, use the same Linux software everyone else uses.

    Also, it is a good idea to learn how to use one of the terminal multiplexers, either Tux or GNU Screen when using your editor in the command line terminal.

  4. Learn what a desktop environment (DE) is, and how it differs from a distribution. When people get started with Linux, they first learn about the various distros to choose from, and shop around for a distro that looks nice. But what makes Linux look nice is not the distro, it is the DE. You can install almost any DE onto any distro, you can make any Linux distro look nice.

    In short, a DE is the look and feel of the software on your computer. Mac OS has it's own look and feel, Windows has it's own look and feel, Android tablets and iOS tablets each have their own looks and feels, but Linux has a choice of many different DEs. There are 5 major DEs to choose from: KDE Plasma, Gnome, Cinnamon, Xfce, and LXQt. Each has a completely different look and feel, and also most come with a different set of default apps, so switching your DE will feel like switching to an entirely different operating system.

    Though they may all be different, there is enough similarity between any given Linux DE and Mac OS and Windows that you will be able to learn any one of them quickly.

    The DE, on the other hand, is a web service that distributes Linux software to you.

Linux is a useful skill

Using Linux is indeed a useful skill to learn, it is a skill for people who want to really learn how to actually use their computers to make their lives easier, rather than just to do school work or office work, and to become more than just as a passive consumer of digital content like social media or video games. It is also a very good skill to learn for people who want to use computers for their own small business, but want to have full control over their own software and data, rather than depend on Internet services, which tend to change the terms of their contracts with you on a whim, and will happily destroy your business's data without giving you a copy as soon as your contract with them ends (or worse, sell your data off to advertising companies).

If you've decided to learn Linux, you likely already understand the benefits of controlling your own computer, your own software, and your own data, and prefer this over the alternative, which is to let some enormous corporation have control over your computer, software, and data and sell it to you as a service under contract. And incidentally, when I say your own software, I really do mean "your own," even if you haven't written that software yourself, because with the GPL software license, you are legally guaranteed the right to own the software you use as though you wrote it yourself (provided that you agree to share it with everyone), which is yet another good reason to learn Linux as a skill.

So here is where you can get started.

1. Learn the Linux app ecosystem

Anything you do on Windows or Mac can be done on Linux. There is just one problem: everything you already know has a different name in Linux, and will have a different user interface as well. This is just something you have to deal with. Linux is different from other operating systems, and learning those differences is part of learning Linux. This is often very frustrating, because there will often be times where there is something that you can do fluently, without thinking, on Windows or Mac, that you just won't know how to do on Linux even though there is certainly a way.

When you move to Linux, you need to start shopping around for all new apps. Fortunately, shopping around is pretty simple to do, most Linux apps can be installed from a software repository, and so you can just search for keywords in the software repository.

There are also AppImages and FlatPaks, which make installing, upgrading, and deleting apps as simple as can be.

2. Learn the Bash programming language

The Linux user community as a whole believes in scripting and automation, so most Linux software, even software designed to be used graphically in a GUI, is also designed to be used easily from the command line (CLI) console. And Bash is the de-facto standard programming language of the CLI console. Bash is a shell program installed on most Linux distributions (not so much on Android), so learning Bash is useful on most any Linux, as well as other UNIX systems like Apple's Mac OS X or the BSD family of operating systems, and you can use it in Microsoft's Windows Subsystem for Linux (WSL).

Bash is a relatively simple language to learn and use. As soon as you open a command line (CLI) console, a terminal emulator, you are probably already using Bash. In the CLI, each line you type is a line of Bash code, and as soon as you press enter, the line of code runs and you can see the result (if any) as soon as it happens, so it gives you immediate feedback as to whether you did it right, like a musical instrument, so it is a great way to learn through practice.

Inherent in the grammar and syntax of the Bash language is the computer's model of how computing resources (called processes) are created to do useful work, so learning Bash is a great way to develop an intuition for how the operating system models these computing processes at a more technical level.

There are many other shells which each work slightly differently from Bash: Fish, ZSH, Dash, Nushell, Xonsh, OilShell, and Eshell, even Microsoft's PowerShell, can all be used on Linux. Some (Dash, Zsh, OilShell) are nearly identical to Bash in grammar and syntax, some are not (e.g. Fish, Eshell). But learning Bash should be your starting point, and if for whatever reason you ever decide to use some other shell, it will be easy to switch to these other shells if you know Bash.

3. Learn how to use Vi, Emacs, or both

When you learn to write Bash code, you will need a good source code editor, and I strongly recommend you begin with Emacs or Vi (or a clone). To be sure, you really can use any coding editor you like, and there are dozens of good choices, Gedit, Kate, VSCode, and GNU Nano, to name just a few, and these other code editors will be much easier to use and learn than either Vi or Emacs, especially if you already have experience with code editors used in the Windows or Apple world.

HOWEVER.... the majority of Linux users in the world use Vi or Emacs, which means you will have an easier time learning about Linux if you have the shared experience of using one of the two main code editors that all other Linux users use. It will make you feel like more a member of the global Linux community, and will often times make it easier to work with other Linux users.

What I am saying is probably controversial, plenty of other experts might disagree with me, especially on the grounds that both Vi and Emacs can be quite difficult to learn for beginners, and why would I offer advice that further increases the barrier to entry for new Linux users. But I assert that no one learns Linux in a vacuum, and part of learning Linux is learning to use the same software that every other Linux user uses, especially when learning to write small shell scripts.

Both Emacs and Vi have built-in interactive tutorial programs, which have plain-English instruction and practice exercises you can practice using right in the editor itself, most people (myself included) would recommend you begin there.

Flavors of Vi

There are a few different text editors that go by the name Vi, the original Vi is pretty limited. The most popular version of Vi is a clone called Vim, by Brahm Mooleaner.

But the Vim source code is old, bloated, and difficult to maintain, so another clone called NeoVim has become very popular in the past few years. Personally, I recommend NeoVim.

There is yet another clone of Vim written in Emacs Lisp called Evil Mode which runs in the Emacs editor, and changes Emacs to behave nearly exactly like Vim. Then, there are Emacs distributions (Emacs but with different default settings) like Doom Emacs and Spacemacs that enable Evil Mode by default.

Learn to use a terminal multiplexer

Although Emacs has terminal multiplexing built-in so you don't need a terminal multiplexer for Emacs (you can still use one with Emacs), a terminal multiplexer is a useful tool if you spend any amount of time in the CLI console. It can provide to you logging, copy/paste functionality, ability to keep your work open even after the CLI window closes, the ability to split the screen between the program you are writing and the CLI shell where you can test the code you are writing, and the ability to share what you see on screen with other computers over a network. The two most popular terminal multiplexers are Tmux and GNU Screen.

4. Learn what a Desktop Environment (DE) is

The desktop environment (DE) of a Linux system is essentially the software that controls the look and feel of your computer. It is the graphical user interface that you will use to launch apps, change configuration settings and themes, and navigate around your computer system.

When you use Windows or Mac OS X, you get only one DE: the one that came with your computer out of the box. So most people believe that the DE and the operating system are the same thing. But on Linux you have a choice between at least 4 major DEs, and each one is so different from the other that you would be forgiven for thinking that you have switched to a whole new operating system after switching to a different DE. In fact, one mistake many beginners make when switching to Linux is to choose a Linux distribution based on the look and feel they see in the screenshots on the homepage, when in fact almost any Linux distribution can be made to look like the one in the screenshots just by installing the right DE and configuration settings.

One thing Linux does better than Windows or Mac is let you switch between DEs -- in fact you can install all of the DEs at the same time and switch between them without ever even rebooting your computer. The major DEs to choose from are:

Personally, I stick with Xfce, since it provides all of the pieces of a DE in a single package with good default behavior, but it lets you swap out any of those pieces for something else pretty easily. It is programmed in C with GIR bindings provided, so can somewhat easily be scripted in languages like Python, Lua, or Guile Scheme if necessary. I use all the Xfce defaults except for the terminal emulator which I borrow from Gnome.