Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Nous allons déjà voir comment créer un
fichier ordinaire vide...
Voici deux façons pour créer des fichiers vides :
>
On peut déjà utiliser
> :
Code : Console
Cela crée dans le répertoire courant un fichier vide, ayant pour nom
fichierVide.
J'ai utilisé
le chemin relatif (en effet, on tient compte du répertoire où l'on est actuellement) : n'oubliez pas ce que vous connaissez déjà, il est tout à fait possible d'utiliser le chemin absolu :
Code : Console
ou :
Code : Console | $ > /home/jarvis/fichierVide |
Cependant, > n'est pas très pratique car il est impossible de créer plusieurs fichiers vides en même temps, et si le fichier existe déjà, le fichier est automatiquement remplacé.
touch
touch permet de créer un ou plusieurs fichiers vides en même temps :
Code : Console | $ touch fichiervide1 fichiervide2 fichiervide3 |
Encore une fois, vous pouvez utilisez le chemin absolu ou relatif, vous pouvez donc créer des fichiers vides dans différents répertoires. Cela peut permettre d'éviter d'inutiles
cd.
Ces deux premières fonctions ne sont pas, pour l'instant, très utiles, mais je pense que si vous voulez manipuler des fichiers sans avoir peur de supprimer ou d'en endommager un, autant créer des fichiers qui n'ont pas d'importance pour vous...
CARACTÈRES PARTICULIERS
Bon : j'ai un gros gros problème : j'arrive pas à créer le fichier "je t'aime Jarvis.txt"...
En fait, il existe des caractères particuliers en shell (ce sont des caractères utiles pour le shell, comme l'étoile : "*", l'espace : " ", etc.), et dans ce nom de fichier, il y en a 3 : l'espace entre le "je" et le "t", le "'" et l'espace entre aime et Jarvis.
Pour réussir à éviter cela, il faut banaliser le caractère en mettant un anti-slash [\] devant chaque caractère particulier.
Code : Console | $ touch je\ t\'aime\ Jarvis.txt |
Il y a le même problème pour d'autres commandes comme cd, ls, ...
J'imagine que l'anti-slash est aussi un caractère particulier...
Oui, il suffit d'écrire deux anti-slash pour en faire apparaitre un.
Et si je ne sais pas si mon caractère est particulier, je fais quoi ?
Eh bien mettez un anti-slash devant, ça ne vous coûte rien :
Code : Console | $ touch \j\e\ t\'aime\ \J\a\r\v\i\s\.\t\x\t |
Autre solution : les guillemets :
Code : Console | $ touch "je t'aime Jarvis.txt" |
Mais cela n'évite pas le problème si on veut créer un fichier qui a un ou plusieurs guillemets, il faut le banaliser :
Code : Console | $ touch "une zero m'a dit "je t'aime Jarvis".txt" |
mkdir : MaKe DIRectory
Pour créer un répertoire, on utilise la commande
mkdir.
Exemple :
Code : Console | $ mkdir monPremierRepertoire |
Vous pouvez comme pour
touch en créer plusieurs en même temps :
Code : Console | $ cd
$ mkdir repertoire1 ~/repertoire2 ~/repertoire1/sousrepertoire1 repertoire2/sousrepertoire2 |
L'ordinateur "va" dans votre répertoire personnel (
cd), puis il crée un
repertoire1 (en utilisant le
chemin relatif) puis un
répertoire2 (en utilisant le
chemin absolu), et ensuite dans le
répertoire1, un
sousrepertoire1, et enfin dans le
répertoire2, un
sousrepertoire2.
Le tout, en deux lignes.
Encore une fois, n'oubliez pas d'utiliset le chemin relatif et le chemin absolu.
Je vous conseille de créer un répertoire
shell dans votre répertoire personnel : ce sera votre espace de travail (cela vous évitera de faire des bétises

), puis d'y créer des répertoires et des fichiers vides.
Exemple :
Code : Console | $ cd
$ mkdir shell shell/essai1 shell/essai2 shell/essai1/essai1a
$ touch shell/fichier0 shell/essai1/fichier1 shell/essai2/fichier2 shell/essai1/essai1a/fichier1a |
Comme pour créer un fichier, pour supprimer un fichier, il faut distinguer les fichiers ordinaires et les répertoires.
Les deux fonctions suivantes vont permettre de supprimer des fichiers, mais il n'y pas de message du genre : "Êtes-vous sûr de supprimer le fichier..." pour confirmer : il n'y a pas non plus de corbeille pour récupérer les données...
rm : ReMove
La fonction
rm permet de supprimer des fichiers ordinaires.

