The issues you state are not uncommon. Like every field, there is a learning curve that must be scaled to understand how operating systems and their components work. For example, if one wants to learn how their car works, there will be an initial learning curve that must be scaled—to learn the terminology (“jargon”) of the field and the basic assumptions that people in the field make.
With that in mind, we’ll try to answer your questions:
Yes, there are many ways to do the same thing. I understand how this may be horrible for a beginner, but Open Source Software is about choice, and the freedom to choose how to do things. This means folks use method a, and if they’re not happy with it, they’ll modify it to suit their preferences, creating method b. Now, a lot of folks may move to method b, but some will remain with method a. So, for a newcomer, there are many many choices, and that’s what makes it hard. It may sound like a bad thing for newcomers in the short run because they don’t know enough on how to choose between different methods, but in the long run, it’s a very very good thing. For tools that are not FOSS, one does not have a choice—one cannot modify anything. It must be done the way the developer wants to do it.
Well, it’s hard to say. Folks in the community certainly have different levels of understanding of the different components. For example, I’m a package maintainer and know how things work at that level very well, but if you ask me how the kernel works, I don’t really know. One cannot know all of it, most of us will choose the bits that we are interested in and learn those.
Users may not have the same level of understanding, of course, but then they don’t need to know too much unless they run into some issues and need to look “under the hood”.
Forums in FOSS are not tech support. We don’t tell people “yes, this is wrong, this is how you fix it”. Forums are a place where we discuss issues and together try to find a solution. An important aspect of this is to not spoon feed users but instead, work with them to help them figure out what the issue is—so that the next time it happens, they know a little more about how to go about figuring out the issue, and perhaps fixing it.
This is different from corporate support where someone will fix the issue without necessarily explaining it or the fix to the user.
Different people, again, have different ways of diagnosing issues. We like to narrow it down first to the most likely component causing it, and then proposing a fix/work around. There are some notes in the introductory posts in the #start-here category about this (or so I seem to remember).
There are many many books, all including lots of usually overlapping information—but we don’t usually suggest that one go through a book primarily because they may not be up to date, and because they may not apply to all distributions. We suggest “use it, when you run into an issue, search the web, and learn that way”, because no matter how many books one reads on the subject, one will not really learn how to use a system without spending the time on it. Going back to the car analogy, you can learn all the theory you want about cars from books, but it doesn’t make you a mechanic—you have to work on the car to really learn how it works.
Here are some general notes on some “standards”:
- all commands will have a
--help flag that should provide information about their usage
- lots of commands will also have “man pages”:
man man in a terminal will tell you about these
- some may even have longer
info documents but there are getting rarer from what is see.
man info to learn more about this sytem.
- there are websites which host web versions of man pages too (but do check to see that the version these have been generated from match the version of the command you are using): https://helpmanual.io/ (there are others too)
- to find a man page, use the
apropos command: try
- finally, search for the “upstream documentation” that the developers provide. These will often include usage examples. e.g.: DNF, the next-generation replacement for YUM — dnf latest documentation
This is hard to say—distros by definition are different in their composition, i.e., they vary in the software that they include.
- one would expect that each will have a shell, but it could be bash or tcsh or zsh or fish or another—depends on the distro.
- each shell provides some “built-ins”, e.g: bash commands
- most distros will include the GNU core utilities:
ls and so on (try:
rpm -ql coreutils | grep bin to see what commands coreutils provide on a Fedora installation)
- distros tend to include util-linux: try
rpm -ql util-linux |grep bin to see what commands this provides on Fedora
- a default terminal based editor is usually included. Traditionally, this used to be
vi, but it could be anything—depending on the distro. Fedora, for example, moved off vi to nano.
- each distro tends to have a “package manager” because distros usually rely on one. The prevalent ones are
deb. The Fedora ecosystem is
rpm based, so we’ll have commands related to that.
man rpm to learn more.
- on top of the default package manager, most distros will have another utility to allow the installation of packages from its repositories. On Fedora,
dnf is default (
man dnf), but other distros will have their own (
apt and so on).
- nowadays PackageKit is meant to be distro-agnostic. It lives on top of dnf or apt or whatever, so users don’t have to worry about the “backend” and can just use packagekit. The terminal command for PackageKit is
man pkcon for more information. Note that PackageKit will not expose all the functions that
dnf will, just like
dnf will not expose all the functions that
rpm allows. So a lot of us just use
dnf. Gnome-software etc. are built on top of PackageKit
As noted above, this is hard to say. One will need to look at the specific distribution.
Yes, there is. This won’t be exhaustive, because I’m sure I’ll miss something, but generally commands follow:
arguments can be compulsory or optional, and they can be positional or use “flags”.
does not require any arguments, but can take many many arguments that are provided using flags:
ls -l -a -s -h
these can usually be passed together:
Some flags may not require additional information, others may:
Finally, arguments have a “short form” and may have a “long form”. The short form is the
-a, the long form is
--all. The second is just longer and more readable, and from what I see, is not compulsory.
do the same thing (as
man ls will tell you).
There are now a number of argument parsing libraries out there, and they’ll generally follow this standard, but may provide some extra functions. Bash uses
man getopt), Python has multiple libraries with the standard being argparse, and so on.
Well, if you want to understand it from the ground-up, you need to take a course on Operating Systems to begin with—that will cover the data structures etc., and paging and so on, to give you an idea of how the kernel works.
If you want to learn how a whole Linux based OS is built and works, most will direct you to the Linux From Scratch project.
To understand how distros work, the simplest answer is “use it daily and you’ll learn as you use it”. There is no short-cut, unfortunately—one can’t just learn everything you wish to learn from a book/course. Reading and participating in forum discussions is a great way to learn from others queries.
We have a whole SIG dedicated to this:
The thing to do is to pick anything of interest and just get started. That’s how we all learn while contributing.
The same holds. Use it daily. When you do something, think “is there a better way to do this”. Search the web. It is almost impossible that someone hasn’t already asked the question before. You’ll usually find an existing forum discussion around the subject. Same for when you run into an issue. Just search to see what’s already been done.
To understand what’s happening, even if a command is provided, don’t, just run it and move on. Read the docs for the command, see what each argument is doing. All of that is up to the user. Folks short on time are happy to “fix and move on”, folks that want to learn will be happy to spend some time investigating what’s going on.