是否可以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)也允许命名。