Chapitre 2. Introduction à la ligne de commande

Table des matières
2.1. Utilitaires de manipulation de fichiers
2.1.1. mkdir, touch : création de répertoires et fichiers vides (MaKe DIRectory, créer un répertoire, toucher)
2.1.2. rm : supprimer des fichiers ou des répertoires (ReMove, ôter)
2.1.3. mv : déplacer ou changer le nom des fichiers (MoVe, déplacer)
2.1.4. cp : copier des fichiers et des répertoires (CoPy, copier)
2.2. Manipulation des attributs de fichiers
2.2.1. chown, chgrp : changer l'utilisateur et le groupe propriétaires d'un ou plusieurs fichiers (CHange OWNer, changer de propriétaire; CHange GRouP) changer de groupe
2.2.2. chmod : changer les permissions sur des fichiers et des répertoires (CHange MODe, changer le mode)
2.3. Motifs d'englobement du shell, expressions rationnelles
2.4. Redirections et tubes
2.4.1. Un peu plus sur les processus
2.4.2. Redirections
2.4.3. Tubes
2.5. Le complètement
2.5.1. Exemple
2.5.2. De façon plus générale
2.6. Lancement et manipulation de processus en arrière-plan : le job control (contrôle des processus en arrière-plan)
2.7. Un dernier mot

Dans le chapitre « Basic Unix concepts  » du Guide de l'utilisateur, nous avons vu comment lancer un shell et ses principes de base, mais nous ne l'avons pas mis au travail, et c'est ce que nous allons faire dans ce chapitre.

Le principal avantage du shell est le nombre d'utilitaires existants : il en existe des milliers, et chacun est dédié à une tâche particulère. Nous n'en verrons qu'un petit nombre ici. L'une des grandes forces d'Unix est la possibilité de combiner ces utilitaires, comme nous allons le voir un peu plus tard.

2.1. Utilitaires de manipulation de fichiers

La manipulation de fichiers signifie ici copier, déplacer et effacer des fichiers. Après ceci, nous verrons des manières de changer leurs attributs (propriétaire, permissions associées).

2.1.1. mkdir, touch : création de répertoires et fichiers vides (MaKe DIRectory, créer un répertoire, toucher)

mkdir est utilisé pour créer des répertoires. Sa syntaxe est simple :

mkdir [options] <répertoire> [répertoire ...]

Une seule option est digne d'intérêt : l'option -p. Si cette option est passée en argument, mkdir créera les répertoires parents s'il n'existaient pas avant. Si elle ne l'est pas et que les répertoires parents n'existent pas, mkdir renverra une erreur. Exemples :

  1. mkdir toto crée un répertoire du nom de toto dans le répertoire courant.

  2. mkdir -p images/divers docs crée un répertoire divers dans le répertoire images en créant ce dernier auparavant s'il n'existait pas, et crée aussi un répertoire docs.

Initialement, la commande touch n'a pas pour but de créer des fichiers mais de mettre à jour les temps d'accès et de modification[1]. Toutefois, l'un de ses effets de bord est de créer les fichiers mentionnés s'ils n'existaient pas déjà. La syntaxe est :

touch [options] fichier [fichier...]

Donc, lancer la commande :

touch fichier1 images/fichier2

créera un fichier appelé fichier1 dans le répertoire courant et un fichier appelé fichier2 dans le répertoire images.

2.1.2. rm : supprimer des fichiers ou des répertoires (ReMove, ôter)

Cette commande joue le rôle des del et deltree du DOS, et plus encore. Sa syntaxe est :

rm [options] <fichier|répertoire> [fichier|répertoire...]

