在他的自传Just for Fun 中,Linus 提到了“页面到磁盘”功能,该功能对于使 Linux 成为当时 Minix 和其他 UNIX 克隆的有价值的竞争对手至关重要:
我记得,在 12 月,德国有一个人只有 2 兆字节的 RAM,他试图编译内核,但无法运行 GCC,因为当时 GCC 需要超过 1 兆字节的内存。他问我是否可以使用不需要那么多内存的较小编译器来编译 Linux。所以我决定即使我不需要特定的功能,我也会为他实现。它被称为页到磁盘,这意味着即使某人只有 2 毫克 RAM,他也可以使它看起来更多地使用磁盘作为内存。那是 1991 年圣诞节前后。
页面到磁盘是一件相当大的事情,因为这是 Minix 从未做过的事情。它包含在 0.12 版本中,该版本于 1992 年 1 月的第一周发布。立即,人们开始将 Linux 不仅与 Minix 进行比较,而且与 Coherent 进行比较,后者是由 Mark Williams 公司开发的小型 Unix 克隆。从一开始,添加页面到磁盘的行为就使 Linux 在竞争中脱颖而出。
那是Linux起飞的时候。突然间有人从 Minix 切换到 Linux。
他基本上是在谈论swapping
这里吗?对 Linux 有一些历史观点的人可能会知道。
我的string=substr1-substr2-substr3.substr4
子字符串长度可变。substr3
我想从中提取string
并正在考虑使用${string##pattern}
和${string%pattern}
字符串操作扩展来完成它。使用这种方法,很明显我需要在生成的扩展上运行${string##*-}
并运行${string%.*}
,反之亦然。我的问题是:
${string##*-${string%.*}}
or 的事情时${string%.*${string##*-}}
,我只是取回完整的字符串。我意识到我总是可以通过将中间变量分配给第一步的结果来分两步进行提取,然后对其进行操作;但我想一步到位。我该怎么办?蒂亚!
我可能是在这里挑毛病,但是让这个一直困扰我的问题一劳永逸地回答真是太好了......
reprex 的文本文件:
Line one.
Line two.
Line three.
Line four.
Run Code Online (Sandbox Code Playgroud)
要始终向该文本文件添加额外的空行sed
,每行需要两个命令。这可以通过以下任何一种语法来实现:
sed -e '/^$/d' -e '$!G' <file>
...但不是(sed -e '/^$/d' '$!G' <file>
或sed '/^$/d' '$!G' <file>
)sed -e '/^$/d; $!G' <file>
或者 sed -e '/^$/d ; $!G' <file>
sed '/^$/d; $!G' <file>
或者 sed '/^$/d ; $!G' <file>
我的问题是:
sed -e 's/brown/red/; s/dog/cat/' data1.txt
在提出以下建议之前要使用类似的东西......命令必须用分号 (;) 分隔,并且第一个命令的末尾和分号之间不应有任何空格。
...然后继续完全忽略他自己的建议,根本不使用该-e
选项,还在命令末尾和分号之间添加空格(如上面#3 的第二个变体所示)。所以,分号周围的间距有什么真正的区别吗?
我知道SHELL
允许在命令之前立即进行变量赋值,这样IFS=":" read a b c d <<< "$here_string"
有效......
我想知道的是,当使用诸如循环之类的复合语句完成时,这样的赋值是否不起作用?我尝试了类似的方法,IFS=":" for i in $PATH; do echo $i; done
但导致语法错误。我总是可以做类似的事情oldIFS="$IFS"; IFS=":"; for....; IFS="$oldIFS"
,但我想知道是否有任何方法可以使此类内联赋值适用于for
循环等复合语句?