full outline and TOC

This commit is contained in:
waldek 2022-02-25 00:01:13 +01:00
parent 775ec4d66c
commit 3bae42575f
2 changed files with 344 additions and 17 deletions

View File

@ -605,6 +605,13 @@ When you think about it it does make sense because at the end of the day the com
So when you execute a script each line of code is converted to machine instructions on the spot. So when you execute a script each line of code is converted to machine instructions on the spot.
This makes scripts easier to write but slower at execution. This makes scripts easier to write but slower at execution.
## Note on file extensions
Linux does not rely as much on file extensions as windows does.
We could even say it often does not care about them.
Due to the decentralized nature of Linux development, some programs *do* care about them while others don't.
It's a bit of hit and miss but I advise you to read [this](https://askubuntu.com/questions/803434/do-file-extensions-have-any-purpose-in-linux) post on AskUbuntu for a more detailed explanation.
# More about paths # More about paths
The prompt in our terminal tells us who we are, on which machine, and **where** we are located. The prompt in our terminal tells us who we are, on which machine, and **where** we are located.
@ -1196,12 +1203,236 @@ waldek@hellodebian:~$
**Read** some manual pages on the commands we've seen until now. **Read** some manual pages on the commands we've seen until now.
**Apply** some options you read about in the manual to experiment with said programs. **Apply** some options you read about in the manual to experiment with said programs.
# Creating and modifying # Creating, modifying and deleting
We've seen how to navigate our filesystem and how to list files and directories at certain locations.
Now let's learn how to add, modify and remove files and directories.
## Directories ## Directories
The main tool to create directories is `mkdir`.
It's usage is pretty simple, it will create a directory at the location you specify as argument.
This location can be absolute or relative.
By default it will **not** create parent directories if needed but we can force it to do so with the `-p` flag.
```
waldek@hellodebian:~$ ls
Desktop Documents Downloads Music Pictures Public Templates Videos
waldek@hellodebian:~$ mkdir website
waldek@hellodebian:~$ ls
Desktop Documents Downloads Music Pictures Public Templates Videos website
waldek@hellodebian:~$ ls website/
waldek@hellodebian:~$ mkdir website/page_one/assets
mkdir: cannot create directory website/page_one/assets: No such file or directory
waldek@hellodebian:~$ mkdir -p website/page_one/assets
waldek@hellodebian:~$ ls -R website/
website/:
page_one
website/page_one:
assets
website/page_one/assets:
waldek@hellodebian:~$
```
The counterpart to `mkdir` is `rmdir` which can be used to remove **empty** directories.
As it can only remove empty directories it's not used that much but it's worth knowing it exists.
```
waldek@hellodebian:~$ rmdir website/
rmdir: failed to remove 'website/': Directory not empty
waldek@hellodebian:~$ rmdir website/page_one/
rmdir: failed to remove 'website/page_one/': Directory not empty
waldek@hellodebian:~$ rmdir website/page_one/assets/
waldek@hellodebian:~$ rmdir website/page_one/
waldek@hellodebian:~$ rmdir website/
waldek@hellodebian:~$ ls
Desktop Documents Downloads Music Pictures Public Templates Videos
waldek@hellodebian:~$
```
To remove directories that have subdirectories or files in them we need to use an other program, `rm` but with a specific flag `-r`.
It works as such.
```
waldek@hellodebian:~$ mkdir -p website/page_one/assets
waldek@hellodebian:~$ rm website/
rm: cannot remove 'website/': Is a directory
waldek@hellodebian:~$ rm -r website/
waldek@hellodebian:~$ ls
Desktop Documents Downloads Music Pictures Public Templates Videos
waldek@hellodebian:~$
```
**There is no trash or recycle bin on the command line! Removed is removed so think before you hit enter.**
## Files ## Files
We can create empty files with the `touch` command.
It's worth pointing out that using `touch` to create files is not it's main purpose.
Reading the manual the fact that it creates files is kind of an extra feature.
Non the less, it's widely used to create files.
```
TOUCH(1) User Commands TOUCH(1)
NAME
touch - change file timestamps
SYNOPSIS
touch [OPTION]... FILE...
DESCRIPTION
Update the access and modification times of each FILE to the current time.
A FILE argument that does not exist is created empty, unless -c or -h is supplied.
A FILE argument string of - is handled specially and causes touch to change the times of the file associated with standard output.
Mandatory arguments to long options are mandatory for short options too.
```
In practice it works as follows.
We can create files with `touch` and delete them with `rm`.
For deleting files we don't need any extra flags as opposed to directories.
```
waldek@hellodebian:~$ mkdir -p website/page_one/assets
waldek@hellodebian:~$ ls website/
page_one
waldek@hellodebian:~$ touch website/index.html
waldek@hellodebian:~$ ls website/
index.html page_one
waldek@hellodebian:~$ file website/index.html
website/index.html: empty
waldek@hellodebian:~$ rm website/index.html
waldek@hellodebian:~$ ls website/
page_one
waldek@hellodebian:~$ file website/index.html
website/index.html: cannot open `website/index.html' (No such file or directory)
waldek@hellodebian:~$
```
What if you created the file in the wrong place?
With `mv` we can move files from one location to an other.
When you think about it, renaming is actually the *same* as moving so there is no specific program to rename files or folders.
```
waldek@hellodebian:~$ touch index.html
waldek@hellodebian:~$ ls
Desktop Documents Downloads index.html Music Pictures Public Templates Videos website
waldek@hellodebian:~$ mv index.html website/indexxxx.html
waldek@hellodebian:~$ ls
Desktop Documents Downloads Music Pictures Public Templates Videos website
waldek@hellodebian:~$ ls website/
indexxxx.html page_one
waldek@hellodebian:~$ mv website/indexxxx.html website/index.html
waldek@hellodebian:~$ ls website/
index.html page_one
waldek@hellodebian:~$
```
We can also move entire directories from one location to another.
```
waldek@hellodebian:~$ ls
Desktop Documents Downloads Music Pictures Public Templates Videos website
waldek@hellodebian:~$ mv website/ Documents/
waldek@hellodebian:~$ ls
Desktop Documents Downloads Music Pictures Public Templates Videos
waldek@hellodebian:~$ ls -R Documents/
Documents/:
website
Documents/website:
index.html page_one
Documents/website/page_one:
assets
Documents/website/page_one/assets:
waldek@hellodebian:~$
```
Copying is done with `cp` and behaves very similar to `mv`.
For example.
```
waldek@hellodebian:~/Documents$ ls
website
waldek@hellodebian:~/Documents$ mv website/ website_1
waldek@hellodebian:~/Documents$ ls
website_1
waldek@hellodebian:~/Documents$ cp website_1/ website_2
cp: -r not specified; omitting directory 'website_1/'
waldek@hellodebian:~/Documents$ cp -r website_1/ website_2
waldek@hellodebian:~/Documents$ ls
website_1 website_2
waldek@hellodebian:~/Documents$ ls -R
.:
website_1 website_2
./website_1:
index.html page_one
./website_1/page_one:
assets
./website_1/page_one/assets:
./website_2:
index.html page_one
./website_2/page_one:
assets
./website_2/page_one/assets:
waldek@hellodebian:~/Documents$
```
### `nano` ### `nano`
### `vi` and `vim` ### `vi` and `vim`
# Exercise
The only way to learn `vim` is to *use* it.
Luckily `vim-nox` comes with a dedicated *program* to learn it called `vimtutor`.
It's actually a text file that you open up in `vim` where you just need to **read** and **execute** what you've read.
Enjoy!
# Finding stuff
## Finding files
## Searching inside files
## Wildcards and regular expressions
# Pipes and redirects
# Users
## Adding and removing users
## Switching user
# Permissions
## Octal number system
## Changing permissions
## Changing ownership
# Remote control of a server
## History
## SSH and SFTP
# Bandit

128
readme.md
View File

@ -1,37 +1,133 @@
# About
Table of Contents
=================
* [Introduction to Linux](./essential/readme.md#introduction-to-linux)
* [Where does Linux originate from?](./essential/readme.md#where-does-linux-originate-from)
* [Who is behind this project?](./essential/readme.md#who-is-behind-this-project)
* [What is the deal with 'GNU-slash-Linux'?](./essential/readme.md#what-is-the-deal-with-gnu-slash-linux)
* [Where can you <em>get</em> some Linux?](./essential/readme.md#where-can-you-get-some-linux)
* [Debian](./essential/readme.md#debian)
* [How to create a virtual machine](./essential/readme.md#how-to-create-a-virtual-machine)
* [Breakdown of the Debian installation](./essential/readme.md#breakdown-of-the-debian-installation)
* [Exercise](./essential/readme.md#exercise)
* [Quick look at an idle system](./essential/readme.md#quick-look-at-an-idle-system)
* [Package managers](./essential/readme.md#package-managers)
* [Graphical installation](./essential/readme.md#graphical-installation)
* [Command line installation](./essential/readme.md#command-line-installation)
* [Adding a secondary desktop environment](./essential/readme.md#adding-a-secondary-desktop-environment)
* [Changing the runlevel](./essential/readme.md#changing-the-runlevel)
* [Exercise](./essential/readme.md#exercise-1)
* [Guest additions](./essential/readme.md#guest-additions)
* [Introduction to the command line](./essential/readme.md#introduction-to-the-command-line)
* [Compiled vs interpreted](./essential/readme.md#compiled-vs-interpreted)
* [Note on file extensions](./essential/readme.md#note-on-file-extensions)
* [More about paths](./essential/readme.md#more-about-paths)
* [Absolute and relative paths](./essential/readme.md#absolute-and-relative-paths)
* [root and / and /root are not the same thing](./essential/readme.md#root-and---and-root-are-not-the-same-thing)
* [Exercise](./essential/readme.md#exercise-2)
* [A pit stop to review what we've learned so far](./essential/readme.md#a-pit-stop-to-review-what-weve-learned-so-far)
* [Arguments and flags](./essential/readme.md#arguments-and-flags)
* [Getting help](./essential/readme.md#getting-help)
* [Options](./essential/readme.md#options)
* [Manuals](./essential/readme.md#manuals)
* [Exercise](./essential/readme.md#exercise-3)
* [Creating, modifying and deleting](./essential/readme.md#creating-modifying-and-deleting)
* [Directories](./essential/readme.md#directories)
* [Files](./essential/readme.md#files)
* [nano](./essential/readme.md#nano)
* [vi and vim](./essential/readme.md#vi-and-vim)
* [Exercise](./essential/readme.md#exercise-4)
* [Finding stuff](./essential/readme.md#finding-stuff)
* [Finding files](./essential/readme.md#finding-files)
* [Searching inside files](./essential/readme.md#searching-inside-files)
* [Wildcards and regular expressions](./essential/readme.md#wildcards-and-regular-expressions)
* [Pipes and redirects](./essential/readme.md#pipes-and-redirects)
* [Users](./essential/readme.md#users)
* [Adding and removing users](./essential/readme.md#adding-and-removing-users)
* [Switching user](./essential/readme.md#switching-user)
* [Permissions](./essential/readme.md#permissions)
* [Octal number system](./essential/readme.md#octal-number-system)
* [Changing permissions](./essential/readme.md#changing-permissions)
* [Changing ownership](./essential/readme.md#changing-ownership)
* [Remote control of a server](./essential/readme.md#remote-control-of-a-server)
* [History](./essential/readme.md#history)
* [SSH and SFTP](./essential/readme.md#ssh-and-sftp)
* [Bandit](./essential/readme.md#bandit)
# Planning # Planning
## Essential ## Essential
### Day 1 ### Day 1
* Introduction to Linux and it's history * [Introduction to Linux](./essential/readme.md#introduction-to-linux)
* How to create a virtual machine * [Where does Linux originate from?](./essential/readme.md#where-does-linux-originate-from)
* Breakdown of the Debian installation * [Who is behind this project?](./essential/readme.md#who-is-behind-this-project)
* Install your own graphical Debian installation with gnome as graphical interface * [What is the deal with 'GNU-slash-Linux'?](./essential/readme.md#what-is-the-deal-with-gnu-slash-linux)
* Explain the concept of a package manager * [Where can you <em>get</em> some Linux?](./essential/readme.md#where-can-you-get-some-linux)
* Install VLC via the graphical software tool * [Debian](./essential/readme.md#debian)
* Introduction to the command line * [How to create a virtual machine](./essential/readme.md#how-to-create-a-virtual-machine)
* Install `htop` via `apt` * [Breakdown of the Debian installation](./essential/readme.md#breakdown-of-the-debian-installation)
* Add a secondary desktop environment (XFCE or LXDE) via `tasksel` and explore it's footprint * [Exercise](./essential/readme.md#exercise)
* Disable the window manager via `systemctl` * [Quick look at an idle system](./essential/readme.md#quick-look-at-an-idle-system)
* Install a minimal Debian machine and add some software to it (htop, bmon, ...) as an exercise * [Package managers](./essential/readme.md#package-managers)
* [Graphical installation](./essential/readme.md#graphical-installation)
* [Command line installation](./essential/readme.md#command-line-installation)
* [Adding a secondary desktop environment](./essential/readme.md#adding-a-secondary-desktop-environment)
* [Changing the runlevel](./essential/readme.md#changing-the-runlevel)
* [Exercise](./essential/readme.md#exercise-1)
### Day 2 ### Day 2
* Install the guest additions to the main Debian machine * [Guest additions](./essential/readme.md#guest-additions)
* [Introduction to the command line](./essential/readme.md#introduction-to-the-command-line)
* [Compiled vs interpreted](./essential/readme.md#compiled-vs-interpreted)
* [Note on file extensions](./essential/readme.md#note-on-file-extensions)
* [More about paths](./essential/readme.md#more-about-paths)
* [Absolute and relative paths](./essential/readme.md#absolute-and-relative-paths)
* [root and / and /root are not the same thing](./essential/readme.md#root-and---and-root-are-not-the-same-thing)
* [Exercise](./essential/readme.md#exercise-2)
* [A pit stop to review what we've learned so far](./essential/readme.md#a-pit-stop-to-review-what-weve-learned-so-far)
* [Arguments and flags](./essential/readme.md#arguments-and-flags)
* [Getting help](./essential/readme.md#getting-help)
* [Options](./essential/readme.md#options)
* [Manuals](./essential/readme.md#manuals)
* [Exercise](./essential/readme.md#exercise-3)
* [Creating, modifying and deleting](./essential/readme.md#creating-modifying-and-deleting)
* [Directories](./essential/readme.md#directories)
* [Files](./essential/readme.md#files)
* [nano](./essential/readme.md#nano)
* [vi and vim](./essential/readme.md#vi-and-vim)
* [Exercise](./essential/readme.md#exercise-4)
### Day 3 ### Day 3
* Install `openssh-server` * [Finding stuff](./essential/readme.md#finding-stuff)
* [Finding files](./essential/readme.md#finding-files)
* [Searching inside files](./essential/readme.md#searching-inside-files)
* [Wildcards and regular expressions](./essential/readme.md#wildcards-and-regular-expressions)
* [Pipes and redirects](./essential/readme.md#pipes-and-redirects)
* [Users](./essential/readme.md#users)
* [Adding and removing users](./essential/readme.md#adding-and-removing-users)
* [Switching user](./essential/readme.md#switching-user)
* [Permissions](./essential/readme.md#permissions)
* [Octal number system](./essential/readme.md#octal-number-system)
* [Changing permissions](./essential/readme.md#changing-permissions)
* [Changing ownership](./essential/readme.md#changing-ownership)
* [Remote control of a server](./essential/readme.md#remote-control-of-a-server)
* [History](./essential/readme.md#history)
* [SSH and SFTP](./essential/readme.md#ssh-and-sftp)
### Day 4 ### Day 4
* over the wire bandit game * [Bandit](./essential/readme.md#bandit)
### Day 5 ### Day 5
* over the wire bandit game * [Bandit](./essential/readme.md#bandit)
* time for Q and A * [Moving forward](./essential/readme.md#moving-forward)
## CCNA ## CCNA