Gestion des fichiers
État :
Sommaire
Pré-requis
Compréhension du système de fichiers Ext2
Objectifs
- Se déplacer efficacement sur le système de fichiers pour créer, supprimer et trouver des fichiers ou des répertoires
- Faire la distinction entre les liens physiques et les liens symboliques
Se déplacer dans le système de fichiers
Chemins absolus et relatifs
On peut accéder à un répertoire ou un fichier en donnant son chemin complet, qui commence à la racine (/), ou en donnant son chemin relatif partant du répertoire courant.
Chemin absolu :
- indépendant du répertoire de travail de l'utilisateur
commence par /
Chemin relatif :
- dépend de l'endroit où se trouve l'utilisateur
ne commence pas par /
Comme pour tout système de fichiers structuré, un certain nombre d'outil vous aident à parcourir le système. Les deux commandes suivantes sont des commandes internes du shell :
pwd : (Print Working Directory) affiche le répertoire actuel en chemin absolu
cd : la commande pour changer de répertoire (Change Directory)
Recherche de fichiers et de répertoires
Dans cette partie, nous décrirons les commandes find, which, whereis et locate.
find
Syntaxe :
find <REPERTOIRE> <CRITERE> [-exec <COMMANDE> {} \;]
Le paramètre REPERTOIRE indique à find d'où lancer la recherche et CRITERE peut être le nom du fichier ou du répertoire que nous recherchons.
Exemples :
find /usr/X11R6/bin -name ¨x*¨. find / -user 502
Les lignes correspondantes sont listées sur la sortie standard. On peut également lancer une commande sur cette sortie, comme supprimer le fichier ou changer le mode de permission, en utilisant l'option -exec de find. Par exemple, pour supprimer tous les fichiers appartenant à l'utilisateur 502 :
find / -type f -user 502 –exec rm –f {} \;
xargs
On voit souvent en xargs le compagnon de find. En fait, xargs traite chaque ligne de la sortie standard comme paramètre pour une autre commande. On pourrait utiliser xargs pour supprimer tous les fichiers appartenant à un utilisateur avec :
find / -type f -user 502 | xargs rm –f
Remarque : Certaines commandes comme rm ne savent pas traiter les paramètres trop longs. Il est parfois nécessaire de supprimer tous les fichiers d'un répertoire avec :
ls |xargs rm -f
Options courantes pour find |
|
-type |
spécifier le type de fichier (répertoire, lien symbolique, fichier, etc.) |
-name |
nom du fichier |
-user |
propriétaire |
-atime, ctime, mtime |
dates d'accès, de création et de modification (multiples de 24 heures) |
-amin, cmin, mmin |
moments d'accès, de création et de modification (multiples de 1 minute) |
-newer FICHIER |
fichiers plus récents que FICHIER |
locate
Syntaxe :
locate <CHAINE>
locate liste tous les fichiers et répertoires qui correspondent à l'expression.
locate X11R
La recherche avec locate est très rapide. En fait, locate interroge la base de données /var/lib/slocate/slocate.db. Cette base de données est tenue à jour par une tâche quotidienne cron (cronjob) qui lance updatedb.
Le fichier /etc/updatedb.conf est lu par updatedb lorsqu'il est lancé manuellement pour déterminer les systèmes de fichiers et le répertoires dont il ne doit pas tenir compte (montages NFS et /tmp par exemple).
which
Syntaxe :
which chaîne
which retourne le chemin complet de la commande dont le nom est chaîne en parcourant les répertoires définis dans la variable PATH de l'utilisateur uniquement.
whereis
Syntaxe :
whereis chaîne
Cette commande affiche le chemin absolu des sources, binaires ainsi que de les pages de manuel pour les fichiers correspondant à chaîne en se basant sur le PATH ainsi que sur des répertoires couramment utilisés.
ls
Options courantes pour ls |
|
-i |
affiche l'inode |
-h |
avec -l, afficher les tailles dans un format lisible par un humain (par exemple 1K 234M 2G) |
-n |
affiche les valeurs numériques des identifiants du propriétaire (UID) et du groupe (GID) |
-p |
ajoute l'indicateur « / » aux répertoires |
-R |
affiche récursivement les sous-répertoires |
-S |
trie selon la taille des fichiers |
-t |
trie selon la date de modification |
-u |
trie la date de dernier accès (NdT : voir man ls car -u agit différemment suivant l'option avec laquelle elle est couplée) |
Gestion des répertoires
Création d'un répertoire avec mkdir
Vous pouvez définir les droits avec l'option -m de mkdir. Une autre option couramment utilisée et utilile de mkdir est -p qui crée les sous-répertoires quand c'est nécessaire.
Exemple :
mkdir –p docs/programmes/versions
Ndt : la commande précédente crée le répertoire programmes s'il n'existait pas, ce que mkdir ne ferait pas sans l'option -p.
Suppression des répertoires
On utilise soit rmdir soit rm -r pour supprimer les répertoires. En tant que root, vous aurez peut-être à spécifier l'option -f pour forcer la suppression de tous les fichiers.
NdT : rmdir supprime un répertoire vide alors que rm -r supprime un répertoire et son contenu.
Remarques :
- rm –rf /rep1/* supprime tous les fichiers et sous-répertoires et laisse le répertoire rep1 vide
- rm –rf /rep1/ supprime tous les fichiers et sous-répertoires y compris rep1
Utilisation de cp et mv
cp
Syntaxe :
cp [options] fichier1 fichier2 cp [options] fichiers répertoire
Il est important de noter que cp fichier1 fichier2 crée une nouvelle copie de fichier1 et laisse fichier1 inchangé.
Illustration : fichier1 avec l'inode 250 est copié sur fichier2, en dupliquant les données sur un nouveau bloc et en créant une nouvelle inode 6238 pour fichier2.
------- -------------------------- | I | -----------------------------------> | D | | 250 | | | ------- -------------------------- ------- -------------------------- | I | -----------------------------------> | D | |6238 | | | ------- --------------------------
Vous pouvez également copier plusieurs fichiers dans un répertoire, à partir d'une liste ou en utilisant des caractères génériques. Le tableau suivant donne la liste des options les plus courantes.
Options les plus courantes pour cp |
|
-d |
ne suit pas les liens symboliques (quand il est utilisé avec -R |
-f |
force |
-i |
interactif : demande confirmation avant d'écraser |
-p |
conserve les attributs des fichiers |
-R |
copie récursivement les répertoires |
Remarques :
- cp –r /rep1/* /rep2/ copie tous les fichiers et sous-répertoires en omettant rep1
- cp –r /rep1/ /dir2/ copie tous les fichiers et sous-répertoires y compris rep1
mv
Syntaxe :
mv [options] anciennom nouveaunom mv [options] source destination mv [options] source répertoire
La commande mv peut à la fois déplacer et renommer les fichiers et les répertoires. Si anciennom est un fichier et nouveaunom un répertoire, le fichier anciennom est déplacé dans ce répertoire.
Si la source et la destination sont sur le même système de fichiers, alors le fichier n'est pas copié, mais les informations de l'inode sont mises à jour pour tenir compte du nouveau chemin. Les options les plus courantes de mv sont -f pour forcer l'écrasement et -i pour demander confirmation à l'utilisateur.
Liens symboliques et liens physiques
Liens symboliques
Un lien symbolique vers un fichier ou un répertoire crée une nouvelle inode qui pointe vers le même bloc de données.
ln -s lilo.conf lilo.sym
Voici ces deux fichiers. Notez que le nombre de références est 1 pour chacun des fichiers.
-rw------- 1 root root 223 Nov 9 09:06 lilo.conf lrwxrwxrwx 1 root root 9 Nov 9 09:06 lilo.sym -> lilo.conf
Illustration : Lien symbolique vers un fichier
------------ ----------------------------------- | I |------------------------------>| D | | lilo.conf| | | ------------ ----------------------------------- /\ || || || ------------ | I | | lilo.sym | ------------
Les liens symboliques peuvent pointer vers des fichiers ou répertoires présents sur un autre système de fichier.
Liens physiques
Un lien physique est un nom supplémentaire pour une même inode. Ainsi, le nombre de références s'accroît de un à chaque nouveau lien physique.
ln lilo.conf lilo.link
Dans la liste suivante, notez que le nombre de références est de 2 et que les deux fichiers ont la même taille (NdT : ainsi que la même inode, ce que vous pouvez vérifier avec ls -i). Dans les faits, ces deux fichiers sont parfaitement identiques.
-rw------- 2 root root 223 Nov 9 09:06 lilo.conf -rw------- 2 root root 223 Nov 9 09:06 lilo.link
Les liens physiques ne peuvent être créés que sur le même système de fichier.
touch et dd
touch
touch est une commande permettant de créer et de modifier les fichiers.
Syntaxe :
touch {options} fichier(s)
Le fichier est créé s'il n'existait pas. Vous pouvez également changer la date d'accès avec l'option -a, la date de modification avec -m et -r copie les attributs de date d'un autre fichier.
Exemples :
- crée deux nouveaux fichiers :
touch fichier1.txt fichier2.txt
copie les attributs de date de lilo.conf sur monfichier :
touch monfichier -r /etc/lilo.conf
crée un fichier nommé -erreurs en utilisant l'option -- :
touch -- -erreurs
dd
Cette commande copie un fichier avec une taille de bloc modifiable. On peut également l'utiliser pour effectuer des conversions, comme avec tr. Les options principales de dd sont if= (fichier d'entrée : input file), of= (fichier de sortie : output file) et conv= (conversion). conv peut prendre les symboles lcase (minuscules), ucase (majuscules) et ascii.
Exemple :
dd if=/mnt/cdrom/images/boot.img of=/dev/fd0
Notez que contrairement à cp, la commande dd copie des portions de données brutes d'un périphérique. Par conséquent, dd préserve le système de fichier sous-jacent. cp se contente de traiter des données et les transfère d'un système de fichier à un autre.
*** FIXME : ajouter les schémas ***
Résumé et exercices
Questions de révision
Oui ou non
La commande cd - vous replace dans le répertoire où vous vous trouviez précédemment ? _
La commande cd ~ (en bash) est la commande la plus courte pour aller dans votre répertoire personnel ? _
On peut créer deux nouveaux répertoires /rep1./rep2 avec mkdir sans aucune option : _
la commande updatedb met à jour la base de données de locate : _
La syntaxe pour créer un lien symbolique nommé LIEN pointant vers FICHIER est : _
ln -s LIEN FICHIER
Les commandes cd /etc et cd ./etc sont toujours équivalentes :_
Fichiers
Fichier |
Description |
/etc/updatedb.conf |
fichier de configuration pour la commande updatedb |
/var/lib/slocate/slocate.db |
base de donnée pour locate (ou slocate : "secure locate") |
Commandes
Commande |
Description (apropos) |
cd |
change de répertoire courant - voir help cd |
cp |
cp(1) – Copie des fichiers et des répertoires |
dd |
copie et convertit des fichiers. Généralement utilisé pour copier le contenu d'un périphérique disque sur un autre périphérique ou un fichier |
find |
find(1) – Recherche des fichiers dans une hiérarchie de répertoires |
ln |
ln(1) – Crée des liens entre des fichiers |
locate |
commande utilisée pour rechercher des fichiers et des répertoires dans la base de données locate |
ls |
ls(1) – Affiche le contenu de répertoires |
mkdir |
mkdir (1) - Crée des répertoires |
mv |
Déplace ou renomme des fichiers |
pwd |
pwd (1) - Affiche le nom du répertoire de travail actuel |
rm |
rm (1) - Effacer des fichiers et des répertoires |
touch |
Crée un fichier vide ou modifie l'horodatage d'un fichier s'il existe |
updatedb |
commande utilisée pour mettre à jour la base de données locate |
whereis |
whereis(1) – Recherche les fichiers exécutables, les sources et les pages de manuel d'une commande |
which |
which(1) – localise une commande |
Travaux pratiques
Navigation
Créez un nouveau répertoire etc dans /tmp
mkdir /tmp/etc
Créez un fichier nommé nouveau dans /tmp/etc (avec touch, cat ou vi).
- Allez à la racine (cd /)
Testez les commandes qui affichent le contenu de nouveau :
cat etc/newfile cat /etc/newfile cat tmp/etc/newfile cat /tmp/etc/newfile
Supprimez le répertoire /tmp/etc avec rmdir. Refaites le point 1 puis supprimez /tmp/etc avec rm.
Faire de la place sur le système de fichier
Dans le but de récupérer de l'espace sur le périphérique qui contient le répertoire /usr/share/doc, nous allons copier les données de /usr/share/doc sur un périphérique inutilisé. Ensuite, nous ferons de la place en supprimant le répertoire /usr/share/doc et nous créerons un lien symbolique de /usr/share/doc vers le nouveau périphérique.
Créez un répertoire /spare sur lequel nous monterons notre disque de rechange (l'une des partitions crées au cours des exercices précédents ferait parfaitement le travail).
mkdir /spare mount <périphérique> /spare
Vérifiez avec df -h /spare et du -hs /usr/share/doc que la partition est suffisamment grande pour contenir les données existantes.
Ensuite, copiez le contenu de /usr/share/doc sur /spare/
cp -a /usr/share/doc /spare
Vérifiez que les données ont bien été copiées, puis modifiez /etc/fstab pour rendre le périphérique accessible au démarrage du système.
Supprimez /usr/share/doc et créez un lien symbolique de /usr/share/doc vers /spare/doc
ln -s /spare/doc /usr/share/doc
(facultatif) Faites la même chose avec /home. Rencontrez vous des problèmes ?
Recherche de fichiers
Copiez /etc/lilo.conf sur /etc/lilo.conf.bak
retrouvez votre nouveau fichier avec find
utilisez locate pour retrouver ce nouveau fichier
mettez à jour la base de données locate et réessayez le ii.
Stratégie de sauvegarde (première étape)
- Recherchez tous les fichiers de votre répertoire personnel qui ont été modifiés dans les dernières 24 heures.
find /home –mtime –1 |tee list1 |wc –-lines (-1 signifie moins d'une journée)
Nous verrons les outils d'archivage dans le LPI 102, mais la sortie de find peut être tubée directement dans cpio.
Réponses aux questions
Oui
Non : cd sans paramètre permet également d'aller dans le répertoire utilisateur
Non : vous devez utiliser mkdir -p pour créer des répertoires qui contiennent des sous-répertoires
Oui
Non : la commande correcte est ln -s FICHIER LIEN
Non : les chemins commançant par un slash sont des chemins absolus
Page consultée 460 fois