ls sur l'appareil sans le monter

9

Est-il possible de fonctionner lssur un appareil sans le monter au préalable?
Quelque chose comme ça:

# ls /dev/sda1
pamphlet
la source
Dans quel but?
dawud
Je ne pense pas. Vous auriez certainement besoin d'un outil en plus ls.
strugee
Pourquoi ne nous dites-vous pas ce que vous essayez de réaliser?
jasonwryan
1
pour ces moments, je veux monter un appareil, mais je ne me souviens pas si son sda1 / 2/3/4/5/6, etc. recherche
lampoon
Soit dit en passant: si vous avez une image d'un disque (pas une partition), vous pouvez voir ses fichiers testdisken exécutant la testdiskcommande avec un chemin de fichier image comme premier paramètre sur la ligne de commande.
Abbafei

Réponses:

11

Vous pouvez utiliser le debugfsprogramme 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 debugfscommande 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.

msw
la source
3

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
Gilles 'SO- arrête d'être méchant'
la source
2

Réponse simple: vous ne pouvez pas. lsutilise 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.

peterph
la source
1

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"
Mika Norén
la source