¿Es posible ejecutar ls
en un dispositivo sin montarlo primero?
Algo como esto:
# ls /dev/sda1
ls
.
¿Es posible ejecutar ls
en un dispositivo sin montarlo primero?
Algo como esto:
# ls /dev/sda1
ls
.
Respuestas:
Puedes usar el debugfs
programa de e2fsprogs . A pesar de su nombre histórico, funcionará en sistemas de archivos ext2 / 3/4. El uso es simple:
# debugfs -R "ls -l" /dev/sda6
2 40755 (2) 1001 1001 4096 17-Sep-2013 04:03 .
2 40755 (2) 1001 1001 4096 17-Sep-2013 04:03 ..
16 100644 (1) 1001 1001 9085 17-Sep-2013 04:03 avserver.conf
17 100644 (1) 1001 1001 2177 17-Sep-2013 04:03 bash.bashrc
26 100644 (1) 1001 1001 722 17-Sep-2013 04:03 crontab
…
donde "ls -l" es un debugfs
comando específico que actúa principalmente como ls -l
; no puede usar ningún comando de shell arbitrario allí. De forma predeterminada, debugfs abre una unidad en modo de solo lectura, por lo que es relativamente seguro; por ejemplo, intentar esto en una partición no ext2 / 3/4 solo da un diagnóstico:
# debugfs -R "ls -l" /dev/sda2
/dev/sda2: Bad magic number in super-block while opening filesystem
ls: Filesystem not open
No puedo decir que considero esta práctica recomendable, pero hará lo que me pidas.
El objetivo de montar un sistema de archivos es acceder a sus archivos. Entonces, no, en general, no puede acceder a los archivos de un sistema de archivos sin montarlo.
Hay algunas utilidades que acceden a un archivo directamente sin montaje, como debugfs para sistemas de archivos ext2 / ext3 / ext4 y mtools para sistemas de archivos FAT.
Para un ext2 / ext3 / ext4, en lugar de invocar el programa peligroso y difícil de usar debugfs
, puede enumerar su última ubicación de montaje:
tune2fs -l /dev/sda1 | grep 'Last mounted'
Sin embargo, esto solo es útil si se ha registrado la última ubicación de montaje.
La mayoría de los tipos de sistemas de archivos admiten dar etiquetas a los sistemas de archivos (por ejemplo tune2fs -L foo
) Así que dele a todos sus sistemas de archivos una etiqueta única. Luego monte el sistema de archivos por etiqueta:
mount /dev/disks/by-label/foo /media/foo
o
mount LABEL=foo /media/foo
Respuesta simple: no puedes. ls
usa rutinas libc estándar que se traducen en llamadas al sistema atendidas por el controlador del sistema de archivos, por lo tanto, no es posible usar ls
(o cualquier cosa que use esas llamadas del sistema) sin montar el sistema de archivos.
Puede escribir una utilidad que evite esto al tener su propia copia de algunas partes del controlador del sistema de archivos (tal cosa existe, por ejemplo, para leer sistemas de archivos Ext2 desde Windows), pero eso es poco práctico.
Si su problema es solo identificar las particiones, probablemente debería comenzar a usar GPT que tiene espacio para los nombres de las particiones (72 bytes por partición). Algunas soluciones superpuestas (Linux MD o LVM, por ejemplo) también permiten la denominación.
Como se describió anteriormente, debugfs funciona bien.
debugfs -R "ls -l" /dev/sda1
Para NTFS, hay ntfsls de ntfs-3g.
ntfsls /dev/sda2
Para FAT, hay mdir, de mtools.
mdir -i /dev/sdc1
Sin embargo, para exFAT no estoy seguro. Parece que exfat-utils no incluye ninguna herramienta similar a las descritas anteriormente. Sin embargo, hay dumpexfat, pero no creo que proporcione la información solicitada.
Para obtener más detalles sobre las unidades conectadas, hay lsblk.
lsblk
Personalmente, prefiero esto, y he establecido un alias para ello:
alias lsblk="lsblk -o MODEL,TRAN,NAME,FSTYPE,LABEL,MOUNTPOINT,SIZE,MAJ:MIN"