Bottom Line; Up Front
This post is a collection of advice and lessons learned from over 20 years of using Linux on desktops, servers, embedded systems, and IoT.
Before You Begin
New users should have a clear reason for trying Linux before beginning. The reason can be as simple as wanting to try something new and different, or it could be to learn new skills to enhance your career or pivot to a new career. You should have a direction regardless of reason. A little focus makes it easier to remain patient when things don’t go as planned, and helps keep you on track instead of running down rabbit holes. I think it’s a bad idea to “distro hop” early on if anything because the grass isn’t always greener on the other side.
My next piece of advice is to remember learning is a journey, not a destination; a cliche if there ever was one. I occassionally read new user tutorials today because I often learn something new. It might be a new tool or a different way of using a familiar tool, but there is almost always something new. If you don’t like learning and trying new things, or if you want everything to just work, then Linux might not be the best option. Learning doesn’t happen by itself, it takes work. Even if you are surrounded by people with decades of Linux experience, you’ll still have to put in a lot of effor. Parts of Linux will feel familiar, and others completely foreign. The variety of Linux distributions and software add distractions that can make it hard to stay focused. Keeping your original goal in mind, while building an understanding of the basics, will smooth the rough edges and in time learning will become easier and more exciting.
I mentioned being patient above. It’s worth repeating: be patient with yourself when learning Linux. You will make mistakes and put your system in an unstable or unusable state. You will have to start over from scratch as a result. When you feel frustration setting in, step away for a few hours, days, or even weeks and try again. Don’t try to chase perfection, it doesn’t exist. That was my biggest obstacle early on. I always chased perfection, and I still catch myself doing it today. The best advice I can give for avoiding the chase is to step back when frustration sets in because you can’t get something “just so” and ask yourself if it’s good enough. That doesn’t mean leaving things unfinished, it means it’s ok to stop iterating on something for a while even if all the kinks aren’t ironed out. See my earlier post about Linux quirks, bugs, and workarounds[1] for a few examples. Perfection often has external dependencies over which you have no control, so energy spent trying to achieve it can often be better utilized elsewhere.
Installing Linux
The topic of installing Linux can be confusing, and sometimes controversial, for beginners. It can be confusing because of the sheer number of Linux distributions and controversial because the Linux community is full of highly opinionated individuals, myself included. Those strong opinions can be intimidating to beginners and cause them doubt. There is no objectively best or worst distribution. Searching the web to find the best, or most user-friendly distribution isn’t quite to the level of a fool’s errand. The same three or four distributions are usually included in rankings on various sites, not always in the same order, but usually in the top 10, so web searches aren’t exercises in futility, they just need careful vetting.
Friends and colleagues already using Linux are good sources for recommendations. They can help you vet your list of choices after searching the web, and may even be willing to help you troubleshoot if you get stuck. If you live near a college or university, then there might be a Linux or technology users' group who can help guide you. Linux users' groups (LUGs) sometimes host “install-a-thons” for beginners, and it’s a good way to make connections to others in the community.
After you’ve chosen a distribution, you need somewhere to install it. That used to mean hardware. Today options like LiveUSB and virtualization make it easier to test drive Linux before committing to a full installation. Most of the user-friendly distributions include a LiveUSB image you can burn to a USB drive you can then use to boot your computer. You’re brought to a full desktop so you can get a sense of the look and feel of the default experience and also check hardware compatbility. Some LiveUSB images include capabilities to preserve state between sessions, but I find them best for demoing a new distribution and checking hardware compatibility.
Virtualization is another safe option for testing Linux distributions if you don’t mind an additional learning curve. You can boot a LiveUSB inside a virtual machine, and that will let you test drive the distribution, but you can’t test the hardware compatibility of your computer; however you can experience the entire installation process without risk to your underlying Windows or macOS operating system. That can make it easier to install Linux to bare metal later on because you’ve already seen the installer and know what to expect.
Other installation options include dual booting or bare metal on another PC. I haven’t dual booted Linux and Windows in over 20 years, so I can’t speak to the present day experience. The few times I tried, it was relatively easy, but eventually I reached a point where the hassle of rebooting to Windows became an annoyance instead of a convenience and the Windows partition became additional storage for Linux. Your mileage may vary. Installing to bare metal on a second PC is easier, and there is less risk of losing important data from your main operating system, just make sure the second PC doesn’t have anything you need to preserve. Linux installers give plenty of warning about data loss during installation, but they are absolutely unforgiving once you point it at your disk and tell it to install.
Learning Linux
Earlier I wrote about how learning is a big component of using Linux. I could probably base an entire series off this section, but for now I’ll cover what I consider to be a few important topics for beginners.
Navigating The System
There are two main interfaces for interacting with Linux: the graphical user interface, or GUI, and the text user interface, referred to as the console, shell, terminal, and less often as TUI. You should learn how to navigate the system through both interfaces. Most GUI interaction will be through a desktop environment with a layout similar to Windows or macOS. Applications are launched through desktop icons or from a menu, and there are tools for configuring the system simlar to those found in macOS System Settings or the Control Panel on Windows. Navigating the file system takes place through a file manager application similar to Finder or Windows Explorer.
The terminal looks and feels much like the DOS command window on Windows and the Terminal on macOS. Almost any task you can perform in the GUI can also be performed in the terminal and that’s why I think it’s important to learn to navigate the system in both interfaces. If the GUI ever breaks, you have a backup. Likewise, if a GUI application isn’t working as expected you can launch it from a terminal to help debug the problem. Some in the Linux community feel that new users do not need to learn the terminal. I disagree with that sentiment. As you learn Linux you will discover that some tasks are just quicker, and easier, in the console. One example is accessing system documentation in the form of man
and info
pages. There are GUI interfaces for these utilities, but they’re meant to be used, and I think are more easily accessed, from the terminal.
Permissions
Linux is a multi-user system and there are mechanisms in place to separate duties and restrict or allow user access to files or certain system tasks. Beginners accustomed to the macOS or Windows permission models should have little trouble adapting to modern Linux, although sometimes the user experience isn’t as friendly. The first user created during installation is usually configured as an administrator giving access to the sudo
command. This command is used to elevate privileges temporarily to perform tasks like installing and removing software. New Linux users should take the time to become familiar with sudo
as well as the Linux permissions model, specifically adding and removing permissions from files and directories.
Installing Software
Most Linux distributions install a wide variety of software by default, especially if you didn’t change any options at install time. That said, eventually a time will come when you want to either install or remove software. That’s where the system package manager comes in. The package manager is akin to the App Store on macOS; it’s the go to application for discovering, installing, removing, and updating software. The package manager will have a command line (terminal) component, and usually one or more graphical front ends. Learn both the terminal and GUI versions of your chosen distribution’s package manager. Some GUI front ends focus solely on graphical applications and do not give an option to install command line tools or libraries. When that happens you can switch to the terminal version, and as you become more comfortable you may find the terminal option to be the most preferred. The same goes for removing software or updating the system.
Beginners should be aware of other vectors for installing software outside the package manager. Some software is distributed as zip
files, just like on macOS or Windows. You may also learn about tarballs and AppImages. All three allow you to install software without using the system package manager. That means they won’t receive updates automatically, unless the software has an update function built in. I recommend new users stick with the system package manager at first, if anything to avoid mixing and matching sofware versions and reducing exposure to security risks.
Finding and Asking For Help
Eventually you will run into a problem and need help. Learning where and how to find help is an important skill to develop as you learn Linux. You should learn where the system documentation is and how to access it. It won’t provide every answer, but it often provides enough information to know if something is misconfigured, or if there is a command line argument missing. There are man
and info
pages for almost every library, command line tool, and may GUI applications. Additional documentation in /usr/share/doc
might include FAQs, detailed user documentation, or general READMEs. What you won’t find in the system documentation are problem/solution answers that point to error messages or warnings. For that type of information you’ll need to look online using your favorite search engine.
I recommend learning the advanced operators for your search engine to help narrow the scope of the results returned. There are a lot of duplicate and copycat sites, some with bad information. Using operators to exclude certain keywords and sites can give better and faster results. If your searches return few results, then you might need to broaden the scope a little by using fewer or no operators, and then narrow your focus again when you start getting more hits returned. This is something you’ll learn with experience, but it helps to think about the type of problem you’re trying to solve and use “fuzzy logic” when skimming search results. For example, if you’re searching for a specific error response code, skim the results for pages that have similar, but not exactly the same text. A lot of times that will lead to enough information to get you unblocked and on your way. If searching the web doesn’t net you the results you want or need, then it’s time to look at alternatives like IRC and social media.
Be careful when using social media as a source. Most people are friendly and helpful, but the Internet is still full of trolls and elitists. When approaching a community on IRC, or a forum like Reddit, take a little time to summarize what you’ve already done. Most elitists find it annoying when beginners just start peppering an IRC channel or forum with questions with no regard to existing documentation. Showing you’ve put in some effort trying to solve the problem for yourself will usually result in better responses. Trolls are just trolls. They aren’t as common as they once were, but sometimes they appear, and it’s best to just ignore them. A troll will usually interject some sort of declaritive statement into a discussion in hopes of derailing it, or they’ll offer bad advice. If you’re not sure someone is trolling, take a minute or two to run a sanity check web search or ask for a second opinion. Don’t take everything at face value, especially when someone provides commands to copy and paste. If you’re not sure what the commands do, don’t run them Use the tools you have at your disposal (man
or info
pages), or ask for a brief explanation. More often than not people will genuinely try to help, so don’t worry too much about getting trolled. Just be aware they’re often intermixed with the helpful folks in the community.
Things To Avoid
There are things I think beginners should avoid, at least until they’ve had a chance to explore Linux themselves for a few months. The biggest one is the urge to “distro hop” or change to another distribution shortly after spending a short time installing and configuring another one. It’s one thing to hop between different “spins” of a distro, between Ubuntu[2] and Kubuntu[3] for example, but switching to Fedora[4] because someone told you it was better, and you’ve only been on Ubuntu for a month, doesn’t make a sense to me. First of all, you’re resetting the clock on the knowledge you’ve obtained. Most Linux distributions are similar under the hood, but there are enough differences between Ubuntu and Fedora that a beginner could get more confused than if they’d just stuck it out with one or the other.
Another temptation to avoid is building software from source, or trying to shoe horn packages from a similar distribution into the one you’re already using. This usually happens for one of two reasons: either the user doesn’t know how to apply updates using the system package manager, or their package manager doesn’t have the version of software they want. A big strength of Linux is access to the source code. But like the old saying goes, with great power comes great responsibilty. Building an application from source can feel very rewarding, but that only lasts until it is time to update. Then you either build from new source, or skip updating altogether. That can mean missing bug or security fixes. It could also mean having to download and compile other software, like libraries, to make the updated application compile again. Tools like checkinstall
[5] make source compiles easier to manage, but nothing can replace the ease of updating using your distributions package manager. Source compiles lead to a lot of rabbit holes, and are best avoided by beginners.
Wrapping Up
I’ve rewritten this post several times. In its original form it was nearly 6000 words in length with more detail and links to other information. I felt it was too much for someone who had never used Linux before, and perhaps even for someone who had been using for a few months to a year. I took a step back and focused on the high level topics I thought would have been most useful to me when I was new. This final version summarizes what I had written in the original version and reads more like a list of best practices than a comprehensive tutorial document. It’s more about level setting than problem solving with a goal of helping new users adopt what I think is the correct mindset when starting out with Linux. I know it would have helped me a lot when I was a beginner.