ls 在设备上而不安装它

lam*_*oon 10 linux ls mount

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

# ls /dev/sda1
Run Code Online (Sandbox Code Playgroud)

msw*_*msw 11

您可以使用e2fsprogsdebugfs程序。尽管它的历史名称,它可以在 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
 …   
Run Code Online (Sandbox Code Playgroud)

其中“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
Run Code Online (Sandbox Code Playgroud)

我不能说我认为这种值得推荐的做法,但它会按照你的要求做。


pet*_*rph 2

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

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

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