Page suivante Page précédente Table des matières

1. Trucs et astuces

1.1 Problèmes avec le système de fichiers vfat

J'ai toujours des problèmes avec les permissions d'écriture pour les utilisateurs lors du montage de systèmes de fichiers vfat/dos sur ma machine Linux. J'utilise la Red Hat 5.1 avec un noyau 2.0.34. Quelqu'un sait-il ce qui ne va pas ?

Première solution :

Voici la ligne que j'ai mise dans /etc/fstab :

 
/dev/hda1   /mnt/win95  vfat  umask=000,auto  1  1

L'astuce est dans le positionnement d'umask.

Deuxième solution :

J'avais le même problème. Voici ce que j'ai mis dans mon /etc/fstab :

 
/dev/hda1  /dos  vfat   user,noauto 0  0

Je ne souhaite pas monter systématiquement ma partition /dos car je ne veux pas que ses fichiers soient pris en compte dans la base de données utilisée par locate. Mettre user pour cette partition fait que tout le monde peux la monter.

Troisième solution :

Mon fichier /etc/fstab contient cette ligne :

 
/dev/hda4     /f:  vfat    defaults,umask=007,gid=101        1 1

Cela monte mon répertoire dos comme /f: (pour que cela corresponde à ce que j'ai sous NT). root, ou tout utilisateur du groupe 101 peuvent le lire ou y écrire.

Pour donner les permissions à tout le monde, changez la ligne et mettez :

 
 defaults,umask=000 

1.2 Monter des partitions DOS sous Linux

Afin d'octroyer des permissions à vos partitions DOS de façon sûre, faites ce qui suit.

Remarque : dans les exemples qui suivent, l'user id (63) et le group id (63) dos ont été choisis afin de ne pas être identiques à d'autres user id et group id présents dans /etc/passwd ou /etc/group.

Cette solution fonctionne avec Red Hat 5.1, vous devrez peut-être la modifier un peu si vous utilisez une autre distribution.

  1. Créez un utilisateur dos, non autorisé à se logger, en ajoutant la ligne suivante dans /etc/passwd :
     
    dos:*:63:63:MSDOS Accessor:/dos:
    
  2. Créez le groupe dos et ajoutez des utilisateurs à ce groupe. Dans l'exemple suivant, root et ejy appartiennent au groupe dos. Pour ce faire, ajoutez une ligne comme celle-ci dans /etc/group :
     
    dos::63:root,ejy 
    
  3. Ajoutez la ligne suivante (adaptée à votre système) à /etc/fstab :
    /dev/hda1  /C      vfat    uid=63,gid=63,umask=007 0 0
    
    Bien sûr, vous devez d'abord localiser vos partitions DOS. Vous pouvez le faire sous le compte root à l'aide des commandes suivantes :
     
    /sbin/fdisk -l
    df
    cat /etc/fstab
    
    La commande fdisk -l énumère tous les disques disponibles. df montre quels sont ceux qui sont montés et leurs occupations respectives. cat /etc/fstab affiche tous les périphériques montables. Les partitions restantes sont les partitions étendues, une sorte d'enveloppe de partitions, et les partitions allouées à d'autres systèmes d'exploitation que vous ne souhaitez pas monter.

  4. Créez un point de montage pour votre disque DOS à l'aide de la commande effectuée sous le compte root :
     
    mkdir /C
    chown dos:dos /C 
    
    De cette façon, le disque C: est monté sur /C au démarrage. Seuls root et ejy peuvent le lire et y écrire. Notez que vous pouvez aussi mettre vfat à la place de msdos dans /etc/fstab afin de gérer les partitions vfat16 (et vfat32 pour le noyau 2.0.34 et supérieurs).

1.3 Signatures aléatoires

Pour avoir une signature différente à chaque fois que vous envoyez un courrier :

Créez un sous-répertoire ~/.signatures et copiez-y votre fichier .signature sous un nom visible. Supprimez le fichier ~/.signature et remplacez-le par un tube à l'aide de la commande :

mkfifo ~/.signature

Créez un script qui effectue un simple cat de chacun des fichiers du répertoire ~/.signatures dans le tube ~/.signature :

#!/bin/sh
while true
do
  for SIGNATURE in ${HOME}/.signatures/*
  do
  # Cat each file out to the .signature and throw away any errors.

    cat ${SIGNATURE} > ${HOME}/.signature 2> /dev/null

    # This sleep seems to be required for Netscape to work properly
    # I think buffering on the filesystem can cause multiple signatures
    # to be read otherwise. I think the sleep allows Netscape to see
    # the End Of File.

    sleep 1
 done
done

Faites en sorte de lancer ce script en arrière-plan à chaque fois que vous vous connectez au système (pour cela, lancez-le de votre fichier profile ou xsession). Ajoutez d'autres entrées à votre répertoire ~/.signatures et elles seront automatiquement utilisées dans vos courriers.

Problèmes éventuels :

Une signature peut bloquer le tube. S'il n'y a aucun processus qui alimente le tube en signatures, tous les programmes ouvrant le tube peuvent se retrouver bloqués jusqu'à ce que quelque chose soit écrit.

1.4 Création du programme bzgrep

Si vous avez déjà utilisé zgrep avec des fichiers textes compressés par gzip, vous vous êtes sûrement rendu compte qu'il est très pratique. zgrep vous permet de faire des recherches d'expressions rationnelles dans un fichier texte, qu'il soit ou non compressé par gzip. Par exemple, un répertoire peut correspondre à ce qui suit :

 
testing > ls -al
total 2086
drwxrwxr-x   2 ksiew    ksiew        1024 Oct 18 11:07 .
drwxr-xr-x  24 ksiew    ksiew        2048 Oct 18 11:00 ..
-rwxrwxr-x   1 ksiew    ksiew     1363115 Oct 18 11:01 cortes.txt
-rwxrwxr-x   1 ksiew    ksiew      172860 Oct 18 11:01 lost_world_10.txt.gz
-rwxrwxr-x   1 ksiew    ksiew      582867 Oct 18 11:00 moon10a.txt

Et, si vous recherchez le mot "lune", faire :

testing > zgrep -l lune *
cortes.txt
lost_world_10.txt.gz
moon10a.txt

Celà vous informe que "lune" se trouve dans ces trois fichiers.

Maintenant, si vous compressez un fichier texte à l'aide de bzip2, vous aurez un problème :

testing > bzip2 cortes.txt 
testing > ls -al
total 1098
drwxrwxr-x   2 ksiew    ksiew        1024 Oct 18 11:12 .
drwxr-xr-x  24 ksiew    ksiew        2048 Oct 18 11:12 ..
-rwxrwxr-x   1 ksiew    ksiew      355431 Oct 18 11:01 cortes.txt.bz2
-rwxrwxr-x   1 ksiew    ksiew      172860 Oct 18 11:01 lost_world_10.txt.gz
-rwxrwxr-x   1 ksiew    ksiew      582867 Oct 18 11:00 moon10a.txt

testing > zgrep -l lune *
lost_world_10.txt.gz
moon10a.txt

zgrep ne reconnaît plus le fichier cortes.txt.bz2 comme étant un fichier compressé.

Nous avons donc besoin d'un nouveau programme bzgrep qui puisse reconnaître les fichiers textes compressés avec bzip2.

La meilleure façon de créer ce fichier consiste à modifier le fichier zgrep existant.

testing > locate zgrep
/usr/bin/zgrep
/usr/man/man1/zgrep.1

testing > su
password: opensesame
# cp /usr/bin/zgrep /usr/local/bin/bzgrep

Le fichier bzgrep est une copie du fichier zgrep qui contient ces lignes :

Nous ne pouvons pas changer les dernières lignes en ce qui suit :

res=0
for i do
  if test $list -eq 1; then
    bzip2 -cdf "$i" | $grep $opt "$pat" > /dev/null && echo $i
    r=$?
  elif test $# -eq 1 -o $silent -eq 1; then
    bzip2 -cdf "$i" | $grep $opt "$pat"
    r=$?
  else
    bzip2 -cdf "$i" | $grep $opt "$pat" | sed "s|^|${i}:|"
    r=$?
  fi
  test "$r" -ne 0 && res="$r"
done
exit $res

car bzgrep serait alors un programme pouvant gérer les fichiers textes compressés avec bzip2, MAIS il y aurait un problème.

bzgrep NE reconnaîtrait PAS les fichiers textes ordinaires ou compressés avec gzip. C'est un gros problème ! Il faudrait alors compresser tous les fichiers textes avec bzip2 pour utiliser bzgrep.

Heureusement, il y a toujours une solution sous Linux. Tout ce qu'il nous reste à faire est de le modifier pour qu'il sache quel est le programme de décompression à utiliser et pour qu'il puisse lancer soit gzip -cdfq soit bzip2 -cdf.

Changeons donc les dernières lignes pour qu'elles ressemblent à ça :

res=0
for i do
  case "$i" in

  *.bz2 )
      if test $list -eq 1; then
        bzip2 -cdf "$i" | $grep $opt "$pat" > /dev/null && echo $i
        r=$?
      elif test $# -eq 1 -o $silent -eq 1; then
        bzip2 -cdf "$i" | $grep $opt "$pat"
        r=$?
      else
        bzip2 -cdf "$i" | $grep $opt "$pat" | sed "s|^|${i}:|" 
        r=$?
      fi ;;

  * )
      if test $list -eq 1; then
        gzip -cdfq "$i" | $grep $opt "$pat" > /dev/null && echo $i
        r=$?
      elif test $# -eq 1 -o $silent -eq 1; then
        gzip -cdfq "$i" | $grep $opt "$pat"
        r=$?
      else
        gzip -cdfq "$i" | $grep $opt "$pat" | sed "s|^|${i}:|" 
        r=$?
      fi ;;
  esac
  test "$r" -ne 0 && res="$r" 
done
exit $res

Et nous avons enfin un programme bzgrep qui fonctionne.


Adaptation française: Eric Jacoboni


Page suivante Page précédente Table des matières