full outline and TOC
This commit is contained in:
parent
775ec4d66c
commit
3bae42575f
|
@ -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
128
readme.md
|
@ -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
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue