È possibile eseguire ls
un dispositivo senza prima montarlo?
Qualcosa come questo:
# ls /dev/sda1
ls
.
È possibile eseguire ls
un dispositivo senza prima montarlo?
Qualcosa come questo:
# ls /dev/sda1
ls
.
Risposte:
Puoi usare il debugfs
programma di e2fsprogs . Nonostante il suo nome storico, funzionerà su filesystem ext2 / 3/4. L'utilizzo è semplice:
# 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
…
dove "ls -l" è un debugfs
comando specifico che agisce principalmente come ls -l
; non è possibile utilizzare alcun comando di shell arbitrario lì. Per impostazione predefinita, debugfs apre un'unità in modalità di sola lettura, quindi è relativamente sicura; per esempio provare questo su una partizione non ext2 / 3/4 fornisce solo una diagnostica:
# debugfs -R "ls -l" /dev/sda2
/dev/sda2: Bad magic number in super-block while opening filesystem
ls: Filesystem not open
Non posso dire di considerare questa pratica raccomandabile, ma farà ciò che mi chiedi.
L'intero punto di montare un filesystem è accedere ai suoi file. Quindi no, in generale, non è possibile accedere ai file di un filesystem senza montarlo.
Ci sono alcune utility che accedono direttamente a un file senza montarlo, come debugfs per filesystem ext2 / ext3 / ext4 e mtools per filesystem FAT.
Per ext2 / ext3 / ext4, anziché invocare il programma pericoloso e difficile da usare debugfs
, puoi elencare la sua ultima posizione di montaggio:
tune2fs -l /dev/sda1 | grep 'Last mounted'
Tuttavia, questo è utile solo se è stata registrata l'ultima posizione di montaggio.
La maggior parte dei tipi di filesystem supportano dando le etichette dei filesystem (es tune2fs -L foo
.). Quindi dai a tutti i tuoi filesystem un'etichetta unica. Quindi montare il filesystem per etichetta:
mount /dev/disks/by-label/foo /media/foo
o
mount LABEL=foo /media/foo
Risposta semplice: non puoi. ls
usa routine libc standard che si traducono in chiamate di sistema che sono servite dal driver del file system, quindi non è possibile usare ls
(o qualsiasi altra cosa usando quelle chiamate di sistema per quella materia) senza montare il file system.
Si potrebbe scrivere un'utilità che lo eluderebbe con una propria copia di alcune parti del driver del file system (tale cosa esiste, ad esempio, per la lettura dei file system Ext2 da Windows), ma ciò non è pratico.
Se il tuo problema è solo identificare le partizioni, probabilmente dovresti iniziare a usare GPT che ha spazio per i nomi delle partizioni (72 byte per partizione). Alcune soluzioni sovrastanti (ad esempio Linux MD o LVM) consentono anche la denominazione.
Come precedentemente descritto, il debugfs funziona bene.
debugfs -R "ls -l" /dev/sda1
Per NTFS, c'è ntfsls da ntfs-3g.
ntfsls /dev/sda2
Per FAT, c'è mdir, da mtools.
mdir -i /dev/sdc1
Per exFAT non sono sicuro però. Sembra che exfat-utils non includa strumenti simili a quelli sopra descritti. C'è dumpexfat però, ma non credo che fornirà le informazioni richieste.
Per scoprire maggiori dettagli sulle unità collegate, c'è lsblk.
lsblk
Personalmente preferisco questo e ho impostato un alias per questo:
alias lsblk="lsblk -o MODEL,TRAN,NAME,FSTYPE,LABEL,MOUNTPOINT,SIZE,MAJ:MIN"