[linux] Re: fuser in actie

Kees Theunissen theuniss op rijnh.nl
Di Jun 17 01:15:58 CEST 2008


On Mon, 16 Jun 2008, Geert Stappers wrote:

>Zo heel slecht was het expriment toch ook weer niet.
>
>Er waren wat verrassende resultaten:
>1) fuser ziet niet dat /store/TeX.iso een (loop mounted) device is.
>2) vi die geen ge-opende files had.
>
>punt 1 kan ik me wel voorstellen,
>/store/TeX.iso is eigenlijk een gewoon bestand.
>
>met punt 2 heb ik wat meer moeite mee,
>ik vermoed dat vi slimme dingen doet,
>op zijn minst zit er meer programmacode in vi dan ik heb uitgezocht.

Vi copieert de originele file naar een tijdelijk bestand (een 'hidden'
file met extentie .swp), en dat bestand blijft permanent geopend tijdens
de edit sessie. Het originele bestand wordt pas weer (eventjes) geopend
bij een 'write' opdracht.

Ik heb een 'vi /tmp/bla' opgestart. In een andere console zoek ik nu
de PID op van dat proces en ik kijk welke files dat proces open heeft:

  kees op lankhmar:~$ ps -ef | grep vi
  kees     17291  2758  0 00:07 tty4     00:00:00 vi /tmp/bla
  kees     17293  2755  0 00:08 tty1     00:00:00 grep vi

  kees op lankhmar:~$ ls -l /proc/17291/fd
  total 0
  lrwx------ 1 kees users 64 2008-06-17 00:08 0 -> /dev/vc/4
  lrwx------ 1 kees users 64 2008-06-17 00:08 1 -> /dev/vc/4
  lrwx------ 1 kees users 64 2008-06-17 00:08 2 -> /dev/vc/4
  lrwx------ 1 kees users 64 2008-06-17 00:08 4 -> /tmp/.bla.swp

De fd's 0, 1 en 2 (stdin, stdout en stderr) zijn geopend, zoals verwacht,
en zijn symlinks naar de VC waarin ik vi gestart heb.
Fd 3 is niet meer open. Deze fd is waarschijnlijk gebruikt geweest voor
het lezen van /tmp/bla, en is daarna weer gesloten.
Fd 4 (/tmp/.bla.swp) is het swap bestand van vi.
Vi probeert in eerste instantie de swap file aan te maken in de directory
van de originele file, zoals in bovenstaand voorbeeld.
Als de user geen schrijfrechten heeft in die directory dan wordt de
swapfile aangemaakt in de homedir van de user.
Een iso9660 filesysteem is per definitie readonly, dus vi zal nooit
een swapfile open hebben op een iso9660 filesysteem.

[ ... knip ... ]

>Om slimme code in vi uit de weg te gaan, heb ik een "open for read"
>geschreven. De source code er van is bijgesloten, compileer opdracht is
>  cc -o ofr ofr.c

Is dat niet een beetje overkill? In Linux (unix) zitten volgens mij
meer dan voldoende mogelijkheden om een bestand te openen en eventjes
open te houden.

  kees op lankhmar:~$ sleep 30 < /tmp/bla &
  [1] 17445
  kees op lankhmar:~$ fuser -m /tmp
  /tmp:                17445


Groeten,

Kees.

-- 
Kees Theunissen
F.O.M.-Instituut voor Plasmafysica Rijnhuizen, Nieuwegein
E-mail: theuniss op rijnh.nl,     Tel: 030-6096724,     Fax: 030-6031204



More information about the Linux mailing list