Advice for people who want to learn Linux
This article offers my own personal advice to people who ask questions like:
I'd like to learn more about Linux, what should I do?
I'm a Linux noob, how can I become a power user?
Using the command line looks like a useful skill to learn, where can I start?
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.
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.)
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.
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.
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 variousdistros
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.
FlatHub to shop around for FlatPaks
AppImage Hub to shop around for AppImages
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:
Xfce: provides you with modern take on a of a
classic
look, like something you would see from a late 90s or early 2000s Windows computer, but improved to look good on modern high-resolution displays. Not as customizable as KDE Plasma, but simple, stable, and reliable. Programmed in C on top of the Gtk+ toolkit, but it closely adheres to the FreeDesktop.org specification, so runs apps from all the other desktop environments flawlessly. (This is my preference so I mention it first.)KDE Plasma: probably one of the prettiest and most easily customizable option. There seems to be a customization option for every last little detail. Programmed mostly in C++ on top of the Qt widget toolkit. Like Xfce, can run most any Linux app flawlessly due to close compliance with FreeDesktop.org.
Gnome: another very popular option, the
This is the default DE on both Fedora Linux and Ubuntu Linux, the two most popular Linux distributions, so you are very likely to use Gnome first. Though it can run Linux apps from other DEs, you may notice some odd behavior at times, so it is usually better to stick with apps native to the Gnome DE.Gnome Shell
feels to me more like an iPad or Android running on a tablet computer, but accommodates a desktop PC with a keyboard and mouse just as well. Programmed mostly in C on top of the Gtk+ toolkit, but apps can also be programmed in several languages, including Python, Vala, and Lua.Cinnamon: like Xfce, provides you with a modern take on a
classic
look, like something you would see from a late 90s or early 2000s Windows computer, but improved to look good on modern high-resolution displays. Cinnamon is afork
of Gnome from 2011 -- this means they copied all of the Gnome source code and started to change it into something new (remember, that is legal according to Linux's GPL license). This was because in 2011, the Gnome project leaders decided to make some major changes to the look and feel of their DE without consulting many of their users, and this angered quite a few people. So Cinnamon maintains the old pre-2011 look and feel of Gnome which works nicely on a desktop PCs, while Gnome looks more at home on a tablet device, though accommodates desktop PCs just as well.LXQt: takes the simplicity and stability of Xfce, and combines it with the technology underlying KDE Plasma. It generally looks nicer the Xfce, and I would use this if not for it being based on Qt and being programmed mostly in C++ rather than C.
Nothing: i.e. make up your own from stock parts. A DE itself is made of several components. With Linux, you can choose each component, and for each component you have from a few to many dozens of pieces of software to choose from. I wrote a separate article on the components of a desktop environment.
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.