Linux: A Super Hero
Tags: linux, beginners, devops, kcdchennai
Published: 2023-05-04 15:00:09

## Introduction

Linux is a powerful and versatile open-source operating system that is a Unix-like os that can be used in a variety of applications, from small-scale personal use to large-scale enterprise use.

It offers many benefits including, stability, security and flexibility, making it a popular choice for many users and organisations.

## Shell

The Linux shell is a program that allows text-based interaction between the user and the operating system.

This interaction is carried out by typing commands into the interface and receiving the response in the same way.

## Types of shell

1. Bourne Shell (sh)
2. Korn Shell (ksh)
3. C Shell (csh or tcsh)
4. Z Shell (zsh)
5. Bourne again Shell (bash)

These shells may differ in their core concepts but all of them have one common thing to communicate between the users and os.

When we log into the shell, the first thing to show up to you is your home directory.

**Home Directory** - `/home` is a system-created directory that contains the home directories for almost all users in the Linux system.

It allows user to store their personal data in the form of files and folders.

Each user in the system gets their own unique home directory with all access.

Representation- It is represented by the "tilde ~" symbol in the command line.

```
Home Directory = ~ (tilde)
[~]$
```


## Commands and Arguments

To interact with the Linux system using the shell, a user has to give **Commands**. Like-

**echo**: to print a line of text on the screen use the `echo` command.

```
[~]$ echo
[~]$

```
when you used `echo` cmd, you did not tell what you want to print and as a result, it prints nothing.

That's where an **Argument** comes into the picture.

An _Argument_ acts as an input to the command.

```
[~]$ echo Hello
Hello
[~]$

```
It's not always necessary to give arguments. There can be a lot of commands which can run without any arguments. eg:

```
[~]$ uptime
12:53  up 2 days, 22:05, 3 users, load averages: 2.89 2.61 2.79

```

![uptime](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/100wh2mrpj3z6gjb4v0c.png)

This `uptime` is used to print information about how long the system has been running since the last reboot.

```
command <arguments>
echo = command
Hello = argument

```
To check your current shell use-

```
[~]$ echo $SHELL
/bin/bash

```

![shell](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lfdugr6r2jy8pz9ze37i.png)

## Fun Task:

**Let's do a quick task with some basic and most important Linux commands so that you can learn by doing.**

**Task** - Create a directory structure with 3 directories under the home directory which is already created `/home/dev`. These directories' name represents the categories of animal herbivorous, carnivorous and omnivorous which comes under home dir like `/home/dev/herbivorous` under each category there are some animals and under this some foods. Each item is a directory.

Let me explain this to you more easily with a diagram-


![fun task](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wt2nxmz2446o3ok3v2ej.png)

We will be in our home directory by default

```
[~]$ pwd
/home/dev

```

`pwd` command prints the present working directory which is home in our case and dev is our username.


```
[~]$ mkdir herbivorous
```
`mkdir` command is used to make a new directory on the given path

```
[~]$ mkdir carnivorous omnivorous
```
we can create as many directories as we want by writing them in one go as the above done.

now all three directories have been created in our home path.

```
[~]$ ls
herbivorous carnivorous omnivorous
```
`ls` command is used to show the list of files and folders on that particular directory.

Now we have to make directories of `cows` and `giraffes` in the `herbivorous` directory.

To do this, we have to change our dir from `home` and go inside the `herbivorous` dir.

```
[~]$ cd herbivorous
[~/herbivorous]$

```
the `cd` command is used to change the directory.

```
[~/herbivorous]$ pwd
/home/dev/herbivorous

```

```
[~/herbivorous]$ mkdir cow giraffe

```

```
[~/herbivorous]$ mkdir cow/grasses

```
here we made a new directory of `grasses` inside `cow` dir without going inside it.

```
[~/herbivorous]$ mkdir -p cow/grasses
```

here we're creating directories cow and under that grasses together by using the `<-p>` option.

**Let's check out some more of the basic commands**

`mv` This mv command is used to move dir from src A to dest B

```
[~]$ mv /home/dev/source_dir /home/dev/destination_dir
```
`cp` This command is used to copy file/dir from one src to another

```
$ ls
a.txt  b.txt  new

#Initially new is empty
$ ls new
#empty

$ cp a.txt b.txt new
#copying file a and b a file named new

$ ls new
a.txt  b.txt
```
`rm` This command is used to remove file/dir

```
$ ls
a.txt b.txt new
$ rm new
$ ls
a.txt b.txt
# file named new is being removed now
```
`cat` This command can be used in several ways. Some of them are:

```
$ cat a.txt
This will show the content of file a.txt

```

```
$ cat a.txt > b.txt
This will copy the content of file a.txt to b.txt file
```

