10个基本且功能强大的命令,用于检查Linux/Unix中的文件系统类型

时间:2020-01-09 10:37:42  来源:igfitidea点击:

任何操作系统都必须能够访问和管理存储设备上的文件;但是,文件在存储设备上的组织方式实际上是由底层文件系统设置的。对于Linux和Unix,存在各种文件系统类型,因此在本文中,我将共享"多种命令和方法来检查文件系统类型"。

在尝试确定和检查文件系统类型之前,我们必须熟悉术语"文件系统"。

什么是文件系统?

我们可能知道,或者至少可以猜测,硬盘驱动器不是单片实体,数据只是随意散布在硬盘驱动器周围。硬盘分为扇区和群集。任何类型的数据都被组织到文件中。无论是文档,图像,电子表格,还是可执行程序,它都是文件。该文件可以存储在一个或者多个群集中。

文件系统负责组织,查找和使用硬盘驱动器上的那些文件。任何文件系统都必须解决一些问题才能有效地处理文件。

发生第一个问题是因为许多文件大于单个扇区或者群集。因此,在硬盘上查找整个文件是必须解决的问题。操作系统可能需要检查几个群集(不一定是连续的)才能找到文件。

另一个问题是如何将文件存储在群集和扇区中。此外,文件系统必须解决如何处理由于删除或者移动文件而留下的空间。

现在,既然我们知道什么是文件系统,那么让我们从本文的实际议程开始。

在Linux或者Unix中检查文件系统类型的命令

1. blkid

blkid可以确定内容的类型(例如 块设备保存的文件系统或者交换),以及内容元数据(例如LABEL或者UUID字段)中的属性(令牌," NAME =值"对)。

我们必须在没有任何指令的情况下以root用户身份执行blkid,并检查TYPE字段以检查Linux或者Unix中相应分区或者设备的文件系统类型。

[root@centos-8 ~]# blkid
/dev/mapper/rhel-root: UUID="0b5322d5-887d-4c03-9933-b75c2a1ca880" TYPE="ext4"
/dev/sda2: UUID="pXZ2Iy-hwtF-mFH2-nbej-0Yz9-Py2O-AqLQNH" TYPE="LVM2_member" PARTUUID="fcbab19d-02"
/dev/sdb1: UUID="1b3910d9-11a9-4f68-894e-47a51bd077a8" TYPE="crypto_LUKS" PARTUUID="09181a39-01"
/dev/sda1: UUID="2b857500-a7cf-4ec4-8453-0ef636943d86" TYPE="ext4" PARTUUID="fcbab19d-01"
/dev/sr0: UUID="2019-08-15-21-52-52-00" LABEL="CentOS-8-BaseOS-x86_64" TYPE="iso9660" PTUUID="3e04f576" PTTYPE="dos"
/dev/mapper/rhel-swap: UUID="cd18aa4a-e2d3-423c-b120-7fef1b1d9aac" TYPE="swap"

使用-t,--match-token NAME = value,我们可以搜索带有名为NAME的令牌的块设备,这些令牌具有值value,并显示找到的任何设备。 NAME的常见值包括TYPE,LABEL和UUID。

例如,列出并检查ext4 FS的文件系统类型:

[root@centos-8 ~]# blkid -t TYPE=ext4
/dev/mapper/rhel-root: UUID="0b5322d5-887d-4c03-9933-b75c2a1ca880" TYPE="ext4"
/dev/sda1: UUID="2b857500-a7cf-4ec4-8453-0ef636943d86" TYPE="ext4" PARTUUID="fcbab19d-01"

2. lsblk

lsblk列出有关所有可用或者指定的块设备的信息。

" lsblk"命令提供了更多信息,可以更好地控制输出格式,易于在脚本中使用,并且不需要root权限即可获取实际信息。

[root@centos-8 ~]# lsblk --fs
NAME          FSTYPE      LABEL                  UUID                                   MOUNTPOINT
sda
├─sda1        ext4                               2b857500-a7cf-4ec4-8453-0ef636943d86   /boot
└─sda2        LVM2_member                        pXZ2Iy-hwtF-mFH2-nbej-0Yz9-Py2O-AqLQNH
  ├─rhel-root ext4                               0b5322d5-887d-4c03-9933-b75c2a1ca880   /
  └─rhel-swap swap                               cd18aa4a-e2d3-423c-b120-7fef1b1d9aac   [SWAP]
sdb
└─sdb1        crypto_LUKS                        1b3910d9-11a9-4f68-894e-47a51bd077a8
sr0           iso9660     CentOS-8-BaseOS-x86_64 2019-08-15-21-52-52-00
sr1

3. df

df是另一个流行且最常用的命令,用于显示包含每个文件名参数的文件系统上可用的磁盘空间量。

如果未提供文件名,则会显示所有当前已安装文件系统上的可用空间。

使用带有-d指令的-T指令可以打印所有已挂载文件系统的文件系统类型。

[root@centos-8 ~]# df -Th
Filesystem            Type      Size  Used Avail Use% Mounted on
devtmpfs              devtmpfs  2.4G     0  2.4G   0% /dev
tmpfs                 tmpfs     2.4G     0  2.4G   0% /dev/shm
tmpfs                 tmpfs     2.4G  8.6M  2.4G   1% /run
tmpfs                 tmpfs     2.4G     0  2.4G   0% /sys/fs/cgroup
/dev/mapper/rhel-root ext4       14G  9.2G  3.5G  73% /
/dev/sda1             ext4      488M  129M  325M  29% /boot
tmpfs                 tmpfs     479M     0  479M   0% /run/user/0

