Unix / Mac [bash / c api]: detecta si una ruta determinada apunta a un archivo en un dispositivo extraíble

0

¿Existe un comando * nix o C api que indique el tipo de dispositivo de almacenamiento que recibe la ruta al archivo (resolución de montajes, enlaces simbólicos, etc.)? Necesito averiguar si el archivo se encuentra en un dispositivo extraíble.

ak0
fuente

Respuestas:

1

No sé si encontrar es suficiente para revelar el dispositivo de almacenamiento:

find /path/to/your/file.xml -printf "%F"

de la página del manual:

 %F     Type of the filesystem the file is on; this value can be used for -fstype.

Otra idea es 'stat'

stat /home/stefan/.shosts  
  File: `/home/stefan/.shosts'
  Size: 12          Blocks: 8          IO Block: 4096   regular file
Device: 807h/2055d  Inode: 89647       Links: 1
Access: (0600/-rw-------)  Uid: ( 1000/  stefan)   Gid: ( 1000/  stefan)
Access: 2011-04-11 10:24:21.000000000 +0200
Modify: 2011-03-30 14:45:29.000000000 +0200
Change: 2011-03-30 14:46:03.000000000 +0200

Hay una línea 'Dispositivo:' pero no sé qué hacer al respecto. Tal vez te enteres?

user unknown
fuente
1
Dispositivo: es un entero de 16 bits. Los 8 bits superiores son el dispositivo principal y los 8 bits inferiores son el dispositivo menor. Estos pueden compararse con los números mayor / menor en los nodos en / dev para encontrar el nombre del dispositivo en el que se encuentra el archivo.
Majenko
@Matt: en Linux, el número mayoritario es de 12 bits y el menor es de 20 bits.
grawity
@grawity No en mi Linux no lo es
Majenko
@Matt: bueno, acabo de hacerlo mknod foo c 4095 1048575 en un kernel del año pasado (2.6.32-linode). No se puede hablar por personas atrapadas con 2.4, por supuesto.
grawity
@grawity que bien puede ser, pero la entrada Dispositivo: en stat todavía es de 16 bits. stat [0] & gt; & gt; 8 = mayor. stat [0] & amp; 0xFF = menor. De lo contrario, el dispositivo 2055 (como en el ejemplo anterior) sería mayor 0 menor 2055 ... no es correcto, ¿verdad? Linux puede ser capaz de tener el dispositivo mayor y los menores en partes más grandes, pero no creo que pueda tener un dispositivo de bloqueo sobre 255 menor.
Majenko
1

Algunas implementaciones de * nix pueden tener una herramienta genial, pero no sería demasiado difícil usar la salida de mount (1) para correlacionar un archivo y su sistema de archivos:

mfe@inker:/home/mfe$ mount
...
/media/WINXP_PRO_SP1 on /dev/dsk/c4t0d0s2 read only/nosetuid/nodevices/noglobal/maplcase/joliet/traildot/dev=14c0002 on Thu Apr  7 07:39:29 2011

Dejando a un lado el nombre del montaje, cualquier archivo que encuentre en / media / WINXP_PRO_SP1 debe estar en el DVD-ROM.

mfe
fuente
Sólo una advertencia: mount(1) La salida está destinada a los humanos. Hacer no analizarlo Utilizar /proc/self/mounts o /proc/self/mountinfo Si la detección se va a poner en un script.
grawity
Ah. No tenemos esa característica en Solaris.
mfe
Todavia hay /etc/mtab, que utiliza el mismo formato que /proc/self/mounts.
grawity
1
@grawity - / etc / mnttab, estoy seguro de que quisiste decir.
mfe
1

Si hal está instalado, podría por ejemplo raspar lshal de salida.

plco
fuente