Dans la partie 7.2, nous avons montré comment déplacer et renommer des fichiers
avec mv
, comment les copier avec cp
, comment les
détruire avec rm
, comment détruire des répertoires avec
rmdir
et comment en créer avec mkdir
. Ce chapitre va
couvrir des aspects un peu plus avancés du traitement de fichiers.
Les systèmes Unix et GNU sont paramétrables pour pouvoir autoriser de nombreuses personnes à utiliser la même machine tout en conservant secrets certains fichiers ou en empêchant certaines personnes de modifier certains fichiers. Vous pouvez le vérifier par vous-même. Loguez-vous en tant que vous-même, c'est-à-dire PAS en root.
whoami
Ceci pour vérifier que vous n'êtes pas root. Ensuite, entrer la commande suivante:
rm /etc/resolv.conf
L'ordinateur devrait vous répondre Permission denied
[41]. /etc/resol.conf
est
un des fichiers essentiels de configuration du système. Vous n'êtes pas
autorisé à le modifier ou l'effacer si vous n'êtes pas root. Cela préserve le
système d'une maladresse accidentelle. Si l'ordinateur est dans un organisme
public, comme dans un bureau ou une école, cela le préserve des utilisateurs
travaillant dessus.
Maintenant, tapez ls -l /etc/resolv.conf
.
Cela devrait vous renvoyer quelque chose comme cela:
-rw-r--r-- 1 root root 119 Feb 23 1997 /etc/resolv.conf
L'option -l
de ls
lui demande d'ajouter des
informations additionnelles. Les informations sur la partie droite sont
faciles à interpréter. La taille du fichier fait 119 octets. La date de
dernière modification est le 23 février 1997 et le nom du fichier est
/etc/resolv.conf
. Sur la partie gauche de l'écran, les choses
sont un tout petit peu plus compliquées.
Tout d'abord, une brève explication technique: -rw-r--r--
est le
mode du fichier, le 1
correspond au nombre de liens
physiques vers ce fichier (ou le nombre de fichiers dans le répertoire) et les
deux root
sont les propriétaires respectifs du fichier et du
groupe auquel appartient le fichier.
Tout ceci est du charabia. Étudions les choses plus calmement.
Tous les fichiers ont deux propriétaires: un utilisateur et un groupe. Le cas précédent peut porter à confusion car il y a un groupe nommé root et en même temps un utilisateur nommé root. Les groupes sont juste un rassemblement d'utilisateurs à qui on donne collectivement le droit d'accéder à une partie du système. Un bon exemple est le groupe games. Vous pouvez créer un groupe games sur votre ordinateur et le paramétrer de façon à ce que seuls les gens appartenant à ce groupe aient l'autorisation de jouer sur la machine.
Il y a des exemples plus pratiques: considérons le cas de la configuration d'une machine pour une école. Il y a certains fichiers dont vous voulez restreindre l'accès aux professeurs seulement, et pas aux élèves. Vous créez donc un groupe dans lequel vous rassemblez tous les professeurs. Ensuite, vous pouvez indiquer au système que certains fichiers appartiennent au groupe professeurs et que personne d'autre n'y a accès.
Explorons les groupes du système. En premier lieu, vous pouvez utiliser la
commande groups
du shell. Cela vous fournit une liste de groupes
auxquels vous appartenez:
$ groups system-wide configuration!permissions!file ownershipusername dialout: cdrom floppy audio
Vous semblez donc n'appartenir qu'à un groupe, qui est identique à votre nom d'utilisateur. Dans tous les cas, root peut vous ajouter dans d'autres groupes. L'exemple suivant montre une personne membre de cinq groupes:
less /etc/group
Ce fichier contient la liste des groupes disponibles sur votre système.
Remarquez bien le groupe root (le seul membre de ce groupe est l'utilisateur
root) et le groupe qui correspond à votre nom d'utilisateur. Il y a aussi des
groupes comme dialout (les utilisateurs autorisés à lancer le modem)
et floppy (les utilisateurs qui ont accès au lecteur de disquette).
Il est probable que votre système ne soit pas configuré pour avoir l'usage de
ces groupes. Il est préférable que seul root ait accès au lecteur de
disquettes ou au modem pour le moment. Pour les détails en ce qui concernent
ce fichier, reportez-vous au man group
.
ls -l /home
Cette commande vous montre que tous les répertoires utilisateurs sont la propriété de leur utilisateur et de leur groupe personnel.
Si vous venez d'installer Debian, vous êtes peut-être le seul utilisateur.
Vous pouvez ajouter d'autres utilisateur à l'aide de la commande
adduser
.
En plus d'être la propriété d'un seul utilisateur et d'un seul groupe, chaque fichier et répertoire possède aussi un mode qui détermine qui a le droit de lire, d'écrire et d'exécuter un fichier (et de le lancer s'il s'agit d'un programme). Il y a d'autre petites fonctionnalités apportées par le mode mais ce sont des réglages avancées et nous les laisserons de côté pour le moment.
Un mode ressemble à cette sortie de ls
: -rw-r--r--
.
À partir de maintenant, nous allons découvrir neuf ensembles: celui qui
contrôle les permissions de lecture, d'écriture et
d'exécution pour le propriétaire du fichier, pour le groupe auquel se
rattache le fichier et pour les autres personnes (others) (tous ceux
du système, quelque fois appelé le monde).
Dans la ligne mode, le premier « élément » donne le type de fichier.
Le - signifie que c'est un fichier normal (regular file). Si nous
avions eu d
, cela aurait été un répertoire[42]. Il y a aussi quelques autres
possibilités mais qui sont trop complexes pour le cadre de cette partie. Pour
plus détails, allez voir la partie 15.2.2.
Les neuf éléments restant sont utilisés pour définir le mode du fichier. Les
neuf bits basics (r
ead, w
rite et
ex
ecute pour l'utilisateur, le groupe et les autres) sont
définis en trois blocs de rxw
.
Si toutes les permissions sont activées et qu'il s'agit d'un fichier normal, le mode va ressembler à ceci:
-rxwrxwrxw
Si c'était un répertoire avec toutes les permissions désactivées pour le monde et activées pour tous les utilisateurs et le groupe, cela ressemblerait à:
drxwrxw---
Le tableau suivant indique la signification des permission de lecture, écriture et exécution pour les fichiers et les répertoires:
--------------------------------------------------------------- | Code | Nom | Ce que cela permet | Ce que cela permet | | | | aux fichiers | aux répertoires | --------------------------------------------------------------- | r | lecture | Examen du contenu | Liste le contenu | | | | du fichier | du répertoire | --------------------------------------------------------------- | | | Modification |Ajout ou destruction| | w | écriture| du fichier | de fichiers dans le| | | | | répertoire | --------------------------------------------------------------- | x |exécution| lancer en tant que |Accéder aux fichiers| | | | commande | du répertoire | ---------------------------------------------------------------
Les modes du répertoire peuvent porter un peu à confusion donc voici une série d'exemples des effets de combinaisons diverses.
r--
L'utilisateur, le groupe et les autres avec ces permissions peuvent afficher le contenu du répertoire mais ne peuvent rien faire d'autre. Les fichiers contenus dans ce répertoire ne peuvent être lus, modifiés ou manipulés de quelle que façon que ce soit. La seule action autorisée consiste à lire le répertoire en lui-même ce qui revient à afficher ce qu'il contient et donc la liste des fichiers.
rw-
La permission d'écriture n'a pas d'effet en l'absence de celle d'exécution donc ce mode se comporte exactement comme le mode précédent.
r-x
Ce mode permet aux fichiers présents dans le répertoire d'être visibles et permet aussi d'accéder à ces fichiers. Dans tous les cas, les fichiers ne peuvent être créés ou détruits. Accéder signifie que vous pouvez voir, changer et exécuter les fichiers suivant leurs permissions respectives.
--x
Les fichiers de ce répertoire sont accessibles mais le contenu du répertoire ne l'est pas. Il vous faut donc connaître à l'avance le nom du fichier que vous recherchez (à moins d'avoir des talents de devin). Les fichiers ne peuvent être ni créés ni détruits.
rwx
Vous pouvez faire tout ce que vous voulez avec les fichiers de ce répertoire tant que vous respectez leurs permissions respectives.
Les permissions d'écriture d'un répertoire détermine si vous pouvez détruire des fichiers dans ce répertoire. Un fichier en lecture seule pourra être effacé si vous avez les permissions d'écriture dans le répertoire le contenant. Vous ne pouvez détruire un fichier d'un répertoire en lecture seule même si vous avez les droits d'écriture sur le fichier.
Cela signifie que si vous êtes le propriétaire d'un répertoire, vous pouvez toujours détruire un de ses fichiers, y compris si ce fichier appartient à root.
La permission d'exécution d'un répertoire détermine la possibilité d'avoir accès aux fichiers - si bien sûr leurs permissions respectives l'autorisent. Si vous avez le droit d'exécution d'un répertoire, les droits d'exécution de ses fichiers devraient suivre. Sinon, les permissions des fichiers ne servent à rien: vous y avez accès dans tous les cas.
Cette partie contient une série d'exemples pour montrer comment utiliser les
permissions. Pour changer les permissions, on utilise la commande
chmod
.
cd ; touch monfichier
Il y a une série de nouveaux trucs ici. En premier, vous pouvez utiliser
;
pour mettre deux commandes sur la même ligne. Vous pouvez
entrer la commande précédente comme suit:
$ cd $ touch monfichier
ce qui revient au même que
$ cd; touch monfichier
Les deux méthodes conduisent au même résultat.
Rappelez-vous que cd
employé seul vous renvoie dans votre
répertoire personnel. touch
est normalement utilisé pour modifier
la date de création d'un fichier à la date courante. Mais cela a une autre
fonctionnalité intéressante. Si le fichier n'existe pas, touch
le
crée. Ainsi, vous êtes en train de créer un fichier pour pouvoir faire des
expérimentations dessus. Utilisez ls -l
pour observer que le
fichier a bien été créé et remarquez son mode de permission:
$ ls -l -rw-r--r-- 1 user user 0 Nov 18 22:04 monfichier
Bien-sûr, la date et le nom du groupe et de l'utilisateur seront différents
chez vous. La taille du fichier est 0
car touch
a
créé un fichier vide. -rw-r--r--
est le mode de permission par
défaut sous Debian.
chmod u+x monfichier
Cette commande ajoute (+
) des permissions
d'exécution (x
) pour l'utilisateur
(u
) à qui appartient le fichier. Utilisez ls -l
pour
en voir les effets.
chmod go-r monfichier
Maintenant, vous ôtez (-
) les permissions de
lecture (r
) au groupe (g
) à qui
appartient le fichier et à tous les autres (o
). À
nouveau, utilisez ls -l
pour voir les modifications.
chmod ugo=rx monfichier
Ici, vous positionnez (=
) les permissions de lecture et
d'exécution pour l'utilisateur, le groupe et les autres. Cela positionne les
permissions exactement comme vous l'avez spécifié et enlève les autres
permissions. Ainsi, seules les permissions rx
seront activées, et
toutes les permissions w
seront retirées. À partir de maintenant,
personne ne peut modifier le fichier.
chmod a-x monfichier
est un raccourci[43] pour
ugo
. Ainsi, seules les permissions d'exécution vont être
retirées.
rm monfichier
Avec cette commande, nous allons tenter de détruire le fichier mais sans les
droits d'écriture. rm
va alors s'assurer de votre certitude en
affichant le message suivant[44]:
rm: remove 'monfichier', overriding mode 0444 ?
Vous devrez répondre en tapant y
et ensuite en appuyant sur
Entrée
. Ceci est une fonctionnalité de rm
et non une
conséquence des permissions. L'autorisation de détruire un fichier vient des
droits sur le répertoire et vous avez les droits sur ce répertoire. Dans ce
cas, rm
essaie d'être le plus convivial possible en se figurant
que si vous ne vouliez pas changer les permissions (et a fortiori
enlever les droits d'écriture), vous ne vouliez pas plus le détruire et ainsi
il vous demande de faire le choix.
Qu'est-ce donc cette affaire 0444
dans la question de
rm
? Les modes de permission sont en fait un nombre de 12 bits
comme celui-ci: 000100100100
. 0444
est
représentation octal (i-e en base 8) qui est la base conventionnelle pour
écrire un mode. Ainsi, vous pouvez écrire chmod 444 monfichier
à
la place de chmod ugo=r monfichier
.
Maintenant que vous êtes capable de naviguer au gré des répertoires, allons
faire un tour auprès des fichiers et des répertoires que vous avez créés en
installant Debian. Si vous êtes curieux, faîtes un cd
dans chacun
d'entre eux et tapez ls
pour voir leur contenu. Si le résultat ne
tient pas dans l'écran, essayez ls | less
où | est le caractère
tube que l'on trouve généralement au même emplacement que la touche
retour arrière[45].
/
Comme on l'a déjà mentionné, il s'agit du répertoire racine qui contient tous les autres répertoires.
/root
Attention, ne confondez pas /
avec /root
!
/root
est le répertoire personnel de l'utilisateur root
(super-utilisateur). C'est un répertoire appelé /root
mais ce
n'est pas le répertoire racine (NDT: root directory en anglais d'où la
confusion chez nos voisins anglophones).
/home
C'est l'endroit où l'on place le répertoire personnel de tous les utilisateurs
normaux - c'est-à-dire tous sauf le root. Chaque répertoire personnel est
appelé du nom de l'utilisateur; par exemple /home/jane
. Si vous
utilisez un système de taille conséquente, comme pour une école ou une
entreprise, votre administrateur système a peut-être créé des répertoires
supplémentaires pour contenir les répertoires personnels: /home1
et /home2
par exemple. Dans d'autres systèmes, on peut apercevoir
un niveau supplémentaire de sous-répertoire :
/home/eleves/nomdutilisateur, /home/equipe/nomdutilisateur, etc...
Votre répertoire personnel est l'endroit où vous placez vos travaux personnels, votre courrier électronique et tous les autres documents, ainsi que vos fichiers de configurations personnelles. C'est votre « chez vous » dans le système...
/bin
Ce répertoire contient les « binaires » et les fichiers exécutables
indispensables au fonctionnement du système. Des exemples sont le shell
(bash
) et les commandes relatives aux fichiers comme
cp
.
/sbin
Ce répertoire contient les « binaires systèmes ». Ce sont les utilitaires que l'utilisateur root ou l'administrateur système auront à utiliser. Vous n'aurez probablement jamais à y avoir accès dans votre travail quotidien.
/usr
Ce répertoire contient beaucoup de fichiers susceptibles de vous intéresser.
Il a de nombreux sous-répertoires. /usr/bin
et
/usr/sbin
sont très proches de /bin
et
/sbin
à l'exception près que les fichiers y figurant ne sont pas
considérés comme « vitaux pour le système ».
Bien que non essentiel au bon fonctionnement de l'ordinateur, /usr
contient bien des applications très utiles pour travailler. Ainsi, dans
/usr
, vous trouverez les répertoires /usr/man
,
/usr/doc
et /usr/info
. Ils contiennent
respectivement les pages de manuel, la documentation et les pages info. Et
n'oubliez pas non plus /usr/games
!
/usr/local
Le système Debian n'installe rien dans ce répertoire. Vous devrez l'utiliser pour installer des logiciels que vous compilerez vous même ou tout logiciel non contenu dans un paquet Debian. Vous pouvez aussi l'installer dans votre répertoire personnel si vous êtes le seul à l'utiliser.
/etc
Ce répertoire contient l'ensemble des fichiers de configuration du système.
Lorsque vous désirez changer quelque chose au système qui impacte tous les
utilisateurs de votre ordinateur - comme votre connexion Internet ou bien un
changement de carte vidéo - vous aurez probablement à vous loguer en root et à
modifier un fichier dans /etc
.
/tmp
Vous trouverez ici les fichiers temporaires de votre système, la plupart d'entre eux créés par le système. Ce répertoire est généralement nettoyé régulièrement ou à chaque boot du système. Vous pouvez créer des fichiers ici mais gardez à l'esprit qu'ils peuvent être détruits automatiquement.
/var
Ce répertoire contient les fichiers « variables » que le système
change automatiquement. Par exemple, les courriels entrants sont stockés ici.
Le système garde une trace de ses actions ici. Il y a un grand nombre d'autres
fichiers engendrés automatiquement ici. Vous pouvez prêter attention au
contenu du répertoire de /var/log
où vous pourrez trouver des
messages d'erreurs qui peuvent vous aider à comprendre ce qui ne va pas dans
votre système en cas de défaillance.
Il y a évidemment bien d'autres répertoires dans votre système, bien trop d'ailleurs pour que l'on puisse tous les décrire ici.
Pour changer quelque chose, vous aurez certainement à vous contenter de votre
répertoire personnel et de /etc
. Sur un système Debian, il y a
rarement une occasion de changer quelque chose d'autre car tout est
automatiquement installé pour vous.
/etc
est utilisé pour configurer le système comme un tout. Vous
n'utiliserez votre propre répertoire personnel que pour configurer votre propre
environnement et stocker vos propres données. L'idée de base est de vous
confiner dans /home/votrenom
pour le travail quotidien et ainsi,
vous ne pourrez rien casser ailleurs. À l'occasion, vous vous loguerez en tant
que root pour paramétrer quelque chose mais seulement si c'est absolument
nécessaire. Bien-sûr, si vous utilisez Debian à l'école ou bien en entreprise
et que quelqu'un d'autre est l'administrateur système, vous n'aurez pas accès
au compte root et vous ne pourrez changer des choses que dans votre compte
personnel (ou dans les comptes où vous avez accès). Ceci limite ce que vous
pouvez faire avec le système.
gzip
Il est souvent bien pratique de réduire la taille d'un fichier - disons, pour
le télécharger plus rapidement, ou bien pour gagner de la place sur votre
disque dur. Le programme affecté à cette tâche est gzip
(GNU
zip). Voici comment il fonctionne:
$ cd; cp /etc/profile ./monfichier
Cela vous renvoie dans votre répertoire personnel et copie un fichier
arbitrairement choisi (/etc/profile
) dans votre répertoire courant
en le renommant monfichier
.
$ ls -l
Affiche le contenu du répertoire courant. Remarquez bien la taille de
monfichier
.
$ gzip monfichier
Ceci comprime monfichier
.
$ ls -l
Observez le résultat de cette commande: monfichier
s'appelle
maintenant monfichier.gz
. Il est aussi beaucoup plus petit.
$ gunzip monfichier.gz; ls -l
Ceci décomprime le fichier. Remarquez bien que monfichier
est
retourné dans son état d'origine. Et remarquez aussi que pour décomprimer, il
faut utiliser gunzip
et non gzip
.
$ rm monfichier
Utilisez cette commande pour effacer le fichier puisqu'on ne l'avait créé juste que pour expérimenter.
Il y a deux utilitaires pour rechercher un fichier: find
et
locate
. find
recherche vraiment les fichiers dans
leur état présent. locate
recherche dans un index engendré
automatiquement par le système chaque matin à 6h42 (c'est un cron
dont on trouvera une explication un peu plus loin dans le livre).
locate
ne sera jamais capable de trouver un fichier créé après la
génération de l'index. Bien-sûr, puisque locate
recherche dans un
index, il est beaucoup plus rapide - un peu comme rechercher dans l'index d'un
livre plutôt qu'effeuiller chaque page.
Pour comparer les deux façons de faire une recherche, on va supposer que l'on
ne se rappelle plus où est le fichier de configuration XF86Config
du serveur X.
$ locate XF86Config
Cela devrait être très rapide. Vous allez obtenir une liste de noms de fichier
contenant XF86Config
, quelque chose comme:
/etc/X11/XF86Config /usr/X11R6/lib/X11/XF86Config /usr/X11R6/lib/X11/XF86Config.eg /usr/X11R6/man/man5/XF86Config.5x.gz
Maintenant, essayez la commande find
:
$ find / -name XF86Config
Vous allez entendre une activité intense du disque dur, et cela va prendre un temps assez long. Le résultat devrait ressembler à:
/ect/X11/XF86Config /usr/X11R6:lib/X11/XF86Config find: /var/spool/cron/atjobs: Permission denied find: /var/spool/cron/atspool: Permission denied find: /var/lib/xdm/authdir: Permission denied
Remarquez que find
n'a trouvé que les fichiers appelés
exactement XF86Config
et non pas ceux contenant cette
chaîne de caractères. find
a aussi essayé de rechercher dans tous
les répertoires du système - y compris ceux dont vous n'avez pas les droits
d'accès. C'est la raison pour laquelle vous avez les messages Permission
denied
(Permission non accordée
).
Leur syntaxe aussi est différente. Avec find
, vous devez choisir
à partir de quel répertoire effectuer la recherche alors que
locate
choisit automatiquement le répertoire racine. Et vous
devez spécifiez votre recherche en utilisant l'option -name
. Vous
pouvez aussi rechercher des fichiers avec des tas d'autres critères, comme les
dates de modification ou les propriétaires. Pour utiliser find
dans une recherche de fichiers dont le nom contient XF86Config
, il
vous faut utiliser un motif de recherche:
$ find / -name '*XF86Config*'
Comme la plupart des outils en lignes de commandes, find
accepte
des motifs comme arguments.
De façon générale, find
est un outil beaucoup plus puissant et
locate
est un outil très rapide pour des recherches journalières.
L'intégralité des recherches possible prendrait un temps fou à expliquer. Pour
plus de détails, tapez info find
qui vous conduira au travers des
méandres des subtilités de find
et locate
.
Debian vous offre un utilitaire capable de deviner le contenu d'un fichier à votre place. Bien que cela ne soit pas à 100% sûr, vous pouvez utiliser cette commande pour explorer votre système.
$ file /bin/cp
Vous devriez avoir quelque chose comme ceci:
/bin/cp: ELF 32-bit LSB executable, Intel 80386, version 1, dynamically linked (uses shared libs), stripped
Si l'on retire les parties techniques, on peut dire que c'est un fichier exécutable pour machine Intel.
$ file /etc/init.d/boot
La commande précédente vous donne la réponse suivante:
/etc/init.d/boot: Bourne shell script text
ce qui veut dire que c'est un fichier texte contenant un script écrit en Bourne shell.
Plutôt que manipuler les fichiers à la main, vous pouvez utilisez un
gestionnaire de fichiers. Si vous manipulez de nombreux fichiers à la
fois, un gestionnaire de fichiers peut rendre votre travail plus efficace. Il
y a des gestionnaires de fichiers orienté texte, comme GNU Midnight
Commander (mc)
et un grand nombre de gestionnaires de fichiers pour X
Window (par exemple gmc
qui est la version X Window de GNU
Midnigt Commander
).
Décrire chacun d'entre est hors du propos de ce livre mais vous pouvez les essayer si la ligne de commande ne vous sied pas.
p.karatchentzeff@free.fr