From 65dfb21ce4bfd6c9b3d1628adeee0acfc423b2b5 Mon Sep 17 00:00:00 2001 From: Yaroslav Date: Sun, 12 Apr 2020 03:44:50 +0300 Subject: migrated all posts from 2018 --- .../2018-11-05_intro-to-linux-and-bash/index.md | 299 +++++++++++++++++++++ 1 file changed, 299 insertions(+) create mode 100644 content/weblog/2018-11-05_intro-to-linux-and-bash/index.md (limited to 'content/weblog/2018-11-05_intro-to-linux-and-bash/index.md') diff --git a/content/weblog/2018-11-05_intro-to-linux-and-bash/index.md b/content/weblog/2018-11-05_intro-to-linux-and-bash/index.md new file mode 100644 index 0000000..28db692 --- /dev/null +++ b/content/weblog/2018-11-05_intro-to-linux-and-bash/index.md @@ -0,0 +1,299 @@ ++++ +title = "Intro to Linux and the Bash command line" +date = 2018-11-05T23:53:00Z ++++ + +Recently I decided to introduce a friend of mine to the wonderful world of +Linux, and like when someone moves to a completely new town, you have to help +that friend get around town and learn about how things work in this new town, +where are all the places of interest, etc. And so it is, in someway, when +someone decides to make the move to a new OS, they have to get used to the new +environment and make new habits, especially regarding Linux. Therefore, I +decided to write this tutorial for my friend, and anybody who decided to try +Linux, and want to learn to use more effectively, that is, with a higher level +of skill than an average user. + + + +Most probably you already know, but Linux is not actually the OS itself, but +rather the kernel that is used in conjuction with a collection of programs and +packages called GNU (insert here jokes and memes about GNU/Linux (or +GNU+Linux)), and there are many different distributions (over 9000) of said +GNU/Linux. + +If you're just about to install Linux, and haven't decided yet on a distro, here +I wrote a small list of distros that might start with: + +* Manjaro - I personally use this distro. This one has different releases, with + different Desktop Environments (or DEs), like KDE or GNOME. This is a "rolling + release", what that means, is that instead of the classical update to version + x.x of the OS system, updates for each package are being rolled out + constantly, and sepparatly for each package. That is, you get basically the + latest packages, with the latest updates, at the cost of maybe some stability. + It is quite easy to get installed, and get started with (If you choose an + official release like Manjaro KDE or Manjaro GNOME). +* Ubuntu - The most know Linux distribution. It is one of the most + "user-friendly" distros out there. It is more stable than Manjaro (although + not always, unless you're using the Long-Term Support versions). If you just + want to install an OS where everything just works, and is already configured + for you, and you don't want to choose from a list of DEs (or you don't know + what a Desktop Environment is), this will most probably suit your needs. +* Debian - One the most stable distributions. It is not as easy to install as + Ubuntu or Manjaro due to large ammount of choice given during installation, + but it's not really hard to either. Actually, Ubuntu is derived from Debian. + You must probably will have to configure it to your needs and likings + (personally, I dislike the default settings of GNOME), but if you want real + stability, and distro that has been around almost as long as the kernel + itself, then this might be the distro for you. One downside of Debian, is that + because of its focus on stability, many packages on the main (stable) + branch/version are quite old/outdated. Another con of Debian, is that it + doesn't include "non-free" packages in the main repository (that is, there are + no proprietary packages by default), so if need a proprietary program or + package, like nvidia's drivers, you will have to add the corresponding + repositories by yourself. +* Fedora - It is similar to Ubuntu regarding stability and ease of use (i.e. + quite simple to use). I can't say much about Fedora, because I haven't used it + that much myself, but it is a very popular distribution. It has the same con + as Debian, in that it doesn't include "non-free" software in its main + repository. + +If you found "Desktop Environment" to be a unfamiliar term, in a nutshell, it is +the collection of programs and packages that present with the Graphical User +Interface for interaction with the system. How your OS/distribution is going to +look like doesn't depend as much on the distro itself, as on the DE that you +choose to install or comes with the distro. + +Do you have Linux installed? Excellent, now we can get started. + +## File structure + +If you are used to working with Windows systems, the the first thing that you +might notice is the difference in how files are handled/organized. In Windows, +because of its DOS legacy, drive letters are used to represent different drives, +partitions and file systems. In Linux, like in other Unix-like systems (e.g. +macOS, BSD) this differs somewhat. + +In Linux, everything is a file, including the devices that are connected to your +computer. From your keyboard (which is a read-only file) to your drives. +Directories are also files. + +Different disks or drives are mounted in a specific directory, and from this +directory, every file from that drive will be accessible. You can mount and +unmount drives yourself, but if you installed a distro with any of the most +popular desktop environments, then there's nothing to worry about, the system is +going to take care of mounting your pendrive for you, and creating a shortcut in +your file explorer and/or desktop each time you insert it. + +Linux has what is called a "root" directory + +``` +/ +``` + +In there are the files and subdirectories in your system are located, including +drives mounted in a specific subdirectory as mentioned before. + +Each user in Linux has its own "home" directory. Inside your home directory your +personal documents/files and subdirectories are going to be stored. All the home +directories of each user are usually going to be stored inside the "/home/" +directory. For example, for user "user", their home directory is going to be + +``` +/home/user +``` + +However, you can also move to your home directory by using the symbol ~. For +example, in your terminal, if you input + +```sh +$ cd ~ +``` + +You are going to be taken to your home directory (e.g. "/home/user/"). + +## The command-line - Bash + +Arguably the most useful program in Linux and any *nix system is the terminal. +Yes, maybe the average user won't have to use it, but it is the most flexible, +effective and useful instrument in your computer. A lot of work can be done +faster and more effectively in the terminal, rather than in a GUI. Obviously, it +is faster to learn to use a graphical interface, than a text-based or +command-line one, however, once you learn to properly use the terminal, you will +be able to use computer more efficiently than ever. + +Your command-line, if you haven't changed any defaults, will most probably look +something like this + +```sh +user@host:~$ +``` + +The first part before the "@" symbol, is the user with whom you have logged in. +After the "@" symbol is the "hostname" of your machine, i.e. the name of your +computer in a network. + +After the semicolon ":", the directory in which you are currently located is +going to be displayed. In our case, the "~" symbol is displayed, meaning that we +are inside our home directory. If you wish to see the full absolute path in +which you are located, you can input the command "pwd" + +```sh +user@host:~$ pwd +/home/user +user@host:~$ +``` + +The dollar "$" symbol, tells us that we are logged in as "normal" user. In Linux +and all *nix systems, there is a so called "super user", or just the "root" user +for short. Normal users don't have full access to all of the files in the +system, including other users' files. The root user has full access to all +system files. When you are logged in as the root user, the dollar "$" symbol is +going to be replaced by the hash "#" symbol. + +However, we will be talking about the root user and permissions another time. + +I can't tell you exactly how to open the terminal, as it is different in each +distro and desktop environment. You will have to look for the link that says +"Terminal" in your programs' menu, with the icon of a terminal on it. + +To be able to start working in the terminal, we'll need to become acquainted +with some of the main commands used for navigating. + +### Navigation in the terminal + +There is one more thing that needs to be taken into consideration when working +with Linux and Unix-like systems, and that is, case-sensitivity. *nix systems +are case-sensitive, in contrast to Windows ones, which aren't. What that means, +is that, if on Windows, files "README.TXT" and "readme.txt" are the same file, +in Linux and Unix they are completely different files. + +To move around directories, we use the "cd" (or change directory) command, +followed by the name, or path of the directory. The directory can be absolute or +relative. + +A relative path, is, for example, the name of a subdirectory inside the +directory in which we are currently located. In other words, the path relative +to where we are located. + +An absolute path, is the path relative to the root directory. + +For example, if we want to move to the "Documents" directory inside +"/home/user/", and we are already at "/home/user/", the we can just type the +following + +```sh +user@host:~$ cd Documents +user@host:~/Documents$ +``` + +If we wanted to move to that same directory from another location in the system, +we would type + +```sh +user@host:/var$ cd /home/user/Documents +user@host:~/Documents$ +``` + +To move one folder up, we write "..". Example + +```sh +user@host:~/Documents$ cd .. +user@host:~$ +``` + +The two dots "..", means the root directory of the current subdirectory. One dot +"." means the current directory. + +There is one more command, that will aid you in navigating - ls. This command +outputs a list of files and directories in the current location + +```sh +user@host:~/Documents$ ls +Books todo.txt picture.png +``` + +This command also accepts arguments and flags. For example, to list hidden files +as well, add the "-a" flag + +```sh +user@host:~/Documents$ ls -a +Books .secret todo.txt picture.png +``` + +Hidden files in Linux start with a dot (e.g., hidden directory ".secret"). + +There is also the "-l" parameter, which shows us a list of the contents with +additional information, such as, permissions (more on that in the next part), +amount of files inside a directory, owner of the file (user and group), size on +disk, datetime of creation/modification, and the name of the file. Example + +```sh +user@host:~/Documents$ ls -l +drwxr-xr-x 2 user user 4.0K Jul 18 04:20 Books +-rw-r--r-- 1 user user 350 Jul 18 04:20 todo.txt +-rw-r--r-- 1 user user 1.2M Jul 18 04:20 picture.png +``` + +You can mix flags as well, + +```sh +user@host:~/Documents$ ls -al +drwxr-xr-x 2 user user 4.0K Jul 18 04:20 Books +drwxr-xr-x 5 user user 4.0K Jul 18 04:20 .secret +-rw-r--r-- 1 user user 350 Jul 18 04:20 todo.txt +-rw-r--r-- 1 user user 1.2M Jul 18 04:20 picture.png +``` + +You can also take a look at what is inside a directory without having to move to +it first, by passing along as the last argument the name/path of said directory, +for example + +```sh +user@host:~/Documents$ ls -l Books +drwxr-xr-x 12 user user 4.0K Jul 18 04:20 Lessons +-rw-r--r-- 1 user user 2.3M Jul 18 04:20 Crime and Punishment.pdf +``` + +### Shortcuts + +Before we conclude the first part of this tutorial, I would like to mention some +useful "shortcuts" in bash. + +The first one is command history. Each time you input a command into the +terminal, it saves it in a history file. You can move around your command +history by using the up and down arrows. Let's say you want to repeat the last +command you used, instead of typing it all over again, you could just hit the up +arrow one time, maybe modify it a bit, and then press enter to input it. If you +want to use an older command, you can press the up arrow multiple times, and if +you missed the command you needed, you can go forward in your history by +pressing the down arrow. + +There is one more useful thing in Bash - Tab completion. When you press the +"Tab" key, bash will try to autocomplete the command for you. + +Let's say, for example, that you are in the root directory and you want to move +to "/home/user/". you can start typing "cd h", then press "Tab", so you now have +"cd home/", now type "u", press "Tab" one more time, and now you have "cd +home/user/". + +If there are multiple possible options to be autocompleted, then on the first +hit of the "Tab" key you are not going to get anything. If you don't get +anything it could also mean that there are nothing to autocomplete. In the first +case, if you press "Tab" twice, bash is going to output a list of possibilities, +for example + +```sh +user@host:~$ cd Do +Documents/ Downloads/ +user@host:~$ cd Do +``` + +In this case, we can type the next letter, for example "cd Doc", and press "Tab" +one more time, and we are going to get "cd Documents/". However, if you didn't +get anything on pressing "Tab" twice, it means that is nothing to autocomplete. + +It can be a little be hard to understand at first how "Tab completion" works, +but the best way to understand it, by trying it yourself. + +That is all for now, in the next part I am going to talk more about working on +the terminal. -- cgit v1.2.3