diff --git a/unix/fichiers.tml b/unix/fichiers.tml index 3ee94f9..82a9202 100644 --- a/unix/fichiers.tml +++ b/unix/fichiers.tml @@ -8,49 +8,120 @@ -

Manipuler les fichiers (files)

+

Manipuler les fichiers

-

Comment un fichier est-il créé ?

+

Créer un fichier

+ +

Généralités

-Un fichier est un paquet d'informations : du texte, de la musique, une -image... Chaque objet que vous manipulez en informatique (une page -Web, la musique de Casimir, vos photos de vacances, un logiciel...) -correspond à un fichier. Quand vous écrivez un texte avec Word et que -vous le sauvegardez sous le nom « Rapport de maîtrise », vous créez un -fichier à ce nom, écrit sur le disque dur. Chaque fois que vous -écrivez quelque chose sur le disque, vous créez un ou plusieurs -fichiers. +Un fichier est un paquet d'informations : ce peut +être aussi bien du texte, que de la musique ou une image. Chaque objet +que vous manipulez en informatique (une page Web, la musique de +Casimir, vos photos de vacances, un logiciel, etc.) correspond à un +fichier.

-Une des opérations les plus courantes consiste à écrire du texte. Pour cela, -voir le cours sur les éditeurs de texte. +Quand vous écrivez un texte avec OpenOffice.org et que vous le +sauvegardez sous le nom « Rapport de maîtrise », vous créez un fichier +à ce nom, écrit sur le disque dur. Chaque fois que vous écrivez +quelque chose sur le disque, vous créez un ou plusieurs fichiers.

-

Quel nom donner à ses fichiers ?

+

Créer un fichier texte

-Les noms de fichiers s'écrivent avec des caractères alphanumériques (lettres -et chiffres). On peut utiliser des majuscules et des minuscules, mais elles -ne sont pas interchangeables : document et -Document sont deux fichiers distincts. +Une des opérations les plus courantes consiste à écrire du texte. Pour +cela, voir le cours sur les éditeurs de +texte. Quand on vous demande de créer un fichier, généralement il +faut utiliser un éditeur de texte. Ainsi, pour créer le fichier +index.html (accueil d'une page Web), utilisez l'éditeur +NEdit et tapez : +

+ +
+brick ~/www/ $ nedit index.html
+
+ + +

+Si vous êtes pressé, la commande cat peut faire office +d'éditeur minimaliste. Tapez la commande suivante, et quelques mots : +

+ +
+brick ~ $ cat > notes
+Faire les courses
+Passer à la bibliothèque
+
+ +

+Et finissez par Ctrl+D. Le fichier notes +contient les quelques lignes que vous avez saisies. +

+ +

Créer un fichier vide

+ +

+On peut aussi créer un fichier à l'aide de la commande +touch. touch toto crée un fichier vide +appelé « toto ». En fait, cette commande sert essentiellement à +modifier la date de dernière modification d'un fichier. +

+ +
+Application : vous avez une page Web sur le serveur +des élèves et que vous ne voulez pas qu'à chaque virgule modifiée, on +voie votre page dans la liste des pages +récemment modifiées. Créez alors dans votre répertoire +www un fichier vide appelé .last_modified : +
+ +
+brick ~/www/ $ touch .last_modified
+
+ +

+Votre page, désormais, ne figurera dans la liste des récentes +modifications qu'après un nouveau touch du fichier +.last_modified. +

+ +

Nommer ses fichiers

+ +

+Les noms de fichiers s'écrivent avec des caractères +alphanumériques (lettres et chiffres). On peut utiliser +des majuscules et des minuscules, mais elles ne sont pas +interchangeables : document et Document sont +deux fichiers distincts.

-Il est préférable d'éviter les espaces dans les noms de fichiers (les -remplacer par underscore _, tiret -, virgule -, ou point .). Il vaut mieux éviter les caractères -accentués, et proscrire le reste (ponctuations diverses, signes bizarres). Il -faut aussi éviter de faire commencer un fichier par un . (par -exemple .document), et de faire des noms trop longs (même si en -théorie vous avez droit à 255 caractères). +Il est préférable d'éviter les espaces dans les noms de fichiers. On +peut les remplacer par un underscore (_) +ou un tiret (-). : +

+ +
+banque-de-france.tex
+banque_centrale.dvi
+
+ +

+Il vaut mieux éviter les caractères accentués, et proscrire le reste +(ponctuations diverses, signes bizarres). Il faut aussi éviter de +faire commencer un fichier par un . (par exemple +.document). Il est également sage d'éviter de donner des +noms trop longs (même si en théorie vous avez droit à 255 caractères).

