# Admin Linux : Cours 1 : Intro à Linux

## UNIX

UNIX est un système :
- Multi utilisateurs
- Multi tâches

Il possède des interpréteurs de commandes (`shells`) avec beaucoup de commandes et utilitaires.

Très portable, il est possible de l'installer sur la quasi totalité des plateformes matérielles.

UNIX possède des standards de sécurité élevés notamment pour le réseau.

## Linux

Linux est un noyau de système d'exploitation dit "Type UNIX" (qui ressemble à un système UNIX).

Ce noyau sert de bases au distributions Linux, qui packagent un ensemble de logiciels avec le noyau pour avoir un système d'expliotation clé en main.

### Architecture du système de fichiers Linux

- `/bin` : fichiers exécutables essentiels au système
- `/boot` : noyaux et fichiers du gestionnaire de démarrage
- `/dev` : pour "device" contient les fichiers pour les périphériques
- `/etc` : fichiers de configuration du système
- `/home` : répertoires personnels des utilisateurs
- `/lib` : librairies systèmes et modules du noyau
- `/lost+found` : fichiers retrouvés par la commande `fsck`
- `/mnt` : repertoire proposé pour le montage de futur systèmes de fichier (diques durs, lecteurs réseau)
- `/media` : pour les périphériques de stockages (clé USB, carte SD)
- `/mount` : comme `/media` mais plus temporaire
- `/root` : répertoire de base du super utilisateur
- `/sbin` : fichiers exécutables du super utilisateur
- `/tmp` : fichiers temporaires créés par certain programmes
- `/usr` : programmes, librairies et fichiers accessible pour l'utilisateur
- `/var` : données variables liées à la machine

Chaque utilisateur va posséder un dossier à son nom dans `/home`.

## Commandes de bases

### Change Directory

La commande `cd` permet de changer de répertoire courant, en donnant le chemin, relatif ou absolu d'un répertoire.

```bash
cd ~ # répertoire utilisateur
cd .. # répertoire parent
cd - # répertoire précédent
```

### List

La commande `ls` permet de lister le contenu du répertoire courant. On peut aussi passer en paramètre le chemin relatif ou absolu d'un répertoire pour en lister le contenu.

```bash
ls -l # plus de détail
ls -a # afficher les répertoires cachés
ls -lt # trier par date de modification
```

### Print Working Directory

La commande `pwd` permet d'afficher le chemin absolu du répertoire courant.

### Which

La commande `which` permet d'afficher le chemin d'un exécutable appelé par une commande passée en paramètre.

```bash
which ls
```

### `cat`

La commande `cat` permet d'afficher tout le contenu d'un fichier.

```bash
cat myFile.txt
```

### `less`

La commande `less` permet d'afficher tout le contenu d'un fichier page par page.

```bash
less myFile.txt
```

### Make Directory

La commande `mkdir` permet de créer un répertoire ayant le nom/chmin passé en paramètre.

```bash
mkdir myDir
```

### Remove Directory

La commande `rmdir` permet de supprimer un répertoire vide.

```bash
rmdir myDir
```

### Touch

La commande `touch` permet de créer un fichier.

```bash
touch myFile.txt
```

### Remove

La commande `rm` permet de supprimer un fichier.

```bash
rm myFile.txt
```

## Droits d'accès

Les droits d'accès sont regroupés en catégories : 

- user : droits du propriétaire
- group : droits du groupe
- other

Chaque catégorie possède trois types de droits :
- r : read
- w : write
- x : execute

On utilise une notation binaire octale pour représenter ces droits : 

| Binaire | Octal | Droit |
|---------|-------|-------|
| 000     | 0     | ---   |
| 001     | 1     | --x   |
| 010     | 2     | -w-   |
| 011     | 3     | -wx   |
| 100     | 4     | r--   |
| 101     | 5     | r-x   |
| 110     | 6     | rw-   |
| 111     | 7     | rwx   |

### Changer les droits

La commande `chmod`. Peut être utilisée pour changer les droits d'un fichier. L'option `-R` peut être utilisée pour faire le changement récursivement.

```bash
chomd 764 myfile # user : 7 (rwx), group : 6 (rw-), other : 4 (r--)
```

### Changer le propriétaire / groupe

La commande `chown` permet de désigner un nouveau propriétaire et / ou un nouveau groupe à un fichier.

```bash
chown user1:group1 myFile # nouveau proriétaire : user, nouveau groupe : group1
```

## Gestion des utilisateurs

- Infos des utilisateurs : `/etc/passwd`
- Infos sur les groupes : `/etc/group`
- Mots de passes hachés : `/etc/shadow`

### Se connecter

Pour se connecter avec le compte d'un utilisateur : 

```bash
su <username>
```

### Créer un groupe

```bash
groupadd -g <guid> <group name>
```

### Créer un utilisateur 

```bash
useradd -u <uid> -c "<commentaire>" <nom utilsateur> 
```

Options : 
- `-G <groups>` : groupes auxquelle ajouter l'utilisateur
- `--create-home` : créer automatiquement un répertoire utilisateur
- `-p <hased password>` : le mot de pass de l'utilisateur (haché)
- ``-s <shell>` : le shell par défaut de l'utilisateur. Ex : `/bin/bash`

## Processus

### Arbre des processus

`pstree` permet d'afficher l'arboresence des processus en cours d'exécution.

### Liste des processus

`ps` permet d'afficher les processus en cours d'exécution.

Options : 
- `-u <username>` : afficher les processus d'un utilisateur
- `-a` : les processus attachés à un terminer
- `-x` : les processus non attachés à un terminal
  
### Terminer un processus

`kill` permet d'envoyer un signal de terminet à un processus grâce à son PID.

```bash
kill 2232 # termine le processus avec le PID 2332
```

L'options `-9` permet de forcer la terminaison du processus

## Commandes utilitaires réseau

- `ifconfig` : Permet de voir la configuration des interfaces réseau
- `ping <ip / domaine>` : test d'accèssibilité ICMP
- `traceroute <ip / domaine>` : affiche le chemin emprunté par les paquets IP pour joindre une destination
- `tcpdump` : Examen du traffic réseau sur une interface
- `telnet` / `ssh <utilisateur>@<ip / domaine>` : connexion sur une machine distante
- `wget <ip / domaine>` : récupérer du contenu via le web

## Commandes utilitaires système de fichier

- `mount` / `unmount` : montage démontage de systèmes de fichier
- `df` : Taux d'occupation des systèmes de fichier. l'options `-h` permet d'avoir des unités plus lisibles.
- `more <fichier>` : afficher un fichier page par page
- `grep "<terme>"` : filter un flux de sorties (commande ou fichier)
- `find <départ> -name <fichier>` : chercher un fichier dans une arborescence
- `mv <fichier> <destination>` : déplace un fichier