# Le système d'exploitation GNU-Linux/Principes et commandes de base Unix

* Qu'est-ce qu'un système d'exploitation ?
* Unix et Linux
* Partitionnement du disque
* Installation
** Installer Debian via le réseau
* Utilisateur Unix, l'interface console
** Le login
** Variables d'environnement
** Commandes de base
** L'aide en ligne man
** L'éditeur de texte vi
** Les shells
** La complétion
** Les jokers
** Les répertoires importants
** Redirection des entrées/sorties
** Invoquer un programme en tâche de fond
** Propriétaires et droits d'accès
** Processus
** Locale
* Administration du système
** Configuration du réseau
** Les utilisateurs et groupes
** Le processus d'initialisation
** Les systèmes de fichiers
** Le système virtuel /proc
** Les périphériques /dev
** L'ordonnanceur de travaux cron
** Le backup : tar et gzip
** ghost avec partimage
** sauvegarde de fichiers avec rsync
** Les fichiers journaux syslog
** Installation de nouveaux logiciels
** Le noyau Linux et les modules
** Autres commandes utiles
** Installation RAID1 logiciel + LVM + XFS
** Scripts de surveillance
** Réseaux sans fil
* Administration des services réseaux
** L'outil d'administration Webmin
** telnet
** cURL
** wget
** Le serveur de noms BIND
** Le serveur de configuration réseau DHCP
** Le serveur de shell distant SSH
** Le partage de fichiers Samba
** Le partage de fichiers NFS
** Le serveur d'impression CUPS
** Le serveur de fichiers FTP
** Le serveur Web Apache
** Le serveur Web Nginx
** La base de données MySQL
** La base de données Memcached
** La base de données Redis
** Le serveur de mails Postfix
** Les annuaires LDAP
** La supervision Nagios
* Sécurisation d'un serveur Linux
** Installation d'un service en mode chroot
** Protection avec iptables
* Erreurs connues
* Médiagraphie
* Auteurs
* Qu'est-ce qu'un système d'exploitation ?
* Unix et Linux
* Partitionnement du disque
* Installation
** Installer Debian via le réseau
* Utilisateur Unix, l'interface console
** Le login
** Variables d'environnement
** Commandes de base
** L'aide en ligne man
** L'éditeur de texte vi
** Les shells
** La complétion
** Les jokers
** Les répertoires importants
** Redirection des entrées/sorties
** Invoquer un programme en tâche de fond
** Propriétaires et droits d'accès
** Processus
** Locale
* Administration du système
** Configuration du réseau
** Les utilisateurs et groupes
** Le processus d'initialisation
** Les systèmes de fichiers
** Le système virtuel /proc
** Les périphériques /dev
** L'ordonnanceur de travaux cron
** Le backup : tar et gzip
** ghost avec partimage
** sauvegarde de fichiers avec rsync
** Les fichiers journaux syslog
** Installation de nouveaux logiciels
** Le noyau Linux et les modules
** Autres commandes utiles
** Installation RAID1 logiciel + LVM + XFS
** Scripts de surveillance
** Réseaux sans fil
* Administration des services réseaux
** L'outil d'administration Webmin
** telnet
** cURL
** wget
** Le serveur de noms BIND
** Le serveur de configuration réseau DHCP
** Le serveur de shell distant SSH
** Le partage de fichiers Samba
** Le partage de fichiers NFS
** Le serveur d'impression CUPS
** Le serveur de fichiers FTP
** Le serveur Web Apache
** Le serveur Web Nginx
** La base de données MySQL
** La base de données Memcached
** La base de données Redis
** Le serveur de mails Postfix
** Les annuaires LDAP
** La supervision Nagios
* Sécurisation d'un serveur Linux
** Installation d'un service en mode chroot
** Protection avec iptables
* Erreurs connues
* Médiagraphie
* Auteurs
[ Modifier le sommaire ]

## Le login

Les systèmes compatibles Unix sont par définition multi-tâches et multi-utilisateurs, c'est à dire que plusieurs personnes peuvent travailler simultanément sur le même système.
Chaque utilisateur est identifié par un nom d'utilisateur (login) et un mot de passe (password).
Le login est associé à un numéro unique (le UID : User IDentifiant) et permet d'identifier chaque utilisateur. Il ne contient ni espace, ni caractères spéciaux.
Le mot de passe doit être choisi judicieusement : il doit mélanger des caractères en minuscule et majuscule, des chiffres et des caractères spéciaux.
Chaque utilisateur dispose d'un répertoire de travail (le Home Directory) dans lequel il a le droit de créer ses propres fichiers et répertoires. Ce répertoire de travail se situe généralement dans le répertoire home et porte le nom du login. Exemple : le répertoire de travail de l'utilisateur alex est /home/alex.
Il existe un utilisateur particulier : le root. Le root est l'administrateur du système, il dispose de tous les droits et s'occupe de la gestion du système : ajout et suppression des utilisateurs, installation et configuration du système et des logiciels ...
Le root a tous les pouvoirs sur le système, il peut tout faire, y compris tout casser. De ce fait, il faut donc choisir un mot de passe très sécurisé, et toujours bien vérifier a deux fois avant d’exécuter une opération avec l'utilisateur root.
Le root n'est pas une personne a proprement parler, il s'agit d'une fonction. Ainsi, il ne faut jamais travailler en permanence avec le compte root, mais utiliser son compte habituel, et passer root (via les commandes su ou sudo) que si l'on a besoin de réaliser une opération d'administration.
Contrairement aux autres utilisateurs, le répertoire de travail du root se situe à la racine du système (/root). L'explication est simple : en cas de problème avec la partition /home, l'utilisateur root pourra quand même accéder à son répertoire de travail.