或者,我们可以使用" df"命令指定设备以检查相应设备的文件系统类型

# df -Th /boot
/dev/sda1             ext4      488M  129M  325M  29% /boot

4.findmnt

findmnt将列出所有已挂载的文件系统或者搜索文件系统。

使用findmnt命令可以在/etc/fstab,/etc/mtab或者/proc/self/mountinfo中进行搜索。如果未提供设备或者安装点,则显示所有文件系统。

使用--fstab指令,findmnt命令将在/etc/fstab中搜索,而使用-t将限制打印文件系统的集合。

[root@centos-8 ~]# findmnt --fstab -t ext4
TARGET SOURCE                                    FSTYPE OPTIONS
/     /dev/mapper/rhel-root                     ext4   defaults
/boot  UUID=2b857500-a7cf-4ec4-8453-0ef636943d86 ext4   defaults

如果不带任何指令使用,findmnt命令将为我们提供所有绑定安装的一长串输出

[root@centos-8 ~]# findmnt -t ext4
TARGET                                      SOURCE                                           FSTYPE OPTIONS
/                                          /dev/mapper/rhel-root                            ext4   rw,rela
├─/boot                                     /dev/sda1                                        ext4   rw,rela
├─/var/named/chroot/etc/localtime           /dev/mapper/rhel-root[/usr/share/zoneinfo/Asia/Kolkata]
│                                                                                            ext4   rw,rela
├─/var/named/chroot/etc/named.root.key      /dev/mapper/rhel-root[/etc/named.root.key]       ext4   rw,rela
├─/var/named/chroot/etc/named.conf          /dev/mapper/rhel-root[/etc/named.conf]           ext4   rw,rela
├─/var/named/chroot/etc/named.rfc1912.zones /dev/mapper/rhel-root[/etc/named.rfc1912.zones]  ext4   rw,rela
├─/var/named/chroot/etc/rndc.key            /dev/mapper/rhel-root[/etc/rndc.key]             ext4   rw,rela
├─/var/named/chroot/etc/crypto-policies/back-ends/bind.config
│                                           /dev/mapper/rhel-root[/usr/share/crypto-policies/DEFAULT/bind.txt]
│                                                                                            ext4   rw,rela
├─/var/named/chroot/etc/protocols           /dev/mapper/rhel-root[/etc/protocols]            ext4   rw,rela
├─/var/named/chroot/etc/services            /dev/mapper/rhel-root[/etc/services]             ext4   rw,rela
├─/var/named/chroot/etc/named               /dev/mapper/rhel-root[/etc/named]                ext4   rw,rela
├─/var/named/chroot/usr/lib64/bind          /dev/mapper/rhel-root[/usr/lib64/bind]           ext4   rw,rela
└─/var/named/chroot/var/named               /dev/mapper/rhel-root[/var/named]                ext4   rw,rela

5.file

file命令通常仅尝试读取并确定参数文件的类型。

指定-s选项会使文件还读取参数文件,这些文件是块或者字符特殊文件。这对于确定和检查原始磁盘分区(属于块特殊文件)中数据的文件系统类型很有用。

# file -s /dev/sda1
/dev/sda1: Linux rev 1.0 ext4 filesystem data, UUID=2b857500-a7cf-4ec4-8453-0ef636943d86 (needs journal recovery) (extents) (64bit) (large files) (huge files)

6. udevadm

udevadm命令在udev数据库中查询存储在udev数据库中的设备信息。

它还可以从其sysfs表示形式查询设备的属性,以帮助创建与该设备匹配的udev规则。

使用--query可以查询数据库中指定类型的设备数据。以下命令给出了很长的输出,因此我们将grep所需的数据以检查设备/dev/sda1的文件系统类型。

# udevadm info --query=property  /dev/sda1 | egrep "DEVNAME|ID_FS_TYPE"
DEVNAME=/dev/sda1
ID_FS_TYPE=ext4

现在上面是一些最常用的命令来检查文件系统类型的命令,但是还有许多其他方法可以用来确定文件系统类型

7.文件/etc/fstab内容

通常,我们使用的所有设备都是通过/etc/fstab文件挂载的,以使挂载重启持久。

因此,我们始终可以参考/etc/fstab文件来检查文件系统类型,例如:

# cat /etc/fstab
/dev/mapper/rhel-root  /                     ext4    defaults        1 1
UUID=2b857500-a7cf-4ec4-8453-0ef636943d86 /boot                   ext4    defaults        1 2
/dev/mapper/rhel-swap   swap                    swap    defaults        0 0

在此,文件的第一列指定分区设备路径,而第三列显示相应设备的文件系统类型。

8.文件/etc/mtab内容

/etc/fstab类似,我们也可以参考/etc/mtab来获取当前已挂载文件系统的列表以及文件系统类型。

# grep root /etc/mtab
/dev/mapper/rhel-root/ext4 rw,relatime 0 0

在此文件的第一列也指定了分区设备路径,而第三列则显示了相应设备的文件系统类型。

9.文件/proc/mounts

现在/proc/mounts文件指的是/etc/mtab,所以这不是一个新方法,而只是另一个文件,我们可以查看它来检查Linux或者Unix中的文件系统类型。

10.挂载命令

同样,mount命令还将引用/etc/mtab文件来获取已安装文件系统的列表,并且还可以确定单个设备的文件系统类型。

# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,size=2436780k,nr_inodes=609195,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)