Est-il possible de fonctionner ls
sur un appareil sans le monter au préalable?
Quelque chose comme ça:
# ls /dev/sda1
ls
.
Est-il possible de fonctionner ls
sur un appareil sans le monter au préalable?
Quelque chose comme ça:
# ls /dev/sda1
ls
.
Réponses:
Vous pouvez utiliser le debugfs
programme de e2fsprogs . Malgré son nom historique, il fonctionnera sur les systèmes de fichiers ext2 / 3/4. L'utilisation est 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
…
où "ls -l" est une debugfs
commande spécifique qui agit principalement comme ls -l
; vous ne pouvez pas y utiliser de commande shell arbitraire. Par défaut, debugfs ouvre un lecteur en mode lecture seule, ce qui est relativement sûr; par exemple, essayer ceci sur une partition non ext2 / 3/4 donne juste un diagnostic:
# debugfs -R "ls -l" /dev/sda2
/dev/sda2: Bad magic number in super-block while opening filesystem
ls: Filesystem not open
Je ne peux pas dire que je considère cette pratique recommandable, mais elle fera ce que vous demandez.
L'intérêt de monter un système de fichiers est d'accéder à ses fichiers. Donc non, en général, vous ne pouvez pas accéder aux fichiers d'un système de fichiers sans le monter.
Il existe quelques utilitaires qui accèdent directement à un fichier sans montage, tels que debugfs pour les systèmes de fichiers ext2 / ext3 / ext4 et mtools pour les systèmes de fichiers FAT.
Pour un ext2 / ext3 / ext4, plutôt que d'appeler le programme dangereux et difficile à utiliser debugfs
, vous pouvez lister son dernier emplacement de montage:
tune2fs -l /dev/sda1 | grep 'Last mounted'
Cependant, cela n'est utile que si le dernier emplacement de montage a été enregistré.
La plupart des types de systèmes de fichiers prennent en charge l'attribution d'étiquettes aux systèmes de fichiers (par exemple tune2fs -L foo
). Donnez donc à tous vos systèmes de fichiers une étiquette unique. Montez ensuite le système de fichiers par étiquette:
mount /dev/disks/by-label/foo /media/foo
ou
mount LABEL=foo /media/foo
Réponse simple: vous ne pouvez pas. ls
utilise des routines libc standard qui se traduisent par des appels système qui sont servis par le pilote du système de fichiers, il n'est donc pas possible d'utiliser ls
(ou quoi que ce soit utilisant ces appels système d'ailleurs) sans monter le système de fichiers.
Vous pouvez écrire un utilitaire qui contournerait cela en ayant sa propre copie de certaines parties du pilote du système de fichiers (une telle chose existe par exemple pour lire les systèmes de fichiers Ext2 à partir de Windows), mais cela n'est pas pratique.
Si votre problème est simplement d'identifier les partitions, vous devriez probablement commencer à utiliser GPT qui a de l'espace pour les noms de partition (72 octets par partition). Certaines solutions sus-jacentes (Linux MD ou LVM par exemple) permettent également de nommer.
Comme décrit précédemment, debugfs fonctionne bien.
debugfs -R "ls -l" /dev/sda1
Pour NTFS, il y a ntfsls de ntfs-3g.
ntfsls /dev/sda2
Pour FAT, il y a mdir, de mtools.
mdir -i /dev/sdc1
Pour exFAT, je ne suis pas sûr cependant. Semble exfat-utils ne comprend aucun outil similaire à ceux décrits ci-dessus. Il existe cependant du dumpexfat, mais je ne pense pas qu'il fournira les informations demandées.
Pour en savoir plus sur les disques connectés, il y a lsblk.
lsblk
Personnellement, je préfère cela, et j'ai défini un alias pour cela:
alias lsblk="lsblk -o MODEL,TRAN,NAME,FSTYPE,LABEL,MOUNTPOINT,SIZE,MAJ:MIN"