可能重复:从脚本中查找分区的文件系统如何通过终端显示文件系统类型?




我正在寻找一个命令,该命令产生的文件系统类型为mount将使用/检测该文件系统类型,而不实际安装它。它也应该工作例如适用于LUKS加密设备(其中file -s产生“ LUKS加密文件”而不是“ crypto_LUKS”)。当然,还有比解析fsck -N /dev/whatever的输出更方便的方法(根据相应fsck.TYPE的存在,可以使用stderr)?

评论

@StephaneChazelas不是重复的,df读取装载表,并且不显示卸载的表。

#1 楼

有多种获取此信息的方法。它们中的大多数都需要您解析另一个命令的输出。



运行# fdisk /dev/sdX -l以获得文件系统结构的基本概念。输出是这样的:

Disk /dev/sda: 320.1 GB, 320072933376 bytes, 625142448 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x9f7685a8

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1              63      289169      144553+  83  Linux
/dev/sda2          289170   459121634   229416232+  83  Linux
/dev/sda3       459121635   461129759     1004062+  82  Linux swap / Solaris
/dev/sda4   *   461129760   625142447    82006344    7  HPFS/NTFS/exFAT


但这只会告诉您分区类型。


还可以使用# blkid获得以下输出:输出,您可以为以下输出运行# parted /dev/sdX -l

/dev/sda1: LABEL="boot" UUID="aa84c5a8-6408-4952-b577-578f2a67af86" TYPE="ext2" 
/dev/sda2: LABEL="root" UUID="a430e0ef-fd35-432f-8b9a-75a49b89ad8a" TYPE="ext4" 
/dev/sda3: LABEL="swap" UUID="e388806a-dc27-4f4e-a136-3d1ff4e53962" TYPE="swap" 
/dev/sda4: UUID="088E027A8E026114" TYPE="ntfs" 



$ df -T。这是另一个不需要超级用户特权即可执行的命令。但是,这将报告每个安装点

Model: ATA WDC WD3200BEVT-7 (scsi)
Disk /dev/sda: 320GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End    Size    Type     File system     Flags
 1      32.3kB  148MB  148MB   primary  ext2
 2      148MB   235GB  235GB   primary  ext4
 3      235GB   236GB  1028MB  primary  linux-swap(v1)
 4      236GB   320GB  84.0GB  primary  ntfs            boot



另一个方便的命令是# file -sL /dev/sdXY。不利之处在于它不适用于完整的块设备。需要传递确切的设备。输出非常整洁:

Filesystem     Type     1K-blocks     Used Available Use% Mounted on
rootfs         rootfs   225815276 99381340 114963128  47% /
dev            devtmpfs   1538396        0   1538396   0% /dev
run            tmpfs      1541260      416   1540844   1% /run
/dev/sda2      ext4     225815276 99381340 114963128  47% /
tmpfs          tmpfs      1541260      360   1540900   1% /dev/shm
tmpfs          tmpfs      1541260        0   1541260   0% /sys/fs/cgroup
tmpfs          tmpfs      1541260      900   1540360   1% /tmp
/dev/sda1      ext2        139985    30386    102372  23% /boot
/dev/sda4      fuseblk   82006340 79676036   2330304  98% /mnt


所有这些将始终输出到stdout。您可以根据需要在脚本中解析它们。

评论


(eval $(blkid $ DEV | awk'{print $ 3}'); echo $ TYPE)可以,谢谢! (仅当TYPE已在其他地方使用并且不得更改时,才需要使用外部括号)

– Tobias Kienzler
2012年11月1日在16:34



df -T会为看上去的任何循环设备要求tmpfs,并且fdisk -l应用于分区本身时似乎不会列出类型,而parted会为我和设备忽略该设备-s会产生错误的加密luks格式设备。但是,即使对于循环设备或图像文件本身,blkid也可以完美地工作

– Tobias Kienzler
2012年11月1日在16:42



该行为是df -T和fdisk -l所期望的。但是,我不明白parted如何忽略完整的块设备。

–darnir
2012年11月1日在16:48



可能是由于我尝试在linux上运行它(这是Buffalo LinkStation NAS设备上的自定义发行版),甚至更好的解决方案:blkid -o value -s TYPE $ DEV

– Tobias Kienzler
2012年11月2日,7:02

#lsblk -f至少还有助于返回每个已安装或已卸载的块设备。

–穆罕默德·拉菲(Mohammad Rafiee)
15年3月26日在10:38