Linux est un système d’exploitation puissant mais son utilisation n’est pas facile pour les débutants non familiarisés avec l’environnement UNIX. L’utilisation de la plupart des applications peut s’effectuer à partir de l’interface graphique X-Window (ou à partir de sur-couches de X-Window telles que les environnements graphiques KDE et GNOME). Cependant pour certains travaux, il est beaucoup plus pratique et plus souple d’utiliser des lignes de commande depuis un environnement shell plutôt que d’utiliser de lourdes solutions graphiques. De plus, si vous devez intervenir sur votre serveur Linux à distance (c’est à dire depuis un poste connecté à Internet), vous allez inévitablement devoir utiliser des lignes de commande.
Qu’appelle t’on un shell ? Un shell est la liaison la plus élémentaire entre l’utilisateur et le système d’exploitation, c’est à dire le programme de gestion de la ligne de commande. Les commandes saisies sont interprétées par le shell et transmises au système d’exploitation.
De nombreuses commandes du shell ressemblent aux commandes MS-DOS : en utilisant la terminologie UNIX, nous pouvons considérer que le programme command.com correspond au shell de MS-DOS. Dans les environnements de type UNIX, il existe plusieurs shells (bash, tcsh, csh, sh, etc..)
Lorsque vous ouvrez une session Unix avec votre login et votre mot de passe, vous vous retrouvez devant le "prompt" du shell. En fonction du shell employé, le prompt peut avoir la forme suivante :
[philippe AT sirius essai] $
Le mot philippe signifie que vous vous êtes "logué" sur le compte de l’utilisateur philippe, AT sirius signifie que vous êtes sur la machine qui porte le nom sirius et essai signifie que vous êtes dans le répertoire essai.
La commande cd permet de se déplacer dans les répertoires. La command ls permet d’afficher la liste des fichiers d’un répertoire.
Attention, sous les systèmes Unix, un répertoire est désigné par le symbole / ou slash et non pas par un \ ou anti-slash comme c’est le cas sous DOS.
Exemples d’utilisation de la commande cd :
| $ cd / | déplacement à la racine du système | |
| $ cd /essai | déplacement dans le répertoire essai de la racine | |
| $ cd essai | déplacement dans le répertoire courant essai | |
| $ cd essai/ | déplacement dans le répertoire courant essai | |
| $ cd /usr/local | déplacement dans le répertoire apache du répertoire /usr | |
| $ cd .. | recule d'une branche vers la racine | |
| $ cd ~ | déplacement dans son répertoire personnel | |
| $ cd ~philippe | déplacement dans le répertoire personnel de l'utilisateur de philipppe |
Etant donné que le système mémorise le répertoire courant (répertoire dans lequel on est), on peut utiliser des noms de chemins relatifs :
| $ cd /home/philippe/essai | chemin absolu | |
$ cd essai |
chemin relatif |
La commande ls permet de lister le contenu d’un répertoire.
| [philippe AT sirius essai] $ cd /bin
[philippe AT sirius /bin] $ ls |
|||||
| arch ash awk cp cpio csh date | dd df dmesg fgrep gawk grep gunzip |
gzip hostname kill mount mt mv netstat |
nisdomainname ping ps sh sleep sort stty |
su sync tar ypdomain zcat zsh ls |
|
La commande ls sans arguments donne un listing brut difficile à exploiter. Pour obtenir des informations plus précises, il est nécessaire d’utiliser l’argument -l.
Exercice : Taper la commande ls avec -l en argument.
Avant de continuer, il est nécessaire de fournir quelques explications sur la gestion des fichiers. Sous Linux, un fichier peut représenter :
Linux étant un système multi-utilisateur, les utilisateurs doivent par conséquent être administré. Pour faciliter cette administration, les utilisateurs sont réunis en groupes. Ce qui permet de paramétrer des droits spécifiques à chaque groupe : droits en lecture, mais aussi en écriture et en exécution.
Revenons à l’exemple ci-dessus : les informations fournies sont relativement nombreuses et sont regroupées en colonnes :
La première colonne constitué de 10 caractères fournit des informations sur le type de fichier et les droits associés. Pour le premier caractère :
Il existe d’autres types de fichiers mais nous ne nous en occuperons pas à ce niveau. Les 9 lettres suivantes sont groupées trois par trois et indiquent les droits associés au fichier, c’est à dire par qui et comment un fichier peut-être utilisé :
Pour chaque triplet :
Ainsi dans l’exemple précédent, le fichier lisezmoi.txt peut être lu et écrit pas son propriétaire, il peut également être lu par les membres de son groupe mais ne peut être modifié. Pour les autres, la lecture et la modification de ce fichier ne sont pas autorisés.
Pour vous aider à retenir l’ordre de présentation des droits (utilisateur / groupe / autres), vous pouvez utiliser l’astuce mnémotechnique suivante : je, nous, ils.
Notons qu’il existe également des fichiers cachés sous Linux : lorsque le nom d’un fichier commence par un point (caractère .), celui-ci n’est visible qu’avec l’option -a.
Exercice : Taper ls avec -la en argument depuis votre répertoire personnel.
Les liens ainsi que la modification des droits associés à un fichier sont abordés un peu plus loin.
Lorsque l’on se déplace dans un répertoire, le shell n’affiche que le nom du répertoire dans lequel on se trouve sans préciser le chemin complet. On peut donc très facilement se tromper de répertoire : par exemple penser être dans le répertoire /bin alors que l’on se trouve dans le répertoire /usr/local/bin. La commande pwd permet de connaître le chemin du répertoire dans lequel on se trouve.
[philippe AT sirius bin]$ pwd
/usr/local/bin
Pour créer un répertoire il suffit d’utiliser la commande mkdir avec le nom du répertoire souhaité en paramètre.
Exercice : Créer un répertoire essai dans votre répertoire personnel.
La copie de fichier s’effectue avec la commande cp (copy). La syntaxe de la commande cp est la suivante : cp source destination La source et la destination pouvant être un fichier ou un répertoire.
Exemples :
| $ cp lisezmoi.txt essai.txt | Duplique le fichier lisezmoi.txt en essai.txt | |
| $ cp lisezmoi.txt essai/ | Copie le fichier lisezmoi.txt dans le répertoire essai | |
| $ cp essai/ essai2/ | Copie les fichiers du répertoire essai dans le répertoire essai2 |
|
| $ cp -R essai/ essai2/ | Copie tous les fichiers du répertoire essai - y compris les sous-répertoires dans le répertoire essai2 |
La commande rm (remove) permet de supprimer un fichier.
| $ rm lisezmoi.txt | Supprime le fichier lisezmoi.txt |
L’option -R permet de supprimer récursivement tout le contenu d’un répertoire. Attention, évitez au maximum d’utiliser cette option et surtout ne l’utiliser jamais en tant que root.
La commande rmdir (remove directory) permet de supprimer un répertoire.
| $ rmdir essai | Supprime le répertoire essai |
La commande mv permet de renommer un fichier.
$ cp lisezmoi.txt essai.txt |
Duplique le fichier lisezmoi.txt en essai.txt | |
$ mv lisezmoi.txt essai2.txt |
Renomme le fichier lisezmoi.txt en essai2.txt |
La commande cat permet de visualiser le contenu d’un fichier c’est à dire d’envoyer le contenu du fichier vers une la sortie par défaut : l’écran.
Exercice : Repérer un fichier non exécutable et afficher son contenu (vous pouvez vous rendre dans le répertoire /etc).
La commande more permet également de visualiser le contenu d’un fichier. L’affichage s’effectue page par page.
Exercice : Afficher le fichier précédent avec la commande more.
La commande more permet également de passer en mode éditeur en tapant vi pendant la visualisation du fichier.
L’éditeur le plus redouté des informaticiens est vi. Cet éditeur est l’éditeur élémentaire que l’on retrouve sur la plupart des systèmes d’exploitation et qui n’utilise pas d’interface graphique. Il prend en charge les commandes et les données en même temps. Une fois vi lancé, deux modes de fonctionnement se présentent : le mode commandes et le mode édition.
Une fois lancé : vi <nom de fichier> ; vous pouvez employer quelques unes des commandes ci-après les plus courantes :
commandes avec passage en mode insertion
commandes sans passage en mode insertion
emacs est un autre éditeur standard utilisé dans différents systèmes d’exploitation, il dispose d’un langage qui permet de le personnaliser à souhaits. Il dispose néanmoins de menus ’habituels’ tels que la gestion des fichiers, la recherche de caractères, etc.. Ainsi que de règles préprogrammées qui permettent aux développeurs une mise en page dépendante du langage utilisé (C, C++, java ...) reconnaissant les commandes courantes, les chaînes de caractères, etc ..
Exercice : Ajouter les noms des serveurs du réseau local dans le fichier /etc/hosts
Comme l’on s’en doute bien il arrive que l’on ait à retrouver un fichier dont on ne connaît plus l’emplacement ou même le nom ; Linux comprend quelques outils pour ces recherches.
La commande which permet de scruter les répertoires les plus communément utilisés (dont le chemin est indiqué dans la variable d’environnement PATH) pour retrouver le nom de fichier indiqué en argument.
Exemple : which apachectl recherchera dans tous les répertoires (du PATH) le fichier apachectl
Cette commande est surtout utile pour vérifier que l’on utilise bien la version souhaitée d’un binaire (exécutable). La commande whereis est semblable à la commande which.
La commande find :
Syntaxe : find <répertoire> <conditions> Arguments : le répertoire du début de recherche et les conditions sur des attributs du fichier.
Exemple : find /home/philippe -name \*.txt -size +100k recherchera dans le sous le répertoire de l’utilisateur Philippe tous les fichiers qui finissent par ".txt" et qui pèsent de plus de 100 kilo-octets.
Le signe | appelé pipe (ou tube) permet de relier avantageusement les commandes. L’introduction du pipe (tube) permet de combiner plusieurs commandes parmi lesquelles la commande grep.
On peut ainsi combiner la commande find avec la commande grep afin de retrouver une chaîne de caractère dans un fichier.
Exemple : find . -name LISEZMOI | xargs grep -n LINUX recherchera à partir du répertoire courant (noté .) les fichiers de noms LISEZMOI et affichera les lignes numérotées (option -n) contenant la chaîne de caractères Linux.
Syntaxe : grep [options] <chaîne de caractères> <nom de fichier>
Exemple : grep -i -n pacifique *.txt affichera toutes les lignes numérotées (option -n) contenant le mot pacifique sans prendre en compte les majuscules (option -i) dans les fichiers finissant par .txt
La création de liens symboliques (opposition aux liens physiques) évite la copie de fichiers identiques dans différents répertoires. Par exemple, si une application a besoin d’un fichier volumineux contenant des données relatives à un groupe d’utilisateurs, il est possible de l’avoir virtuellement dans les répertoires courant en créant un lien symbolique : ln -s <source> <destination>
Il n’est pas nécessaire que la source existe pour cette création au même titre que sa destruction n’altérera pas le lien mais son appel génèrera un erreur de type fichier introuvable.
Pour contrôler l’espace occupé et l’espace d’un disque dur (en fait d’une partition), il existe deux commandes très utiles.
La commande df renseigne sur l’espace disque total, disponible (disk free). Elle s’utilise sur tous répertoires "montés".
Cette commande s’utilise généralement avec en argument le nom d’un fichier pour vérifier le point de montage de son répertoire.
Exemple : df ~/essai nous indiquera la partition sur laquelle est sauvegardé le répertoire essai (le ~ représente /home/
La commande du calcule l’espace occupé (disk usage) pour un répertoire (sous entendu le répertoire et ses sous-repértoires).
L’option -k permet un affichage en kilo-octets.
Exemple : du -k -s essai affichera la liste des sous-répertoires du répertoire essai récursivement sans indiquer tous les fichiers et leur taille (option -s).
On notera pour l’occasion, la possibilité de redirection très utile sous linux. Cette technique permet de rediriger la sortie d’une commande ou d’un programme ailleurs que vers l’écran, c’est à dire dans un fichier ou vers un autre programme. Ainsi, nous pouvons envoyer un fichier dans l’entrée d’une commande, mettre l’affichage d’une commande dans un fichier et même envoyer l’affichage d’une commande dans l’entrée d’une autre. Enfin, dans notre cas, nous pouvons envoyer un fichier dans un autre.
Avec le symbole > (signe supérieur), nous pouvons rediriger la sortie d’un programme vers un fichier.
Exemple : cal > fevrier Ici, nous envoyons l’affichage de la commande cal - le calendrier pour le mois en cours - dans le fichier nommé fevrier.
Exemple : cat > essai1.txt permet de passer dans ’l’editeur’ cat que (l’on quitte avec ctrl+d )
Avec le symbole < (signe inférieur), nous redirigerons le contenu d’un fichier vers l’entrée d’une commande.
Exemple : mail marc < courrier envoie par courrier électronique à marc le fichier nommé courrier.
>> (supérieur supérieur) : ajoute à la fin Ce symbole permet d’ajouter l’affichage d’une commande à la fin d’un fichier, sans pour autant écraser ce qu’il y avait déjà dans le fichier. Avec un seul supérieur, le contenu du fichier serait remplacé par la sortie de la commande et donc ce contenu aurait été perdu.
Exemple : cat fichier1 fichier2 fichier3 >> fichier_complet
Nous ajoutons à la fin (concaténons) du fichier fichier_complet le contenu des fichiers fichier1, fichier2 et fichier3.
Rappel : | (symbole barre), réalise un tube entre deux commandes.
Ce symbole permet de faire en sorte que l’affichage d’une commande soit dirigé dans l’entrée d’une autre commande.
La commande chmod permet de changer les droits d’accès d’un fichier.
Vous ne pouvez modifier les droits d’un fichier que si vous en êtes le propriétaire. Il existe une exception : l’administrateur système root peut modifier les droits d’accès de tous les fichiers.
Syntaxe : chmod <modification des droits d'accès> <nom du fichier>
La partie
Exemples :
| $ chmod a+r lisezmoi.txt | Autorise à tout le monde la lecture de lisezmoi.txt | |
| $ chmod ug+rw,o+r lisezmoi.txt | Le propriétaire et les membres de son groupe peuvent lire et modifier le fichier lisezmoi.txt alors que les autres personnes ne peuvent que le lire. | |
| $ chmod a+x mon-script | Permet de spécifier que le fichier mon-script peut être exécuté |
La commande chown permet de changer le propriétaire d’un fichier. Syntaxe : chown utilisateur fichier
La commande chgrp permet de changer le groupe d’un fichier (il faut que le propriétaire appartienne au groupe). Syntaxe : chgrp groupe fichier