Questions tagged «history»

Unix系统及其主要组件的历史。请不要将此标签用于与外壳相关的问题;使用“命令历史记录”代替。




4
为什么UNIX / POSIX系统调用命名如此难以理解?
为什么使用诸如time和creat而不是getCurrentTimeSecsand createFile或者这样的非公开系统调用名,也许更适合Unix get_current_time_secs和create_file。这就引出了我的下一个要点:为什么有人想要cfsetospeed没有骆驼套的东西,或者至少要有下划线才能使之可读?当然,调用将包含更多字符,但是我们都知道代码的可读性更重要,对吗?

1
为什么UNIX系统调用kill称为“ kill”?
我对这个名称的历史感到好奇,在我看来,“ kill”系统调用可能已被命名为“ signal”,而“ signal”系统调用可能已被命名为“ handle”。 我想知道最初使用系统调用是否可能只是为了杀死另一个进程,随着系统的发展,它的使用范围可能会扩展到更通用的信号发送机制,但这只是我的推测。 有人知道吗?
41 kill  history 

1
bzip1发生了什么?
bzip2已经成为事实上的标准,已经有很多年了。bzip2到目前为止,我本人已经键入了数千次命令,这让我感到奇怪-bzip或bzip1发生了什么?Google似乎没有告诉我太多有关它的信息,听起来这可能是一个有趣的历史课。


3
为什么有Linux内核策略可以永不中断用户空间?
我开始在Linux Kernel Mailing列表上的礼节中考虑此问题。作为世界上最著名,可以说是最成功,最重要的自由软件项目,Linux内核受到了广泛的关注。该项目的创始人和负责人Linus Torvalds在这里显然不需要介绍。 莱纳斯(Linus)在LKML上有时会引起争议。他自己承认,这些火焰经常与破坏用户空间有关。这使我想到了我的问题。 关于中断用户空间为何如此糟糕,我可以有一些历史观点吗?据我了解,破坏用户空间将需要在应用程序级别进行修复,但这是否不好,如果它可以改善内核代码呢? 据我了解,Linus声明的政策是不破坏用户空间胜过其他一切,包括代码质量。为什么这如此重要,这种政策的利弊是什么? (显然,一贯实施的这种政策存在一些弊端,因为莱纳斯偶尔就其主题在LKML上与他的高级副手之间存在“分歧”。据我所知,他总是在此事上有所作为。)


3
管道如何限制内存使用量?
Brian Kernighan在此视频中解释了贝尔实验室基于内存限制而对小语言/程序的早期吸引力 一台大机器将是64 k字节,即K,而不是M或G,这意味着任何单个程序都不会太大,因此自然会倾向于编写小程序,然后编写管道机制,基本上是输入输出重定向,因此可以将一个程序链接到另一个程序。 但是考虑到数据必须存储在RAM中才能在程序之间传输,因此我不理解这如何限制内存使用。 来自维基百科: 在大多数类似Unix的系统中,管道的所有进程都是同时启动的[强调我的],并适当地连接它们的流,并由调度程序以及计算机上运行的所有其他进程进行管理。其中一个重要方面是将Unix管道与其他管道实现区分开来,它是缓冲的概念:例如,发送程序每秒可以产生5000个字节,而接收程序每秒只能接受100个字节,但没有。数据丢失。而是将发送程序的输出保存在缓冲区中。当接收程序准备读取数据时,管道中的下一个程序将从缓冲区读取数据。在Linux中,缓冲区的大小为65536字节(64KB)。如果需要,可以使用称为bfr的开源第三方过滤器来提供更大的缓冲区。 这使我更加困惑,因为这完全破坏了小程序的目的(尽管它们会在一定程度上模块化)。 作为第一个问题(内存限制取决于大小数据的问题),我唯一能想到的解决方案是,那时根本就不会计算大型数据集,而真正的问题管道本应解决的是程序本身所需的内存量。但是考虑到Wikipedia引号中的粗体字,即使这样也使我感到困惑:因为一次不会执行一个程序。 如果使用了临时文件,那么所有这些都将非常有意义,但是据我了解,管道不会写入磁盘(除非使用交换)。 例: sed 'simplesubstitution' file | sort | uniq > file2 对我来说sed很明显,正在读取文件并逐行吐出。但是sort,正如BK在链接的视频中指出的那样,它是一个句号,因此必须将所有数据读入内存(或对吗?),然后将其传递给uniq,(我认为)这将是一个一次在线程序。但是在第一个和第二个管道之间,所有数据都必须存储在内存中,不是吗?
36 pipe  history 


