Shell历史

浏览了一下Wiki,把shell的历史简要摘抄了一下,整个发展过程还是很有趣,csh贡献了很多的想法和特性,但是最后却没有流行起来。sh虽然刚开始功能比较简单,但是后续也一直在完善。bash我觉得目前对于使用linux的朋友来说是最常见的,但是这位Fox兄弟在Wiki上的评价只是Computer Programmer,远远不及Bourne老爷子呢。

Bourne Shell     是1977年发布的Unix Version 7 中的默认Shell。目前大多数Unix系统仍保留着原始的 /bin/sh,或者保留一个软连接到其他Shell上 。该程序由 Stephen Bourne 在贝尔实验室工作期间开发,它的开发是做为 Thompson Shell 的一个替代。随着《The UNIX Programming Environment》(作者Brain W. Kernighan、Rob Pike)一书的出版,Bourne Shell开始变得流行起来。

Stephen Bourne

随着时间的发展,伴随着不断更新的系统(Version 7、SystemIII、SVR2、SVR3、SVR4),AT&T不断地增强shell的功能,但是因为shell一直没有版本号,所以我们只能依靠其支持的特性来区分SHELL的版本。

对于SHELL的一些批评:交互式的使用不够友好(当时C Shell提供了history、aliases、job control等命令);Unix系统使用C写成,但是shell的语法缺不像C,倒是有点像ALGOL;缺少正则表达式支持。

后续的故事

C Shell (csh)在1970年代,由当时还是加州大学伯克利分校的学生Bill Joy编写。在1978年,随着BSD Unix系统的第二个版本广泛发布。早期贡献代码的成员还包括:Michael Ubell, Eric Allman, Mike O'Brien and Jim Kulp。在一些系统如Mac OS X和Red Hat Linux上,csh实际上是tchsh,一种增强型的shell。csh包含了当今shell的绝大多数特性,包括filename wildcarding, piping, here documents, command substitution, variables and control structures for condition-testing and iteration。

虽然csh有着众多的交互特性以及快速的执行速度,但是最终未能流行起来。整个80年代,csh不能够确保出现在所有的Unix系统上,但是sh可以,这也是造成csh不够流行的主要因素。90年代中期,csh的分发开始广泛起来,这时又遭受了POSIX委员会的质疑,指出语法不够完善、特性缺失、扩展性差等问题[8]。

Korn Shell (ksh)由 David Korn 编写,1983年在USENIX上宣布。它向后兼容Bourne Shell,同时吸取了C Shell中的一些优点(job control)。代码贡献者还包括当时在Bell Labs的Mike Veach和Pat Sullivan。目前为开源软件:http://www.kornshell.org/。ksh的早期版本为 ksh88,是AIX4上的默认shell。后来又发布了ksh93版本。

Bash (the Bourne-Agian shell)由 Brian Fox 为GNU项目编写,目的是代替sh。首次发布于1989年,作为GNU项目的一个程序广泛分布在Linux、Mac OS X、Cygwin上。Brain Fox作为FSF的员工,首次开始工作是在1988年的1月10号,一年之后,发布了.99的测试版本。

Brain J. Fox

参考资料:

1、The Linux Command Line: A Complete Introduction

2、umask 百度百科

3、关于setuid和setgid的讨论

4、Wiki Bash Unix Shell

5、Bourne Shell

6、The Unix Programming Environment

7、Wiki Korn Shell

8、Wiki C Shell

9、Wiki Bash (Unix Shell)

时间: 2024-10-23 05:49:36

Shell历史的相关文章

linux中 shell 历史命令记录功能_Linux

在 Linux 下面可以使用 history 命令查看用户的所有历史操作,同时 shell 命令操作记录默认保存在用户目录的 .bash_history 文件中.通过这个文件可以查询 shell 命令的执行历史,有助于运维人员进行系统审计和问题排查,同时在服务器遭受黑客攻击后,也可以查询黑客登录服务器的历史命令操作.但是黑客在入侵后,为了抹除痕迹,会删除 .bash_history 文件,这个就需要合理备份这个文件了. 默认的 history 命令只能查看用户的历史操作记录,但是不能区分每个用户

