我的问题是在我的系统上解码该命令的输出(与 USB 密钥关联的设备文件在哪里)。
下面我将展示该命令的输出,其中设备文件是一个使用文件系统格式化的分区,而设备是一个使用文件系统格式化的分区。file -s /dev/sdX
/dev/sdX
file -s /dev/sdX
/dev/sda1
FAT32
/dev/sdb
NTFS
文件系统file
命令的输出FAT32
对于FAT32
文件系统,该命令的输出file
是:
> file -s /dev/sda1
/dev/sda1: DOS/MBR boot sector, code offset 0x58+2, OEM-ID "mkfs.fat", sectors/cluster 8, Media descriptor 0xf8, sectors/track 62, heads 31, hidden sectors 2048, sectors 1966080 (volumes > 32 MB), FAT (32 bit), sectors/FAT 1920, reserved 0x1, serial number 0x4ba3ff5b, unlabeled
输出中存在的信息, FAT (32 bit), sectors/FAT 1920,
足以说明文件系统类型是 FAT32,但在下一段中我将展示在文件系统的情况下该字符串FAT
也出现在命令的输出中。file
NTFS
文件系统file
命令的输出NTFS
对于NTFS
文件系统,该命令的输出file
为:
> file -s /dev/sdb
/dev/sdb: DOS/MBR boot sector, code offset 0x52+2, OEM-ID "NTFS ", sectors/cluster 8, Media descriptor 0xf8, sectors/track 63, heads 255, dos < 4.0 BootSector (0x0), FAT (1Y bit by descriptor); NTFS, sectors/track 63, physical drive 0x80, sectors 15654911, $MFT start cluster 786432, $MFTMirror start cluster 2, bytes/RecordSegment 2^(-1*246), clusters/index block 1, serial number 030fcd5a9fcd56a1c; contains bootstrap BOOTMGR
此输出中不仅存在信息; NTFS,
,还存在字符串FAT
。
问题
从命令的先前输出中file -s
,如何确定两个分区的文件系统?
编辑我添加了分区和分区的命令
的输出。file -s
exfat
ext4
file
的输出exfat
> file -s /dev/sdf
/dev/sdf: DOS/MBR boot sector
在这种情况下,exfat
输出中不存在。
file
的输出ext4
file -s /dev/sdb1
/dev/sdb1: Linux rev 1.0 ext4 filesystem data, UUID=38bc3d5b-381e-4f19-8640-c77d9483882b (needs journal recovery) (extents) (64bit) (large files) (huge files)
在这种情况下,存在信息ext4 filesystem data,
。
在这 4 个示例(FAT32、NTFS、EXFAT、EXT4)中,该命令的输出file
对于不同的文件系统类型显得非常不同,因此很难找到一个简单的规则来通过此输出来判断文件系统类型。
就你展示的具体情况而言,这相对简单。是的,
FAT
可以同时出现在两者中,但NTFS
只能出现在其中一种。所以只需做一些简单的操作就足够了,例如:当然,这种方法有明显的局限性,比如它会将所有非 NTFS 分区标记为 FAT32。好的,那就使用
if/elif
以下构造:不过,这一切仍然非常脆弱。为什么不使用直接报告文件系统类型的工具呢?例如,在现代 Linux 系统上,你应该使用
lsblk
which ,结合-n
(no headers) 和-o FSTYPE
,只返回文件系统类型。例如,在我的系统上,我有一个包含 6 个分区的 NVMe SSD:如果我要求一个具体的:
如果我想看 FAT32 的:
与远没有那么直接有用的输出
file
(顺便说一下,它需要sudo
与 不同lsblk
)相比:(我传递上述内容
fold
只是为了避免此处的水平滚动。)因此,
lsblk
对于一般情况,您所需要的只是:然后您将在变量中拥有设备的文件系统类型
$fstype
。一般情况下,不可能为块设备分配单一、唯一的文件系统类型,原因有二:
鉴于上述情况,我们无法
file -s
根据 Linux命令或任何其他命令的输出确定分区的文件系统类型,因为分区的文件系统类型是一个未定义的概念。一个分区可能同时包含多个文件系统,或者根本没有文件系统。