Linux 中的 Shell

什么是 shell

对于计算机来说,管理整个计算机硬件的其实是操作系统的内核,而内核是需要被保护的。
而操作系统其实是一组软件,由于这组软件控制整个硬件和管理系统的活动监测,如果该组软件被用户随意操作,如果用户操作不当,就会使整个系统崩溃。
因此对于一般用户来说,就只能通过Shell与内核沟通,从而让内核能够完成相关的任务。
对于Shell来说,我们是借由Shell将输入的命令与内核沟通,从而能够让内核可以控制硬件来实现正常工作。
整个过程可以图示为:

 从图中可以看出,Shell只是提供给用户使用的一个程序。用户可以借由Shell来执行命令,并操作其它应用程序。
其实从广义上来说,只要能够操作应用程序的软件都能够被称为Shell,包括图形用户界面模式的软件。我们通常使用说的Shell说的是命令行方面的软件,比如bash。

为什么要学习Shell

有时候你会觉得用鼠标在屏幕上点点点就可以完成很多操作,但是界面程序实际上还是将使用到的软件整合在一起的应用程序而已,也就说你用的只是软件提供的接口,只有当这些接口中包含你要进行的操作时才能够完成实现,否则也是不能实现的。因此就需要了解一下Shell怎么使用,这里说的Shell主要是命令行下的Shell,使用比较多的Shell就是bash了。

/etc/shells

从上面的内容中,我们知道了shell实际上就是提供给用户的应用程序,因为应用程序是在最外面,所以被称呼为shell。

因为linux是经由unix发展而来的,因此不同的unix系统就会有不用的shell,biru Bourne shell(sh),Sun中使用的C shell,商业上使用的K shell,还有TCSH等。而linux使用的这一个shell就叫做bash。

在Linux中,一般会存在多个shell,一般情况下都包含在/etc/shells这个文件中,如:

# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash

可以看到,linux中存在多个shell,而linux默认使用的就是bash。存在/etc/shells的目的是系统中的某些服务在运行过程中,会去检查用户能够使用的shells,而这些shell的查询就是就需要借由/etc/shells完成。

对于不同的用户,包括系统账号,在登陆系统之后都会取得一个shell,该信息保存在/etc/passwd这个文件中,如:

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin

上面passwd文件显示,root会取得/bin/bash这个shell,而daemon和bin这些系统账号就会使用/usr/sbin/nologin这个shell。

bash shell的作用

bash作为linux的默认shell,主要具有以下优点:

  • 历史命令

在bash中总是会执行许多命令,bash能够记录使用过的命令,这些记录都记录在~/.bashrc_history。

但是~/.bashrc_history中中记录的只是前一次登陆以前所执行过的命令,而这一次登陆所执行的命令都被缓存在内存中,注销系统后,该命令才被记录到该文件中。

  • 命令与文件补全

在使用bash执行命令时,会使用到tab键作为命令与文件补全,该功能也是bash提供的。

  • 命令别名设置

在bash中使用“ls -al”命令和命令“ll”的结果显示是一样的,ll就是命令别名。同样在bash中提供了命令别名的设置功能。

  • 任务管理、前台、后台控制

在bash中,还能够实现任务管理,将任务放到后台运行或者调到前台。

  • 程序化脚本

bash脚本是将需要执行的命令写成一个文件,该文件可以使用shell所提供的环境变量及相关命令。

  • 通配符

除了上边提到的功能,bash还支持许多的通配符帮助用户查询和执行命令。

type命令

在使用命令“man bash”打开bash的手册时,能够看到有一项的标题是“SHELL BUILTIN CONMMANDS”,也就是说在bash中还由内置的命令,比如“source”,“cd”等。

对于一个命令,可以使用type命令看到命令的来源:

type [-tpa] name

参数说明:

  • 无:不加任何参数时,type会显示出name是内部命令还是bash内置命令
  • -t:当加入-t参数 时,type会根据命令的不同显示出不同的结果
    • file:表示为外部命令
    • alias:表示该命令为命令别名所设置的名称
    • builtin:表示该命令为bash内置的命令功能
  • -p:如果后边接的name为外部命令时,才会显示完整文件名
  • -a:会由PATH变量定义的路径中,将所有含name的命令都列出来,包含alias

命令编辑 

这里列出几个提示:

符号含义
\{enter]表示转义回车,当单行命令过长时,可以续行
[ctrl]+u/[ctrl]+k分别从光标处往前和往后删除命令
[ctrl]+a/[ctrl]+e分别将光标移到整个命令的最前和最后边
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值