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

Le login

modifier

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

modifier

pwd (print working directory)

modifier

Affiche le répertoire courant.

 $ pwd
 /home/alex

Affiche les informations relatives à l'utilisateur connecté.

 $ id
 uid=1000(alex) gid=1000(alex) groupes=20(dialout), 24(cdrom), 25(floppy), 29(audio), 44(video), 46(plugdev), 106(netdev), 109(powerdev), 1000(alex)
 

Permet de changer son mot de passe

 $ passwd
 Changing password for alex
 (current) UNIX password:
 Enter new UNIX password:
 Retype new UNIX password:
 passwd : le mot de passe a été mis à jour avec succès

cd (change directory)

modifier

Pour se placer dans un répertoire

 $ cd .                    # . désigne le répertoire courant
 $ cd ..                   # .. désigne le répertoire parent
 $ cd /                    # / désigne le répertoire racine
 $ cd /tmp                 # désigne le répertoire tmp appartenant à la racine
 $ cd tmp                  # désigne le répertoire tmp du répertoire courant
 $ cd ../tmp               # désigne le répertoire tmp du répertoire parent du répertoire courant
 $ cd ~                    # permet de revenir dans son répertoire de travail (home directory)
 $ cd                      # idem

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.


Liste les fichiers d'un répertoire

 $ ls                      # liste les fichiers non cachés du répertoire courant  
 $ ls -l                   # (l : long) : liste détaillée des fichiers du répertoire courant 
 $ ls -a                   # (a : all) : liste tous les fichiers, y compris les fichiers cachés

On peut combiner plusieurs options, l'ordre n'est pas important. Les quatre commandes suivantes sont identiques :

 $ ls -a -l
 $ ls -l -a
 $ ls -la
 $ ls -al


mkdir (make directory)

modifier

Permet de créer un répertoire

 $ mkdir rep1              # crée un répertoire rep1 dans le répertoire courant
 $ mkdir /rep1             # tente de créer un répertoire rep1 à la racine,
                           # le système refuse car je ne suis pas connecté en root

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:

 $ mkdir ../../home/alex/rep2    # on utilise un adressage relatif à la position où je suis : 
                                 # on remonte dans l'arborescence jusqu'à la racine puis 
                                 # on redescend jusqu'au répertoire alex
 $ mkdir /home/alex/rep2         # on utilise un adressage absolu en partant de la racine
 $ mkdir ~/rep2                  # on utilise ~ pour désigner le répertoire de travail

l'option -p permet de créer le(s) répertoire(s) parent(s).

 $ mkdir  -p rep1/rep2           # crée un répertoire parent rep1 si il n'existe pas,
                                 # et crée dans rep1 un répertoire rep2

rmdir (remove directory)

modifier

Supprimer un répertoire vide

 $ rmdir rep1

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

 $ find nom                      # cherche le fichier ou le répertoire appelée nom à partir du répertoire courant
 $ find . -name "nom.txt" -print > ./chemin/sortie.txt  # cherche le fichier nom.txt récursivement à partir 
                                                        # du répertoire courant et écrit le résultat dans le fichier 
                                                        # sortie.txt situé sur le répertoire spécifié par chemin

cp (copy)

modifier

Copier un fichier

 $ cp /etc/passwd /tmp                # copie le fichier /etc/passwd dans le répertoire /tmp
 $ cp /etc/passwd /tmp/nouveaunom     # copie le fichier /etc/passwd dans le répertoire /tmp 
                                      # et le renomme en nouveaunom

Attention, si le fichier destination existe déjà, il sera remplacé et sans demander confirmation

Options courantes :

 -i : si le fichier destination existe, demande confirmation avant de remplacer le fichier

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)

modifier

Effacer un fichier

 $ rm lefichier                      # efface le fichier lefichier

Attention, le fichier est effacé et sans demander confirmation

Options courantes :

 -i : demande confirmation avant d'effacer le fichier


mv (move)

modifier

Déplacer ou renommer des fichiers

 $ mv [Option] Source Destination(répertoire)
 $ mv [Option] Répertoire Source
 $ mv fichier_source fichier_cible   # copie fichier_source dans fichier_cible
 
 $ mv fichier1 fichier2    # renomme le fichier fichier1 en fichier2
                           # Attention si fichier2 existe, son contenu sera écrasé et 
                           # remplacé par celui de fichier1

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.

 $ mv -i fichier1 fichier2 # demande la confirmation avant d'effacer la destination
 $ mv rep1/fic1 rep2/fic2  # déplace le fichier fic1 situé dans le répertoire rep1
                           # sous le nouveau nom fic2 situé dans le répertoire rep2
 $ mv rep1 rep2            # déplace le répertoire rep1 dans le répertoire rep2
                           # si rep2 n'existe pas, renomme rep1 en rep2


ln (link)

modifier

La commande ln permet de créer des liens, c'est à dire des raccourcis vers des fichiers ou des répertoires.

 ln -s destination nom_du_lien

Exemple

 $ ln -s prog1.0 monprogramme

Cette commande crée le lien suivant :

 lrwxrwxrwx 1 alex alex   7 2007-10-26 14:25 monprogramme -> prog1.0

Les Shells

modifier

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

modifier
 « L'art de la saisie des commandes ultra rapide ». 

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 ?

modifier

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

Exemple

$ls *.c                          # liste tous les fichiers du répertoire courant dont 
                                       # l'extension est .c
$ls fich*.c                      # liste tous les fichiers du répertoire commençant par fic 
                                       # et dont l'extension est .c 
                                       # ex : fichier1.c fichier2.c fichierprojet.c ...
$ls fichier?.c                   # liste tous les fichiers dont le nom est fichier
                                       # + un caractère quelconque
                                       # fichier1.c fichier2.c fichier3.c fichier4.c ...

Invoquer un programme en tâche de fond

modifier

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 :

 $ xeyes &

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 :

 $ xeyes
 <CTRL Z>
 [1]+  Stopped                 xeyes

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 :

 $ xeyes
 <CTRL Z>
 [1]+  Stopped                 xeyes
 $ bg
 [1]+ xeyes &
 $

La commande fg (foreground) permet de refaire passer le programme en premier plan :

 $ xeyes
 <CTRL Z>
 [1]+  Stopped                 xeyes
 $ bg
 [1]+ xeyes &
 $ fg
 xeyes