4
vi是否在文件末尾默默添加换行符(LF)?
我很难理解一个奇怪的行为:当我没有专门键入它时,vi似乎在文件末尾添加了换行符(ASCII:LF,因为它是Unix(AIX)系统)。 我在vi中这样编辑文件(注意不要在末尾输入换行符): # vi foo ## Which I will finish on the char "9" and not input a last newline, then `:wq` 123456789 123456789 123456789 123456789 ~ ~ ## When I save, the cursor is just above the last "9", and no newline was added. 我希望vi按原样保存它,所以要有39个字节:前三行(数字1至9,后跟换行符(在我的系统中为LF))中的每行10个ASCII字符,最后一行仅9行(字符1至9,无终止换行符/ LF)。 但是,当我保存它时,它显示为40个字节(而不是39个字节),并且od显示终止的LF: # wc …
36 vi  history  text 

9
实际终端所连接的大型计算机是什么样的?
我正在研究计算机的历史,以更好地理解Linux终端为何以这种方式工作。我已经读到,在1970年代中期至1980年代中期,大多数人使用真实的终端(而不是终端仿真器)与大型计算机进行通信,这是一个真实的终端的示例: 但是我无法找到有关实际终端所连接的这些大型计算机的信息。有人可以提供这种大型计算机的名称/图片吗?
35 terminal  history 

5
mv -f有什么意义?
该用于GNU Coreutils的手册mv说: -f --force Do not prompt the user before removing a destination file. 但是,这似乎已经是的默认行为mv,因此该-f选项似乎是多余的。例如在GNU Bash版本4.3.11中: $ ls -l total 0 $ touch 1 2; mv -f 1 2; ls 2 $ touch 1 2; mv 1 2; ls 2 -f标志的意图似乎不太可能是重写alias mv="mv -i",因为存在几种重写别名(例如使用\mv)的标准方法,这些方法可以更简洁,且在命令之间保持一致。 手册指出:“如果您指定-i,-f,-n选项中的多个选项,则只有最后一个选项会生效。”但是,该-f标志的意图似乎-i一般是不能覆盖该标志,因为等同的行为可以通过简单地使用来实现mv,这比使用更加简洁和易懂mv -if。 既然如此,-f标记的目的是什么?为什么存在?
34 files  history  mv 

2
在Linux上运行最早的二进制文件?
在关于Linux内核和GUI ABI的向后兼容性的讨论中,Alan Cox指出:“ 我的3.6rc内核仍将运行1992年构建的Rogue二进制文件。X向后兼容比Linux早得多的应用程序。 ” 那么Linux 应用程序二进制接口到底向后兼容吗? 什么是几年前实际编写和编译的最旧的二进制可执行文件,仍然可以在现代的通用Linux发行版上运行? 我确定所有这些词都可以解释。我的主要观点是,通过仿真器或专用虚拟机或二进制转换器运行它是不公平的,但是某些此类内容可能已内置在一些现代发行版中,在这里进行学习是有趣的一部分。 还需要关注硬件体系结构,可执行文件格式,语言和主要库动态加载依存关系的变化。 请注意,放宽规则后,这里有一个更进一步的示例。2002年的网页在现代Red Hat Linux上运行a.out可执行文件讨论了在完成 并获得之后使用非常老的Linux之前的ELF a.out格式的可执行文件,这 再次引起了这个问题的兴趣,但它说明了这类事情进一步挖掘时可能会涉及到。modprobe binfmt_aout/lib/ld.solibc.so.4 为您的BSD粉丝提供更新,很高兴看到iBCS2支持旧的Xenix应用程序(例如1990年的zork / dungeon-2.5.6)和SCO OpenServer 5.0.x应用程序以及最近的NetBSD 4.0.1(来自2008年):iBCS2和NetBSD | 虚拟化的乐趣。但是同一件事在NetBSD 5.0.x中似乎坏了。 更新2:一年后,即使获得了此问题的“播音员”徽章,我仍在寻找答案。而且要澄清的是,由于这是关于API的,因此它应该是“真实的”二进制文件(长度不为零),至少仍然大部分以原始方式工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.