Parmi les options, on trouve :

  1. -r ou -R Supprimer récursivement. Cette option est obligatoire pour supprimer un répertoire, même vide. Toutefois, il existe aussi la commande rmdir pour effacer des répertoires vides.

  2. -i Demander confirmation avant chaque effacement. Il est recommandé de placer un alias de rm vers rm-i dans votre shell, et de même pour les commandes cp et mv.

  3. -f Le contraire de -i, force la suppression des fichiers ou répertoires, même si l'utilisateur n'a pas d'autorisation en écriture sur les fichiers[2].

Quelques exemples :

  1. rm -i images/*.jpg fichier1 Supprimer tous les fichiers dont le nom se termine par .jpg dans le répertoire images ainsi que le fichier fichier1 dans le répertoire courant, en demandant confirmation pour chacun des fichiers. Répondez o ou y pour confirmer, n pour annuler.

  2. rm -Rf images/divers/ file* Suppression sans demande de confirmation de tout le répertoire divers/ dans le répertoire images/ en plus de tous les fichiers du répertoire courant dont le nom commence par file.

Avertissement

un fichier effacé avec rm est effacé de façon irrévocable. Il n'y a aucun moyen de récupérer les fichiers! N'hésitez donc pas à utiliser l'option -i...

2.1.3. mv : déplacer ou changer le nom des fichiers (MoVe, déplacer)

La syntaxe de la commande mv est la suivante :

mv [options] <fichier|rép.> [fichier|rép...] <destination>

Quelques options :

  1. -f Forcer le déplacement de fichiers (aucun avertissement en cas d'écrasement d'un fichier au cours de l'opération).

  2. -i Le contraire (demander confirmation à l'utilisateur avant d'écraser un fichier existant).

  3. -v Mode verbeux, rapporter tous les changements.

Quelques exemples :

  1. mv -i /tmp/pics/*.gif . Déplacer tous les fichiers du répertoire /tmp/pics/ dont le nom se termine par .gif vers le répertoire courant (.), en demandant confirmation avant d'écraser un fichier existant.

  2. mv toto titi Renommer le fichier toto en titi.

  3. mv -vf fichier* images/ trash/ Déplacer, sans demander confirmation, tous les fichiers dans le répertoire courant dont le nom commence par fichier ainsi que tout le répertoire images/ vers le répertoire trash/, et rapporter tous les changements effectués.

2.1.4. cp : copier des fichiers et des répertoires (CoPy, copier)

cp est un remplacement pour les commandes copy, xcopy de DOS et plus. Sa syntaxe est la suivante :

cp [options] <fichier|rép.> [fichier|rép...] <destination>

Il existe une myriade d'options. Voici les plus utilisées :

  1. -R Copier récursivement; obligatoire pour copier un répertoire, même vide.

  2. -i Demander confirmation avant d'écraser des fichiers qui pourraient l'être.

  3. -f Le contraire de -i, remplacer d'éventuels fichiers existants sans demander confirmation.

  4. -v Mode verbeux, rapporter toutes les actions effectuées par cp.

Quelques exemples :

  1. cp -i /tmp/images/* images/ Copier tous les fichiers du répertoire /tmp/images dans le répertoire images/ du répertoire courant, en demandant confirmation si un fichier peut être écrasé.

  2. cp -vR docs/ /shared/mp3s/* mystuff/ Copie tout le répertoire docs dans le répertoire courant plus tous les fichiers dans le répertoire /shared/mp3s dans le répertoire mystuff situé dans le répertoire courant.

  3. cp toto titi Faire une copie du fichier toto sous le nom de titi dans le répertoire courant.

Notes

[1]

Il y a trois mesures de temps distinctes pour chaque fichier sous Unix : la date de dernier accès au fichier (atime), c'est-à-dire la date de dernière ouverture du fichier en lecture ou écriture; la date de dernière modification des attributs de l'i-nœud (mtime); et enfin la date de dernière modification du contenu du fichier (ctime).

[2]

Il est suffisant pour un utilisateur d'avoir le droit en écriture sur le répertoire pour pouvoir en effacer des fichiers, même s'il n'en est pas le propriétaire.