Gestion des fichiers

État : {a_reli}

Retour au document principal

Pré-requis

Objectifs

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.

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 :

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 :

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 :

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 :

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

  1. La commande cd - vous replace dans le répertoire où vous vous trouviez précédemment ? _

  2. La commande cd ~ (en bash) est la commande la plus courte pour aller dans votre répertoire personnel ? _

  3. On peut créer deux nouveaux répertoires /rep1./rep2 avec mkdir sans aucune option : _

  4. la commande updatedb met à jour la base de données de locate : _

  5. La syntaxe pour créer un lien symbolique nommé LIEN pointant vers FICHIER est : _

     ln -s LIEN FICHIER
  6. Les commandes cd /etc et cd ./etc sont toujours équivalentes :_

Voir les réponses

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

  1. Créez un nouveau répertoire etc dans /tmp

    mkdir /tmp/etc
  2. Créez un fichier nommé nouveau dans /tmp/etc (avec touch, cat ou vi).

  3. Allez à la racine (cd /)
  4. Testez les commandes qui affichent le contenu de nouveau :

    cat etc/newfile
    cat /etc/newfile
    cat tmp/etc/newfile
    cat /tmp/etc/newfile
  5. 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.

  1. 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
  2. Vérifiez avec df -h /spare et du -hs /usr/share/doc que la partition est suffisamment grande pour contenir les données existantes.

  3. Ensuite, copiez le contenu de /usr/share/doc sur /spare/

    cp -a /usr/share/doc /spare
  4. 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.

  5. Supprimez /usr/share/doc et créez un lien symbolique de /usr/share/doc vers /spare/doc

    ln -s /spare/doc /usr/share/doc
  6. (facultatif) Faites la même chose avec /home. Rencontrez vous des problèmes ?

Recherche de fichiers

  1. Copiez /etc/lilo.conf sur /etc/lilo.conf.bak

    1. retrouvez votre nouveau fichier avec find

    2. utilisez locate pour retrouver ce nouveau fichier

    3. mettez à jour la base de données locate et réessayez le ii.

Stratégie de sauvegarde (première étape)

  1. 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

  1. Oui

  2. Non : cd sans paramètre permet également d'aller dans le répertoire utilisateur

  3. Non : vous devez utiliser mkdir -p pour créer des répertoires qui contiennent des sous-répertoires

  4. Oui

  5. Non : la commande correcte est ln -s FICHIER LIEN

  6. Non : les chemins commançant par un slash sont des chemins absolus

Page consultée 268 fois