Linux at its core is a kernel, the central driving force of an operating system that allocates resources to other aspects of the system. Linux, along with the GNU system (which is closely associated with the Free Software Foundation) are occasionally collectively referred to as GNU/Linux, and make up a complete operating system which is widely used today by millions across the world.
The term GNU/Linux in reality means a Linux system with a GNU Userland, however supporters of the FSF are more prone to call any system using a Linux kernel a GNU/Linux system. This is mostly out of respect, and a way to see what team you play for, so to speak.
- 1 History
- 2 Why use GNU/Linux?
- 3 What's all this about distributions?
- 4 Recommended distributions
- 5 Installation
- 6 GNU/Linux naming controversy
- 7 Let's learn about Linux
- 8 External links
The GNU Project, started in 1983 by Richard Stallman, had the goal of creating a "complete Unix-compatible software system" composed entirely of free software. Work began in 1984. Later, in 1985, Stallman started the Free Software Foundation and wrote the GNU General Public License (GNU GPL) in 1989. By the early 1990s, many of the programs required in an operating system (such as libraries, compilers, text editors, a Unix shell, and a windowing system) were completed, although low-level elements such as device drivers, daemons, and the kernel were stalled and incomplete.
Linus Torvalds has stated that if the GNU kernel had been available at the time (1991), he would not have decided to write his own.
In 1991, while attending the University of Helsinki, Torvalds became curious about operating systems and frustrated by the licensing of MINIX, which at the time limited it to educational use only. He began to work on his own operating system kernel, which eventually became the Linux kernel.
Torvalds began the development of the Linux kernel on MINIX and applications written for MINIX were also used on Linux. Later, Linux matured and further Linux kernel development took place on Linux systems. GNU applications also replaced all MINIX components, because it was advantageous to use the freely available code from the GNU Project with the fledgling operating system; code licensed under the GNU GPL can be reused in other projects as long as they also are released under the same or a compatible license. Torvalds initiated a switch from his original license, which prohibited commercial redistribution, to the GNU GPL. Developers worked to integrate GNU components with the Linux kernel, making a fully functional and free operating system.
Why use GNU/Linux?
The free software philosophy is about an open and shared operating system which is not only free as in money, but free as in freedom. The GNU/Linux system gives users more control over their computing experience than competing operating systems such as Windows, which could contain malicious features without the user's knowledge.
What's all this about distributions?
There are a lot of GNU/Linux distributions, also known as distros.
Most distros are at least somewhat similar with each other. The main differences are between the init system, package manager (and the repositories it has access to), desktop environment, (bloat) and default configurations. Most distros have their own little niche. Some are FSF compatible (or almost), for ricing, for getting shit done or just because you hate yourself or just love pain (Arch/Gentoo). Always at least try another distro before saying that you hate it. You will find that all of them have their own qualities.
When choosing a distro, keep some things in mind. Linux in itself is not about choice, but its variety of distros however are. There are stable and rolling distributions. Some stable distros can be made rolling by selecting the proper repositories and vice versa. Some are semi-rolling, they release snapshots of packages. Stable is best for beginners and rolling is best for developers and advanced users who want the latest and greatest.
See: Babbies First Linux
If you are not ready to commit to installing a GNU/Linux system, you may want to try one out in a virtual environment first.
Making a bootable USB installer
In addition to installing from CD, you can also install from a USB flash drive. A USB installer created using the following steps should work with both BIOS and UEFI systems. However, for UEFI systems you may need to disable "Secure Boot" in the UEFI configuration panel. For UEFI support your flash drive MUST be formatted as fat32 (also called vfat in GNU/Linux) when attempting to boot from it.
- Download the disk image of your chosen distribution.
- Verify the integrity of the download if a checksum is provided.
- Use the image tool recommended in your distribution's install notes to copy the iso to your USB-drive and make it bootable. Note: There are many universal tools available, but they do not always work correctly for all distributions. Some of them include:
GNOME Disk Utility method
Any distribution running GNOME can easily make a bootable USB stick through gnome-disk-utility. First make sure you don't need any of the data on the USB stick. Next, open GNOME Disks and select the USB stick in the list. Unmount it via the stop button. Lastly, click the advanced tools gear icon, restore disk image and select your ISO file. When the process is complete you can eject the USB stick and boot from it.
Manual Terminal method
- This method requires you are already running Linux and have an iso specifically crafted for USB drives or a "hybrid" CD/USB image. Most distributions will mention the type of iso on their download page.
- Using the commands
fdisk -l(as exemplified bellow), find what [drive letter] is the letter of your removable device. Please note that it is the device (e.g.
/dev/sdb), and not the partition number (e.g.
- Now use run dd to install the iso in your device of choice.
dd bs=4M if=[/path/to/distro.iso] of=/dev/sd[drive letter]
An example of using the dd command could be:
dd bs=4M if='/home/moot/Downloads/debian-7.3.0-amd64-netinst.iso' of=/dev/sdb
Remember to use " " if your path contains spaces.
- Last, wait patiently until the command has executed. No outputs will be printed until the process is finished. You can check progress of a
ddcommand by finding the process ID with
ps auxand issuing the
kill -s USR1 <pid>command against it. Just don't forget the USR1 signal or you will terminate the process. Starting from GNU coreutils 8.2.4, you can append
status=progressinstead to check the progress.
GNU/Linux naming controversy
The GNU/Linux naming controversy is a dispute regarding whether or not to refer to the operating system commonly known as Linux as GNU/Linux. GNU/Linux was a term originally created by the Free Software Foundation to refer to the combination of the GNU corelibs and the Linux Kernel, which they argued to form a functioning operating system. The Free Software Foundation recommends the term GNU/Linux because it argues the GNU project was part of a project to develop an operating system, from which the kernel was the last piece to complete (see GNU Hurd). The Free Software Foundation suggests that the inclusion of the term GNU in the operating system’s name would recognize their contribution and their free software ideals ("Free Software as a Social Movement". ZNet.). Richard M. Stallman writes:
Today tens of millions of users are using an operating system that was developed so they could have freedom—but they don't know this, because they think the system is Linux and that it was developed by a student 'just for fun'.
On the opposite side of the argument, Linux supporters argue that the contribution of the Free Software Foundation is minimal (for example, GNU components make up only 8% of Ubuntu). Eric S. Raymond writes:
Some people object that the name "Linux" should be used to refer only to the kernel, not the entire operating system. This claim is a proxy for an underlying territorial dispute; people who insist on the term GNU/Linux want the FSF to get most of the credit for Linux because [Stallman] and friends wrote many of its user-level tools. Neither this theory nor the term GNU/Linux has gained more than minority acceptance.
When Linus Torvalds was asked in the documentary Revolution OS whether the name "GNU/Linux" was justified, he replied:
Well, I think it's justified, but it's justified if you actually make a GNU distribution of Linux ... the same way that I think that "Red Hat Linux" is fine, or "SuSE Linux" or "Debian Linux", because if you actually make your own distribution of Linux, you get to name the thing, but calling Linux in general "GNU Linux" I think is just ridiculous.
Linux proponents also argue that since the operating system is often referred to as Linux by the mainstream media and most users, that it should be used as such, as opposed to GNU/Linux.
Let's learn about Linux
The terminal, also known as the Command Line, Shell, or just cold, emotionless text on a black background, gives you access to the real power and beating heart of Linux. Linux by default uses BASH, or Bourne-Again Shell which is based on the shell program `sh' from UNIX, written by Steven Bourne of Bell Labs. Bash will be all of our terminal interaction.
To manage multiple user sessions on a single machine, Linux (and UNIX) uses what is called a TeleTYpeWriter (TTY) for each user to interface with the main kernel. Each tty is handled by its own special device file, located in the directory /dev. It also uses Pseudo Terminal Slave (pts) to handle other types of terminal interface, but this is beyond the scope of this guide.
You may be wondering what the difference between shell and TTY is. Shell is the command interpreter that runs everything you type in, and TTY is the connection that handles the data between Linux and the shell.
The shell uses files called stdout, stdin and stderr to handle text input and output to and from programs.
stdin- Standard Input - All your typed text input goes into programs through here.
stdout- Standard Output - All successful program output goes to here.
stderr- Standard Error - All error messages and problem codes go to here.
You should get familiar with the man pages, which are essentially the manual, and will display help pages on almost all commands.
Usage: man command
Where command is replaced with whatever command you want help on. Press
q to exit a manual page. Alternatively, most commands will allow you to add
--help on the end to get their own personal help pages.
Every key pressed sends a character to the terminal and you can send different characters by holding down keys like [Ctrl] or [Alt]. This is how the shell can tell what key is pressed, and thus, allow shortcuts to be defined. Some of the more useful keyboard shortcuts are defined:
DownArrow- Scroll through typed commands
Shift+PageDown- Scroll up or down through shell output
End- Move to the start or end of a line, respectively
Tab- Autocomplete a file name, directory name or command name.
Ctrl+c- End a running process
Ctrl+d- End-Of-File (EOF) character (usually ends a process or signifies the end of input data)
Ctrl+z- Send the currently running process to the background
Ctrl+l- Clear the screen, same as running the clear command
If you're using BASH as your shell (most distros default to this) you can customize it to your liking.
pwd- Print Working Directory. Outputs the full path of the current directory.
cd- Change Directory. Used to switch to a different directory.
ls- List. Lists files and directories in the current directory.
ls -aLists "hidden" files and directories also. Hidden files in linux are preceded with a full stop.
ls -lLists further information about the files, including size, modify date, owner and permissions.
ls -tList by modify date, with the most recently modified files at the top.
cp- Copy a file/directory.
cp -rDescend into directories (recursively copy all directory contents).
mv- Move or rename a file.
rm- Delete a file.
rm -rDelete directory contents. (Never
rm -r /)
chmod- Changes file permissions for the Owner, Group and Others.
chown- Changes the owner of a file.
chgrp- Changes the group of a file.
date- Display current date and time.
who- Displays a list of currently logged in users.
echo- Prints to stdout.
cat- Concatenates text to stdout.
grep- Searches for strings in a file or stdin.
su- Switch user. Defaults to root.
sudo- Similar to
subut uses your own password instead. Lets you configure access in
passwd- Change password. Defaults to current account.
rsync- Synchronizes files and directories.
halt- halt the system
halt -p- also shut off the power
systemctl- Interface to systemd.
systemctl poweroff- Shutdown.
systemctl reboot- Reboot.
systemctl start serviceStart a service.
systemctl stop serviceStop a service.
journalctl- Interface to systemd logging.
Piping and redirection
There are a number of little quirks that the shell has that gives it more functionality. Piping takes the stdout of the left program and connects it (i.e. pipes it) into stdin of the right program with the pipe operator.
- Count number of words in helloworld.txt
$ cat helloworld.txt
Redirection directs data in and out of files, i.e.:
- Redirect stdout to file
$ echo "Hello world" > helloworld.txt
- Redirect stdout to the end of a file
$ echo "world." >> hello.txt
- Redirect a file to stdin
$ cat < helloworld.txt
The kernel is the central nervous system of an operating system. Luckily, The Linux kernel is still maintained by Linus Torvalds. Find out about the version, kernel hacking and security on kernel.org.
- Linux Command explains the shell, indispensable to users who want to take full advantage of GNU/Linux distributions.
- Commandlinefu provides a fun experience while offering a lot of useful command-line gems making it a great site to explore and learn more about the command line.