Créer : touch
et mkdir
Objectif de cet atelier pratique
- Prise en main de la création de fichiers et de répertoires
Modifier l'horodatage d'un fichier avec touch
L'affichage détaillé de ls
avec l'option -l
nous montre que chaque fichier
est horodaté. Prenons par exemple le fichier ~/.bashrc
:
En l'occurrence, ce fichier a été créé – ou modifié pour la dernière fois – le 30 avril à 7h32. Maintenant, essayons ce qui suit :
Nous constatons que l'horodatage du fichier indique maintenant le 20 septembre à 9h53. En effet, cela correspond à la date et à l'heure auxquelles j'écris ces lignes.
Créer un fichier vide avec touch
Si le fichier spécifié n'existe pas, touch
prend soin de le créer. Essayons
avec un nom de fichier qui n'existe pas dans le répertoire ~/Documents
:
$ cd Documents
$ touch exemple.txt
$ ls -l exemple.txt
-rw-r--r--. 1 microlinux microlinux 0 20 sept. 09:59 exemple.txt
Ici, la commande touch
a créé un fichier vide exemple.txt
d'une taille de 0
octet.
Créer un fichier texte sans éditeur de texte
Voici une méthode pour créer un fichier texte simple, à l'aide de la seule
commande cat
:
$ cat > livres.txt << EOF
> Alice au pays des merveilles
> La montagne magique
> Faust
> EOF
$ ls -l livres.txt
-rw-r--r--. 1 microlinux microlinux 55 20 sept. 10:05 livres.txt
$ cat livres.txt
Alice au pays des merveilles
La montagne magique
Faust
Nous avons écrit trois lignes de texte dans un fichier livres.txt
. La suite
de caractères EOF
(comme End Of File) définit la fin du fichier.
Aurions-nous pu obtenir quelque chose de comparable avec la commande
echo
? Essayons :
La commande echo
a créé ici un nouveau fichier compositeurs.txt
en y
écrivant une ligne Beethoven
. Jusqu'ici, cela ressemble beaucoup à ce que
nous avons fait auparavant avec bonjour.txt
. Maintenant, essayons ceci :
Ce n'était visiblement pas la bonne méthode pour ajouter une ligne à notre fichier. Le dernier contenu en date a tout simplement écrasé l'ancien. Nous allons donc nous y prendre autrement :
Voilà qui est mieux. L'utilisation du chevron >>
au lieu de la simple flèche
>
a provoqué l'ajout de la chaîne de caractères à la fin du fichier, en
évitant la substitution du contenu précédent. Si nous souhaitons ajouter un
troisième nom à la liste, il devrait donc suffire de répéter la dernière
commande en insérant un autre nom. Essayons :
Effectivement, c'est bien cela. Soit dit en passant, nous en avons profité pour avoir un autre petit aperçu de la redirection sous Linux. Passons maintenant à la création de répertoires.
Créer des répertoires avec mkdir
La commande mkdir
(comme make directory, vous aurez remarqué que les
informaticiens ont un problème avec les voyelles) sert à créer un nouveau
répertoire, dont on spécifie le nom. Créons un répertoire Textes
dans notre
répertoire Documents
:
Il est également possible de spécifier le chemin complet du répertoire à créer.
Pour créer un répertoire Captures
à l'intérieur de /home/microlinux/Images
,
je pourrais le faire comme suit :
$ mkdir /home/microlinux/Images/Captures
$ cd ../Images
$ ls -ld Captures
drwxr-xr-x. 2 microlinux microlinux 6 20 sept. 10:47 Captures
Bien évidemment, dans cet exemple, il vous faudra éventuellement remplacer
microlinux
dans le chemin par votre nom d'utilisateur. D'ailleurs, pour être
sûr que c'est bien dans le répertoire utilisateur que l'on crée le dossier,
nous aurions pu écrire la commande suivante :
Créer une série de répertoires
Admettons qu'à l'intérieur du répertoire ~/Images
, nous souhaitions créer
trois sous-répertoires Photos
, Dessins
et Logos
. Nous procéderions de la
façon suivante :
$ cd ~/Images
$ mkdir Photos Dessins Logos
$ ls -l
total 0
drwxr-xr-x. 2 microlinux microlinux 6 20 sept. 10:47 Captures
drwxr-xr-x. 2 microlinux microlinux 6 20 sept. 10:53 Dessins
drwxr-xr-x. 2 microlinux microlinux 6 20 sept. 10:53 Logos
drwxr-xr-x. 2 microlinux microlinux 6 20 sept. 10:53 Photos
Ce dernier exemple appelle deux remarques :
-
D'une part, il est tout à fait possible de créer une série de répertoires à la louche. Il suffit de spécifier leurs noms respectifs en argument, séparés par des espaces.
-
D'autre part, notez bien le
d
comme directory en tête des attributsdrwxrwxr-x
, qui signifie que nous avons affaire à des répertoires.
Gare aux espaces !
N'oublions pas de dire deux mots sur un détail important qui constitue une source d'erreur fréquente : les espaces dans les noms de fichiers et de répertoires.
-
Dans certains cas de figure (sur les serveurs, par exemple) il vaut mieux tout faire pour les éviter.
-
Dans d'autres cas, il est tout à fait possible de les utiliser, à condition d'être sûr de ce que l'on fait.
Je vous donne un exemple pour vous sensibiliser à la problématique. Retournez
dans votre répertoire personnel (cd
sans argument), créez un répertoire
Test
et, à l'intérieur de ce dernier, créez un répertoire Mes
Documents
:
$ cd
$ mkdir Test
$ cd Test
$ mkdir Mes Documents
$ ls -l
total 0
drwxr-xr-x. 2 microlinux microlinux 6 20 sept. 10:58 Documents
drwxr-xr-x. 2 microlinux microlinux 6 20 sept. 10:58 Mes
Vous voyez le problème. La commande mkdir
nous a créé deux répertoires
distincts, Mes
et Documents
. Ce n'est pas ce que nous voulions faire.
Prenons un autre exemple pour voir comment nous aurions pu nous y prendre.
Revenons dans notre répertoire personnel, créons un répertoire Test2
et à
l'intérieur, essayons de créer trois répertoires distincts Mes Documents
,
Mes Images
et Mes Films
:
$ cd
$ mkdir Test2
$ cd Test2
$ mkdir "Mes Documents"
$ mkdir 'Mes Images'
$ mkdir Mes\ Films
$ ls -l
total 0
drwxr-xr-x. 2 microlinux microlinux 6 20 sept. 11:01 'Mes Documents'
drwxr-xr-x. 2 microlinux microlinux 6 20 sept. 11:01 'Mes Films'
drwxr-xr-x. 2 microlinux microlinux 6 20 sept. 11:01 'Mes images'
Cette fois-ci, nous avons bien obtenu le résultat escompté. Vous aurez certainement remarqué que pour chacun des trois répertoires, je me suis servi d'une syntaxe différente, en utilisant respectivement des guillemets doubles, des guillemets simples et un caractère d'échappement devant l'espace.
Les arborescences en un coup d'œil avec tree
Puisque nous sommes en plein dans les arborescences de répertoires, le moment
est venu de vous présenter un cousin lointain de ls
, la commande tree
.
Curieusement, on ne la rencontre pas souvent dans les manuels d'initiation à la
ligne de commande sous Linux.
-
Revenez dans votre répertoire personnel et créez un dossier
Fichiers
. -
À l'intérieur de ce dernier, créez trois sous-répertoires
Documents
,Images
etFilms
. -
Créez-y trois fichiers vides nommés respectivement
texte.txt
,photo.jpg
etfilm.avi
.
$ cd
$ mkdir Fichiers
$ cd Fichiers
$ mkdir Documents Images Films
$ touch Documents/texte.txt
$ touch Images/photo.jpg
$ touch Films/film.avi
La commande tree
nous permet d'apprécier le résultat de ce que nous venons de
faire en un simple coup d'œil :
$ cd
$ tree Fichiers
Fichiers
├── Documents
│ └── texte.txt
├── Films
│ └── film.avi
└── Images
└── photo.jpg
3 directories, 3 files
L'Arbre de la Connaissance
Les anglophones parmi vous auront deviné que la commande tree
– qui
signifie « arbre » en anglais – sert à représenter des
arborescences.
Notre système contient une série de fichiers et de répertoires cachés, que nous
pouvons afficher avec l'option -a
comme pour la commande ls
:
$ tree /etc/skel
/etc/skel
0 directories, 0 files
$ tree -a /etc/skel
/etc/skel
├── .bash_logout
├── .bash_profile
├── .bashrc
└── .mozilla
├── extensions
└── plugins
3 directories, 3 files
Puisque nous avons parlé d'arbre, vous pouvez très bien imaginer les suites de répertoires et de sous-répertoires comme autant de branches qui se ramifient :
$ tree /usr/share/doc/gnupg2
/usr/share/doc/gnupg2
├── AUTHORS
├── DCO
├── DETAILS
├── examples
│ ├── Automatic.prf
│ ├── common.conf
│ ├── debug.prf
│ ├── gpgconf.conf
│ ├── pwpattern.list
│ ├── qualified.txt
│ ├── README
│ ├── scd-event
│ ├── systemd-user
│ │ └── README
│ ├── trustlist.txt
│ └── VS-NfD.prf
├── FAQ
...
Les fichiers (comme AUTHORS
ou README
) correspondent alors aux feuilles de
cet arbre. Pour filer la métaphore, tout se rejoint à la racine.
Note pour les pinailleurs
Notre arbre est à l'envers. La racine est en haut et il faut descendre vers les feuilles.
L'option -d
de tree
montre les différents embranchements, mais sans les
feuilles. En d'autres termes, tree -d
(comme directory) affichera seulement
les répertoires d'une arborescence :
Créer une arborescence de répertoires
Admettons maintenant que nous voulions créer une série de sous-répertoires imbriqués les uns dans les autres, à la manière des poupées gigognes. Le résultat ressemble à peu près à l'arborescence suivante :
La première idée sera sans doute d'invoquer mkdir
avec le chemin complet des
sous-répertoires. Malheureusement, voici ce qui se passe si nous procédons
ainsi :
$ cd
$ mkdir branche1/branche2/branche3/branche4
mkdir: impossible de créer le répertoire « branche1/branche2/branche3/branche4 »:
Aucun fichier ou dossier de ce type
Réprimons un instant une éventuelle pulsion de traverser du poing l'écran de
l'ordinateur. Au lieu de cela, regardons de plus près le message d'erreur et
prenons-le au pied de la lettre. Ce que notre shell essaie de nous faire
comprendre (de façon un peu elliptique, certes), c'est qu'il n'arrive pas à
créer le répertoire branche4
parce que les répertoires parents branche1
,
branche2
et branche3
n'existent pas.
Nous devons donc invoquer mkdir
avec l'option -p
(comme parent) :
$ mkdir -p branche1/branche2/branche3/branche4
$ tree branche1
branche1
└── branche2
└── branche3
└── branche4
3 directories, 0 files
Si notre shell se montre trop laconique à notre égard, il ne tient qu'à nous
de le rendre plus bavard. Créons une autre série de répertoires imbriqués, mais
cette fois-ci, utilisons l'option supplémentaire -v
comme --verbose
,
c'est-à-dire « bavard » :
$ mkdir -pv poupee1/poupee2/poupee3
mkdir: création du répertoire 'poupee1'
mkdir: création du répertoire 'poupee1/poupee2'
mkdir: création du répertoire 'poupee1/poupee2/poupee3'
Des commandes plus bavardes
Cette option -v
est applicable pour un grand nombre de commandes.