## Les commandes de base
### pwd (print working directory)

Affiche le répertoire courant.

### id

Affiche les informations relatives à l'utilisateur connecté.

### passwd

Permet de changer son mot de passe

### cd (change directory)

Pour se placer dans un répertoire
Connecté en root, la commande $ cd m'amène au répertoire /root qui est le répertoire de travail de l'utilisateur root.
Connecté avec l'utilisateur alex, $ cd m'amène au répertoire de travail de l'utilisateur alex, à savoir /home/alex.

### ls

Liste les fichiers d'un répertoire
On peut combiner plusieurs options, l'ordre n'est pas important. Les quatre commandes suivantes sont identiques :

### mkdir (make directory)

Permet de créer un répertoire
Exercice : je suis dans le répertoire /var/log, je souhaite créer un répertoire rep2 dans le répertoire /home/alex, comment faire ?
J'ai 3 possibilités:
l'option -p permet de créer le(s) répertoire(s) parent(s).

### rmdir (remove directory)

Supprimer un répertoire vide

### find

Permettre de retrouver des fichiers à partir de certains critères.

### cp (copy)

Copier un fichier
Attention, si le fichier destination existe déjà, il sera remplacé et sans demander confirmation
Options courantes :
Remarque : pour copier à travers un réseau TCP/IP, utiliser la commande scp.
En cas d'erreur cp: omission du répertoire, c'est qu'un répertoire doit être copié avec l'option "-r".

### rm (remove)

Effacer un fichier
Attention, le fichier est effacé et sans demander confirmation
Options courantes :

### mv (move)

Déplacer ou renommer des fichiers
Par pécaution, on utilise l'option -i qui permet d'être averti par le système avant l'écrasement du fichier destination si celui-ci existe.

### ln (link)

La commande ln permet de créer des liens, c'est à dire des raccourcis vers des fichiers ou des répertoires.
Exemple
Cette commande crée le lien suivant :

## Les Shells

Shell veut dire Coquille, qui entoure le noyau. C'est un interpréteur de commandes que l'on utilise pour lancer des commandes ou programmer une suite de commandes. L'utilisateur discute avec le Shell, qui discute avec le noyau, qui à son tour discute avec le matériel. Originellement le shell est utilisé sous Unix, il s'est répandu depuis avec différentes versions, la forme la plus simple est sh.
Les versions connues :
* sh : shell Bourne
* ksh : korn shell
* Csh : Shell syntaxe du C
* Tcsh : Csh amélioré
* Bash : Bourne Again Shell
* Zsh : le petit dernier
Le shell est constitué de petits shells spécifiques à chaque travail, chacun ayant un fichier de configuration stocké dans le répertoire /home de chaque utilisateur, lequel peut les modifier à sa convenance :
* .profile : executé automatiquement lors d'un shell de connexion (à chaque login), quel que soit le shell
Fichiers de configuration spécifiques au shell Bash :
* .bash_profile : exécuté automatiquement lors d'un shell de connexion (à chaque login)
* .bashrc : chargé automatiquement lors d'un shell interactif
* .bash_logout : chargé lors de la fermeture du shell (à la déconnexion)
Autres fichiers liés au Bash
* .bash_history : c'est un fichier texte contenant l'historique des commandes tapées.

## La complétion

A chaque fois que vous tapez une commande, Linux vous aide à compléter votre commande en appuyant sur la touche TAB ↹.
Tapez le début de votre commande et en appuyant sur la touche TAB ↹, Linux vous la complète ou vous propose les différentes possibilités pour la compléter, à défaut vous aurez droit à un petit bip, s'il existe un trop grand nombre de propositions, Linux vous affiche ce nombre.
exemple :
* $ cd /h en tapant TAB ↹ Linux complète la commande en cd /home
* $ cd / en tapant TAB ↹ Linux me donne la liste de tous les répertoires de la racine afin que j'en choisisse un en tapant ses premiers caractères et que je complète encore par TAB ↹ si besoin est.

## Les jokers * et ?

Dans une commande sur les fichiers, on peut remplacer une partie d'un nom de fichier par * ou d'un caractère par ?
Exemple

## Invoquer un programme en tâche de fond

Certains programmes ne rendent pas la main immédiatement (exemple : la compilation d'un gros programme).
Pour récupérer la main, il suffit de rajouter un & (ET commercial ou Esperluette) à la fin de la commande :
Si on a lancé une commande qui ne rend pas la main et que l'on a oublié de rajouter le &, on peut utiliser la méthode suivante :
Le programme est alors stoppé. Il suffit de taper ensuite la commande bg (background) pour qu'il s’exécute en tâche de fond :
La commande fg (foreground) permet de refaire passer le programme en premier plan :