103.3 Leçon 2
Certification : |
LPIC-1 |
---|---|
Version : |
5.0 |
Thème : |
103 Commandes GNU et Unix |
Objectif : |
103.3 Gestion élémentaire des fichiers |
Leçon : |
2 sur 2 |
Introduction
Chercher des fichiers
Au fil de l’utilisation de votre machine, les fichiers augmentent progressivement en nombre et en taille. Il peut arriver qu’il soit difficile de localiser un fichier particulier. Heureusement pour nous, Linux fournit find
pour rechercher et localiser rapidement les fichiers. find
utilise la syntaxe suivante :
find STARTING_PATH OPTIONS EXPRESSION
STARTING_PATH
-
définit le répertoire où débute la recherche.
OPTIONS
-
contrôle le déroulement et ajoute des critères spécifiques pour optimiser le processus de recherche.
EXPRESSION
-
définit la requête de la recherche.
$ find . -name "myfile.txt" ./myfile.txt
Ici, le chemin de départ est le répertoire courant. L’option -name
spécifie que la recherche se base sur le nom du fichier. myfile.txt
est le nom du fichier à rechercher. Si vous utilisez des caractères de substitution, pensez à mettre l’expression entre guillemets :
$ find /home/frank -name "*.png" /home/frank/Pictures/logo.png /home/frank/screenshot.png
Cette commande trouve tous les fichiers dont le nom se termine par .png
en partant du répertoire /home/frank/
et en dessous. Si vous ne comprenez pas l’utilisation de l’astérisque (*
), elle a été abordée dans la précédente leçon.
Utiliser des critères pour accélérer la recherche
Utilisez find
pour localiser des fichiers en fonction du type, de la taille ou du temps. Il suffit de spécifier une ou plusieurs options pour que les résultats escomptés soient obtenus plus rapidement.
Les options pour la recherche de fichiers en fonction du type comprennent :
-type f
-
recherche de fichiers.
-type d
-
recherche de répertoires.
-type l
-
recherche de liens symboliques.
$ find . -type d -name "example"
Cette commande trouve tous les répertoires dans le répertoire courant et en dessous, qui portent le nom example
.
Parmi les autres critères utilisables avec find
, on peut citer :
-name
-
effectue une recherche basée sur le nom fourni.
-iname
-
recherche basée sur le nom et insensible à la casse (c’est-à-dire que la recherche retournera
myFile
aussi bien queMYFILE
). -not
-
renvoie les résultats qui ne correspondent pas au terme recherché.
-maxdepth N
-
recherche dans le répertoire courant ainsi que dans les sous-répertoires de
N
niveaux de profondeur.
Localiser des fichiers par date de modification
find
permet également de passer au peigne fin une arborescence de répertoires en fonction de la date de modification du fichier :
$ sudo find / -name "*.conf" -mtime 7 /etc/logrotate.conf
Cette commande recherche tous les fichiers du système de fichiers (le chemin de départ est le répertoire racine, c’est-à-dire /
) dont le nom se termine par les caractères .conf
et qui ont été modifiés au cours des sept derniers jours. La commande nécessite des privilèges élevés pour accéder aux répertoires qui commencent à la base de la structure des répertoires du système, d’où l’utilisation de sudo
ici. L’argument fourni à mtime
représente le nombre de jours depuis la dernière modification du fichier.
Localiser des fichiers par taille
find
peut également localiser des fichiers en fonction de leur taille. Par exemple, chercher des fichiers d’une taille supérieure à 2G
dans /var
:
$ sudo find /var -size +2G /var/lib/libvirt/images/debian10.qcow2 /var/lib/libvirt/images/rhel8.qcow2
L’option -size
affiche les fichiers dont la taille correspond à l’argument fourni. Voici quelques exemples :
-size 100b
-
fichiers d’une taille de 100 octets exactement.
-size +100k
-
fichiers de plus de 100 kilooctets.
-size -20M
-
fichiers de moins de 20 mégaoctets.
-size +2G
-
fichiers de plus de 2 gigaoctets.
Note
|
Pour localiser les fichiers vides, nous pouvons utiliser : |
Effectuer des opérations sur le résultat de la recherche
Une fois qu’une recherche est terminée, il est possible d’effectuer une action sur les fichiers résultants en utilisant l’option -exec
:
$ find . -name "*.conf" -exec chmod 644 '{}' \;
Cette commande analyse tous les objets du répertoire courant (.
) ainsi que tous les sous-répertoires à la recherche de fichiers dont le nom se termine par .conf
et exécute ensuite la commande chmod 644
pour modifier les permissions des fichiers résultants.
Pour l’instant, ne vous préoccupez pas de la signification de '{}' \;
nous l’aborderons un peu plus loin.
Utiliser grep
pour rechercher des fichiers en fonction de leur contenu
grep
est utilisé pour rechercher l’occurrence d’un mot clé.
Prenons un cas de figure où nous devons rechercher des fichiers en fonction de leur contenu :
$ find . -type f -exec grep "lpi" '{}' \; -print ./.bash_history Alpine/M helping/M
Cette commande va rechercher tous les objets dans l’arborescence du répertoire courant (.
) qui sont des fichiers (-type f
) pour ensuite exécuter la commande grep "lpi"
sur chaque fichier qui répond aux critères de recherche. Les fichiers qui remplissent ces conditions sont affichés à l’écran (-print
). Les accolades ({}
) symbolisent ici les résultats de la recherche find
. Les {}
sont entourés de guillemets simples ('
) pour éviter de passer à grep
des fichiers dont les noms contiennent des caractères spéciaux. La commande -exec
se termine par un point-virgule (;
) qui doit être échappé (\;
) pour éviter toute interprétation par le shell.
L’ajout de l’option -delete
à la fin d’une expression permet de supprimer tous les fichiers correspondants. Cette option doit être utilisée uniquement lorsque vous êtes sûr et certain que les résultats correspondent bien aux fichiers que vous souhaitez supprimer.
Dans l’exemple ci-dessous, find
recherche tous les fichiers dans l’arborescence du répertoire courant puis supprime tous ceux dont le nom se termine par les caractères .bak
:
$ find . -name "*.bak" -delete
Archiver des fichiers
La commande tar
(archivage et compression)
La commande tar
, une forme abrégée de “tape archive(r)”, est utilisée pour créer des archives tar
en compactant un groupe de fichiers en une archive. Une archive est créée dans le but de faciliter le déplacement ou la sauvegarde d’un groupe de fichiers. Imaginez tar
comme un outil qui crée un adhésif sur lequel les fichiers peuvent s’attacher, se regrouper et se déplacer facilement.
tar
permet en outre d’extraire une archive tar
, d’afficher la liste des fichiers inclus dans l’archive et d’ajouter des fichiers supplémentaires à une archive existante.
Voici la syntaxe de la commande tar
:
tar [OPERATION_AND_OPTIONS] [ARCHIVE_NAME] [FILE_NAME(S)]
OPERATION
-
Un seul argument opérationnel est autorisé et requis. Les opérations les plus fréquemment utilisées sont :
--create
(-c
)-
Créer une nouvelle archive
tar
. --extract
(-x
)-
Extraire une archive dans son intégralité ou un ou plusieurs fichiers de cette archive.
--list
(-t
)-
Afficher la liste des fichiers inclus dans l’archive.
OPTIONS
-
Voici les options les plus courantes :
--verbose
(-v
)-
Afficher les fichiers en cours de traitement par la commande
tar
. --file=archive-name
(-f archive-name
)-
Spécifie le nom du fichier de l’archive.
ARCHIVE_NAME
-
Le nom de l’archive.
FILE_NAME(S)
-
La liste des noms de fichiers à extraire, séparés par des espaces. Si elle n’est pas fournie, l’archive est extraite dans son intégralité.
Créer une archive
Admettons que nous ayons un répertoire nommé stuff
dans le répertoire courant et que nous voulions le sauvegarder dans un fichier nommé archive.tar
. Nous devons invoquer la commande suivante :
$ tar -cvf archive.tar stuff stuff/ stuff/service.conf
Voici ce que signifient concrètement les options utilisées :
-c
-
Créer une archive.
-v
-
Affiche la progression de la création de l’archive dans le terminal, en mode "bavard". Le
-v
est toujours facultatif dans ces commandes, mais il est tout de même pratique. -f
-
Permet de spécifier le nom de fichier de l’archive.
En règle générale, pour archiver un seul répertoire ou un seul fichier sous Linux, on utilise :
tar -cvf NAME-OF-ARCHIVE.tar /PATH/TO/DIRECTORY-OR-FILE
Note
|
|
Pour archiver plusieurs répertoires à la fois, il suffit de dresser la liste de tous les répertoires en les délimitant par un espace dans la section /PATH/TO/DIRECTORY-OR-FILE
:
$ tar -cvf archive.tar stuff1 stuff2
Cette commande génère une archive de stuff1
et stuff2
dans archive.tar
.
Extraire une archive
Nous pouvons extraire une archive à l’aide de tar
:
$ tar -xvf archive.tar stuff/ stuff/service.conf
Cette commande va extraire le contenu de archive.tar
vers le répertoire courant.
La commande est la même que celle utilisée pour la création de l’archive ci-dessus, à l’exception de l’option -x
qui remplace l’option -c
.
Pour extraire le contenu de l’archive vers un répertoire particulier, on utilise l’option -C
:
$ tar -xvf archive.tar -C /tmp
Cette commande va extraire le contenu de archive.tar
dans le répertoire /tmp
.
$ ls /tmp stuff
La compression avec tar
.
La commande GNU tar
fournie avec les distributions Linux permet de créer une archive .tar
et de la compresser ensuite avec la compression gzip
ou bzip2
en une seule et même commande :
$ tar -czvf name-of-archive.tar.gz stuff
Cette commande va créer un fichier compressé en utilisant l’algorithme de compression gzip
(-z
).
Même si la compression gzip
est utilisée le plus souvent pour créer des fichiers .tar.gz
ou .tgz
, tar
supporte également la compression bzip2
. Cela permet de créer des fichiers compressés bzip2
, souvent nommés .tar.bz2
, .tar.bz
ou .tbz
.
Pour ce faire, nous remplaçons -z
pour gzip
par -j
pour bzip2
:
$ tar -cjvf name-of-archive.tar.bz stuff
Pour décompresser le fichier, il suffit de remplacer -c
par -x
, sachant que x
signifie “extract” :
$ tar -xzvf archive.tar.gz
gzip
est plus rapide, mais il compresse généralement un peu moins, vous obtenez donc un fichier un peu plus volumineux. bzip2
est plus lent, mais il compresse un peu plus, de sorte que vous obtenez un fichier un peu plus compact. Mais en règle générale, gzip
et bzip2
font pratiquement la même chose et les deux vont fonctionner de manière similaire.
Alternativement, on peut appliquer une compression gzip
ou bzip2
en utilisant la commande gzip
pour une compression gzip
et la commande bzip
pour une compression bzip
. Par exemple, pour appliquer la compression gzip
, invoquez :
gzip FILE-TO-COMPRESS
gzip
-
crée le fichier compressé du même nom mais avec une extension
.gz
. gzip
-
supprime le fichier original après la création du fichier compressé.
La commande bzip2
fonctionne de manière similaire.
Pour décompresser les fichiers, nous utilisons soit gunzip
soit bunzip2
en fonction de l’algorithme utilisé pour la compression.
La commande cpio
cpio
signifie “copy in, copy out”. Cette commande est utilisée pour traiter les archives telles que les fichiers *.cpio
ou *.tar
.
cpio
effectue les opérations suivantes :
-
Copier des fichiers vers une archive.
-
Extraire les fichiers d’une archive.
La liste des fichiers est récupérée depuis l’entrée standard (principalement depuis la sortie de ls
).
Pour créer une archive cpio
, nous allons invoquer :
$ ls | cpio -o > archive.cpio
L’option -o
indique à cpio
de créer une sortie. Dans cet exemple, le fichier de sortie créé est archive.cpio
. La commande ls
liste le contenu du répertoire courant qui doit être archivé.
Pour extraire l’archive, nous utilisons :
$ cpio -id < archive.cpio
L’option -i
est utilisée pour effectuer l’extraction. L’option -d
va créer le répertoire de destination. Le caractère <
correspond à l’entrée standard. Le fichier d’entrée à extraire est archive.cpio
.
La commande dd
dd
copie des données d’un emplacement vers un autre. La syntaxe de dd
n’est pas la même que celle de la plupart des programmes Unix, étant donné que la commande utilise la syntaxe option=value
pour ses options en ligne de commande plutôt que le format GNU standard -option value
ou --option=value
:
$ dd if=oldfile of=newfile
Cette commande va copier le contenu de oldfile
dans newfile
, sachant que if=
est le fichier d’entrée (input file) et of=
fait référence au fichier de sortie (output file).
Note
|
En temps normal, la commande |
dd
est également utilisé pour convertir les données en majuscules/minuscules ou pour écrire directement sur des périphériques bloc comme /dev/sdb
:
$ dd if=oldfile of=newfile conv=ucase
Cette commande va copier tout le contenu de oldfile
vers newfile
en mettant tout le texte en majuscules.
La commande ci-dessous va sauvegarder l’ensemble du disque dur /dev/sda
dans un fichier backup.dd
:
$ dd if=/dev/sda of=backup.dd bs=4096
Exercices guidés
-
Considérez le listing suivant :
$ find /home/frank/Documents/ -type d /home/frank/Documents/ /home/frank/Documents/animal /home/frank/Documents/animal/domestic /home/frank/Documents/animal/wild
-
Quel genre de fichiers cette commande afficherait-elle ?
-
Dans quel répertoire la recherche doit-elle débuter ?
-
-
Un utilisateur veut compresser son répertoire de sauvegarde. Il utilise la commande suivante :
$ tar cvf /home/frank/backup.tar.gz /home/frank/dir1
Quelle est l’option qui manque pour compresser la sauvegarde en utilisant l’algorithme
gzip
?
Exercices d’approfondissement
-
Un administrateur système doit effectuer des vérifications régulières dans le but de nettoyer les fichiers volumineux. Ces fichiers volumineux se trouvent dans
/var
et se terminent par l’extension.backup
.-
Écrivez la commande basée sur
find
pour localiser ces fichiers : -
Une analyse de la taille de ces fichiers révèle qu’ils vont de
100M
à1000M
. Complétez la commande ci-dessus avec cette nouvelle information afin de pouvoir localiser les fichiers de sauvegarde allant de100M
à1000M
: -
Enfin, complétez la commande avec une action de suppression pour que ces fichiers soient effacés :
-
-
Le répertoire
/var
contient quatre fichiers de sauvegarde :db-jan-2018.backup db-feb-2018.backup db-march-2018.backup db-apr-2018.backup
-
En utilisant
tar
, spécifiez la commande qui créerait un fichier d’archive nommédb-first-quarter-2018.backup.tar
: -
En utilisant
tar
, spécifiez la commande qui va créer l’archive et la compresser en utilisantgzip
. Notez que le nom du fichier résultant devra se terminer par.gz
:
-
Résumé
Voici ce que nous avons appris dans cette leçon :
-
Trouver des fichiers avec
find
. -
Ajouter des critères de recherche basés sur le temps, le type de fichier ou la taille en fournissant des arguments à
find
. -
Effectuer des opérations sur les fichiers résultants.
-
Archiver, compresser et décompresser des fichiers en utilisant
tar
. -
Traiter des archives avec
cpio
. -
Copier des fichiers avec
dd
.
Réponses aux exercices guidés
-
Considérez le listing suivant :
$ find /home/frank/Documents/ -type d /home/frank/Documents/ /home/frank/Documents/animal /home/frank/Documents/animal/domestic /home/frank/Documents/animal/wild
-
Quel genre de fichiers cette commande afficherait-elle ?
Des répertoires
-
Dans quel répertoire la recherche doit-elle débuter ?
/home/frank/Documents
-
-
Un utilisateur veut compresser son répertoire de sauvegarde. Il utilise la commande suivante :
$ tar cvf /home/frank/backup.tar.gz /home/frank/dir1
Quelle est l’option qui manque pour compresser la sauvegarde en utilisant l’algorithme
gzip
?L’option
-z
.
Réponses aux exercices d’approfondissement
-
Un administrateur système doit effectuer des vérifications régulières dans le but de nettoyer les fichiers volumineux. Ces fichiers volumineux se trouvent dans
/var
et se terminent par l’extension.backup
.-
Écrivez la commande basée sur
find
pour localiser ces fichiers :$ find /var -name *.backup
-
Une analyse de la taille de ces fichiers révèle qu’ils vont de
100M
à1G
. Complétez la commande ci-dessus avec cette nouvelle information afin de pouvoir localiser les fichiers de sauvegarde allant de100M
à1G
:$ find /var -name *.backup -size +100M -size -1G
-
Enfin, complétez la commande avec une action de suppression pour que ces fichiers soient effacés :
$ find /var -name *.backup -size +100M -size -1G -delete
-
-
Le répertoire
/var
contient quatre fichiers de sauvegarde :db-jan-2018.backup db-feb-2018.backup db-march-2018.backup db-apr-2018.backup
-
En utilisant
tar
, spécifiez la commande qui créerait un fichier d’archive nommédb-first-quarter-2018.backup.tar
:$ tar -cvf db-first-quarter-2018.backup.tar db-jan-2018.backup db-feb-2018.backup db-march-2018.backup db-apr-2018.backup
-
En utilisant
tar
, spécifiez la commande qui va créer l’archive et la compresser en utilisantgzip
. Notez que le nom du fichier résultant devra se terminer par.gz
:$ tar -zcvf db-first-quarter-2018.backup.tar.gz db-jan-2018.backup db-feb-2018.backup db-march-2018.backup db-apr-2018.backup
-