ls 在设备上而不安装它

ls 在设备上而不安装它

是否可以ls在不先安装的情况下在设备上运行?
像这样的东西:

# ls /dev/sda1

答案1

您可以使用以下debugfs程序e2fsprogs。尽管它的历史名称如此,但它可以在 ext2/3/4 文件系统上运行。用法很简单:

# 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

其中“ls -l”是一个debugfs特定命令,其作用主要类似于ls -l;你不能在那里使用任何任意 shell 命令。默认情况下,debugfs 以只读模式打开驱动器,因此相对安全;例如,在非 ext2/3/4 分区上尝试此操作只会给出诊断结果:

# debugfs -R "ls -l" /dev/sda2
/dev/sda2: Bad magic number in super-block while opening filesystem
ls: Filesystem not open

我不能说我认为这种做法值得推荐,但它会满足您的要求。

答案2

挂载文件系统的全部目的是访问其文件。所以,一般来说,如果不挂载文件系统,就无法访​​问文件系统的文件。

有一些实用程序可以直接访问文件而无需安装,例如调试文件对于 ext2/ext3/ext4 文件系统和工具箱对于 FAT 文件系统。

debugfs对于 ext2/ext3/ext4,您可以列出其最后的挂载位置,而不是调用危险且难以使用的程序:

tune2fs -l /dev/sda1 | grep 'Last mounted'

然而,这仅在记录了最后的安装位置时才有用。

大多数文件系统类型支持给文件系统标签(例如tune2fs -L foo)。因此,给所有文件系统一个唯一的标签。然后通过标签挂载文件系统:

mount /dev/disks/by-label/foo /media/foo

或者

mount LABEL=foo /media/foo

答案3

如前所述,debugfs 运行良好。

debugfs -R "ls -l" /dev/sda1

对于 NTFS,有来自 ntfs-3g 的 ntfsls。

ntfsls /dev/sda2

对于 FAT,有来自 mtools 的 mdir。

mdir -i /dev/sdc1

对于 exFAT 我不确定。似乎 exfat-utils 不包含任何类似于上述工具的工具。虽然有 dumpexfat,但我认为它不会提供所需的信息。

要了解有关连接驱动器的更多详细信息,请使用 lsblk。

lsblk

我个人更喜欢这个,并为其设置了一个别名:

alias lsblk="lsblk -o MODEL,TRAN,NAME,FSTYPE,LABEL,MOUNTPOINT,SIZE,MAJ:MIN"

答案4

简单的回答:你不能。使用标准 libc 例程,该例程转换为由文件系统驱动程序提供的系统调用,因此在不安装文件系统的情况下ls无法使用(或任何使用这些系统调用的内容)。ls

您可以编写一个实用程序,通过拥有文件系统驱动程序某些部分的自己的副本(例如,用于从 Windows 读取 Ext2 文件系统)的副本来规避此问题,但这是相当不切实际的。

如果您的问题只是识别分区,您可能应该开始使用GPT其中有分区名称空间(每个分区 72 字节)。一些覆盖解决方案(例如 Linux MD 或 LVM)也允许命名。

相关内容