-Certains fichiers ont des suffixes conventionnels qui les identifient auprès -des utilisateurs et de certains programmes (liste non exhaustive de suffixes -et d'outils) : +Certains fichiers ont des suffixes conventionnels qui les identifient +auprès des utilisateurs et de certains programmes (liste non +exhaustive de suffixes et d'outils) :

@@ -132,11 +203,46 @@ et toutes les pages Web un suffixe .html (par exemple ce document s'appelle fichiers.html).

-

less fichier

+

Lire un fichier

+ +

Lire un fichier avec cat

-Permet lire un fichier sans l'éditer (c'est-à-dire ouvrir un document afin de -pouvoir le modifier). Les commandes de base sont : +Pour pouvoir consulter un fichier (sans l'éditer), le plus simple est +la commande cat : +

+ +
+brick ~ $ cat fichier
+
+ +

+Le problème est que cat affiche l'intégralité du fichier +que vous lui demandez. Si le fichier est plus long que la taille de +votre écran (ce qui arrive quand même souvent), vous verrez défiler +très vite à l'écran le contenu de votre fichier, sans pouvoir +l'arrêter ou le ralentir. Pas très pratique... +

+ +

Les pagers more et +less

+ +

+Mieux vaut alors utiliser ce qu'en anglais on appelle un pager (parfois traduit par « visionneuse » en +français). Le nom « pager » vient du fait qu'il affiche un fichier +page par page et non tout d'un coup comme le fait +cat. Sur les Unix un minimum récents, la commande qui +fait cela est less. Pour lire le fichier +toto.txt, tapez simplement : +

+ +
+brick ~ $ less toto.txt
+
+ +

+Voici un tableau des commandes utiles de less :

@@ -185,25 +291,15 @@ tout le texte. Pour aller
-

Remarques sur more et cat

-

-cat a pour fonction première d'afficher un -fichier. Il est rapide et pratique pour un fichier très court, mais nous ne -vous le conseillons pas pour regarder un fichier un peu conséquent : -cat affiche le contenu du fichier d'un seul coup (si le texte -fait plus de 10-15 lignes, on ne voit rien). D'autre part, il ne permet aucune -recherche. -

- -

-more (en savoir davantage sur un -fichier) est une commande standard sur tous les systèmes Unix (alors que -less n'est pas installé partout). less (installé à -l'École) est cependant plus performant : les mots recherchés apparaissent -sur fond noir au lieu d'être juste placés en haut de l'écran, le défilement du -texte est plus précis. Si vous n'avez que more à disposition, -vous pouvez utiliser les commandes suivantes : +more (en savoir davantage sur +un fichier) est une commande standard sur tous les systèmes Unix +(alors que less n'est pas installé +partout). less (installé à l'École) est cependant plus +performant : les mots recherchés apparaissent sur fond noir au lieu +d'être juste placés en haut de l'écran, le défilement du texte est +plus précis. Si vous n'avez que more à disposition, vous +pouvez utiliser les commandes suivantes :

@@ -229,65 +325,253 @@ qu'avec less ).
+

Afficher le début d'un fichier

+ +

+On utilise la commande head pour afficher le début d'un +fichier : +

+ +
+brick ~ $ head point_de_lendemain.txt
+J'aimais éperdumment la comtesse de ... ; j'avais vingt ans, et
+j'étais ingénu ; elle me trompa, je me fâchai, elle me
+quitta. J'étais ingénu, je la regrettai ; j'avais vingt ans, elle
+me pardonna : et comme j'avais vingt ans, que j'étais ingénu,
+toujours trompé, mais plus quitté, je me croyais l'amant le mieux
+(...)
+
+ +

+Par défaut, head affiche les 10 premières lignes. Pour +lui spécifier un nombre de lignes précis, utilisez l'option +-n, n étant le nombre de votre choix : +

+ +
+brick ~ $ head -2 point_de_lendemain.txt
+J'aimais éperdumment la comtesse de ... ; j'avais vingt ans, et
+j'étais ingénu ; elle me trompa, je me fâchai, elle me
+brick ~ $
+
+ +

+« Mais à quoi est-ce que ça peut bien servir ? », vous direz-vous. Là, +comme ça, c'est vrai que l'utilité est limitée. Mais en combinaison +avec d'autres commandes, c'est très utile. Un exemple tiré de notre +page sur la place disque : +

+ +
+clipper ~ $ du -ak | sort -nr | head -10
+98280   .
+22007   ./www
+1658    ./Mail
+9637    ./www/hist
+5005    ./www/hist/maitrise
+4910    ./histoire
+3941    ./Mail/archives
+3757    ./www/philo/
+3274    ./www/philo/cours
+3112    ./www/philo/cours/hegel
+2841    ./prive
+
+ +

+Nous avons ici les 10 fichiers ou répertoires les plus gros de notre +compte. Toutes les explications sur cette suite de commandes se +trouvent dans nitre page sur la place +disque. +

+ +

Afficher la fin d'un fichier

+ +

+Cette fois, c'est la commande tail qu'on utilise, avec +les mêmes options que head : +

+ +
+brick ~ $ tail -3 point_de_lendemain.txt
+sensible. Adieu, encore une fois. Vous êtes charmant... Ne me
+brouillez pas avec la Comtesse ». Elle me serra la main, et
+me quitta.
+
+ +

+Cette commande devient très intéressante avec l'option +-f : celle-ci dit à tail de ne pas s'arrêter +à la fin du fichier, mais de continuer à afficher les nouvelles +informations qui seraient ajoutées au fichier. Une applications +typique est la surveillance des fichiers de logs (journaux où le +système, ou certains programmes, consignent des informations sur leur +travail). +

+ +

Application

+ +

+Vous êtes en train de rédiger votre .htaccess +(fichier de configuration du serveur Web, Apache) et vous voulez +regarder en temps réel les messages d'erreur du serveur. +

+ +
+Ces messages d'erreur, à l'ENS, sont dans +~webmaster/logs/access_log.curr, il faut donc surveiller +les messages d'erreur sui arrivent au fur et à mesure que vous faites +vos essais. Tapez dans l'une de vos fenêtres la commande suivante : +
+ +
+clipper ~ $ tail -f ~webmaster/logs/access_log.curr | grep monlogin
+
+ +

+et vous verrez s'afficher, au fur et à mesure et en temps réel, toutes +les erreurs qui contiennent votre login, donc vos pages. Pour arrêter +tail quand vous en avez assez, tapez Ctrl+C. +

+

Manipuler les fichiers

-

cp nom1 nom2 (copy)

+

Copier un fichier

-Permet de recopier le fichier nom1dans un fichier -nom2. Ils seront donc identiques. +Copier un fichier, c'est prendre un fichier déjà existant +et en créer une copie rigoureusement identique sous un nom +différent. On utilise pour cela la commande cp (comme cp). Pour copier toto.txt en +toto2.txt :

+
+brick ~ $ cp toto.txt toto2.txt
+
+ +

+Notez qu'on ne peut pas se servir de cp pour copier un +répertoire. Ainsi, si vous essayez de copier votre répertoire +www, cp va se plaindre : +

+ +
+brick ~ $ cp www www2
+cp: www: is a directory
+
+ +
+S'exercer : pour vérifier que vous avez bien compris, +faites les exercices sur cp. +
+ +

Renommer un fichier ou un répertoire

+

-&icone.note; -Exercices sur cp. +Renommer un fichier, c'est lui donner un nouveau nom, sans +rien modifier d'autre. On utilise pour cela la commande +mv (comme move). Pour renommer +dissert.tex en dissertation.tex :

-

mv nom1 nom2 (move, -déplacer et renommer)

- -

Renommer

+
+brick ~ $ mv dissert.tex dissertation.tex
+

-mv truc chose : -renomme le fichier ou le répertoire truc en chose. +La même commande sert également, avec la même syntaxe, pour les +répertoires. Ainsi, si vous voulez renommer votre répertoire +boulot en répertoire magistere :

-

Déplacer

+
+brick ~ $ mv boulot magistere
+
+ +

Déplacer un fichier

-mv truc chose/ : -déplace le fichier truc dans le répertoire chose/. +C'est toujours la commande mv que l'on utilise. La +syntaxe est la suivante : mv fichier +nouvel_endroit. Ainsi, vous voulez déplacez le fichier +cv.html, situé à la racine de votre compte, dans votre +répertoire www :

+
+brick ~ $ mv cv.html www
+
+ +

+Autre exemple : +

+ +
+brick ~ $ mv fichier ..
+
+ +

+déplace un fichier dans le répertoire père — si vous ne +comprenez pas ce terme, reportez-vous au tableau qui illustre la +commande cd dans la +page sur les répertoires. +

+ +
+S'exercer : pour vérifier que vous avez bien compris, +faites les exercices sur +mv.
+ +

Effacer un fichier

+

-mv fichier .. : -déplace un fichier dans le répertoire père (pour ce terme, voir dans le -tableau qui illustre cd). +Sous Unix, effacer un fichier, c'est le détruire de façon +irréversible. Pas de concept de poubelle dans +laquelle on peut fouiller, comme sous Windows ou Mac OS. C'est la +commande rm (comme remove) qui efface un +fichier :

-

-&icone.note; -Exercices sur mv. +

+brick ~ $ rm fichier
+
+ +
+Dans les configs conscrits, depuis un certain temps, rm +vous demande de confirmer l'ordre d'effacement : +
+ +
+brick ~ $ rm fichier
+rm: remove fichier (yes/no)?
+
+ +
+En effet, le rm que vous utilisez fait en fait rm +-i, comme vous le montrera la commande which : +
+ +
+brick ~ $ which rm
+rm: aliased to nocorrect rm -i
+
+ +

+Cette précaution évite le fameux doigt qui glisse et autres erreurs +qui effacent par mégarde des fichiers importants. Mais cette +précaution n'existe pas pour toutes les configurations : observez donc +la plus grande prudence en utilisant rm.

-

rm fichier (remove)

- -

-À ne jamais confondre avec mv ... Cette commande détruit le -fichier, de façon irréversible. Avec la config conscrits, confirmation est -demandée (option -i de rm). Ce n'est pas le cas -pour toutes les configurations : observez donc la plus grande prudence -avec cette commande... -

- -

-Remarques : Les partitions utilisateurs sont -sauvegardées toutes les nuits par le SPI. Si donc vous effacez un fichier -accidentellement et qu'il avait plus d'un ou deux jours, vous pouvez envoyer -un courrier électronique au SPI pour demander qu'on vous le récupère -(spi@clipper). -

+
+Remarque : à l'ENS, les partitions utilisateurs sont +sauvegardées toutes les nuits par le SPI. Si donc vous effacez un +fichier accidentellement et qu'il avait plus d'un ou deux jours, vous +pouvez envoyer un courrier électronique au SPI pour demander qu'on vous le +récupère. +

Il existe aussi RCS, qui @@ -295,13 +579,177 @@ enregistre des copies de sauvegarde de vos fichiers, et permet de g les différentes versions de votre travail.

-

Exemple

+

Effacer plusieurs fichiers en même temps

-On veut renommer le fichier -chrono du sous-répertoire ancienne/ en -evolution, et le mettre dans le répertoire -histoire/. Dans cet exemple, nous sommes dans +Nettoyage de printemps sur votre compte, vous voulez supprimer +plusieurs fichiers en même temps. Il suffit tout simplement de les +indiquer à la suite à rm : +

+ +
+brick ~ $ rm article_vn.tex article_leveque.tex article_leveque2.tex 
+
+ +

Effacer un répertoire et son contenu

+ +

+La commande pour effacer un répertoire est rmdir +(cf. notre page sur les répertoires), +mais elle ne marche que si le répertoire est vide. La commande +rm ne peut pas effacer directement un répertoire : +

+ +
+brick ~ $ rm www
+rm: www is a directory
+
+ +

+Pour effacer un répertoire et son contenu, utilisez l'option +-R (comme recursive de +rm. Pour effacer votre répertoire toto/ et +les fichiers qu'il contient, tapez : +

+ +
+brick ~ $ rm -R toto
+
+ +
+À l'ENS, parce que rm est en fait rm -i, +rm vous demandera confirmation pour chacun des fichiers +contenus dans le répertoire toto/ : +
+ +
+brick ~ $ rm -R toto
+rm: examine files in directory toto (yes/no)? yes
+rm: remove toto/titi (yes/no)? y
+rm: remove toto/tata (yes/no)? 
+(...)
+
+ +

+Si vous trouvez fastidieux de devoir répondre oui à chaque fois, vous +pouvez utiliser en plus l'option -f (comme force) de rm. Cette option supplante +l'option -i et efface irrémédiablement sans +demander confirmation. Faites donc très attention avec. +

+ +

Effacer des fichiers au nom exotique

+ +

+Comment effacer des fichiers qui comment par des caractères bizarres, +ou qui comportent des espaces dans leur nom ? La commande +rm semble devenir subitement inefficace ! Essayons +d'abord avec un fichier avec des espaces : +

+ +
+brick ~ $ rm siècle de périclès.doc
+rm: siècle: No such file or directory
+rm: de: No such file or directory
+rm: périclès.doc: No such file or directory
+
+ +

+En fait, rm croit que vous voulez effacer d'abord un +fichier appelé siècle, puis un autre appelé +de, etc. La solution est de mettre le nom du fichier +entre guillemets ("), et rm l'efface sans problème : +

+ +
+brick ~ $ rm "siècle de périclès.doc"
+remove siècle de périclès.doc? y
+brick ~ $
+
+ +

+Essayons maintenant avec un fichier commençant par un caractère +bizarre, par exemple un tiret : +

+ +
+brick ~ $ rm -bla
+rm: illegal option -- b
+usage: rm [-f | -i] [-dPRrvW] file ...
+       unlink file
+brick ~ $ rm "-bla"                  
+rm: illegal option -- b
+usage: rm [-f | -i] [-dPRrvW] file ...
+       unlink file
+
+ +

+Pas bien brillant... La commande rm croit à cause du +tiret initial qu'il s'agit d'options. Or il n'y a pas d'option +-b pour rm. Solution : utiliser l'option +-- : +

+ +
+brick ~ $ rm -- -bla
+remove -bla?
+
+ +

+Une autre solution consiste à donner à rm un chemin, +absolu ou relatif. Avec un chemin relatif, par exemple : +

+ +
+brick ~ $ rm ./-bla
+remove -bla?
+
+ +

Concaténer des fichiers

+ +

+Concaténer des fichiers, c'est les placer bout à bout. On +utilise la commande cat (comme concatenate) : +

+ +
+brick ~ $ cat fichier1 fichier2 > fichier3
+
+ +

+Les fichiers 1 et 2 placés bout à bout et le résultat est mis dans un +fichier3 créé automatiquement. Le shell +refuse d'écraser un fichier existant. +

+ +

+Dans fichier3 apparaît d'abord fichier1 puis +fichier2. Concaténer deux fichiers de la sorte ne les +détruit pas (il existe à la fois fichier1, +fichier2 et fichier3). +

+ +

+On peut aussi placer deux fichiers bout à bout sans créer de troisième +fichier. La syntaxe est alors la suivante : +

+ +
+brick ~ $ cat fichier2 >> fichier1
+ +

+fichier2 est placé « au bout » de fichier1. +fichier2 reste inchangé, fichier1 contient +désormais son propre texte suivi du texte de fichier2. +

+ +

Récapitulons (exemple)

+ +

+On veut renommer le fichier chrono du sous-répertoire +ancienne/ en evolution, et le mettre dans le +répertoire histoire/. Dans cet exemple, nous sommes dans histoire/ancienne/ :

@@ -374,92 +822,13 @@ mv chrono evolution

-Il y a donc rarement une seule façon de manipuler ses fichiers, c'est une -question d'aisance et de rapidité. -

- - -

cat

- -

Afficher un fichier

- -

-C'est pratique pour lire un fichier court, inutilisable sinon (voir les remarques à propos de more et de cat). Dans cet usage, -cat sert surtout lorsque vous programmez. -

- -

Concaténer des fichiers

- -
cat fichier1 fichier2 > fichier3 
- -

-Les fichiers 1 et 2 sont concaténés (placés bout à à bout) et le résultat est -mis dans un fichier3 créé automatiquement. Le shell -refuse d'écraser un fichier existant. -

- -

-Dans fichier3 apparaît d'abord fichier1 puis -fichier2. Concaténer deux fichiers de la sorte ne les détruit -pas (il existe à la fois fichier1, fichier2 et -fichier3). -

- -

-On peut aussi placer deux fichiers bout à bout sans créer de troisième -fichier. La syntaxe est alors la suivante : -

- -
cat fichier2 >> fichier1
- -

-fichier2 est placé « au bout » de fichier1. -fichier2 reste inchangé, fichier1 contient désormais -son propre texte suivi du texte de fichier2. -

- -

Écrire

- -

-cat peut faire office d'éditeur minimaliste; tapez la commande -suivante, et quelques mots : -

- -
-corvette ~ $ cat > notes
-Faire les courses
-Passer à la bibliothèque
-...
-
- -

-Et finissez par ^D. Le fichier notes contient les -quelques lignes que vous avez saisies. -

- -

head fichier et tail -fichier

- -

-Par défaut, ces commandes montrent les dix premières (head) ou -les dix dernières (tail) lignes d'un fichier. -

- -

-On peut utiliser l'option -nombre pour spécifier le -nombre de lignes que l'on veut faire apparaître : -

- -
head -24 mon-fichier
- -

-affiche les 24 premières lignes du fichier. +Il y a donc rarement une seule façon de manipuler ses fichiers, c'est +une question d'aisance et de rapidité.

- Auteur : Émilia Robin. - Dernière modification le 2002-11-22. + Auteur : Émilia Robin (2002), Marie-Lan Nguyen (2004). +Dernière modification : le .