在Linux下生成crypt加密密码的方法

  我们可以用mkpasswd命令:这个命令就是用来生成crypt格式的密码的: mkpasswd 输入命令后,程序会要求输入一个密码,然后生成crypt格式的字符串. 如果用Apache Web服务器,那么也可以用htpasswd: htpasswd -nd user 用户名(user)叫什么都无所谓,我们关注的是密码.这个命令会输出一个user:password格式的字符串,直接把password字段复制下来就ok了. 有OpenSSL的话,可以使用openssl命令: openssl pa

你的Linux服务器被黑了?看一看是不是犯了这5点错

安全是IT行业一个老生常谈的话题了,从之前的"棱镜门"事件中折射出了很多安全问题,处理好信息安全问题已变得刻不容缓. 因此做为运维人员,就必须了解一些安全运维准则,同时,要保护自己所负责的业务,首先要站在攻击者的角度思考问题,修补任何潜在的威胁和漏洞,主要分五部分展开: 账户和登录安全 账户安全是系统安全的第一道屏障,也是系统安全的核心,保障登录账户的安全,在一定程度上可以提高服务器的安全级别,下面重点介绍下Linux系统登录账户的安全设置方法. 1.删除特殊的账户和账户组 Linux

shell的历史

shell的历史 shell概况 人想要和操作系统进行交互,传送指令给操作系统,就需要使用到shell.宏义的shell是人与机器交互的页面,它分为两种,一种是有界面的,比如GUI,另外一种是没有界面的,完全是指令操作的(CLI).我们一般说的shell指的就是命令行界面. Bourne shell 最早Ken Thompson设计Unix的时候,使用的是命令解释器,命令解释器接受用户的命令,然后解释他们并执行. 后来出现了Bourne shell(通称为sh),顾名思义,就是一个叫Bourne

shell read s-shell脚本使用read-s会不会保存在命令记录历史文件中

问题描述 shell脚本使用read-s会不会保存在命令记录历史文件中 在shell脚本中要用到read-s输入密码,但有博客说read-s会将输入内容当作命令保存在历史文件记录中 说法不详细.自己查看了history文件中并没有记录,求知道的帮忙给个详细解释. 另外使用stty-echo不回显,为啥再使用输入重定向时会有stty:standard错误 解决方案 你还可以试试passwd,这个应该不会保存到历史记录中. adduser "$1" echo "$2"

nginx日志切割及删除7天前的历史日志shell脚本

例子一.按日期切割nginx日志,并自动删除7天前的日志(日志均已同步至专用日志存储服务器,可放心删除历史日志.) #!/bin/bash #初始化 LOGS_PATH=/data/nginx/logs/www.domain.com YESTERDAY=$(date -d "yesterday" +%Y-%m-%d) #按天切割日志 mv ${LOGS_PATH}/access.log ${LOGS_PATH}/access_${YESTERDAY}.log #向 Nginx 主进程发

【转】Windows Shell扩展编程傻瓜手册大全:上下文菜单扩展

引用自:http://blog.163.com/yesaidu@126/blog/static/51819307200861853827582/ Part I: A step-by-step tutorial on writing shell extensions 第一节:Windows shell扩展初步:上下文菜单扩展   作者:Michael Dunn 译者:yesaidu   源代码下载:1       2   目录 ● README ● 系列绪言 ● 第一部分绪言 ● 从AppWiza

利用uniread 解决 Linux下的SQL*Plus 命令行历史回调功能

解决|命令行 利用uniread 解决 Linux下的SQL*Plus 命令行历史回调功能 作者: Fenng 大家知道, 在 Windows 平台 命令行中的 SQL*Plus 有命令行历史回调的功能,在SQL*Plus工具下面,可以利用键盘的"向上向下"箭头键对命令行的进行回调.而在Linux上则没有该功能(虽然 Shell 可以做到这一点,但是 SQL*Plus 不可以). 而该功能对于CLI爱好者来说几乎是不可缺的,不知道为什么 Oracle 不把这个功能加进来.不得而知了.

Solaris中如何修改默认Shell

Solaris 有很多方面都用这和以前不大一样,下面讲Solaris中Shell的一些问题和解决方法. Solaris的默认Shell是sh,即命令行提示符为(root用户):# 而在用Linux命令行的提示符中既有用户名,还有主机名称以及当前路径的名称.这样可以给人一目了然的感觉.不过Linux下一般默认Shell是bash,而不是sh.如果只想在当前的使用中切换Shell的话,方法很简单,可以在命令行中输入: $ bash bash-3.00$ csh david% sh $ 如果要永久性的