Updated: May 20, 2014
I have just realized that there is really no super-comprehensive guide on Windows versus Linux for new users, converts and those curious about migrating from their familiar world of Windows operating systems to the strange new constellation of Linux. Or at least, I have not written one such article yet. But now I have, and this shall be your one stop-shop for all questions on Linux, from here to eternity.
All right, so let's say you are a Windows user, and you have HEARD of Linux. You want to try this new technology, but the quantity of information coming towards you from enthusiastic veterans is simply overwhelming. Let's break it down.
Tasks for today
We have a lot on the agenda. We will begin with several questions and answers on the common differences between the two operating systems. After that, I will discuss the more technical parts. And after that, we will talk about actually installing Linux. The flow may not seem logical at first, but trust me.
Table of Contents
- What is Linux?
- What is it good for?
- Major differences between Windows and Linux
- Where do I find Linux?
- Linux package managers
- Linux command line
- Let's assemble all together
- What do we have so far?
- So where do I find Linux?
- How do I start?
- How does Linux work?
- Common desktop activities
- Best Linux resources
- Serious questions to all readers
- Updates & user questions
Linux is an operating system, very much like Windows. It came to life in 1991, by merging the Linux kernel developed by Linus Torvalds, with the GNU set of programs and applications. Because of this, Linux is sometimes referred to as GNU/Linux.
The Linux kernel has been developed and released under a GPL license, which means that its source code must be freely available to anyone. However, over the years, companies have shipped Linux packaged with proprietary code included, as well as charged money for use and the support model. In the home segment, most if not all versions of Linux are free of charge. Sometimes, you will hear words like free and open-source. This is what those folks mean by that.
Believe or not, Linux has many uses for everything around you. It is the prevalent operating system everywhere except the desktop. Your Android smartphone is in fact a Linux box. Your router, your TV, your fridge, they all run Linux underneath.
Linux is also the top choice for super-computers, it is heavily used in the digital world for development and production of 3D movies, and it is the bedrock of the Web and most data centers in the world, due to its highly flexible and extensible nature, as well as relatively low usage costs.
All right, but so far, this does not tell us anything about where to find Linux, how to install it, or how to use it. Now, we will walk through a handful of concepts and pain points that pose a serious block for most Windows users. We will elaborate on all those strange and alien ideas and bridge over them with elegance.
Indeed, you may assume that there is a single Linux entity where you can find Linux, much like Microsoft provides Windows. This is not the case. Linux is not a single entity. In fact, you do not use Linux directly. Which is why we must explain Linux architecture first.
To do this, we will begin with Windows. For home users, Windows is essentially the desktop they see and use. In Windows XP, it was called Luna. In Windows 7, it's known as Aero. In Windows 8, you have the Modern (Metro) interface. But this is not the whole of the operating system.
Windows, like any operating system, has several layers:
- Kernel - the heart of the operating system, which initializes and interfaces with the hardware, schedules tasks and manages memory, and actually allows you to use your system as you normally do.
- Drivers - Software that interfaces between hardware peripherals, like the network card, graphics card, hard disk, and others, and the kernel, and effectively allows applications to utilize hardware resources. The drivers are usually supplied by third-parties, like Atheros, AMD, Nvidia, Hitachi, and many others.
- Graphical interface - what you see and perceive as the desktop.
- Applications - software that runs on the desktop.
In Windows, the first three components are tightly coupled. You have a single desktop interface, and it cannot be detached from the underlying kernel. You must use Windows as it. You cannot have a different desktop interface. You can change themes, but the core remains the same.
In Linux, things are a little different:
- Kernel - Because of a slightly different design (Computer Science nonsense), the functionality of the Linux kernel is not identical to Windows. First, the kernel can be compiled with drivers. This means you get support for hardware out of the box and you do not need third-party software. Second, you can load new drivers on the fly. We will address this soon. Effectively, because of the free and open-source nature of the kernel, it is possible to bundle drivers into it. This means the Linux kernel supports a wide range of hardware devices out of the box.
- Drivers - Some software cannot be distributed freely, due to licensing reasons. Therefore, you may not have all the drivers you need available, and you must go to third-party vendors to obtain them. This is perfectly understandable.
- Graphical interface - This is the big difference. Linux can run without a graphical interface. Two, there are actually several graphical interfaces available for Linux. Not just different themes, but actually complete sets of libraries that communicate between the kernel and the applications. Imagine using the OSX interface on Windows, that's the best analogy.
- Applications - Same as with Windows.
So what do we have here? The major differences in the architecture of Windows vs. Linux is that: a) Linux can bundle drivers into the kernel and load them on the fly b) Linux can run without a graphical interface, or with many different ones.
Now that you understand this basic difference, we will now talk about how Linux is shipped to users. We will now elaborate on another important concept - distribution.
Linux distribution is a unique set containing: kernel, one or more desktop environments, and an application bundle. This is the actual product that you use directly. You use Linux distributions, and inside, they are powered by the Linux kernel.
Linux distributions are developed and maintained by companies as well as individuals, hobbyists, volunteers, and community users. Large, successful companies ship their distributions to the commercial market along with expensive, long-term support contracts. At home, most distributions can be used free of charge.
Let us name several popular Linux distributions. For home users, the most popular name is Ubuntu, a Linux distribution created by the Canonical Group, a company based in the UK. Canonical offers Ubuntu for free. It means you can go to the Ubuntu website and download the operating system. We will soon elaborate on how this is actually done.
Another popular distribution is Linux Mint, which is a community-developed effort. Linux Mint is partially based on Ubuntu. It is also available for free. You also have openSUSE, which is a product of Novell, a company that also has an enterprise flavor available for use by business and large data centers. Likewise, there is Fedora, a product of RedHat, the largest Linux company in the world. I have named these four as the top candidates, but there are many, many more distributions available.
All right, so let's break them down some more, shall we.
Ubuntu is composed of: Linux kernel + Unity desktop environment + apps.
Linux Mint is composed of: Linux kernel + Cinnamon desktop environment + apps.
Fedora is composed of: Linux kernel + Gnome desktop environment + apps.
openSUSE is composed of: Linux kernel + KDE desktop environment + apps.
As you can see, a pattern begins to emerge. The big difference between most distributions is in which desktop environment they choose to use, and the application set. This begs a question. If you were to use Gnome in openSUSE, would that make it the same as Fedora?
The answer is: no.
I have oversimplified the comparison, of course. The differences are larger than just the use of desktop environments. But this opens another layer of complexity before us. Now, let's see all the core components of a typical distribution.
We have the following:
- Kernel - Every single distribution uses its own kernel, ever so slightly modified. The default Linux kernel is known as the mainline. It is maintained on kernel.org, and the changes in it are governed by a large body of professionals, most of which are employed by large Linux companies, with the ultimate veto vote in the hands of the Linux founder, Linus Torvalds. Every distribution uses its own kernel adaptations. The kernels between different Linux distributions are often not mutually compatible.
- Graphical interface - As we mentioned earlier. Do remember that Linux distributions can run WITHOUT one, if needed. For example, most server and enterprise flavors are normally configured without a desktop interface, because it is not needed.
- Applications - Each distributions packages its own set. You can enhance the default by installing additional programs of your own. This is done through centralized management facilities very similar to Windows update, known as package managers. Quite often, each distribution uses its own unique facility.
- Package manager (Linux update) - We are now introducing a new concept, but do not be alarmed. This Android Play Store. This is exactly that. Because of the free and open-source model, most Linux software can be distributed in a centralized manner from common servers. These servers are known as repositories. Think of them as Windows update servers really, only custom tailored per distribution. The software component that communicates with the repositories and allow users to download software as well as updates is known as the package manager. Most distributions use their own unique package manager.
Let us compare to Windows then, shall we? In Windows, you have the kernel plus the one default desktop interface. You also have applications, Windows update, plus you must manually download programs that are not part of the standard Windows bundle, due to licensing restrictions.
In Linux, you have distributions. Each distribution comes with its own slightly modified kernel, its own default desktop interface plus optional additional other desktop interfaces, its own set of applications, and its own package manager, a Linux update facility that allows the system to install programs and updates for the WHOLE distribution, because of the very convenient licensing rules.
Disclaimer: Linux distributions can ship only a subset of all the available software in the world. For example, if you need specialized payware, you will still need to manually download and install the software. But for the free and freely-redistributable components, Linux distributions can provide free updates, updates and additional downloads from their centralized repositories.
Now let's talk a little more about desktop environments and package managers, because they seem to be the big differences when compared to Windows.
A desktop environment (DE) is an implementation of the desktop metaphor made of a bundle of programs running on top of a computer operating system, which share a common graphical user interface (GUI). A desktop environment typically consists of icons, windows, toolbars, folders, wallpapers and desktop widgets. These components are controlled by a piece of software called a window manager, which is responsible for the placement and appearance of windows within a windowing system in a graphical user interface.
Now, we dive one more step deeper - the window manager.
In Windows, you have the Desktop Window Manager (dwm.exe), which does the hard work in displaying the Windows interface to users. Do note that DWM is tightly coupled with the kernel's graphical subsystems and is largely non-replaceable.
In Linux, you have the X windows system, which does pretty much the same thing as DWM, except that the nomenclature of concepts and terms is different. The X sits between the kernel and the graphical interface. The X is composed of the display server and the window manager. This allows it to be separate from the kernel, unlike Windows.
So, the desktop environment now comes down to the following:
- User applications.
- Graphical interface.
- Display server + windows manager.
Underneath these, you have the kernel and the hardware. So what is a desktop environment? It is a set of programs, an interface, a display server, and a window manager. Let us introduce a few.
This is a desktop environment that you will most likely encounter if you install the default version of Fedora, for example. GDE uses the Gnome Shell as its graphical interface, X11 protocol to talk to the display server, X.Org display server, and Mutter window manager. Gnome Desktop Environment is focused on simplicity and ease of use, with few options shown to the user.
KDE is a default environment for openSUSE. It utilizes the KDE Plasma via X11 or Wayland protocol to talk to X.Org or Weston display server, and it uses the KWin window manager. KDE is more Windows-like in appearance, and it features option-rich menus.
This is the default for Ubuntu, and only Ubuntu. Unity mostly relies on Gnome components, but Canonical has expressed desire to use its own implementation of a new display server called Mir, rather than using the Wayland/Weston combination, which has caused somewhat of a rift in the Linux community. Unity has been designed with multiple form factors in mind, including touch, because of the Canonical's desire to use Ubuntu on smartphones and tablets.
Cinnamon DE is the default in Linux Mint. Originally, Cinnamon uses a fork of Gnome Shell, but recently it has removed all dependencies on the graphical interface and uses its own internal implementation. The default window manager is called Muffin.
There are many others. But I have purposefully avoided mentioning them to avoid confusion. For example, there's is also Xfce, which uses Xfce4-panel + X11 + Xorg + Xfwm, then there's MATE, which uses Gnome Panel + X11 + Xorg + Metacity. Then, LXDE uses LXSession + X11 + LXDM + Openbox. There are still more. To make things even worse, there are also special, compositing window managers available for older desktop environments, including the popular Compiz. And now I dare show this image:
As we have mentioned earlier, Linux package managers are collections of software tools designed to automate the process of installing, upgrading, configuring, and removing software packages for a computer's operating system in a consistent manner. The said consistency is maintained by using a database of software dependencies and version information to prevent software mismatches and missing prerequisites. Packages distributed by package managers consist of software, applications and data. These packages also contain metadata, such as the software's name, description of its purpose, version number, vendor, checksum, and a list of dependencies necessary for the software to run properly. Upon installation, metadata is stored in a local package database.
A package manager normally work as follows:
- Package manager is launched.
- User performs an action - installation, upgrade, etc.
- Package manager consults its internal list of servers - repositories - and contacts them with the requested action, including resolved dependencies and other requisites.
- Necessary packages are downloaded and installed.
This is exactly how Windows update works, except that package managers can be used to manage the whole distribution, except a very small number of proprietary components and manual installations done by the user.
The licensing terms of a distribution dictate what software can be bundled with the distribution, what software can be made available for download from the repository, and what software may only be hosted at the official vendor servers. For example, in some countries, distribution of MP3 codecs is not legal without a royalty fee. Therefore, the user will have to initiate the download of codecs using the package manager. Another scenario is that the user will have to configure an additional repository to be able to download a piece of third-party software.
Like desktop environments, there are many package managers. To make things worse, here too, we are dealing with several layers of complexity and fragmentation. Package managers are normally composed of the following:
- Graphical interface - a visual tool much like Windows update or Android Play Store.
- Command line interface - a command prompt (cmd) like work environment.
- Underlying logic engine - the software that resolves dependencies and controls the system.
- Underlying binary format - packages are archived in a unique way.
Now, let's us briefly explore some of the package managers and the different ways they can be used. We will touch on the repository management, additional third-party sources, installation of software, and more in greater detail later in this guide.
Borrowing some from my Netrunner article, this is the default package management framework in RedHat-based distributions. For you, this means Fedora. Now, to complicate things still further, the graphical interface used with YUM depends on the desktop environment. YUM can be used with Apper in KDE, or it can be used with YUM Extender in an older implementation of Gnome, version 2.x as opposed to the recent 3.x family. The command line is identical, and it invoked by the yum command. We still have not discussed Linux command line, but we will soon enough.
This is the default package manager in openSUSE. The frontend is called YaST, and the command-line component is called zypper.
APT is used in many Linux distributions, including Ubuntu and Linux Mint. There are many frontend components available for APT. To name a few, there are Ubuntu Software Center, Muon, Synaptic, and many others. The command line component is apt, but the full usage depends on the invocation of a desired function.
Like with the desktop, there is a very long tail of package managers and their implementations. Let's do a bit of a name dropping. Puppy Linux uses its own package manager called PETget. Slackware uses slackpkg, Gentoo uses Entropy, Archlinux uses pacman, and so forth. It's really complicated. And hardly the bottom of our stack.
The Linux reality also becomes a little more difficult when you consider the fact that package managers work with multiple, mutually-incompatible package formats. To give you the best of analogy, think of Windows cabinet files (CAB) and Setup information files (INF). Together, these two can be used to define an installation package, for example.
In Linux, there are several package types. The most popular ones include:
- RedHat Package Manager (RPM) format - RPM files are archives that contain installation files and scripts, which are then installed in the right places in the Linux filesystem structure. RPM is mostly used with RedHat and SUSE Linux flavors, as well as other distributions that are partially based on these two.
- Debian (DEB) format - DEB files do the same thing, except the format is different. It is not possible to use Debian files on RPM-enabled systems, and vice versa. Package files can be converted, but due to significant differences in the architecture, the installations will probably not work. DEB is used by all Debian-based distributions. Debian is a distribution itself, but it is a foundation for many others, including Ubuntu, Linux Mint, and more.
Both RPM and DEB files can be managed directly, without package managers. Users can install, remove or upgrade installed software. This is very similar to running Windows MSI or EXE installer filers manually, rather than going through Windows update, for example. On top of that, regardless whether packages are being installed using a package manager or manually, RPM and DEB systems also have their own internal databases, which are used to manage the consistency of installations.
Additional package formats exist, including PUP, PET, TGZ, XZ, and more.
As you can see, most package managers have a graphical and command line interface elements. This means you can manage software in a distribution even without a desktop environment. That's our next topic.
Let's talk about the Windows command line first. Believe it or not, Windows has a very rich and powerful command line. Several implementations really. There's the standard command prompt, and you will sometimes want and need to use it. Then, there's the new PowerShell. Last but not the least, let us not forget the whole WMIC framework, which really lets you control the whole of Windows using command line only.
Linux command is very similar, except that you can launch it from within the desktop, much like Windows, but also on a system that runs no desktop. The command line is then usable through what is called a console. Imagine your monitor showing a blank black monitor with a blinking cursor in the top left corner, and a tiny prompt marked $ or # or some other symbol. This is exactly that.
All Linux systems have multiple consoles available, which you can switch between using keyboard shortcuts. This allows you to work in both the graphical and command-line interfaces at the same time. We will address this soon.
So what does one do on the command line? One executes commands. How is this done? Well, let us briefly touch on what the user actually sees and does when working with the command line.
The blinking prompt, so to speak, is not just some ethereal entity. A console itself is a container. A special program runs inside the console window called a shell.
A Linux shell is a command-line interpreter or shell that provides a traditional user interface. Users direct the operation of the computer by entering commands as text for a command line interpreter to execute, or by creating text scripts of one or more such commands. The most popular Linux shell is BASH. There are others, like TCSH.
Users typically interact with a Unix shell using a terminal emulator. Terminal emulator is a program that emulates the behavior of a standalone console. For example, to give you a good analogy, the Windows CMD is an emulator, because it wraps the program in a desktop window with its own additional functions, but inside, it behaves like the old DOS prompt. The same thing in Linux.
Popular terminal emulators include xterm, Konsole, Gnome Shell, and many others. All of these are programs that you can launch on a typical Linux system, like you would anywhere else. Open a desktop menu, find the program, and launch it.
The fine details of how Linux shells are used are beyond the scope of this article. Still, I am going to give you a brief overview. Let's look again at that prompt, shall we.
What you see is the name of the user currently running the shell, which is roger, the name of the host, which is roger-laptop, a divider in the form of a colon mark, a tilde sign which signifies that the current folder we are working is the home folder of the current user, and the dollar sign is the standard sign for a regular user in Linux.
Now, the user can run commands. For example, dedoimedo.exe. This is what we want to run. So how would you go about doing that. Very much like Windows, with some small differences in syntax.
dedoimedo.exe would execute the command by searching a special list of default paths where the system expects to find the dedoimedo.exe command. If the command does not exist there, it cannot run. In other words, it is not in the PATH.
./dedoimedo.exe would run the command in the current folder. BTW, let's learn another word. Directory. It is not that strange, and in DOS, folders were called directories, and there's even the command dir, to display the contents thereof.
So yes. What's the big difference from the earlier attempt. Dot and slash. We now learn another concept, and that is that every Linux directory has two special hard links. BTW, hard links are a type of file. Anyhow, a single dot (.) is a hard link to the directory itself, while two dots (..) is a link to the parent directory, i.e. one above.
Again, this is nothing magical. This is also true in DOS. Familiar with cd .. to go back up one level? Same thing here. This is your way to navigate up and down the hierarchy of directories.
Slash (/) is the default delimiter in Linux, denoting a new level of hierarchy in the file system. In DOS and Windows, it is the back slash (\). So now, things are really familiar. What you would mark in Windows as c:\users\roger would become something like c:/users/roger. This is not fully correct, but bear with me.
Therefore, dot slash (./) means execute the command in the current directory, followed by the file name itself. Likewise, ../dedoimedo.exe would try to look for execute the command in the directory one level up, and ../../../dedoimedo.exe would go three levels up.
How far up, you ask?
Well, In Linux, the top of the filesystem hierarchy is marked with the slash (/). This is known as the root of the filesystem, because everything originates there. And compared to Windows, there are no multiple roots. While in Windows you have c:, d:, e: and others, in Linux there's only one root. You can compare root to My Computer, if you want.
Therefore, you can now execute the dedoimedo.exe file using a full path rather than a relative path, like before. Using the earlier analogy, /users/roger/dedoimedo.exe is the full path to our command. In Linux, users' home directories are normally marked as /home, and so it becomes /home/roger/dedoimedo.exe.
Now, we can finally play with commands. Linux commands can be shell builtin commands, in which case there is no full path. Change directory (cd) is a good example. Or they can be external commands, located somewhere in the filesystem. Commands take options, flags, switches, and arguments, much like Windows.
We mentioned dir earlier. In DOS, you can do just dir, but you can also do dir /? to get all the options, or dir /p to pause the run when the screen buffer fills, /a to show all attributes, /l to user lowercase, and more.
Linux commands also take these extra options. How would you know, though? For any command, you can do a couple of neat tricks to learn more.
This will invoke the manual page for the command. Think of it as pressing F1 inside a console. You will get a long, detailed explanation what the command does and how it can be used. You can also always read man pages online, if you want.
command -h or command --help
This will display a shortened help, similar to Windows /?, allowing you to quickly master the commands you want and need. For most people, the second option is faster, but not necessarily better for learning.
And now, here are the top 20 commands, which will help you find your way around during the first few hours of your use of Linux. Please note that this is just the tip of the iceberg, and therefore, you should not think you're done after you have executed these. Remember, Linux is case-sensitive.
ls - This command with list files. Like DOS dir. It also has many flags. For example, -a will list all files, including hidden ones. -l will list all file attributes, including owner, size, permissions, full path, etc.
ls -ltr /home/roger
ps - This command will display the running processes in a list. Think of it as a one-time snapshot of a command line task manager. The exact details of this command works, and what all the little fields mean is beyond the scope right now, but you might want to look at my extremely advanced and extensive hacking articles one and two and three and four. Too advanced for you right now, you've been warned!
cd - This is a shell built in. It allows you to change directories. cd <path>, either relative or absolute, will take you where you want to go, provided the path exists. Some special options exist. cd - will take you to the previous directory. cd on its own will change your path into your home directory. cd ~ will do the same thing.
pwd - This command will show your current location in the filesystem
cat - This command lets you print the content of a text file to screen, or to a file.
cat "/home/special\ file\ with\ spaces"
less - This is a very basic text viewer. Like cat, you can use it to see file contents, but you the stream will not run uninterrupted, you can read screen buffer at a time, back and forth, and even do some basic search.
which - Executed against a program name, it will show the full path for the program.
mkdir - This command lets you create directories. The -p flag lets you nest them.
mkdir -p /home/dirs/in/depth
touch - This command will create empty, 0-length files.
cp - This command will copy one or more files.
cp igor igor.bak
mv - And this one will move (cut it).
mv igor1 igor2
rm - Warning! This command will delete files and/or directories. Remember, with the right privileges and the use of wrong permissions, you can easily destroy your system. It is very important to be careful when running the rm command.
chmod - This command can change permissions on a file or a directory. For example, you may want to change a file so that it is readable only. In that case, you will remove the other permissions, leaving only read in place. For more details on the Linux file permissions management, take a look at this tutorial.
chmod 700 /home/secrets.txt
chown - Similar to the command above, chown allows you to change the user and group ownership of a file. For instance, change it from roger to bodger.
chown roger:mygroups /tmp/file.old
echo - This is a very useful and practical command that can display lines of text and values stored in the shell environment variables to the screen. For example, echo $PATH will display the contents of the PATH variable. So if you have a problem with running a file, then you might want to check whether its path is included in the PATH. You can also use it on conjunction with rm to learn first what kind of files you would remove before actually deleting.
export (in BASH) - This command lets you configure environment variables, so that programs that rely on their presence can use them. For example, when you try to run a command without using the full path, the shell itself will consult the PATH variable to determine where to look for the file. If you need to change the variable, you will use the export command. The TCSH equivalent is setenv.
du - This command lets you check the estimated usage of a directory. This is useful if you want to check the space usage or a quota of a particular directory on your system.
du -Shi /home/videos
df - This commands lets you see the usage of all mounted filesystems. The word mounted means effectively in use. This is a very handy way to check what your disks contain. The usage is equivalent to the disk management facility in Windows.
find - This command can be used to search for files on your filesystems. The evil twin of the find command is the locate command. The big difference is that locate uses a pre-built database, which makes it faster, but the results might not fully reflect the actual most up to date content of the filesystem.
find . -name \*movie\*
grep - This command can be used to search for string patterns in text files. Let's say you have several files, and you want to look for words doctor and sister in there. Well then, a typical search with grep would be:
grep -Eir 'doctor|sister' /home/*
There are many other useful commands. For example, top is the command line task manager. With kill, you can terminate offending processes. You can create archives, like for instance ZIP, TAR, TGZ, BZ2, and others from files and directories using the tar command. You can print the beginning and end of files with head and tail commands, respectively. You can also manipulate text stream with the very complex yet awesome programs sed and awk. Then, dd lets you write direct copies of files. And the list goes on and on.
Most importantly, commands can be chained - using the pipe (|) symbols. This lets you stream the output of one command as the input of another, and create a complex execution. For example, list a content of a file, sort if alphabetically, then count unique entries. This kind work is the basic principle for scripting.
cat file.txt | sort | uniq -c
You can also do system administration from the command line. Install software, schedule updates, shutdown or reboot the system, start or stop services, and more. Now, let us see three examples of how we can use package management from the command line. We will demo using the three leading utilities we mentioned earlier:
apt-get install firefox
yum update kernel-devel
zypper search vlc
Fully mastering the command line is a long and arduous journey. You want to learn how to write your own scripts and programs. You want to able to run unattended tasks that maintain your system, or combine the execution of multiple programs into one.
We talked about commands. But what about the system that contains these commands. So maybe a brief overview of the filesystem hierarchy and architecture is needed. Again, we will use the Windows analogy to make it simple.
So in Windows, you have the C: drive. Under it, there's C:\Windows, which contains core system files. There's Users, which contains users' personal folders. There's C:\TEMP, which is used for temporary files. However, there might be multiple drives on your system, and there is no single view to check them all, unlike the root in Linux. The closest analogy would be My Computer. Anyhow, the classic Linux filesystem hierarchy will look something like the following:
- /bin contains basic programs (binaries) like cat, ls, awk, etc.
- /boot contains files necessary to boot the system.
- /etc contains critical system configuration files.
- /home contains users' directories EXCEPT one special user.
- /lib contains system libraries.
- /opt contains optional installations.
- /root is the home directory of the special user called root.
- /tmp contains temporary files.
- /usr contains programs like Firefox, VLC, LibreOffice, games.
- /var contains system logs and runtime files.
There are other paths, but they are not important right now. Each one of these can be called a directory, but it can also be called a filesystem, because the actual data may reside on a remote server. For example, /home directories could be network drives, formatted with their own filesystem.
The default Linux filesystem format is EXT (at revision 4), but many other file format exist, including EXT2, EXT3, BTRFS, XFS, and more. In a nutshell, they are equivalent to the Windows FAT, FAT32 or NTFS file formats, with many additional differences.
Most if not all Linux distributions can natively see and use (read & write) to Windows filesystems, whereas Windows does not have a default ability to do the same thing with Linux filesystems. Therefore, if you connect a drive formatted with one of the Linux filesystems to a Windows box, it will be visible but it will appear unformatted or unusable.
One last thing before we go up and piece our complex puzzle into a single piece. Disk management. We did mention the du and df commands, but the output may be confusing to someone who has never worked with Linux before. Once you figure it out, it is fairly trivial, but not the first time.
I have explained the disk notation in my tutorials linked above. But we shall briefly recap. Windows marks disks the following way: Disk<number>, e.g. Disk0, Disk4, etc. Partitions are marked with letters, e.g. K:, M:.
Linux marks disks based on their controller type. IDE disks are marked hd<letter>. SATA or SCSI disks are marked sd<letter>. For example, the third SATA disk is sdc. Partitions are marked numerically, from 1 onwards, with the first four reserved for primary partitions, and numbers 5 and above for logical partitions. For example, the second primary partition on the first IDE disk is hda2. The first logical partition on the first SATA disk is sda5. This is correct for the MS-DOS partition table. With the GPT scheme, this are slightly different, but still the notation is correct. Virtual machine disks used inside virtualization software may be marked with vd or xd or other letter combinations.
Floppy disks are marked as fd, CD-ROMs often as sr or cd. Special devices like cameras, scanners or printers may get their own unique labeling scheme, which can depend on the vendor, model type as well as the specific distribution implementation.
Now, let's take a look at our distributions once more.
Ubuntu is now a special, modified Ubuntu kernel + Unity desktop environment + DEB file format + apt command line package manager + Ubuntu Software Center GUI package manager + its own application stack.
Linux Mint uses its own kernel + Cinnamon + DEB file format + apt + Software Center + its own application stack. The same applies to Fedora and openSUSE and many dozens of other distributions. And there's STILL more granularity, which we have not touched yet, but we might elaborate later on.
Let us recap all of what we have learned in this tutorial.
As you have learned so far, Linux is not a single entity. It is a complex matrix of components. Mastering Linux means mastering many different things. And if you are interested in trying different distributions, it often means you learning a complete stack of applications, desktop behavior, package management, and more.
In Windows, there is only one dimension. In Linux, it's the number of distributions multiplied by the number of desktop environments multiplied by the number of package managers multiplied by the number of application bundles. It is really very difficult to know them all well, and they are sometimes very different. Therefore your Linux exploration should initially focus on a single distribution and its own unique set.
One thing that can help you if you want to try multiple Linux distributions is to use the command line, because you will maintain a higher level of consistency than with GUI tools, which significantly differ between desktop environments.
Well, now that we know what Linux is all about, we CAN finally download it. In fact, we will download and use a Linux distribution, one of the many that we have mentioned earlier. Now, let's elaborate on the available choices.
I have mentioned four, and we will focus on these four. For new users, going into the full list of several HUNDRED available Linux distributions is a bad idea. And now that we are here, let's introduce another word - distro, short for distribution.
Ubuntu is one of the most popular Linux distros in the world. It is very easy to install and use, and it has a large install base. Many veteran Linux users recommend this particular flavor of Linux to new users. If you are interested, please take a look at my review of the latest edition to get a hunch what this is all about.
Ubuntu family is very rich, so you might also be interested in Kubuntu, which comes with the KDE desktop, or Xubuntu, which comes with the Xfce desktop. These two are more like Windows in spirit and feel, so new users might find them easier to master.
Linux Mint is another highly popular distro, perhaps even more than Ubuntu according to some sources. Now, this is really an excellent choice for most Windows users, because it comes with pretty much everything pre-configured out of the box. I even voted this the best distro of 2013. Both Mint and Ubuntu offer five years of free updates for their long-term support editions.
openSUSE is another possible choice. In the last years, it has waned a little in popularity, but it can still be a strong candidate. You might want to take a look at my latest review for additional impressions.
Fedora is an interesting distribution in that it ships with no proprietary software, so if you need codecs for music or video, you will have to install them separately. It is also considered relatively unstable, because it often introduces a lot of new and modern technology. Plus, the support cycle is quite short. However, it can be a good choice.
Let's say that this article has actually convinced you to try Linux. Before you do any hard ground work, you must read some more. I most warmly recommend that you invest a little more time reading several guides that I have put together recently, which explain in fanatic detail all that you need to know to run Linux at home, safely, successfully.
This is the first question you should ask. You should NOT use Linux, unless you are fully confident in your ability to install Windows. This may sound harsh and cruel, but believe me, it is for your own good.
To wit, you should read my Windows 7 installation guide, and then the same thing for Windows 8. Not only do both these articles have a wealth of knowledge on the subject matter, they also touch on all the extra steps needed for using Linux at home.
Now, after you have mastered the step above, you are ready to attempt to install a Linux distribution of your own. You may want to start by testing in a virtual machine first. This way, you can learn from your mistakes toward the real thing.
I have written a ton of articles on how to install a wide range of Linux distributions. You might want to start with the latest Ubuntu guide. Then, take a look at an older one. After that, go back some time in history and consult some of my other installation guides. Although they have been written many years ago, they are relevant and accurate.
After you have successfully mastered both a separate, standalone Windows and Linux installation, you are ready to use the two at the same time. This is known as dual-boot, and sometimes also referred to as tandem, or side-by-side installations.
You should take a look at my dual-boot tutorial for Windows XP and Kubuntu, as well as the more recent one featuring Windows 7 and Ubuntu, and finally, the latest one featuring Windows 8 and Ubuntu 14.04. Now, the world of dual-booting opens up a whole new world of additional possibilities, as well as technical complications.
You will need to take into consideration data backup, system imaging, bootloader configuration, disk and partition management, and many other issues. All of these topics are covered in detail in the guides above.
So let us say that you decided to give this a try. Now, I am going to talk a little about how Linux works, from boot to desktop, the functionality, the accounts, as well as the notable difference from Windows, and that is Linux can run in a live session. This means that before you install a machine, you can boot into a fully functional environment that is visually almost 100% identical to what the system will look like after the installation.
In the live session, you can then test hardware compatibility, look & feel, check programs, and only then decide whether you wish to install this particular flavor of Linux. This is a huge advantage compared to Windows. Furthermore, this allows you to use Linux as recovery systems, because you can start it on non-bootable hosts and repair them.
Here is a simplified explanation on what Linux does once you power on the machine. First, there's BIOS or UEFI, which initializes the hardware. It also activates the first bootable disk that you have configured in the BIOS or UEFI menu.
It goes into the Master Boot Record (MBR) of the first bootable disk, where a bootloader is installed. The bootloader entry tells the system where to look for the kernel image and the initial filesystem (initramfs or initrd) image. Where in the aforementioned context means which disk, which partition.
The kernel image is a compressed kernel, the actually heart of the operating system. Initrd is a compressed image containing drivers for hardware, needed to initialize most of the system resources. The kernel and initrd are loaded into memory and executed.
The system initialization process (sys_init) starts the first process called init. This special process is a kernel thread, with the process identifier PID=1. Init then goes to /etc/inittab and reads the configuration. This files tells the system in which runlevel to start.
Linux runlevel is a complete state of a system. It is somewhat equivalent to what you would see when hitting F8 during Windows boot to get to the Safe Mode. In the Safe Mode menu, you can boot to command prompt, command prompt with networking, and more.
There are seven Linux runlevels, marked numerically 0-6.
- 0 is the system halt state.
- 1 is the system rescue state - you boot here to fix system problems. It is also known as Single mode, and sometimes it is referred to as s or S. It is a runlevel with only one user, the special account we mentioned earlier called root, without desktop environment or network.
- 2 is a console-only runlevel, with no networking.
- 3 is a console-only runlevel, with full networking. This is the typical mode of use for most servers worldwide. The servers run in this mode, and users connect to them using remote shell programs, working on the command line.
- 4 is normally undefined and unused.
- 5 is the full desktop mode, like you can see in screenshots above.
- 6 is the reboot state.
When init selects the default runlevel, it goes into /etc/rcX.d, a directory that contains symbolic links to the /etc/init.d/ directory. Symbolic links are like shortcuts. The letter X corresponds to the runlevel. So for runlevel 5, the directory is rc5.d.
Init then starts all services using service scripts marked SXX, where XX is a number, in ascending order from 0 to 99. It tries to resolve dependencies, and then it runs the programs listed in these scripts until the system is fully booted and functional. Conversely, during shutdown or reboot, it runs the kill scripts, marked with KXX in descending numerical order.
This is the classic invocation, and it is not always correct. Some Linux distributions do not use all the seven levels, and some levels are simply identical to others. Some Linux distributions use different methods of starting services, including boot sequence mechanisms called systemd or upstart. But that's advanced stuff.
Desktop environments are also started and initialized, until the user is logged in the full desktop session. Do you remember the virtual consoles we mentioned earlier? Well, you might want to know the desktop session is shown on the seventh virtual console, which can be accessed with Ctrl + Alt + F7. Function keys F1 through F6 access command-line only sessions.
Finally, we need to distinguish between two major user types. There's the system administrator user, called root, with the identified number 0 (ID=0). Then, there are regular users, with generic names.
It is a little confusing that the word root is used for three different things: the root of the filesystem tree, marked by slash (/), the root user, the system administrator user, and the root user home directory, found under /root.
You can identify these different types of users if you execute the Linux task manager. For example, from the command line, then you will see processes that belong to root, as well as other users.
Root is a privileged user, and it is designed for system administration. Regular users do not have permissions to make system changes. This is similar to the limited account concept in Windows. However, in Linux, regular users can elevate their privileges through the sudo mechanism. This allows a temporary elevation of rights to perform a specific administrative task. In Debian-based distributions like Ubuntu and Mint and others, the default is to use sudo rather than authenticating as the root user. In RedHat-based distributions, the second method is more common. In both cases, you need relevant passwords.
On the other hand, to switch to the root user:
Now you are in a Linux desktop? So what do you do now?
Now, remember our earlier conundrum. There is no one desktop environment, so the learning process can be many-fold. It also presents me with a challenge of showing what to do, because each setup is ever so slightly different. But let's try a generic approach. Indeed, here's a desktop, it does not matter which or why:
So what do we have here. In the left bottom corner, a menu, it invokes a menu very much like the Windows start menu. There's a taskbar full of icons, only this bar is called a panel, or rather, a bottom panel. In the right corner, a system area. Very much like Windows. Here's the system menu, open - this is 100% like Windows:
Yet another, even more Windowsy example:
Another example with a classic menu positioned at the top:
You have icons on the desktop. Click to launch them. Some desktop environments offer a double-click mantra, others, like KDE, use the single-click approach. But in a nutshell, once you get the initial fear, the installation, and the complexity of understand the Linux world, the usage becomes trivial.
You can also look my Netrunner desktop environment showdown, too.
The truth is, most of the software you might want to use is available in the Linux repositories, especially if you are fan of free, open-source solutions. Of course, you will not find most Microsoft and Adobe products, but many others will be there. Or you may choose alternatives.
The important thing is, you do NOT NEED to wander around the Web, looking for software. You can just use your command-line or graphical package manager, and search for the software of your liking. Most package managers are rich application stores, and they will give you star rating, screenshots, reviews, and more.
You should also check my must-have lists, the new and the older one, and one for the less popular Linux desktop environments. Plus, I've compiled a similar guide for Windows, and it will give you a good, strong indication of how the two worlds compare. Then, I have also written many other comparison guides. On media players, on browsers, office software, and still more. The list is endless.
The world of gaming is truly different between Windows and Linux, although with the creation of the SteamOS, the gap is narrowing. While you are exploring this particular aspect of the Linux world, you might want to take a look at my 100+ game reviews, all done specifically for Linux, on Linux.
Furthermore, you should note that some Windows titles can be used on this new operating system using emulation and other tools, although with limited success and guarantee. The next guide ought to help you decide when and how.
What users will want to do now is something like Windows - install software and configure their system. Most distributions come with a lot of preinstalled stuff, so the housekeeping list might actually be shorter than you expect. Some distros pack codecs, games and extra programs, so no need to sweat there.
Still, you probably might want to install your printers, install Steam, try Skype, configure your Wireless, and still more. I am going to highlight two or three examples here, but then, you will want to follow my mega pimping guides for some of the leading distributions, as these howtos contain a lot of useful information.
Wireless setup example
Let's say you want to configure your Wireless. This seems like one of the first things you might wanna do. This is demonstrated with Kubuntu. Click on the Wireless radio icon, which would be the first one on the right after the digital clock and a little arrow. Then, select the desired connection. Provide your password. Choose to automatically connect. And then, press Connect. Works like any other operating system.
Desktop background change
In most Linux desktops, it will be very much right-click > desktop background. Some other desktop environments may offer a more complicated path. For example, it might be as convoluted as System menu > Preferences > Appearance, then the Background tab.
Graphical card drivers example
This is something that many you would want to know. Well, how about my Ubuntu guide on this topic, which details no less than five different methods to configure and install Nvidia drivers on an Ubuntu box.
Check for updates - just like Windows:
Check user settings:
Manage a currently playing music track:
Here's my essential list for Ubuntu. Likewise, the same tutorial for openSUSE. And then, there's one for Fedora, too, so you should take a closer look. All of these explain how to install and configure many useful pieces of software, including themes, fonts, look & feel tweaks, popular programs like Steam, Skype, VLC, LibreOffice, graphical drivers, codecs, and more.
Some more random reading, if you are interested:
Nvidia setup in openSUSE
Xubuntu pimping guide
Skype setup in Ubuntu Salamander
An older guide on Linux printing
Working with subtitles in Linux software
And there's more. Close to 1,000 articles on Dedoimedo.
Now that you have invested so much of your time, how about some more reading. Here's my short list of the finest resources for your Linux escapades, so you can become proficient and cool.
Distrowatch is your one-stop shop to finding Linux. This is the de-facto Linux distro portal, where you can find the listing of pretty much any important distro out there. You also get screenshots, links to reviews, and tons of other informations.
For Ubuntu users, Ask Ubuntu is a very good "how do I" resource. Hop yonder and start asking questions. It is the official Ubuntu support channel, in addition to Ubuntu forums, so you can find a lot of useful stuff that may help you get around.
Webup8 has a lot of interesting tutorial for many distribution, despite a small preference for Ubuntu flavors. Tutorial on Webup8 are detailed and useful, often accompanied with command-line instructions to get things working.
LinuxCommand.org will teach you how to use shell scripting.
HowtoForge offers ton of guides for servers.
And my own site, of course!
Now, I have a few serious questions for you, before we conclude this tutorial. First, would you like to see this article transform into a book, akin to my Apache guide or the Linux Kernel Crash Book, both of which proved to be fairly popular. If so, ping me.
Second, do you feel like anything is missing? Talk to me, and I may add an updates section with additional pointers, tips and tricks. We probably cannot cover everything, but there might be other, obvious things that I failed to include.
To be added if the popular demand proves demanding enough ...
There you go. I do like to brag a lot, still I believe this article truly merits praise. It gives the single most comprehensive view of Linux, top to bottom and then back up. Sure, this is only the tip of the iceberg, but you have the comparison to Windows in every single aspect, and you can see the major differences.
Try to follow the whole thing, don't skip any sections. Once you have read everything, you will have gained a decent understanding of the Linux operating system, the many subtle nuances between its varying editions and flavors, and finally, you will know how to setup pretty much any distro, perform multiple installations side by side, and administer your desktop with ease and elegance. It won't be easy, but it's a start. Take care.
P.S. Now seriously, you should consider supporting Dedoimedo. I have invested some forty hours compiling this thing. The least you can do is give some love back. Think about it.