```
$ cat > newfile
This will create a new file named newfile
```

`touch` This command is used to create a new file

```
[~]$ touch /home/dev/omnivorous/human/food.txt
```

## Some Tips:

- The alternative of cd cmd is `pushd` cmd. This cmd remembers the current working directory before changing to the directory you want.

let's say you're in `home` dir and want to go to `/etc`

```
[~] pushd /etc
/etc ~

```
now you can dir as many times as you want `cd /var cd /tmp`

and to go back to the original dir use `popd`

```
[/tmp] popd
[~]

```

- To change the prompt - If you want to change the way how your prompt look to something else like your server name or your name itself

```
[~]: echo $PS1
[~]$
# current prompt lool like

[~]$ PS1="ubuntu-server:"
ubuntu-server:
# now it changes to the server name

ubuntu-server: PS1="[\d \t \u@\h:\w ] $ "
[Mon Mar 06 13:30:54 dev@macair:~ ] $
# now displaying with current date and time with user name too
```
date, time and username before '@' and /h /w give the hostname and the present working directory of the user, followed by '$' indicating a regular user.

## Kernel
The major component of the operating system and an interface between the system's hardware and processes.

It can be thought of as a bridge between the hardware and the software components of a computer system.

```
[~]$ uname
Linux
```
Let's say you are running a program that needs access to the computer's memory. when the request is made, the kernel is responsible for granting the program access to the memory.

```
[~]$ uname -r
4.15.0.72-generic
```
This shows up in the kernel versions.


![kernel](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vohic2xrryzu9ggmlrsg.png)

The kernel looks up the four major tasks-

1. Memory Management - Keeps track of how much memory is used. 
2. Process Management - Which process can use the CPU? 
3. Device Drivers - An interpreter between the hardware and the processes. 
4. System Calls & Security - Receive requests for services from the processes.
 
## Some Core Concepts

- File Compression:

To inspect the size of the file use `du` command


![filecom](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gmphym8s618brjvz9opf.png)

`du` stands for Disk Usage and `-sh` is a humanly readable size format.

- Archive File:

Grouping multiple files into a single directory or a single file, you can use tar command


![archive](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1j1vr7cwv6ir6m7ot3cl.png)

`-c` flag specifies that the tar should create a new archive.

`-v` flag specifies that the tar will display the name of the file added to the archive.

`-f` flag specifies the name of the archive file that tar should create.

`-cvf` together, it will create a new archive with the specified name and add the specified files to it while displaying their names as they are added.

`-xf` flag is used to extract the contents from the tar file.


![xf](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8wrjkvp8vki4hkfthw1y.png)

`-czvf` flag is used to compress the tar file to reduce its size.


![czvf](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qqyu5q6vc9g5ezlwphh8.png)

the tar archive "mydoc.tar" was created, and its content was compressed using gzip to create a compressed tar archive named "mydoc"

```
  $tar -czvf mydoc.tar.gz mydoc/
  mydoc/
  mydoc/file1.txt
  mydoc/file2.txt
  mydoc/file3.txt

```
`-c` creates a new archive file.

`-z` compress the archive using gzip.

`-v` displays the verbose output during the creation of the archive.

`-f` specify the name of the archive file.


source:

[KodeKloud](https://kodekloud.com/courses/the-linux-basics-course/)

[geeksforgeeks](https://www.geeksforgeeks.org/cp-command-linux-examples/)


And that's all for you to start your Linux ride. I have done my certifications in Linux Basics Course from KodeKloud.


{% embed https://kodekloud.com/certificate-verification/2D01B4BE1E89-2D01AEB884F1-2D01A92DE689/ %}

I am not promoting anything, just sharing my learning resources if you want to check them out.


You can have the training and get certified by Linux Foundation itself.

[Linux Training & Certifications](https://training.linuxfoundation.org/technology-catalog/?creative=606935296934&keyword=linux%20class&matchtype=p&network=g&device=c&pi_ad_id=606935296934&utm_term=linux%20class&utm_campaign=EMEA:+Search:+June+21+-+Sitewide+Discount&utm_source=adwords&utm_medium=ppc&hsa_acc=8666746580&hsa_cam=13435710405&hsa_grp=133584209699&hsa_ad=606935296934&hsa_src=g&hsa_tgt=kwd-101364025&hsa_kw=linux%20class&hsa_mt=p&hsa_net=adwords&hsa_ver=3&gclid=Cj0KCQjwr82iBhCuARIsAO0EAZz7WB1T0rg7qIoE6FMY_6r0o9G2XDjeWaZcladir3ow99LY4PAD3sQaArJSEALw_wcB)


Thanks for the read!🖤🐧