Programmation Bash/Interactions avec le système de fichiers

Un livre de Wikilivres.

Fichiers et répertoires[modifier | modifier le wikicode]

Créer[modifier | modifier le wikicode]

Création d'un fichier[modifier | modifier le wikicode]

Pour créer un fichier texte, le plus simple est d'utiliser l'éditeur de texte vi. Pour créer un fichier vide, il suffit d'utiliser la commande touch. La commande ls permet de recenser le contenu d'un répertoire. Exemple :

$ ls
$ touch vide
$ ls -l
total 0
-rw-r--r--  1 shadouser shadogroup 0 2007-03-03 10:20 vide

Création d'un répertoire[modifier | modifier le wikicode]

Pour créer un répertoire, utiliser la commande mkdir. Exemple :

$ ls
$ mkdir dossier
$ ls -l
total 4
drwxr-xr-x  2 shadouser shadogroup 4096 2007-03-03 10:28 dossier

Déplacer et renommer[modifier | modifier le wikicode]

Pour déplacer un objet du système de fichier, utiliser la commande mv. Exemple :

$ pwd
/home/shadouser/test
$ ls -l
total 4
drwxr-xr-x  2 shadouser shadogroup 4096 2007-03-03 10:28 dossier
-rw-r--r--  1 shadouser shadogroup 0 2007-03-03 10:20 vide
$ ls -l ~/
total 0
$ mv vide ..
$ ls 
dossier
$ ls ..
vide

Pour renommer un fichier, il suffit de le déplacer vers un autre nom de fichier. Exemple :

$ ls
vide
$ mv vide plein
$ ls
plein

Copier[modifier | modifier le wikicode]

Pour copier un fichier, utiliser la commande cp comme suit :

$ pwd
/home/shadouser/test
$ ls
dossier vide
$ cp vide dossier/
$ ls dossier/
vide
$ ls
dossier  vide

Pour copier un répertoire, utiliser l'option -r.

Supprimer[modifier | modifier le wikicode]

La commande rm détruit un fichier. Attention, ce fichier ne pourra pas être récupéré ou difficilement. Exemple :

$ ls 
plein
$ rm plein
$ ls

Pour supprimer un répertoire, utiliser l'option -r. Pour forcer la suppression, utiliser l'option -f

Lister[modifier | modifier le wikicode]

Pour lister tous les fichiers du dossier courant et de ses sous-dossiers on peut utiliser ls -R. Toutefois le formatage du code est ordonné par sous-dossier. Pour avoir une seule liste de fichiers et sous-dossiers triés, il faut donc formater ce résultat avec "awk"[1] :

ls -R | awk '
/:$/&&f{s=$0;f=0}
/:$/&&!f{sub(/:$/,"");s=$0;f=1;next}
NF&&f{ print s"/"$0 }'

Déplacements dans un système de fichier[modifier | modifier le wikicode]

L'organisation, les chemins[modifier | modifier le wikicode]

Il faut toujours se souvenir que du point de vue d'un système de type UNIX, tout est fichier. Cela signifie que, pour le système, les périphériques - disques durs, écrans, imprimantes etc... - sont représentés par des fichiers. Les répertoires sont eux aussi des fichiers, d'un type particulier, puisqu'il "contiennent" d'autres fichiers. Le lecteur comprendra donc qu'il est important de maîtriser les notions de bases concernant la manipulation de fichiers.

Les fichiers d'un tel système sont organisés sous forme d'une arborescence dont la racine est représentée par le slash : / C'est par ce signe que débute tout chemin absolu menant à un fichier, sous réserve, bien entendu, de son existence. Pour indiquer un nœud dans ce chemin, une bifurcation, on utilise comme séparateur le slash.

Exemple :

/home/aniko/latex/rapport.tex

Ce chemin mène à un fichier baptisé "rapport.tex" qui se trouve dans un répertoire "latex", lui-même dans le répertoire "aniko", inclus dans "home" qui est un répertoire directement accessible depuis la racine. Cette organisation permet une grande souplesse, puisqu'il est aisé de détacher une partie de l'arborescence pour la greffer ailleurs. En outre cela permet de compartimenter clairement l'organisation du système, puisque par le jeu de différents droits sur les fichiers, tous ne sont pas lisibles, modifiables ou exécutables par tous les utilisateurs.

Les commandes cd et pwd[modifier | modifier le wikicode]

La commande cd, i.e. common directory (répertoire courant), permet de se déplacer dans le système de fichiers. La commande pwd, i.e. present working directory, affiche l'endroit où l'on se trouve actuellement dans le système de fichiers.

Exemple :

$ pwd 
/home/shadouser
$ ls -l
total 4,0K
drwxr-xr-x   4 shadouser shadogroup     4096 2007-03-03 10:31 tmp
$ cd tmp
$ pwd
/home/shadouser/tmp
$ cd ..
$ pwd
/home/shadouser
$ cd .
$ pwd
/home/shadouser
$ cd tmp 
$ pwd
/home/shadouser/tmp
$ cd ~/
$ pwd
/home/shadouser


Des symboles sont utilisés pour représenter les répertoires couramment utilisés :

  • . désigne le répertoire courant, celui dans lequel on se trouve,
  • .. désigne le répertoire parent de celui dans lequel on se trouve,
  • ~ désigne le répertoire personnel de l'utilisateur, dans l'exemple précédent /home/shadouser. La variable d'environnement $HOME détient l'information sur le répertoire personnel de l'utilisateur.

"Monter" une ressource dans le système de fichiers[modifier | modifier le wikicode]

Les systèmes de fichiers Unix ne comprennent, comme nous le décrivons plus haut, qu'une seule arborescence logique. La racine de cette arborescence est nommée /. Il est possible d'intégrer sous cette arborescence tout type de périphérique : souris, disque dur, lecteur dvd, ou clé usb. La commande mount permet d'insérer une ressource dans cette arborescence.

Exemple :

$ mount -t ext3 /dev/hda2 /tmp

Cette commande permet de monter la ressource identifiée par le système comme /dev/hda2 dans le répertoire /tmp. Il s'agit probablement d'une partition de disque dur dont le format est ext3. Cela signifie que pour accéder à cette ressource il suffit d'aller dans ce répertoire.

Exemple :

mount -t nfs pc33:/pub/ /home/sidonie/import/

Cette commande permet de monter le répertoire /pub du système de fichier du serveur distant pc33 dans l'arborescence de la machine à travers le réseau en utilisant NFS.


Exemple :

mount -t vfat /dev/sda /home/sidonie/cle/

Cette commande permet de monter une clé usb.


Umount :

umount /home/sidonie/cle/

Cette commande permet de démonter le lecteur monté sur /home/sidonie/cle.

  1. https://stackoverflow.com/questions/1767384/ls-command-how-can-i-get-a-recursive-full-path-listing-one-line-per-file