Extraire les points de montage (bind)

Résolu/Fermé
santiago69 Messages postés 477 Date d'inscription mercredi 7 mars 2001 Statut Membre Dernière intervention 12 septembre 2016 - 25 juil. 2008 à 10:02
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 25 juil. 2008 à 22:49
Salut a tous,
Je voudrais lancer des commandes sur tous les repertoires qui sont en fait des points de montage.
Par exemple, j'ai monte /www dans /home/santiago/www
J'ai trouve une commande pour afficher la liste des points de montages. C'est la seule syntaxe que j'ai trouve qui n'affiche aucun espaces dans les chemins d'acces (il sont remplaces par \040) et permet donc a coup sur (grace a l'espace) d'extraire le point monte et son point de montage :
$ cat /etc/mtab
/dev/sda1 / ext3 rw,errors=remount-ro 0 0
tmpfs /lib/init/rw tmpfs rw,nosuid,mode=0755 0 0
proc /proc proc rw,noexec,nosuid,nodev 0 0
sysfs /sys sysfs rw,noexec,nosuid,nodev 0 0
udev /dev tmpfs rw,mode=0755 0 0
tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0
devpts /dev/pts devpts rw,noexec,nosuid,gid=5,mode=620 0 0
/dev/sda2 /home ext3 rw 0 0
/var/www /home/santiago/www none rw,bind 0 0
/home/santiago/rep /home/santiago/new\040rep none rw,bind 0 0

J'ai ameliore la commande pour n'obtenir que les points de montage de mon repertoire. On cherche un espace avant le chemin afin de recuperer les points de montages et non pas les points montes.
$ grep ' /home/santiago/' /etc/mtab
/var/www /home/santiago/www none rw,bind 0 0
/home/santiago/rep /home/santiago/new\040rep none rw,bind 0 0

J'essaye maintenant de faire une boucle sur tous ces repertoires. J'ai pense que la commande suivante pourrait fonctionner :
$ for line in $( grep ' /home/santiago/' /etc/mtab ); do
> echo $line
> done
/var/www
/home/santiago/www
none
rw,bind
0
0
/home/santiago/rep
/home/santiago/new\040rep
none
rw,bind
0
0

Le probleme est que contrairement a mes attentes, for decoupe le fichier non pas en lignes mais en mots.
Est-ce-que quelqu'un peut m'aider a lister les lignes et dans ces lignes a extraire le 2e mot (le point de montage) ?
Dans l'exemple suivant, les chaines que je veux recuperer sont soulignes :
$ grep ' /home/santiago/' /etc/mtab
/var/www /home/santiago/www none rw,bind 0 0
         ^^^^^^^^^^^^^^^^^^
/home/santiago/rep /home/santiago/new\040rep none rw,bind 0 0
                   ^^^^^^^^^^^^^^^^^^^^^^^^^


Merci d'avance
Santiago
A voir également:

4 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
25 juil. 2008 à 10:18
Salut,

tu peux faire comme ça
grep -E '^/' /etc/mtab | grep santiago
--
106485010510997108
0
l'instruction for ... in ... considère que les élément à parcourir sont partagés par des espaces il est normal que tu obtienent ce résultat. après avoir greppé ton fichier mtab, il faut que tu extraye la 1er collone de chaque ligne.
L'utilitaire awk permet ce genre de manipulation :
je pense que la commande
awk '{print $1}' /etc/mtab
permettra de faire cela.
0
santiago69 Messages postés 477 Date d'inscription mercredi 7 mars 2001 Statut Membre Dernière intervention 12 septembre 2016 209
25 juil. 2008 à 10:54
Merci lami20j,
En fait ta commande ne me donne rien de mieux que la mienne.

Merci iluvatar,
C'est pile ce que je veux, sauf que c'est la deuxieme colonne dont j'ai besoin. J'ai donc ecris la commande suivante :
$ grep ' /home/santiago/' /etc/mtab | awk '{print $2}'
/home/santiago/www
/home/santiago/new\040rep


Bonne journee a tous
Santiago
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
25 juil. 2008 à 10:58
Ah, oui ;-)
c'est parce que j'ai mal compris

je voulais dire
grep -E '/home/santiago' /etc/mtab | cut -d' ' -f2
P.S. Je préfére aussi la version avec awk ;-)
0
santiago69 Messages postés 477 Date d'inscription mercredi 7 mars 2001 Statut Membre Dernière intervention 12 septembre 2016 209
25 juil. 2008 à 16:23
Merci lami20j,
Mais je suis d'un naturel tres curieux :
1) Pourquoi prefere tu la version awk ? Ta proposition aussi repond parfaitement a mes besoins
2) pourquoi mettre -E apres grep ?

C'est comme ca juste par curiosite. Mais ca me plairait de savoir pourquoi ceux qui sont experimentes choisissent une syntaxe plutot qu'une autre.
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
25 juil. 2008 à 22:49
Salut,

1) Pourquoi prefere tu la version awk ? Ta proposition aussi repond parfaitement a mes besoins

En ce cas c'est tout simplement histoire de gout ;-)
En fait, à vrai dire la version avec cut est plus courte, et comme je suis paresseux, je devrais préféré celle avec cut
lami20j@debian:~$ echo "awk '{print $2}'" | wc -c
15
lami20j@debian:~$ echo "cut -d' ' -f2" | wc -c
14
lami20j@debian:~$
La diférence est que cut c'est une simple commande qui permet de couper une ligne et awk est à la fois une commande ainsi qu'un langage ;-)


2) pourquoi mettre -E apres grep ?
-E permet d'utiliser le mode étendu de grep pour les regex
en fait grep -E est équivalent à egrep

Dans ce cas -E est inutile, je l'ai utilisé, tout simplement puisque je n'avais pas des moyens de tester, donc pour
la sûreté (j'étais en train de penser à plusieurs trucs, et pour ne pas retourner au début, je l'ai mis tout simplement)

0