Si vous avez fait exactement la même chose que chez moi, vous pouvez taper :
Code : Console | $ rm shell/fichier0 shell/essai1/fichier1 shell/essai2/fichier2 shell/essai1/essai1a/fichier1a |
rmdir : ReMove DIRectory
rmdir permet de supprimer des répertoires vides. Ainsi, il est impossible avec cette commande de supprimer un répertoire qui a encore des fils :
Si vous me suivez toujours, tapez :
Code : Console | $ rmdir shell/essai1/essai1a shell/essai1 shell/essai2 |
Normalement, votre répertoire shell est vide.
Mais si j'ai beaucoup, vraiment beaucoup de fichiers, il n'y a pas plus rapide ?
Si, bien sûr!
Créez beaucoup de fichiers ordinaires dans votre répertoire shell, puis tapez :
Code : Console
L'étoile remplace n'importe quelle chaîne de caractères.
Cela a donc supprimé tous les fichiers ordinaires dans le répertoire shell.
Supposons que vous ayez un (ou plusieurs) répertoire (coucou, pour l'exemple) dans le répertoire shell. Il va s'afficher un message d'erreur :
Code : Console | rm: cannot remove `shell/coucou': Is a directory |
En effet,
rm ne supprime pas les répertoires... Cependant, vous pouvez le vérifier, les fichiers ordinaires ont tous été supprimés.
Si vous ne voulez supprimer que les fichiers .txt, on fait :
Code : Console
S'il n'y a pas de fichier .txt, il va vous afficher cette erreur :
Code : Console | rm: cannot remove `shell/*.txt': No such file or directory |
Les messages d'erreur peuvent changer selon la distribution, mais leur signification est la même.
Si vous ne voulez supprimer que les fichiers .txt commençant par un "a" et par "b", on fait :
Code : Console | $ rm shell/a*.txt shell/b*.txt |
Etc.
Vous le voyez bien : on peut faire pas mal de choses avec l'étoile...
Il est tout à fait possible d'utiliser "*" avec rmdir.
Si vous tapez
Code : Console, il va vous supprimer tous les fichiers ordinaires et le fichier .txt (s'il existe) du répertoire courant, à cause de l'espace entre l'étoile et .txt.
J'aimerais supprimer tout d'un coup un répertoire non vide... On fait comment ?
Il est tout à fait possible de faire cela, mais d'abord, je vais vous parler d'une autre commande...
man
man permet de connaître toutes les fonctionnalités d'une commande (retenez que
man est une abréviation de
manual :) ).
Alors, comment utiliser cette commande ?
Il suffit d'écrire
man et d'ajouter le nom de la commande. :)
Prenons la fonction
rm :
Code : Console$ man rm
Pour faire défiler, on utilise 'entrée', ou les flèches (ligne par ligne) et espace (page par page).
Voilà ce qui s'affiche :
(vous n'êtes pas obligés de tout lire :) )
Code : ConsoleRM(1) User Commands RM(1)
NAME
rm - remove files or directories
SYNOPSIS
rm [OPTION]... FILE...
DESCRIPTION
This manual page documents the GNU version of rm. rm removes each
specified file. By default, it does not remove directories.
If a file is unwritable, the standard input is a tty, and the -f or
--force option is not given, rm prompts the user for whether to remove
the file. If the response is not affirmative, the file is skipped.
OPTIONS
Remove (unlink) the FILE(s).
-d, --directory
unlink FILE, even if it is a non-empty directory (super-user
only; this works only if your system
supports unlink' for nonempty directories)
-f, --force
ignore nonexistent files, never prompt
-i, --interactive
prompt before any removal
--no-preserve-root do not treat /' specially (the default)
--preserve-root
fail to operate recursively on /'
-r, -R, --recursive
remove directories and their contents recursively
-v, --verbose
explain what is being done
--help display this help and exit
--version
output version information and exit
By default, rm does not remove directories. Use the --recursive (-r or
-R) option to remove each listed directory, too, along with all of its
contents.
To remove a file whose name starts with a -', for example -foo', use
one of these commands:
rm -- -foo
rm ./-foo
Note that if you use rm to remove a file, it is usually possible to
recover the contents of that file. If you want more assurance that the
contents are truly unrecoverable, consider using shred.
AUTHOR
Written by Paul Rubin, David MacKenzie, Richard Stallman, and Jim Mey‐
ering.
REPORTING BUGS
Report bugs to .
COPYRIGHT
Copyright © 2005 Free Software Foundation, Inc.
This is free software. You may redistribute copies of it under the
terms of the GNU General Public License
. There is NO WARRANTY, to the
extent permitted by law.
SEE ALSO
chattr(1), shred(1)
The full documentation for rm is maintained as a Texinfo manual. If
the info and rm programs are properly installed at your site, the com‐
mand
info rm
should give you access to the complete manual.
Pour quitter le manuel, appuyez sur q. :)
Vous pouvez vous amuser à regarder ce que fait man rmdir, man mkdir, man touch, man man...
man permet, entre autres, de savoir ce que fait la fonction avec des options...
rm -r
Prenons l'option qui nous intéresse :
Code : Console -r, -R, --recursive
remove directories and their contents recursively
Eh oui, avec l'option -r, -R ou --recursive, vous pouvez supprimer des répertoires et leurs contenus. :)
Vous pouvez taper soit :
Code : Console$ rm -r shell/ autreRepertoire/
soit :
Code : Console$ rm -R shell/ autreRepertoire/
soit :
Code : Console$ rm --recursive shell/ autreRepertoire/
Cela fait la même chose ! :)
Cela supprime tous les fichiers à partir de
shell (
shell compris) et tous les fichiers à partir de
autreRepertoire (
autreRepertoire compris).
rm -i
Voici une autre option intéressante :
Code : Console -i, --interactive
prompt before any removal
Elle permet de supprimer un fichier avec un message d'avertissement :
Code : Console$ touch fichier
Code : Console$ rm -i fichier
rm: détruire fichier régulier vide `fichier'? o
Vous pouvez aussi combiner les deux options :
Code : Console$ mkdir shell shell/essai1 shell/essai2 shell/essai1/essai1a
$ touch shell/fichier0 shell/essai1/fichier1 shell/essai2/fichier2 shell/essai1/essai1a/fichier1a
$ rm -ir shell/ rm: descendre dans le répertoire `shell/'? o
rm: descendre dans le répertoire `shell//essai1'? o
rm: descendre dans le répertoire `shell//essai1/essai1a'? o
rm: détruire fichier régulier vide `shell//essai1/essai1a/fichier1a'? o
rm: détruire répertoire `shell//essai1/essai1a'? o
rm: détruire fichier régulier vide `shell//essai1/fichier1'? o
rm: détruire répertoire `shell//essai1'? o
rm: descendre dans le répertoire `shell//essai2'? o
rm: détruire fichier régulier vide `shell//essai2/fichier2'? o
rm: détruire répertoire `shell//essai2'? o
rm: détruire fichier régulier vide `shell//fichier0'? o
rm: détruire répertoire `shell/'? o
D'autres options utiles
Une dernière option intéressante avec
rm :
Code : Console-v, --verbose
explain what is being done
Cette option permet de savoir ce que la fonction est en train de faire. :)
Particulièrement intéressante quand une fonction (plus évoluée ;) ) bugge.
Code : Console$ touch fichier
$ rm -v fichier
détruit `fichier'
Vous pouvez combiner les trois dernières options :
Code : Console$ rm -ivr shell/
Une autre option peut être utile comme
--version :
Code : Console$ rm --version
rm (GNU coreutils) 5.93
Copyright © 2005 Free Software Foundation, Inc.
Ce programme est un logiciel libre ; vous pouvez en redistribuer des copies selon les termes de la Licence Publique Générale GNU .
il n'y a AUCUNE GARANTIE, jusqu'au point permis par la loi.