小编dub*_*jim的帖子

如何使用多个AND模式运行grep?

我想通过模式之间的隐式AND获得多模式匹配,即相当于在一个序列中运行几个 grep:

grep pattern1 | grep pattern2 | ...
Run Code Online (Sandbox Code Playgroud)

那么如何将其转换为类似的东西?

grep pattern1 & pattern2 & pattern3
Run Code Online (Sandbox Code Playgroud)

我想使用单个 grep,因为我正在动态构建参数,因此所有内容都必须放在一个字符串中。使用过滤器是系统特性,而不是 grep,所以它不是它的论据。


不要将此问题与:

grep "pattern1\|pattern2\|..."
Run Code Online (Sandbox Code Playgroud)

这是一个OR多模式匹配。

grep regular-expression

117
推荐指数
5
解决办法
26万
查看次数

对 cp 与硬链接的行为感到惊讶

我非常了解硬链接的概念,并且已经多次阅读基本工具的手册页,例如cp--- 甚至最近的 POSIX 规范。我仍然惊讶地观察到以下行为:

$ echo john > john
$ cp -l john paul
$ echo george > george
Run Code Online (Sandbox Code Playgroud)

此时johnpaul将具有相同的 inode(和内容),并且george在这两个方面都会有所不同。现在我们这样做:

$ cp george paul
Run Code Online (Sandbox Code Playgroud)

在这一点上,我期望georgepaul拥有不同的 inode 编号但内容相同——这个期望得到了满足——但我期望paul现在有一个不同的 inode 编号john,并且john仍然有内容john。这是我感到惊讶的地方。事实证明,将文件复制到目标路径paul也会导致在共享paul的 inode 的所有其他目标路径上安装相同的文件(相同的 inode)。我想cp创建一个新文件并将其移动到以前由旧文件占据的位置paul。相反,它似乎是打开现有文件paul,截断它,然后写入george的内容到现有文件中。因此,具有相同 inode 的任何“其他”文件都会同时更新“他们的”内容。

好的,这是一种系统行为,现在我知道期待它,我可以弄清楚如何解决它,或者在适当的时候利用它。让我感到困惑的是,我应该在哪里看到这种行为的记录?如果它没有记录我会感到惊讶的地方在文件我已经看过。但显然我错过了它,现在找不到讨论这种行为的来源。

hard-link cp

22
推荐指数
3
解决办法
3376
查看次数

何时以及为什么需要对块设备进行分区?

可能的重复:
无分区文件系统的优点

所以我有一个块设备,比如说/dev/sda/dev/loop0。显然,如果我想从前者启动,或者我想将它细分为具有单独文件系统的段,我需要对其进行分区。但假设我没有这些需求。相反,我只是计划使用我的整个块设备作为存储。也许我会将其作为raid 卷的一部分,或者我将使用cryptsetup 对其进行加密,或者我将其作为LVM 的PV。或者我只是想直接在上面安装一个文件系统。至少在其中一些情况下,使用未分区的设备似乎没有任何技术障碍。这就是我们通常对由losetup生成的块设备所做的事情,使用普通硬盘也可以做到这一点。我知道,因为我已经做到了。

现在,这有危险。例如,如果你继续运行fdisk /dev/sda,你将看不到任何有意义的东西。您可能会不小心将分区表或类似的内容写入您的设备,然后您在未分区设备上的数据将被冲洗掉。也许如果您甚至在连接了设备的情况下启动到 Windows,它就会被冲洗掉。人们会讲可怕的故事。

但我只想了解,如果设备只连接到您的 Unix 设置(为了简单起见,让我们只使用 Linux),并且您永远不会尝试向其写入分区表或 MBR 或类似的东西那,使用未分区的存储设备还有其他缺点吗?我不建议这样做;我只是想了解不这样做的真正原因是什么。

另一方面,对块设备进行分区有什么障碍或缺点/dev/loop0吗?也许这样做没有任何好处。但我希望它会起作用,不是吗?在这里,我也只是问,因为我想了解我们标准做法背后的原因。

linux partition block-device

6
推荐指数
2
解决办法
5349
查看次数