Explorar o código

Mise à jour de 'README.md'

Pierre-Yves Barriat hai 1 ano
pai
achega
99f433da54
Modificáronse 1 ficheiros con 484 adicións e 1 borrados
  1. 484 1
      README.md

+ 484 - 1
README.md

@@ -1,3 +1,486 @@
 # learning-linux
 
-This is the repository for the training Learning Linux
+This is the repository for the training Learning Linux
+
+### Instructor
+
+**Pierre-Yves Barriat**
+
+###### ACELI Training Sessions
+
+---
+
+# What is UNIX ?
+
+- Operating System
+  > Windows 10 (Microsoft), MacOSX (Apple), Android (Google), etc
+- UNIX is a (family of) Operating System
+- Invented by AT&T Bell Labs in late 60's
+- Currently there are different versions and variants of UNIX 
+  > Solaris, AIX, HP-UX, etc.
+- UNIX is **not** free or Open Source: "GNU is Not UNIX"
+
+---
+
+# What is Linux ?
+
+- GNU (80's) is a free, open source version of the UNIX OS, but without the most important element: the **kernel**
+- Linux kernel was developed in 1991 by Linus Torvalds, a Finnish graduate student
+- The association GNU/Linux is an operating system (say just "Linux") and provides an alternative to commercial operating systems
+- Linux exists without GNU (eg Android) : used to power a multitude of systems... from your phone to your smart fridge
+
+---
+
+# What is a Linux distribution ?
+
+- Many versions of Linux
+  > Red Hat, Debian, Suse, etc
+
+- But one common linux kernel: **kernel** is like an **engine**. A distribution is an actual car that hosts the engine
+
+- Distributions differ from
+  - the application/management layer
+  - GUI (Graphical User Interface = desktop environment)
+  - software packages
+  - help-desk, support, language
+
+---
+
+# Why Linux ?
+
+- **Linux is free**
+- Linux is supported on older computers (perf & updates)
+- Linux has many more free applications
+
+`Security`: there are very few viruses for Linux
+`Privacy`: most Linux distributions don't collect your data at all
+`Reliability`: if you want to stop something, you really can
+`Updates`: package manager
+`Customisation`: you can make Linux look, feel and behave as you want it to
+`Command Line Interface:` faster & efficient 
+
+---
+
+# Linux Statistics
+
+![bg right 100%](assets/OS_developers.png)
+
+- 47% of professional **developers** use Linux-based operating systems (Statista)
+- Linux powers 39.2% of **websites** whose operating system is known (W3Techs)
+- Linux powers 85% of **smartphones** (Hayden James)
+
+---
+
+# Why not Linux ?
+
+1. Hardware compatibility (printers, etc)
+2. Missing famous software (MS Office, Adobe, CAO, etc)
+3. Gaming
+
+### Workarounds
+
+1. Many devices "Linux compatible"
+2. Emulation (eg virtualbox), online usage, alternatives (GIMP)
+3. Difficult, but it exists emulation and Steam
+
+---
+
+# Distribution: why Ubuntu ?
+
+- easy to install and easy to use
+- easy to maintain and update
+- useful applications
+- looks nice
+- wide variety of supported applications
+- strong community support
+- better driver support
+- LTS and staging releases available as per user needs
+
+> get the latest Ubuntu LTS : [ubuntu-22.04.2-desktop-amd64.iso](https://releases.ubuntu.com/jammy/ubuntu-22.04.2-desktop-amd64.iso)
+
+---
+
+# Test Linux inside Windows: how ?
+
+Using a virtual machine: test Linux without changing anything to your computer
+
+You need to install a VM and then install the Linux inside
+
+- Get a Virtual Machine: https://www.virtualbox.org/wiki/Downloads
+  > VirtualBox + Extension Pack
+
+- Install Linux in a VM: [Install Linux Inside Windows Using VirtualBox](https://itsfoss.com/install-linux-in-virtualbox/)
+  > Step by Step Guide
+
+---
+
+# Linux GUI
+
+![bg right 95%](assets/GUI.png)
+
+A Linux distribution contains a [display server](https://www.google.com/search?tbm=isch&q=display+manager), a [window manager](https://www.google.com/search?tbm=isch&q=windows+manager) (manage windows, panel, menus, dash interfaces and core applications), and a [desktop environment](https://www.google.com/search?tbm=isch&q=graphical+interface) (eg status bars, drag-and-drop capabilities, etc)
+
+These 3 items are **bundled together** to make what is known as a `GUI environment`
+
+---
+
+# Using Linux
+
+**Using Linux through a GUI environment is similar to Windows or MacOSX**
+
+Linux users do not install software the same way that Windows users do: Linux has a tool known as a `package manager`
+
+A package manager provides a way to search for software, install software, keep the software up to date and remove the software
+> Similar to Google or Apple store
+
+---
+
+# Linux CLUI
+
+Using Linux with GUI, it's already great ! 
+**Using CLUI = unlock the power of Linux !**
+
+Each Linux system contains a terminal
+
+A terminal is where you enter Linux commands
+
+It's called the **C**ommand **L**ine **U**ser **I**nterface
+
+CLUI is one of the many strengths of Linux and can be more efficient than using the GUI
+
+---
+
+# Linux CLUI
+
+- CLUI allows users to be independent of distros (or UNIX systems like OSX)
+- CLUI saves system resources which are consumed by GUIs
+- CLUI allows users to easily work at distance (SSH)
+- CLUI allows developers to join together simple (and less simple) commands to do complex things and automate... whatever you want to
+
+> People tend to think command line is difficult. It's not.
+
+---
+
+# Linux Shell
+
+A **shell** is a program that takes commands from the keyboard and gives them to the operating system to perform
+
+The main function is to interpret your commands **= language**
+
+The **bash** shell is one of several shells available for Linux
+
+Learning the shell:
+
+> *"When you are a child you use a computer by looking at the pictures. When you grow up, you learn to read and write"*
+
+It's more or less like SMSing to your PC, telling it what to do
+
+---
+
+# Linux Shell
+
+Shells have some built-in commands
+
+A shell also supports programming constructs, allowing complex commands to be built from smaller parts **= scripts**
+
+Scripts can be saved as files to become new commands
+> many commands on a typical Linux system are scripts
+
+An open terminal show you a **PROMPT** waiting for your commands
+
+Commands can have **options** and parameters
+
+All your commands are saved in a **history**
+
+---
+
+# Linux Shell Demo
+
+Rename many files at once ? 
+
+```bash
+mmv '*.JPG' '#1.jpg'
+```
+
+Download a youtube video ?
+
+```bash
+youtube-dl https://www.youtube.com/watch?v=G7KNmW9a75Y&ab_channel=MileyCyrusVEVO
+```
+
+Convert color pictures in BW at once ? 
+
+```bash
+#!/bin/bash
+for file in *.jpg
+do
+  convert ${file} -colorspace Gray "${file%.*}_bw.jpg"
+  echo "${file}... converted"
+done
+```
+
+---
+
+# What you'll learn
+
+- Navigating the File System
+  > Get up and running with the CLUI by navigating directories and files
+
+- Viewing and Changing Files and Directories
+  > Learn to manipulate directories and files from the CLUI
+
+- Configuring the Environment
+  > Learn to configure the environment using the CLUI
+
+- Accessing Linux remotely
+  > Learn to use SSH  (basics)
+
+---
+
+# Navigating the File System
+
+A file system is a section of hard disk that has been allocated to contain files
+> it's arranged like hierarchical tree structure
+
+Files are grouped in the directory structure
+
+The top of the tree is called `root` and `/` is used to present the `root`
+
+![h:280](assets/arbo.png)
+
+---
+
+### Absolute paths
+
+In the tree `/users/usern/file1` is an absolute pathname
+
+### Relative paths
+
+If you are already in the `users` directory, the relative pathname for `file1` is `usern/file1`
+
+- `~` (tilda) points to the user's **home directory**. Useful if you are logging into a workstation with many users. It's the **default working directory** when you log in. If you are user `usern`, then `/users/usern/file1` is the same as `~/file1`
+
+- `.` refers to the current directory
+- `..` refers to the parent directory
+
+---
+
+# Basic commands
+
+- `ls` : lists folders/files in a directory
+- `cd` : change directory
+  > use `cd name` to navigate to directory name
+- `pwd` : print working directory.  Prints the path of the current directory
+- `du` : disk usage. Shows the disk usage of the current directory
+- `man` : manual  
+  > use `man name` to bring up a manual entry for command or program called `name`
+
+---
+
+### Creation
+
+- `mkdir` : use `mkdir name` to create a new directory named `name` in the current directory
+- `cp` : use ```cp file1 file2``` to create `file2` which is a copy of `file1`
+  > can also use `cp -r` to copy whole directories
+- `mv` : move = same as copy, but deletes the original file
+
+### Deletion
+
+- `rm` : delete files ( cannot recover your files after removed them ! )
+  > can also use `rm -rf` to remove whole directories
+
+**Be careful : there is no trash in CLUI**
+
+---
+
+- `tab` is used for auto-complete ![h:80](assets/tab.png)
+  > If a file/directory name was partly typed in, **tab will auto-complete** it
+
+  > If there are multiple options, tab will auto-complete up to the point where the options branch and show you a list of possible options
+
+- `*` is used as a wild card
+  > `rm blah*` removes all files which start with `blah`: eg `blah1`, `blah2`, and `blahblah` would all be removed
+     
+  > using `cp public/* private/` copies all files in a `public` directory into a `private` directory, and keeps all file names intact
+
+---
+
+# File permissions
+
+### Groups
+
+Each file and directory has three user based permission groups
+
+- **owner** :the `owner` permissions apply only the owner of the file or directory, they will not impact the actions of other users
+- **group** : the `group` permissions apply only to the group that has been assigned to the file or directory, they will not effect the actions of other users
+- **all users** : the `all users` permissions apply to all other users on the system, this is the permission group that you want to watch the most
+
+---
+
+### Types
+
+Each file or directory has three basic permission types
+
+- **read** : the `read` permission refers to a user's capability to read the contents of the file
+- **write** : the `write` permission refer to a user's capability to write or modify a file or directory
+- **execute** : the `execute` permission affects a user's capability to execute a file or view the contents of a directory
+
+---
+
+The following command :
+
+```bash
+ls -l
+```
+gives :
+
+|  1  |  2 |   3  | 4  | 5 |   6   | 7        |
+| --------------- | --------------- | ------------ | ------- |----------- | ------- | ---------- |
+|  `-rwxr-xr-x`  |  `1`  |  `dupont`  |  `grpelic` | `3528`  |  `2022-08-04`   |  `file_1` |
+|  `drwxr-xr-x`  |  `3`  |  `dupont`  |  `grpelic` | `512`  |  `2022-01-02`   |  `dir_1` |
+|  `lrwxr-xr-x`  |  `2`  |  `dupont`  |  `grpelic` | `210`  |  `2020-12-16`   |  `short -> /data` |
+|  `-rw-------`  |  `1`  |  `dupont`  |  `grpelic` | `4587`  |  `2022-12-04`   |  `file_2` |
+
+---
+
+# Linux privileges
+
+![bg right 70%](assets/sandwich.png)
+
+Linux has a robust permissions system: this is a very good thing, as it enables a **clear separation** of roles among users
+
+Especially between the `root` user and your `standard` user
+
+Sometimes, though, you might want your standard user to have **some** or **all** of root's privileges : this is accomplished with `sudo`
+
+---
+
+# Shell syntax rules
+
+Shells use three **"standard I/O streams"**
+
+- `stdin` is the standard input stream, which provides input to commands.
+- `stdout` is the standard output stream, which displays output from commands.
+- `stderr` is the standard error stream, which displays error output from commands.
+
+Shell has several **meta-characters** and **control operators** 
+
+> `|`, `&`, `>`, `;` , etc.
+
+---
+
+# Environment
+
+In a bash shell many things constitute your environment
+
+- the form of your prompt
+- your home directory and your working directory
+- the name of your shell
+- functions that you have defined
+- etc.
+
+Environment includes many variables that may have been set **by bash** or **by you**
+> Access the value of a variable by prefixing its name with `$`
+
+---
+
+# Environment variables
+
+- `USER` : 	the name of the logged-in user
+- `UID` 	: the numeric user id of the logged-in user
+- `HOME` : 	the user's home directory (similar to `~` )
+- `PWD` 	: the current working directory
+- `SHELL` :  the name of the shell
+
+Set a shell variable : typing a name followed immediately by an equal sign ( `=` )
+> if the variable exists, you will modify it to assign the new value
+
+You can use special files to control bash variables : `$HOME/.bashrc`
+
+---
+
+# Remote Linux Access
+
+`SSH` (or **S**ecure **SH**ell) is a **protocol** used to securely log onto remote systems
+> the most common way to access remote Linux and Unix-like servers
+
+`VNC` (or **V**irtual **N**etwork **C**omputing) is a **software** that allows a personal computer's desktop environment to be run 
+
+Aside from bandwidth, latency and security issues (which can vary a bit), the big differences are the functionality
+- VNC exports a whole session, desktop and all (GUI)
+- SSH runs a single program (CLUI) and show its windows on your machine
+
+---
+
+# Remote Linux using SSH
+
+You need:
+- an access to the distant machine : login/password 
+  > or a login with SSH keys (with passphrase)
+- the hostname or the IP address of the distant machine
+- and (of course) a UNIX terminal
+
+```bash
+ssh -X pbarriat@coriolis.elic.ucl.ac.be
+
+ssh -X -i ~/.ssh/id_rsa.ceci pbarriat@gwcism.cism.ucl.ac.be
+```
+
+---
+
+# Remote Linux from Windows
+
+Using a SSH client to reach a distant Linux Workstation
+
+**mobaXTerm** is free and easy to use
+> allow you to test a Linux environmment but in CLUI only
+
+Get a SSH client
+https://mobaxterm.mobatek.net/download-home-edition.html
+
+How to use a SSH client
+https://support.ceci-hpc.be/doc/_contents/QuickStart/ConnectingToTheClusters/MobaXTerm.html
+
+---
+
+# Scripting
+
+How to do a backup ?
+- with Dropbox or Google Drive ?
+- with a private cloud such as Nextcloud ?
+- with an other drive and/or an external drive ?
+
+Backup on external drive ?
+- manually ?
+- with Windows tools ? 
+- with external softwares ?
+
+**Why don't do that with a simple linux script ?**
+
+---
+
+# Conclusions
+
+|  Advantages of Linux  |  Disadvantages of Linux |
+| --------------------- | ---------------------------------- |
+|  Cost                 | Not easy to master ( **CLUI only** )  |
+|  Security and robustness | Hardware compatibility issues ( sometimes ) |
+|  Freedom | Not compatible with some Windows software |
+|  Software ||
+|  Development ||
+
+---
+
+### Need to know more about available Linux applications ?
+
+[Check out the list of the best Linux software](https://www.makeuseof.com/tag/best-linux-software/)
+
+### Need help with bash scripting ?
+
+- [Bash Scripting Tutorial for Beginners](https://linuxconfig.org/bash-scripting-tutorial-for-beginners)
+- [Bash scripting cheatsheet](https://devhints.io/bash)
+
+### Need help with Ubuntu ?
+
+The massive community is one of Ubuntu's biggest strengths
+> Visit https://askubuntu.com/ or https://answers.launchpad.net/