对于操作系统(无论是Linux、Unix或者Windows)有一些了解的朋友来说,一定听说过shell。因为只要是操作系统都离不开shell。
那么shell到底是什么呢?可以让操作系统这么离不开它?
举个栗子
当我们想要计算机打开网络,计算机需要什么呢?
这就是一个计算机能打开网络所需要的步骤。当你要输入一个指令之后,硬件才会通过你下达的命令来工作。
用户者通过命令和计算机交互的方式:shell
这里一定会有人发出质疑,在X Window下面就只要按下按钮就能搞定开启网络,何必要学什么shell这么麻烦呢?
还有就是Xwindow还有Web接口设置工具如Webmin,这好用的工具就可以帮我们搞定很多配置,这些工具都比shell来的好用又简单,何必要学什么shell这么麻烦呢?
大家有这种疑惑吗?
其实X window与web接口的工具,功能虽然强大,但毕竟是将所有软件都整合在一起的一组应用程序,不是一套完整的套件。不同的 distribution 所设计的 X window 接口也都不相同。
命令行的shell就不同,每个厂家的distribution使用的bash都是一样的。也就是说只要学会了shell就能解决所有的所有自己想实现的功能,不只是局限于组合在一组应用程序的web接口,或者按一按鼠标而已。
Linux的管理常常需要通过远端连线,这种情况下命令行绝对是优先选择使用的,速度快而且不容易出现断线或者信息泄露的问题。
有人又有疑问说,web端封装好的接口足够我们用了,没必要大费周章的再去学shell,也用不着。
好兄弟,当你的主机安然无恙的时候,会发现学这么多东西一点帮助都没有!
万一哪一天不幸中标了,你该怎么办呢?重新安装?还是修补漏洞?万一里面有重要文件或者 e 。。。。拿去维修,那多不好,嘿嘿。。。所以多学一点总是好的,有备无患嘛!
如果你想要将自己的主机管理好,那么良好的shell编程时必不可少的。十分钟不到的时间就可以看十几台主机的重要信息!非常好用!
1、第一个流行的 shell 是由Steven Bourne 发展出来的, 为了纪念他所以就称为 Bourne shell , 或直接简称为 sh。
2、后来另一个广为流传的 shell 是由柏克莱大学的 Bill Joy 设计依附于 BSD 版的 Unix 系统中的shell , 这个 shell 的语法有点类似 C 语言, 所以才得名为 C shell , 简称为 csh。由于在学术界 Sun 主机势力相当的庞大, 而 Sun 主要是 BSD 的分支之一, 所以 C shell 也是另一个很重要而且流传很广的 shell 之一 。
shell名称的由来:
使用者可以通过应用程序来指挥核心,让核心达成我们所需要的硬件任务!在操作系统整体框架中可以发现应用程序其实是在最外层,就如同鸡蛋的外壳一样,所以称之为壳程序(shell)。
目前我们的Linux支持的shell,可通过/etc/shells文件查看:
/etc/shells 这个文件记录了你当前Linux系统中所支持的shell版本(只是其中的一部分,还有其他shell在别的路径下)
系统上合法的shell都要写入到这个文件中。某些服务在运行过程中, 会去检查使用者能够使用的 shells , 而这些shell 的查询就是借由 /etc/shells 这个文件。 这里举个例子
现象: 在FTP服务器上添加新用户,但发现添加后登陆不了FTP服务器,一直都是报530,用户认证失败。
原因: 这时就要检查下FTP服务器上/etc/shells文件里是否添加了用户的shell(解析器)。用户解释器为/sbin/nologin,而系统的/etc/shells文件里面没有添加/sbin/nologin,所以在运行的过程中会认证不过。
解决方案: 只要将/sbin/nologin添加进/etc/shells文件即可。
当登陆的时候,系统会给我们分配一个shell让我们工作。这个登陆启动的shell(称默认shell)就记录在/etc/passwd这个文件中
在每一行的最后一个数据, 就是你登陆后可以取得的默认的 shell。
root 是 /bin/bash
daemon和bin系统账户就是/user/sbin/nologin