# Linux Commands Part 1 - 4

Tags: linux-com-book

## Introductory Commands

* `#` before terminal means super-user
* `date` to print date and time
  * `Sat Jun 18 12:01:17 AM IST 2022`
* `cal` to print calendar
* `df` to print disk drive and usage
* `free` to print memory
* `pwd` print working directory
* `Absolute PathName` : begins with root directory and follows the tree branch by branch till the desired folder
* `Relative PathName` : starts from the working directory
* `cd` to change directory
  * `cd -` to revert to previous directory
  * `cd ~username` : to change directory to another user
* ls : to list directories

  * `ls directory_1 directory_2` : to print list or multiple directories

  ```java
  ➜  ~ ls programm software
  programm:
  azure-dev-hackathon  inbox-app            
  configs              learning-springboot  
  demo                 playground           

  software:
  jetbrains-toolbox  tor-browser_en-US
  ```

  * `ls -l` : for more details
  * `ls -lt` : to list sorted acc. date modifed
    * `—reverse` : to reverse the sort

  ![List of options of ls command](/files/yLVfRKj0oaIMdLxUWbwI)

Long Listing Details

![details of fields printing long list](/files/90ZGPqO3Ug96p5SBSQiX)

* `file filename` : to print a brief description of the file’s contents
* `less` : to view content of file

## File Structure

![Linux file structure part 1](/files/qVOcetrjq8176kjQ5uBc)

![Linux file structure part 2](/files/Bjvmx0zIVAKyxfDsy6c5)

![Linux file structure part 3](/files/WBaDmDu9vjUMTI0fOB0y)

![Linux file structure part 4](/files/sNrCv70DWF4ot03PwW52)

![Linux file structure part 5](/files/YGSR3TjL9ncWjCW7x1Hf)

## Symbolic Links | Soft Link | Symlink

* symbolic links are like aliases or another name for the file

```java
lrwxrwxrwx 1 root root
11 2018-08-11 07:34 libc.so.6 ***->*** libc-2.6.so
```

**Why they are useful ?**

* Imagine we have a file with name `foo` . Whenever we update it we, change its name to foo-date-time, but the programs/user referencing it wouldst know that the name has change. To tackle this problem, we create a symlink of file foo → foo-date-time and the programs/user user only reference the symlink.
* So even if we change the name of file foo, it wont affect the programs as they would be referencing the symlink.

## Manipulating Files and Directories

* to create new directories
  * `mkdir dir_name`
* to create multiple directories
  * `mkdir dir1 dir2 dir3`
* to copy file to another directory
  * `cp item directory`
  * if `cp item1 item2` then content of item2 is replace with item1
* use `-a` file while copying to copy the attributes as well

![options for cp command](/files/md9t1ntWPwCFwLoDrSp0)

* The `mv` command performs both file moving and file renaming, depending on how it is used
* to move item to another directory `mv item... directory`
* to delete item `rm item`

![options for rm command](/files/7qN9tXhXbUwGxPH35cY6)

## Hard Links vs Soft Links

### Hard Link

* Hard links are the original Unix way of creating links
* Every file has a single hard link that gives the file its name
* Limitations
  * A hard link cannot reference a file outside its own file system
  * A hard link may not reference a directory
* A hard link is indistinguishable from the file itself

```bash
// for hard link
-> ln file.txt link

-> ls
-rw-r--r--. 1 udayyadav udayyadav  12 Jun 20 23:06 file.txt
-rw-r--r--. 2 udayyadav udayyadav  12 Jun 20 23:06 link1
```

### Soft Link

* They work by creating a special type of file that contains a text pointer to the referenced file or directory
* They are like windows shortcuts
* If file is deleted, then link points to nothing, it is broken

```bash
// for soft link
-> ln -s file.txt link

-> ls
lrwxrwxrwx. 1 udayyadav udayyadav   9 Jun 21 07:59 link2 -> file2.txt
```

## WildCards

![different wildcards present](/files/z2eTZdMc0UD9M83xAMmW)

![matching with different characters](/files/px5f92tWLx2Ens52JZFo)

![wildcard example](/files/aawgquU4HR3KcOYU2sny)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://dev117uday.gitbook.io/notes-md/linux/linux-commands-part-1-4.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
