虽然我很长一段时间都知道Hurd的存在,以及它作为官方 GNU 操作系统内核的使命,但我想知道为什么 Linux 多年来没有被接受为官方 GNU 内核,因为它处于更好的状态比赫德?
到目前为止,Linux 或多或少已经担任了 20 多年的角色,但是可以看出 GNU 项目在 Linux 方面一直保持着距离。为什么会这样?是因为梦想赫德(在未来的某个时候)达到生产质量水平吗?是不是因为 GNU 项目没有看到它的使命在 Linux 中得到了充分体现?是不是出于其他政治原因?
是否有官方的 POSIX、GNU 或其他指南来说明应该在何处打印进度报告和日志信息(例如“Doing foo; foo done”)?就个人而言,我倾向于将它们写入 stderr,这样我就可以重定向 stdout 并仅获取程序的实际输出。我最近被告知这不是一个好的做法,因为进度报告实际上并不是错误,只有错误消息应该打印到 stderr。
这两个职位都有意义,当然您可以根据您正在做的事情的细节选择一个或另一个,但我想知道是否有一个普遍接受的标准。我无法在 POSIX、GNU 编码标准或任何其他此类广泛接受的最佳实践列表中找到任何特定规则。
我们有一些类似的问题,但它们没有解决这个确切的问题:
何时在 shell 脚本中使用重定向到 stderr:接受的答案表明我倾向于做什么,将程序的最终输出保留在 stdout 上,并将其他任何内容保留在 stderr 上。然而,这只是作为用户的意见提出的,尽管有论据支持。
使用消息应该转到 stderr 还是 stdout?:这是特定于帮助消息的,但引用了 GNU 编码标准。这就是我正在寻找的东西,不仅限于帮助消息。
那么,对于进度报告和其他信息性消息(不是程序实际输出的一部分)应该在哪里打印,是否有任何官方规则?
我了解 GNU Info 是什么以及如何使用它,但它有什么用?为什么它与手册页并行存在?为什么不编写详细的手册页而不是提供单独的实用程序?
我一直使用 GNU tar。但是,我见过的所有 GNU/Linux 发行版都bsdtar在它们的存储库中发布。我什至看到它默认安装在某些 IIRC 中。我确信 Arch GNU/Linux 需要它作为basedevel(也许base,但我不确定)的一部分,正如我在 PKGBUILDs 中看到的那样。
为什么要使用bsdtar而不是 GNU tar?有哪些优势?
请注意,我是问BSD 和 GNU/Linux 用户空间之间的主要区别是什么的人?.
我不认为历史Unix 中的 shell/实用程序或像4.4BSD那样“最近”的东西支持使用双破折号(或两个连续的连字符)作为选项分隔符的结尾。使用FreeBSD,您可以看到例如在2.2.1 版本(1997)的rm 联机帮助页中引入的注释。但这只是一个命令的文档。
查看我能找到的最古老的GNU fileutils 更改日志,我看到了这个1(略有改动):
Tue Aug 28 18:05:24 1990 David J. MacKenzie (djm at albert.ai.mit.edu)
* touch.c (main): Don't interpret first non-option arg as a <---
time if `--' is given (POSIX-required kludge).
* touch.c: Add long-named options.
* Many files: Include <getopt.h> instead of "getopt.h" since
getopt.h will be in the GNU /usr/include.
* install.c: Declare some …Run Code Online (Sandbox Code Playgroud) 我正在为我的服务器编写 shell 脚本,这是一个运行 FreeBSD 的共享主机。我还希望能够在运行 Linux 的 PC 上本地测试它们。因此,我试图以可移植的方式编写它们,但sed我认为没有办法做到这一点。
我的网站的一部分使用生成的静态 HTML 文件,并且此 sed 行在每次重新生成后插入正确的 DOCTYPE:
sed -i '1s/^/<!DOCTYPE html> \n/' ${file_name.html}
Run Code Online (Sandbox Code Playgroud)
它适用sed于 Linux上的 GNU ,但 FreeBSDsed期望-i选项后的第一个参数是备份副本的扩展名。这是它的样子:
sed -i '' '1s/^/<!DOCTYPE html> \n/' ${file_name.html}
Run Code Online (Sandbox Code Playgroud)
但是,GNUsed反过来又希望表达式紧跟在 之后-i。(它还需要修复换行符处理,但这里已经回答了)
当然,我可以在脚本的服务器副本中包含此更改,但这会造成混乱,即我使用 VCS 进行版本控制。有没有办法以完全可移植的方式使用 sed 实现这一点?
我想知道哪些命令是为 Linux 重写的,哪些是从 Unix 保留的?
我在 Unix 和 Linux 上阅读了很多关于 BSD 和 GNU 等的书。但我仍然不明白 BSD 和 GNU 用户空间之间有什么实际的、实际的区别,尽管它们经常被提及。有人可以详细说明吗?
在回答时,请充分解释历史联系,记住我还没有经历过 GNU/Linux 不是主流 UNIX(OS X 除外)的时期。
我全新安装了 Arch Linux 并导入了我备份的 gpg 私钥。作为健全性检查,我跑了:
gpg —list-keys
Run Code Online (Sandbox Code Playgroud)
除了uid现在显示的内容外,一切都显示正常:
uid [ unknown ] User < user@useremail.com >
Run Code Online (Sandbox Code Playgroud)
当我在全新安装之前首次创建此密钥时,它显示为:
uid [ ultimate ] User < user@useremail.com >
Run Code Online (Sandbox Code Playgroud)
为什么在将其导入全新安装后会从[ ultimate ]变为[ unknown ]?
提前致谢。
有没有办法在ping不停止执行的情况下告诉显示其通常的终止统计信息?
例如,我想快速查看:
--- 8.8.8.8 ping statistics ---
2410 packets transmitted, 2274 received, +27 errors, 5% packet loss, time 2412839ms
rtt min/avg/max/mdev = 26.103/48.917/639.493/52.093 ms, pipe 3
Run Code Online (Sandbox Code Playgroud)
无需停止程序,从而丢失累积的数据。