Echo Workshop

AboutEchoes


I'd like to start by saying that the following information is not necessary to use Linux comfortably.
It's like looking up "Learning Batch and PowerShell" and "The NTFS File System Structure" before using Windows, which most people wouldn't do.

And I will go hard into my "rant mode" here!
I'll cover a ton of things I'd like to get off my chest, which means this isn't a strictly a guide.

If you instead just want to use Linux and play some games, have a look at the Starting with Linux page.
Or if you want a lighter read about Linux and Distros, head over to the Linux Distro page.

Intro

I would argue that the biggest hurdle, switching from Windows to Linux, is not "learning Linux".
The hardest part is switching our brains to not think like Microsoft has told us to think for years.

I'm not trying to say that Microsoft is brain-washing you, but you are most likely facing dozens of issues in Windows daily, issues that would drive a newcomer mad, but your brain is configured to ignore and almost handle automatically.
It could be something as small as a button not working correctly or being extremely slow to respond, or some application not behaving as expected but you've found that minimizing it once makes it for some reason work again, or your audio device switching after a reboot or driver update.

Moving to Linux you will face a whole host of new issues like that, except that your brain is not configured to handle them like you are used to, and this will make things seem "hard" and "confusing".
But in reality, Linux often gives us a lot more information than Windows.
And not just about the software we run, but also about the kernel, the kernel modules (drivers) and our hardware, allowing us to not just work around the still existing issue, but actually fix it forever.
Your brain will eventually switch to "fixing issues", instead of "working around issues".

The Linux file system is also (somewhat) structured, meaning that there is rarely any confusion about where things can be found or where they should be placed.
You typically do not plop down some random application in your Downloads directory, having the application write files all over your computer. Instead, each application has its place, and all its system files and written files, logs etc. all have their place.

Most things are also simple plain text-files, meaning that we do not need to install bloated extra applications, but we can instead fix things with a simple text editor.

Confusion about Linux & Software

If you haven't read the Linux Distro page; the gist of it is that Linux is like the engine of a car.
But the chassi of a car, and everything else like the paint job, steering wheel etc. that would be like the software that usually comes with a Linux distro.
None of that extra software is actually "Linux", which is similar to how the paint job not having anything to do with the car engine.

I often see people say things like "I don't like Linux because <some-application> is bad", or "The desktop is weird" and so forth.

None of that is "Linux".
It would be like saying "I don't like V8 car engine because of the yellow paint job on this BMW".

Similarly, people tend to spend a lot of time learning the Software that comes with their Linux distro.
While I do think it's a good idea to learn the software you use daily, that is not "learning Linux".
I say so mostly because if the user would then switch distro, to a distro that doesn't use any of that software, those learnt skills would no longer apply, despite still being in Linux.

You'll also spend a life time learning all the software that comes with Ubuntu or openSUSE.
But if you focus your efforts on a couple of key points that are similar across most Linux distros, or honestly, similar across most UNIX systems, then you'll have a great understanding of the base, which could be applied to any distro, without dedicating an eternity to it.

Most of the software I recommend learning are terminal based, for example "grep".
And while there certainly are graphical interface based applications for "grep", that does not mean that Ubuntu will include the same grep graphical interface software that openSUSE or Fedora does.
So it would be impossible to cover "grep" for every kind of graphical interface application there is, across all distros, and across all released versions that all are different.
Hench, the raw terminal version will be used, which will work on any distro and most UNIX systems.

Learning Linux

I think there are few key points to learn first.
Some of these things are software that are distro specific, like for example Xorg.
However, it is so deeply integrated in most Linux distros today that not learning it would be a huge disadvantage. Though, I'll try to mention alternativs when I remember them.

The Linux File System

The Linux file system is unique, not just because it's case-sensitive (i.e. "hello.txt" and "Hello.txt" are two different files) and files starting with "." are hidden, but also because it unifies everything into a single tree, where each file has its designated place, right from the start.

And while you could blissfully live in your Linux "Home" directory, you would be missing out on a lot of valuable information that makes things a lot simpler!

Root

The starting location is called "root", and is indicated by /.
Everything starts here, and it usually contains these directories:

