Linux的shell

与windows只有一种批处理脚本不同,由于早年的Unix年代,发展者众,出现了各种不同的distribution,因此也随着不同的distribution出现了各自的shell版本,常听到的就有Bourne SHell (sh) 、在 Sun 里头默认的 C SHell、 商业上常用的 K SHell、, 还有 TCSH 等等,每一种shell都有其各自的特点,至于Linux使用的这一种版本就称为Bourne Again SHell (简称 bash),这个shell是Bourne SHell的增强版本,也是基于GNU的架构下发展出来的。

有哪些shell

通过查看etc/shells,可以发现至少有以下几种shell可用(笔者以centOS6.5为例)

[root@localhost ~]# ll *sh
/bin/bash
/bin/csh -> tcsh <== csh已经被 tcsh 所替代
/bin/dash
/bin/sh -> bash <== sh已经被 bash 所替代
/bin/tcsh

接着我们再看一下Linux系统默认使用哪种shell,查看/etc/passwd 文件:

[root@localhost etc]# vim 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
……

我们会发现系统默认使用使用/bin/bash 这个shell。

bash shell的功能:

  命令编修能力(history):

  简单来说,就是可以记忆使用过的命令,你可以简单的使用 ↑、↓ 键来查看使用过的命令,在很多distribution版本里,可记忆的命令能达到1000个!也就是说,你曾经下达过  的命令几乎全都被记录下来了。

  这么多的命令记录在哪里呢?在你的家目录内的 .bash_history 啦! 不过,需要留意的是,~/.bash_history 记录的是前一次登陆以前所运行过的命令, 而至于这一次登陆  所运行的命令都被缓存在内存中,当你成功的注销系统后,该命令记忆才会记录到 .bash_history 当中!

  这有什么功能呢?最大的好处就是可以『查询曾经做过的举动!』 如此可以知道你的运行步骤,那么就可以追踪你曾下达过的命令,以作为除错的工具! 但如此一来也有个烦  恼,就是如果被黑客入侵了,那么他只要翻你曾经运行过的命令, 刚好你的命令又跟系统有关 (例如直接输入 MySQL 的密码在命令列上面),那你的主机可就伤脑筋了! 到底  记录命令的数目越多还是越少越好?这部份是见仁见智啦,没有一定的答案的。

  命令与文件补全(【tab】键的好处):

  常常在 bash 环境中使用 [tab] 是个很棒的习惯!因为至少可以让你

  1)少打很多字;

  2)确定输入的数据是正确的!

  使用 [tab] 按键的时机依据 [tab] 接在命令后或参数后而有所不同:

  • [Tab] 接在一串命令的第一个字的后面,则为命令补全;
  • [Tab] 接在一串命令的第二个字以后时,则为『文件补齐』!

  所以说,如果我想要知道我的环境中,所有可以运行的命令有几个? 就直接在 bash 的提示字符后面连续按两次 [tab] 按键就能够显示所有的可运行命令了。 那如果想要知道  系统当中所有以 c 为开头的命令呢?就按下『 c[tab][tab] 』就好啦!

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

  假如我需要知道这个目录底下的所有文件 (包含隐藏档) 及所有的文件属性,那么我就必须要下达『 ls -al 』这样的命令串,唉!真麻烦,有没有更快的取代方式?呵呵!就使  用命令别名呀!例如鸟哥最喜欢直接以 lm 这个自定义的命令来取代上面的命令,也就是说, lm 会等于 ls -al 这样的一个功能,嘿!那么要如何作呢?就使用 alias 即可!你  可以在命令列输入 alias 就可以知道目前的命令别名有哪些了!也可以直接下达命令来配置别名呦:

alias lm='ls -al'

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

  使用前、背景的控制可以让工作进行的更顺利,至于工作控制的用途则更广,可以让我们随时随地让工作在后台运行而不中断,可以在单一的环境中达到多任务的的目的。

  程序化脚本(shell script):

  (略)

  通配符(Wildcard):

  除了完整的字符串之外, bash 还支持许多的通配符来帮助用户查询与命令下达。 举例来说,想要知道 /usr/bin 底下有多少以 X 为开头的文件吗?使用:『 ls -l   

  /usr/bin/X* 』就能够知道啰~此外,还有其他可供利用的通配符, 这些都能够加快使用者的操作呢!

