# Introduction to Linux

Welcome to this simple introduction to Linux.

In this course I will take you on a tour of some basic *nix ideas and concepts. It is not a definitive guide. Given the breadth of the ecosystem it can not be.

It will make minimal assumptions.

The first assumption is a willingness to learn in the face of adversity.
Why that?

Because Linux is not designed to stop you from doing stupid things. That being said it also enables you to do some very clever things.

A second assumption is that you are working on a Linux system able to run a GNU Bourne-again shell. This is not a strict requirement and should not matter for most of the content of the course. However depending on your flavor of shell the output you see might be slightly different.

The course will focus on the Linux command line interface or CLI. If you are looking for an introduction into a graphical user interface or GUI, stop reading here, visit this page (opens new window) and pick your poison. After that look for guides on how it is best taken.

The next two section will explore why Linux is great and give you a brief glimpse into its history. Feel free to skip them if this is not your thing.

# Why Linux?

This section is kind of a sales pitch so skip it if you are already sold. Also most of the benefits of Linux can be achieved on other operating systems, however Linux delivers them out of the box and in a fully integrated manner.

To better phrase this question lets start out with some numbers. Until rather recently Linux was mostly considered a server operating system and it very much still is that. Disregarding macOS, Linux only holds a share of around 2.1% on the global OS market in 2019 according to NetMarketShare (opens new window). Focusing on developers and other technical IT professionals this market share rises to 23% according to the 2018 StackOverflow Survey (opens new window). Armed with these insights lets rephrase the question:

# Why do technical IT professionals want to use Linux as their desktop OS?

I'll lay out an incomplete, and probably strongly biased list here, as stated above feel free to skip it. Please also note that the points are in no particular order and should be taken with a grain of salt.

# Very stable

Linux offers a very stable system. This is unsurprising given that it is used a lot in servers that by their nature have high uptime requirements. Most patches can be applied and most software installed without a need to reboot the system.

# Ease of maintenance

All software installed through the distributions software repository can be updated from one central place and in an automated fashion. If a third party vendor maintains a repository these can be rolled into the same process without much effort.

# Support

Given a skilled user base it is usually very easy to either find solutions to various problems online or lacking that find community support. From an enterprise perspective paid support is available from multiple sources like Canonical and RedHat.

# Low footprint

Most Linux operating systems can be installed on very old or very slow hardware. This is due to the fact that Linux itself is very efficient with system resources. Taking this to modern high powered hardware this means that even more of your resources can be used to run your favorite virtual machine.

# Closer to Production

As noted above Linux is often used in server environments. As engineer it is often useful to have a system similar to the one you are troubleshooting while trying to figure out a nasty bug. Additionally it saves you the mental overhead of memorizing different sets of mnemonic.

# Tooling

Many tools that aid in software development and server maintenance are readily available on Linux while hard to get or install on other operating systems. One fairly common example is the need to switch between different versions of a runtime or programming language. Another would be the broad range of network diagnostics tools. Both problems are either easily solvable or solved out of the box in a Linux system, while hard or impossible to do on others.

# Free and Open Source

What FOSS is and why it is worth having around is a long discussion. I'll take the easy way out and point to to Wikipedia (opens new window) to start you on your journey.

# Customizable

Given the freedom and flexibility provided by Linux the system you are working on can be highly customized. This allows for extremely efficient workflows and tailoring of (sub-)systems to specific needs. An example of the latter is using consistent coloring suited to reduce eye strain.

# Additional benefits

The benefits in this section might appeal to a more general audience and might be considered a cherry-on-top or even baseline by most users.

# Multi-tenant by default

Linux was always designed as a system used by multiple people. For that reason it has strong access and rights management and separation of duties baked in to its core.

# Easy to use UI

This is probably the most subjective of these so lets just say that you have the choice to pick the UI that is easy for you.

# Educational

Since Linux and most software available on Linux is open source it is easy to learn and educate yourself (and others) on good, solid and proven coding and system design practices. Access to the code base combined with the ability to experiment with the software while having the tools to go from source to product directly at your fingertips offers some great teachable moments. Oh, and there is a lot of domain specific teaching software too.

# Free as in Cake

Most Linux systems will cost you 0.00€.

# A Word of Caution

As with all things Linux does not only have good sides. I would be negligent to not at least point you at some of the darker sides.

  • One of those is arguably drivers. If you run very specialized commercial third party hardware or are a high-end gamer, chances are Linux is not your cup. In addition depending on your enterprise, some software might not be available to you.
  • With all that freedom and choice Linux can also offer some initial confusion.
  • The fact that Linux mostly assumes that you know what you are doing once you said you are an administrator can be counted as a negative.

# UNIX vs Linux

As you might already have guessed from the title Linux is not UNIX. UNIX was developed in the 1970's mostly at AT&T Bell Labs originally as an operating system for the PDP-7. While the Linux kernel was originally developed in the early 1990's by Linus Torvalds and together with material from the Free Software Foundation was adopted by multiple organizations and individuals into multiple distributions. Some well known distributions include Ubuntu, OpenSuSe, RedHat, and Debian. Linux is intentionally UNIX like although it is not derived from UNIX source code. Therefore most lessons learned on UNIX can be transferred to Linux and vice versa. For more details I would again point you to Wikipedia (opens new window) as well as Chapter 2 (opens new window) of Secure Programming HOWTO by David A. Wheeler.