"root" / 
├── bin/
├── boot/
├── dev/
├── etc/
├── home/
├── lib/
├── media/
├── mnt/
├── opt/
├── proc/
├── root/
├── run/
├── sbin/
├── srv/
├── sys/
├── tmp/
├── usr/
└── var/

You don't have to memorize the entire structure, but it's good to know a few of them, as they all have their unique purpose.

It's also good to remember that while on Windows, a harddiskdrive appears as a separate item.
But on Linux, any directory can be a separate drive.
That means that root itself can be one drive, while for example /home/ could be a separate drive or partition.

A few noteworthy directories are:

Home

As a user, you typically only operate inside your own "home directory".
Each user has a directory inside /home/ named after their name.
For example, /home/hezkore/.

This can also be shorted to just a single ~ symbol.

Any time you want to operate outside your home folder, you will have to identify as a "super user".
This is a security measure, as "root" owns every directory outside of the home directory.

Identifying as a super user is usually done with the command sudo (stands for "super user do") to execute a single command as a super user, and applications with graphical interfaces will usually ask you to identify yourself as a super user as well.

Installing software typically at least manipulates the /bin/ directory, as well as the /lib/ directory, which are both owned by Root, which is why you need to identify as a super user when installing software on Linux.

The user's /home/ directory also contains a couple of "user only" versions of root owned directories.

An example of this is how each user has a hidden .local directory.
The directory /usr/local/share/fonts/ contains the fonts that all users have access to, but placing a font in ~/.local/share/fonts/ would limit that font to only that user.

Similarly, the user has a .config directory, which usually represents the /etc/ directory.

Meaning that we could add software, themes, configurations to our user space, without modifying the system configuration, which could potentially crash the system.

Startup

Now that we know a little about the Linux file system, we can take a step back and look at how things work when starting up Linux.

I won't go into too much detail about it as I feel this step is usually not very important to the end user, and manages itself most of the time.

When you start your computer, BIOS/UEFI is loaded, hardware is scanned, a boot device is selected, and eventually you end up at a boot loader. Which usually is "GRUB" when it comes to Linux.
There are other variants than GRUB, and I'm fairly sure GRUB will be replaced by "systemd-boot" at some point in the future.

The boot loader operates out of /boot/ and lets you pick a kernel to load as your next step, which means it could start not just Linux, but also the NT kernel, or something like BSD.

GRUB then loads a temporary file system called ("initramfs" or the older "initrd") into RAM that the kernel will use (usually contains kernel modules/drivers and such and is found in /boot/ as well), and then tells Linux to start the initial software, which typically is /sbin/init.
Depending on the init system your distro uses, it will then execute some startup scripts or unit files.

The most common init system today is "Systemd", which is a whole suite of tools that manages your system, mostly by starting background applications (known as services, stored in unit files) and keeps track of the logging files.
(and a lot of older hardcore fans of Linux are against it)
"SysVinit" is the more traditional init system, and lightweight distros will use often use something like "OpenRC" or "Runit" instead of Systemd.

Systemd starts executing unit files from /lib/systemd/system/ at boot, and eventually starts the "Display Server", something like XOrg or Wayland, which is what renders things on the screen. Then a "Display Manager" is started, for example GDM or LightDM, which often presents itself as "Login Manager" where the user can input their username and password, but also select which type of desktop they want to use, like GNOME, KDE Plasma or XFCE.
After the user has entered their username and password, the Display Manager will start the desired "Desktop Session", for example "gnome-session or "xfce4-session", which in turn might switch Display Server if needed.
(not all desktops can run in the more modern Wayland Display Server)
Systemd then starts executing the appropriate unit files from /etc/systemd/system/.

The Desktop Session will start a "Window Manager", like Mutter for GNOME and Xfwm4 for XFCE, which handles the placement of all windows, draws their border, themes, handles focus switching and so forth.
Alternatively, the Window Manager might also have a separate "Compositor", which handles the fancy graphical effects you might see in some desktops, like morphing window shapes, shading and shadows.

Lastly, the applications typically associated with a desktop is started. Such as a taskbar (usually called a panel) and similar things.
The desktop is then ready for the user.

To be continued