当“sdb”驱动器是[swap]分区时,为什么“mount | grep sdb”没有显示任何输出?

当“sdb”驱动器是[swap]分区时,为什么“mount | grep sdb”没有显示任何输出?

我正在学习Ubuntu 中的lsblk命令mount。我使用的是 Linode vps 服务器,2CPU,4GB RAM,附加了 1 个额外的块存储卷。

我有两个与此主题相关的问题。

首先我运行lsblk命令:

michal@ubuntu:~$ lsblk
NAME MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda    8:0    0 79.5G  0 disk /
sdb    8:16   0  512M  0 disk [SWAP]
sdc    8:32   0   50G  0 disk /mnt/movies

在这里我明白了一切。

sdasdb都是我第一次创建 linode 时的默认分区,也是sdc我后来附加的块存储卷。

然后我运行mount命令grep,如下所示:

michal@ubuntu:~$ mount | grep sda
/dev/sda on / type ext4 (rw,relatime,errors=remount-ro)
michal@ubuntu:~$ mount | grep sdb
michal@ubuntu:~$ mount | grep sdc
/dev/sdc on /mnt/movies type ext4 (rw,relatime)
michal@ubuntu:~$
  1. 为什么mount | grep sdb没有输出?这是我的[SWAP]分区。

然后我跑了:

michal@ubuntu:~$ mount | grep sd?
michal@ubuntu:~$
michal@ubuntu:~$
  1. 为什么mount | grep sd?没有返回输出?

答案1

swap不是文件系统,它没有被挂载,它被激活或停用(请参阅man swapon)。挂载点不存在。在/etc/fstab挂载点中指定为none。由于swap没有挂载,我不希望交换分区出现在mount或的输出中findmnt

mount | grep sdb没有输出,因为字符串sdb没有出现在mount-output 中。请记住,/dev/sdb这是您的交换,它尚未安装。

mount | grep sd?没有输出,因为字符串sd?没有出现在您的mount-output 中。名为的驱动器sd?不存在,就这么简单。如果您想grep将其sd?视为扩展正则表达式,则可以使用mount | grep -E sd?,并且您的输出不会为空,但它可能不会像您期望的那样,因为?在正则表达式和通配符中的含义非常不同。

mount | grep "/dev/sd"就是给你你想要的输出。


更多细节:

来自info grep第 2.4 章“grep”程序:

’-G’
‘--basic-regexp’
     Interpret patterns as basic regular expressions (BREs).  This is
     the default.

来自info grep第 3.6 章基本正则表达式与扩展正则表达式:

Basic vs Extended Regular Expressions
       In basic regular expressions the meta-characters ?, +, {, |, (, and ) lose
       their special meaning; instead use  the  backslashed  versions
       \?, \+, \{, \|, \(, and \).

    Portable scripts should avoid the following constructs, as POSIX says
    they produce undefined results:
    
    ...
    • Basic regular expressions that use ‘\?’, ‘\+’, or ‘\|’.
    ...

但即使我使用\?它,它也没有按预期工作,mount | grep sd\?仍然给出空输出,这绝对不应该是这种情况。它只给我预期的输出与-E-选项,带或不带反斜杠。这可能是一个错误。

相关内容