我正在学习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
在这里我明白了一切。
sda
和sdb
都是我第一次创建 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:~$
- 为什么
mount | grep sdb
没有输出?这是我的[SWAP]
分区。
然后我跑了:
michal@ubuntu:~$ mount | grep sd?
michal@ubuntu:~$
michal@ubuntu:~$
- 为什么
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
-选项,带或不带反斜杠。这可能是一个错误。