第十一章、认识与学习 BASH

2 篇文章 0 订阅
2 篇文章 0 订阅

管理整个计算机硬件的是操作系统的核心 (kernel),这个核心是需要被保护的! 所以一般使用者就只能透过 shell 来跟核心沟通,以让核心完成我们的工作。

 


硬件、核心与 Shell

计算机播放声音:

  1. 硬件:『声卡芯片』;
  2. 核心管理:操作系统的核心可以支持这个芯片组,提供芯片的驱动程序;
  3. 应用程序:需要使用者输入发生声音的命令!

 

硬件、核心与用户的相关性图标
图 1.1.1、硬件、核心与用户的相关性图示

shell只是提供给用户操作操作系统的一个接口,因此sell其实就是软件。命令,包括 man, chmod, chown, vi, fdisk, mkfs都是独立的应用程序, 但是我们可以透过壳程序 (就是命令列模式) 来操作这些应用程序,让这些应用程序呼叫核心来运行所需的工作!

Tips:
只要是提供给用户操作操作系统的应用程序都称为壳程序。狭义的壳程序指的是命令行方面的软件,包括 bash 等。 广义的壳程序则包括图形接口的软件!因为图形接口也能够操作各种应用程序来呼叫核心工作! 
 

为何要学文字接口的 shell?

 


  • 文字接口的 shell:大家都一样!

  • 远程管理:文字接口就是比较快!

较不容易出现断线或者是信息外流的问题


  • Linux 的任督二脉: shell 是也!

系统的合法 shell 与 /etc/shells 功能

 Linux 使用『 Bourne Again SHell (简称 bash) 』,这个 Shell 是 Bourne Shell 的增强版本,也是基于 GNU 的架构下发展出来的!

第一个流行的 shell 是由 Steven Bourne 发展出来的,为了纪念他所以就称为 Bourne shell ,或直接简称为 sh !而后来另一个广为流传的 shell 是由柏克莱大学的 Bill Joy 设计依附于 BSD 版的 Unix 系统中的 shell ,这个 shell 的语法有点类似 C 语言,所以才得名为 C shell ,简称为 csh !由于在学术界 Sun 主机势力相当的庞大,而 Sun 主要是 BSD 的分支之一,所以 C shell 也是另一个很重要而且流传很广的 shell 之一 。

  

 /etc/shells:

  • /bin/sh (已经被 /bin/bash 所取代)
  • /bin/bash (就是 Linux 默认的 shell)
  • /bin/ksh (Kornshell 由 AT&T Bell lab. 发展出来的,兼容于 bash)
  • /bin/tcsh (整合 C Shell ,提供更多的功能)
  • /bin/csh (已经被 /bin/tcsh 所取代)
  • /bin/zsh (基于 ksh 发展出来的,功能更强大的 shell)

为什么我们系统上合法的 shell 要写入 /etc/shells 这个文件? 这是因为系统某些服务在运行过程中,会去检查使用者能够使用的 shells !

举例来说,某些 FTP 网站会去检查使用者的可用 shell ,而如果你不想要让这些使用者使用 FTP 以外的主机资源时,可能会给予该使用者一些特殊的 shell,让使用者无法以其他服务登陆主机。 这个时候,你就得将那些特殊的 shell 写到 /etc/shells 当中了。举例来说,我们的 CentOS 5.x 的 /etc/shells 里头就有个 特殊的shell /sbin/nologin

登陆后取得的 shell配置在 /etc/passwd 这个文件内!

[root@www ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
.....(底下省略).....

如上所示,在每一行的最后一个数据,就是你登陆后可以取得的默认的 shell!


Bash shell 的功能

bash 主要的优点:


  • 命令编修能力 (history):

只要在命令行按『上下键』就可以找到前/后一个输入的命令!在很多 distribution 里头,默认的命令记忆功能可以到达 1000 个!这么多的命令记录在你家目录内的 .bash_history! 不过,需要留意的是,~/.bash_history 记录的是前一次登陆以前所运行过的命令, 而至于这一次登陆所运行的命令都被缓存在内存中,当你成功的注销系统后,该命令记忆才会记录到 .bash_history 当中




  • 命令与文件补全功能: ([tab] 按键的好处)
  • [Tab] 接在一串命令的第一个字的后面,则为命令补全;
  • [Tab] 接在一串命令的第二个字以后时,则为『文件补齐』!

  • 命令别名配置功能: (alias)

在命令行输入 alias 就可以知道目前的命令别名有哪些了!也可以直接下达命令来配置别名:

alias lm='ls -al'


  • 工作控制、前景背景控制: (job control, foreground, background)

  • 程序化脚本: (shell scripts)

  • 通配符: (Wildcard)

除了完整的字符串之外, bash 还支持许多的通配符来帮助用户查询与命令下达。 例如『 ls -l /usr/bin/X* 』


Bash shell 的内建命令: type

 

 为了方便 shell 的操作,bash 已经『内建』了很多命令了,例如 cd ,umask !

 

[root@www ~]# type [-tpa] name
选项与参数:
    :不加任何选项与参数时,type 会显示出 name 是外部命令还是 bash 内建命令
-t  :当加入 -t 参数时,type 会将 name 以底下这些字眼显示出他的意义:
      file    :表示为外部命令;
      alias   :表示该命令为命令别名所配置的名称;
      builtin :表示该命令为 bash 内建的命令功能;
-p  :如果后面接的 name 为外部命令时,才会显示完整文件名;
-a  :会由 PATH 变量定义的路径中,将所有含 name 的命令都列出来,包含 alias

范例一:查询一下 ls 这个命令是否为 bash 内建?
[root@www ~]# type ls
ls is aliased to `ls --color=tty' <==未加任何参数,列出 ls 的最主要使用情况
[root@www ~]# type -t ls
alias                             <==仅列出 ls 运行时的依据
[root@www ~]# type -a ls
ls is aliased to `ls --color=tty' <==最先使用 aliase
ls is /bin/ls                     <==还有找到外部命令在 /bin/ls

范例二:那么 cd ?
[root@www ~]# type cd
cd is a shell builtin             <==看到了吗? cd 是 shell 内建命令

type 主要在找出『运行档』而不是一般文件档名!

命令的下达

 

范例:如果命令串太长的话,如何使用两行来输出?
[vbird@www ~]# cp /var/spool/mail/root /etc/crontab \
> /etc/fstab /root

当我们顺利地在终端机 (tty) 上面登陆后, Linux 就会依据 /etc/passwd 文件的配置给我们一个 shell (默认是 bash),然后我们就可以依据上面的命令下达方式来操作 shell, 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值