Bash shell 的内建命令:type

  bash 有没有什么说明文件啊?开玩笑~ 这么棒的东西怎么可能没有说明文件!请你在 shell 的环境下,直接输入 man bash 瞧一瞧, 嘿嘿!不是盖的吧!让你看个几天几夜也无法看完的 bash 说明文件,可是很详尽的数据啊! ^_^

不过,在这个 bash 的 man page 当中,不知道你是否有察觉到,咦! 怎么这个说明文件里面有其他的文件说明啊?举例来说,那个 cd 命令的说明就在这个 man page 内? 然后我直接输入 man cd 时,怎么出现的画面中,最上方竟然出现一堆命令的介绍?这是怎么回事? 为了方便 shell 的操作,其实 bash 已经『内建』了很多命令了,例如上面提到的 cd , 还有例如 umask 等等的命令,都是内建在 bash 当中的呢!

那我怎么知道这个命令是来自于外部命令(指的是其他非 bash 所提供的命令) 或是内建在 bash 当中的呢? 嘿嘿!利用 type 这个命令来观察即可!举例来说:

[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 这个命令我们可以知道每个命令是否为 bash 的内建命令。 此外,由于利用 type 搜寻后面的名称时,如果后面接的名称并不能以运行档的状态被找到, 那么该名称是不会被显示出来的。也就是说, type 主要在找出『运行档』而不是一般文件档名喔! 呵呵!所以,这个 type 也可以用来作为类似 which 命令的用途啦!找命令用的!

命令的下达

  命令的下达通过回车进行就不再赘述,这里仅就反斜杠 (\) 来说明一下命令下达的方式!

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

上面这个命令用途是将三个文件复制到 /root 这个目录下而已。不过,因为命令太长, 于是就利用『 \[Enter] 』来将 [Enter] 这个按键『跳脱!』开来,让 [Enter] 按键不再具有『开始运行』的功能!好让命令可以继续在下一行输入。 需要特别留意, [Enter] 按键是紧接着反斜杠 (\) 的,两者中间没有其他字符。 因为 \ 仅跳脱『紧接着的下一个字符』而已!所以,万一我写成: 『 \ [Enter] 』,亦即 [Enter] 与反斜杠中间有一个空格时,则 \ 跳脱的是『空格键』而不是 [Enter] 按键!这个地方请再仔细的看一遍!很重要!

如果顺利跳脱 [Enter] 后,下一行最前面就会主动出现 > 的符号, 你可以继续输入命令啰!也就是说,那个 > 是系统自动出现的,你不需要输入。

总之,当我们顺利的在终端机上面登陆后, Linux 就会依据 /etc/passwd 文件的配置给我们一个 shell (默认是 bash),然后我们就可以依据上面的命令下达方式来操作 shell, 之后,我们就可以透过 man 这个在线查询来查询命令的使用方式与参数说明, 很不错吧!那么我们就赶紧更进一步来操作 bash 这个好玩的东西啰!

bash shell的更多相关文章

  1. Bash Shell内建命令和保留字

    Bash Shell内建命令和保留字命令含义!保留字,逻辑非:不做任何事,只做参数展开.读取文件并在shell中执行它alias设置命令或命令行别名bg将作业置于后台运行bind将关键字序列与read ...

  2. Bash Shell 获取进程 PID

    转载地址:http://weyo.me/pages/techs/linux-get-pid/ 导读 Linux 的交互式 Shell 与 Shell 脚本存在一定的差异,主要是由于后者存在一个独立的运 ...

  3. Learning The Bash Shell读书笔记(整理)

    最近搞了一本书 Learning Bash Shell,发现有人已经写了阅读笔记,我就在这边整理一下 来自blog:http://blog.sina.com.cn/n4mine Learning Th ...

  4. bash shell命令(2)

    在上篇<bash shell命令(1)>中,介绍了几种简单的linux shell命令,今天继续介绍bash shell命令 本文地址:http://www.cnblogs.com/arc ...

  5. Linux命令行–基本的bash shell命令

    启动shell: /etc/passwd:包含系统用户账户列表以及每个用户的基本配置信息 每个条目有七个字段,每个字段用冒号隔开 用户名 用户密码 用户的系统UID 用户的系统GID 用户的全名 用户 ...

  6. linux bash shell 流程控制(if/else )

    本文转自:http://blog.csdn.net/flowingflying/article/details/5069646 本文也即<Learning the bash Shell>3 ...

  7. linux BASH shell设置字体与背景颜色

    linux BASH shell下设置字体及背景颜色的方法. BASH shell下设置字体及背景颜色  echo -e "\e[31mtest\e[41m"  \e[30m 将字 ...

  8. bash shell漏洞及测试

    1.bash shell是大多数linux发行版本的默认shell命令解释器,但是最近爆出bash shell存在漏洞. 2.如果Bash是默认的系统shell,网络攻击者可以通过发送Web请求.se ...

  9. ipython, 一个 python 的交互式 shell,比默认的python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许多很有用的功能和函数

    一个 python 的交互式 shell,比默认的python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许多很有用的功能和函数. 若用的是fish s ...

随机推荐

  1. ProxyPattern

    代理模式是aop编程的基础,其主要作用是操作对象,并将你需要的新功能切入若干个你想要的切入点,静态代理模式比较简单,但是缺点比较大,这里就不上代码了,下面写上动态代理模式的代码(jdk方式,而不是采用 ...

  2. Java基础知识回顾

    Java回顾之I/O Java回顾之网络通信 Java回顾之多线程 Java回顾之多线程同步 Java回顾之集合 Java回顾之序列化 Java回顾之反射 Java回顾之一些基础概念 Java回顾之J ...

  3. ASP.NET Core 运行原理剖析1:初始化WebApp模版并运行

    ASP.NET Core 运行原理剖析1:初始化WebApp模版并运行 核心框架 ASP.NET Core APP 创建与运行 总结 之前两篇文章简析.NET Core 以及与 .NET Framew ...

  4. Web 前端开发精华文章集锦(jQuery、HTML5、CSS3)【系列十七】

    <Web 前端开发精华文章推荐>2013年第五期(总第十七期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HTML5 和 C ...

  5. HTML5有特色的进度条

    查看效果:http://keleyi.com/keleyi/phtml/html5/26.htm 完整代码如下: <!DOCTYPE html> <html> <head ...

  6. 【blade04】用面向对象的方法写javascript坦克大战

    前言 javascript与程序的语言比如C#或者java不一样,他并没有“类”的概念,虽然最新的ECMAScript提出了Class的概念,我们却没有怎么用 就单以C#与Java来说,要到真正理解面 ...

  7. Http相关知识

    Http的无状态性 无状态是指,当浏览器发送请求给服务器的时候,服务器响应客户端的请求.但是当同一个浏览器再次发送请求给服务器的时候,服务器并不知道它就是刚才的浏览器.简单的说就是,服务器不会去记得你 ...

  8. Android 拍照后保证保证图片不失真,进行压缩

    今天在网上找了一下参考,得出把图片压缩至KB 其他不想多说.直接上代码 拍完照后调用下面代码 BitmapUtils.compressBitmap(photoPath, photoPath, 640) ...

  9. 【转载】ReactiveX 的理念和特点

    原作者地址:http://www.open-open.com/lib/view/open1440166491833.html ReactiveX是Reactive Extensions的缩写,一般简写 ...

  10. Android源码分析之Handler

    接上一篇分析,正如Android doc所说,Handler主要有2方面用处: 1. delay执行同一线程中的某个操作,也就是schedule message.runnable在未来的某一时刻执行: ...