I have seen and experienced myself common growing pains coming from using Windows and then using Linux. This is a bit of an extension of my post here meant to help people decide if Linux is right for them and how to pick a distro. In that article I speak alot about being willing to learn and understanding Linux is different.
In this article I am going to touch on some fundamental concepts in Linux I found hard to grasp coming from Windows which I feel are the keys to really thriving in Linux. These will be generalized concepts that should apply to all/most distros. This also isnt about bad/good or right/wrong. Its simply that 1 system does something one way and another does it a different way.
#1 - Terminal
The biggest hurdle for many is ditching the stigma impressed upon us by Windows and its command prompt. For many of us, its letting go of years of bad experiences and avoiding the command prompt/terminal in Windows.
In Linux the terminal is often the best, most efficient way of accomplishing tasks. Learning even some of the most basic commands can really improve your ability to navigate, manage and configure systems. This is heavily due to the following topic in #2 below.
I think a great place to start is working with files, directories and permissions (#3 below) as well as editing config files (see #2 below).
An area that I often realize the power of the terminal in is simply comparing the experience of updating software via the terminal in Linux and using the GUI in Windows.
Lastly, unlike in Windows, basically everything you do in the Linux OS and the vast majority of the programs you use (including programs with a GUI) can be controlled from the terminal. This opens up a ton of power for a user to be able to manually or via automated means, manipulate anything.
The more you fight using the terminal, at least on occasion, the harder it will be to use Linux without "friction".
#2 - Configuration
Its a really alien concept for many starting out in Linux, but basically every setting and configuration option in Linux is stored in a text file. Thus, everything we want to customize, generally, can be done via a text file/configuration file.
As such, this really compliments #1 in that its possible to edit configuration files, run programs, control the system and more without ever needing to touch the mouse.
Compare this to using Windows registry. You scroll and click through this tree of configurations, click to edit, then use the keyboard to change a small bit of text, then click some more and scroll some more, etc. By comparison its painstaking and inefficient.
#3 - Files, Directories and Permissions
There is a big difference between how Linux and Windows handle and present files, directories and their permissions to users.
- Linux files do not need to have extensions. This can be confusing coming from Windows especially for telling the difference between files and folders (directories in Linux). A text file for example could be called "mytextfile" on Linux whereas on Windows you might expect it to be "mytextfile.txt". Linux files can (and often do) have extensions, but they are not required like they are in Windows.
- By default, file permissions generally come from who created the file (and their primary group), not what directory it is in. Therefor, its possible to create a file in a folder that others cannot access despite having permissions to the folder. By contrast the default behavior in Windows is that a file created in a folder generally inherits the permissions of the folder and you would need to explicitly changes its permissions for someone to miss it.
To help resolve this, its a good idea to get familiar with navigating files and directories in the terminal. Commands like (each command separated by '|'):
ls | lsblk | mkdir | cd | cp | mv | rm | chmod | chown
Understanding how Linux deals with files will drastically increase your comfort with the system as a whole. I highly recommend researching file permissions as well.
#4 - Software Installation and Updates
Using Windows these days means going online and downloading most of the software you use on your system. This is generally a single file you download and then run on your machine to install the software.
While this might sound convenient its really terrible in practice. The end result is that we have possibly dozens of different places we need to go to update software or we have to trust each developer/source if the software is set to check for/auto update.
This doesn't even take into account Windows OS updates, done via Windows update. Its often slow, buggy and doesn't provide much information about updates or in some cases even the option not to update.
In Linux however, things are much more centralized. The OS AND the software come (mostly) from a repository that is maintained by the distro. Most distros offer 3rd party repos such as AUR (for Arch/Manjaro), PPA's in Ubuntu, repos in Fedora/RHEL (as .repo files) etc.
This software (in the case of official repos) is usually tested in some fashion and deemed stable and safe for use. That doesnt mean you cant install software from other sources, but its generally the place to start looking for software and the best/safest option for it.
In Linux, this is usually handled by a package manager and/or GUI program for it. A package manager not only provides the means to update, install or remove software but it also keeps track of dependencies. This means if software A requires software X, it will make you aware of that and/or install software x for you.
#5 - Root, Sudo, User
Most distros have a root user. This user is roughly equivalent to an Administrator account on Windows. Many new users ask why they need root and a user account. The sad truth is most Windows users simply use an Admin account to use their computer, so its a foreign concept having 2 user accounts.
A Linux user can be temporarily granted "superuser" privileges by issuing the
sudo command in the terminal to execute commands (assuming they have the rights to do so). Many new users confuse this to mean that the user either becomes or acts as the root user. This isn't the case.
The root user on a Linux system, especially a personal machine, is almost never used directly. As it has complete control over the system, if its compromised than the whole system is compromised. This is similar to an Admin user on Windows, however Windows doesnt have anything really like sudo. The closest may be UAC, but allowing a standard user on Windows the privilege to Admin type tasks is a bit more involved.
So on Linux no other user generally has all the same permissions/control that root does (In Windows its possible to have multiple Admin accounts). However, each user can be granted the ability to issue commands using sudo to control/administer things they otherwise couldn't, temporarily. This provides a tighter level of security on Linux for how users interact with the system.
#6 - Hardware
Windows has some drivers built in or available via Windows update. For most every other driver, you need to acquire the driver software and install it, much like installing a program on Windows.
This may seem straight forward, but in the case of installing the driver, most drivers do not auto-update and its up to the user to seek out updates in the future.
Linux, on the other hand typically includes a wide array of drivers (through the kernel, I could be mistaken on this point). If a driver isn't included in the kernel, it can be made available in the distros repo or 3rd party repo.
In some cases, you may need to seek out and find the driver online. The unfortunate reality of this is that there isn't a simple, consistent way these are presented. Assuming the manufacturer even provides a Linux compatible driver, it could be in the form of a distro specific package, a bin file, source code, installation scripts, etc.. The process for "installing" it then becomes unique to that driver/hardware and your distro.
I have "installing" in quotes because the concept is very different than it is in Windows. Its not run a file and everything is done for us. Often installing a driver like this can require decompressing/extracting files, manually placing them in the proper locations on a machine and/or manually editing configuration files. It can sometimes be more simple like running a script or placing a single file in a given location.
This is why its important and recommended to check hardware compatibility before deciding to use Linux with it, as it is not a given it will just work.
Just about all hardware (consumer facing) is designed with Windows in mind. In many cases their software and drivers are proprietary and the features they advertise depend on that proprietary software/driver. For example surround sound headphones often accomplish the feature via proprietary software tricks and drivers, not hardware. In those cases, its often not likely or possible that the open source community can create a driver with parity in features or at all. Some wifi chipset makers are notorious for closed source proprietary drivers.
#7 - Logs
While the average person on Windows likely never seeks out or looks at logs, its a much more common (and expected) practice on Linux. Part of this is because Linux is very good and well organized at logging. The other aspect of it is that when seeking help, most of those offering help will want to see logs first hand.
Its a good idea to figure out how your distro handles logs. How to set what gets logged, where the information goes and how to view it. This doesnt mean you need to know every single log, but at least the basic/broad logs on your system and how to pull them up.
Surprise, most if not all these logs are simply text files. This makes them easy to read and manipulate.
I know logs isn't an exciting topic, however it should give you some hope if you ever need to troubleshoot issues. Since Linux logs are typically more robust than Windows, they turn out to be actually helpful when trying to resolve problems. I cant recall the last time eventviewer in Windows gave me a useful log (but I still check every time). I benefit from Linux logs almost daily however.
To really get comfortable with using Linux, its important to let go of many concepts we have adopted from using Windows over time. Its important to understand that there are ways that Linux operates that are drastically different than Windows.
The above concepts hopefully help compare some of the concepts from Windows and how Linux handles similar tasks or goals.
Some things we take for granted as "computer concepts" are really "Windows concepts", which I believe is what makes some things hard for new users to accept Linux, as its counter to their belief of how a computer functions.
Hope this helps!