- 浏览: 596271 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (669)
- oracle (36)
- java (98)
- spring (48)
- UML (2)
- hibernate (10)
- tomcat (7)
- 高性能 (11)
- mysql (25)
- sql (19)
- web (42)
- 数据库设计 (4)
- Nio (6)
- Netty (8)
- Excel (3)
- File (4)
- AOP (1)
- Jetty (1)
- Log4J (4)
- 链表 (1)
- Spring Junit4 (3)
- Autowired Resource (0)
- Jackson (1)
- Javascript (58)
- Spring Cache (2)
- Spring - CXF (2)
- Spring Inject (2)
- 汉字拼音 (3)
- 代理模式 (3)
- Spring事务 (4)
- ActiveMQ (6)
- XML (3)
- Cglib (2)
- Activiti (15)
- 附件问题 (1)
- javaMail (1)
- Thread (19)
- 算法 (6)
- 正则表达式 (3)
- 国际化 (2)
- Json (3)
- EJB (3)
- Struts2 (1)
- Maven (7)
- Mybatis (7)
- Redis (8)
- DWR (1)
- Lucene (2)
- Linux (73)
- 杂谈 (2)
- CSS (13)
- Linux服务篇 (3)
- Kettle (9)
- android (81)
- protocol (2)
- EasyUI (6)
- nginx (2)
- zookeeper (6)
- Hadoop (41)
- cache (7)
- shiro (3)
- HBase (12)
- Hive (8)
- Spark (15)
- Scala (16)
- YARN (3)
- Kafka (5)
- Sqoop (2)
- Pig (3)
- Vue (6)
- sprint boot (19)
- dubbo (2)
- mongodb (2)
最新评论
我们在第一章 Linux 是什么当中提到了: 管理整个计算机硬件的其实是操作系统的核心 (kernel),这个核心是需要被保护的! 所以我们一般使用者就只能透过 shell 来跟核心沟通,以让核心达到我们所想要达到的工作。 那么系统有多少 shell 可用呢?为什么我们要使用 bash 啊?底下分别来谈一谈喔!
硬件、核心与 Shell
这应该是个蛮有趣的话题:『什么是 Shell 』?相信只要摸过计算机,对于操作系统 (不论是 Linux 、 Unix 或者是 Windows) 有点概念的朋友们大多听过这个名词,因为只要有『操作系统』那么就离不开 Shell 这个东西。不过,在讨论 Shell 之前,我们先来了解一下计算机的运行状况吧! 举个例子来说:当你要计算机传输出来『音乐』的时候,你的计算机需要什么东西呢?
1.硬件:当然就是需要你的硬件有『声卡芯片』这个配备,否则怎么会有声音;
2.核心管理:操作系统的核心可以支持这个芯片组,当然还需要提供芯片的驱动程序啰;
3.应用程序:需要使用者 (就是你) 输入发生声音的命令啰!
这就是基本的一个输出声音所需要的步骤!也就是说,你必须要『输入』一个命令之后, 『硬件』才会透过你下达的命令来工作!那么硬件如何知道你下达的命令呢?那就是 kernel (核心) 的控制工作了!也就是说,我们必须要透过『 Shell 』将我们输入的命令与 Kernel 沟通,好让 Kernel 可以控制硬件来正确无误的工作! 基本上,我们可以透过底下这张图来说明一下:
tu
我们在第零章内的操作系统小节曾经提到过, 操作系统其实是一组软件,由于这组软件在控制整个硬件与管理系统的活动监测, 如果这组软件能被用户随意的操作,若使用者应用不当,将会使得整个系统崩溃!因为操作系统管理的就是整个硬件功能嘛! 所以当然不能够随便被一些没有管理能力的终端用户随意使用啰!
但是我们总是需要让用户操作系统的,所以就有了在操作系统上面发展的应用程序啦!用户可以透过应用程序来指挥核心, 让核心达成我们所需要的硬件任务!如果考虑如第零章所提供的操作系统图标(图4.2.1), 我们可以发现应用程序其实是在最外层,就如同鸡蛋的外壳一样,因此这个咚咚也就被称呼为壳程序 (shell) 啰!
其实壳程序的功能只是提供用户操作系统的一个接口,因此这个壳程序需要可以呼叫其他软件才好。 我们在第五章到第十章提到过很多命令,包括 man, chmod, chown, vi, fdisk, mkfs 等等命令,这些命令都是独立的应用程序, 但是我们可以透过壳程序 (就是命令列模式) 来操作这些应用程序,让这些应用程序呼叫核心来运行所需的工作哩! 这样对于壳程序是否有了一定的概念了?
为何要学文字接口的 shell?
文字接口的 shell 是很不好学的,但是学了之后好处多多!所以, 在这里鸟哥要先对您进行一些心理建设,先来了解一下为啥学习 shell 是有好处的,这样你才会有信心继续玩下去 ^_^
文字接口的 shell:大家都一样!
鸟哥常常听到这个问题:『我干嘛要学习 shell 呢? 不是已经有很多的工具可以提供我配置我的主机了?我为何要花这么多时间去学命令呢?不是以 X Window 按一按几个按钮就可以搞定了吗?』唉~还是得一再地强调, X Window 还有 Web 接口的配置工具例如 Webmin (注1) 是真的好用的家伙, 他真的可以帮助我们很简易的配置好我们的主机,甚至是一些很进阶的配置都可以帮我们搞定。
但是鸟哥在前面的章节里面也已经提到过相当多次了, X Window 与 web 接口的工具,他的接口虽然亲善,功能虽然强大, 但毕竟他是将所有利用到的软件都整合在一起的一组应用程序而已, 并非是一个完整的套件,所以某些时候当你升级或者是使用其他套件管理模块 (例如 tarball 而非 rpm 文件等等) 时,就会造成配置的困扰了。甚至不同的 distribution 所设计的 X window 接口也都不相同,这样也造成学习方面的困扰。
文字接口的 shell 就不同了!几乎各家 distributions 使用的 bash 都是一样的!如此一来, 你就能够轻轻松松的转换不同的 distributions ,就像武侠小说里面提到的『一法通、万法通!』
远程管理:文字接口就是比较快!
此外,Linux 的管理常常需要透过远程联机,而联机时文字接口的传输速度一定比较快, 而且,较不容易出现断线或者是信息外流的问题,因此,shell 真的是得学习的一项工具。而且,他可以让您更深入 Linux ,更了解他,而不是只会按一按鼠标而已!所谓『天助自助者!』多摸一点文本模式的东西,会让你与 Linux 更亲近呢!
Linux 的任督二脉: shell 是也!
有些朋友也很可爱,常会说:『我学这么多干什么? 又不常用,也用不到!』嘿嘿!有没有听过『书到用时方恨少?』 当你的主机一切安然无恙的时候,您当然会觉得好像学这么多的东西一点帮助也没有呀! 万一,某一天真的不幸给他中标了,您该如何是好?是直接重新安装? 还是先追踪入侵来源后进行漏洞的修补?或者是干脆就关站好了?这当然涉及很多的考虑, 但就以鸟哥的观点来看,多学一点总是好的,尤其我们可以有备而无患嘛!甚至学的不精也没有关系,了解概念也就 OK 啦!毕竟没有人要您一定要背这么多的内容啦!了解概念就很了不起了!
此外,如果你真的有心想要将您的主机管理的好,那么良好的 shell 程序编写是一定需要的啦!就鸟哥自己来说,鸟哥管理的主机虽然还不算多, 只有区区不到十部,但是如果每部主机都要花上几十分钟来查阅他的登录文件信息以及相关的信息, 那么鸟哥可能会疯掉!基本上,也太没有效率了!这个时候,如果能够藉由 shell 提供的数据流重导向以及管线命令,呵呵! 那么鸟哥分析登录信息只要花费不到十分钟就可以看完所有的主机之重要信息了!相当的好用呢!
由于学习 shell 的好处真的是多多啦!所以,如果你是个系统管理员,或者有心想要管理系统的话,那么 shell 与 shell scripts 这个东西真的有必要看一看!因为他就像『打通任督二脉,任何武功都能随你应用』的说!
系统的合法 shell 与 /etc/shells 功能
知道什么是 Shell 之后,那么我们来了解一下 Linux 使用的是哪一个 shell 呢?什么!哪一个?难道说 shell 不就是『一个 shell 吗?』哈哈!那可不!由于早年的 Unix 年代,发展者众,所以由于 shell 依据发展者的不同就有许多的版本,例如常听到的 Bourne SHell (sh) 、在 Sun 里头默认的 C SHell、 商业上常用的 K SHell、, 还有 TCSH 等等,每一种 Shell 都各有其特点。至于 Linux 使用的这一种版本就称为『 Bourne Again SHell (简称 bash) 』,这个 Shell 是 Bourne Shell 的增强版本,也是基准于 GNU 的架构下发展出来的呦!
在介绍 shell 的优点之前,先来说一说 shell 的简单历史吧(注2):第一个流行的 shell 是由 Steven Bourne 发展出来的,为了纪念他所以就称为 Bourne shell ,或直接简称为 sh !而后来另一个广为流传的 shell 是由柏克莱大学的 Bill Joy 设计依附于 BSD 版的 Unix 系统中的 shell ,这个 shell 的语法有点类似 C 语言,所以才得名为 C shell ,简称为 csh !由于在学术界 Sun 主机势力相当的庞大,而 Sun 主要是 BSD 的分支之一,所以 C shell 也是另一个很重要而且流传很广的 shell 之一 。
那么目前我们的 Linux (以 CentOS 5.x 为例) 有多少我们可以使用的 shells 呢? 你可以检查一下 /etc/shells 这个文件,至少就有底下这几个可以用的 shells:
虽然各家 shell 的功能都差不多,但是在某些语法的下达方面则有所不同,因此建议你还是得要选择某一种 shell 来熟悉一下较佳。 Linux 默认就是使用 bash ,所以最初你只要学会 bash 就非常了不起了! ^_^! 另外,咦!为什么我们系统上合法的 shell 要写入 /etc/shells 这个文件啊? 这是因为系统某些服务在运行过程中,会去检查使用者能够使用的 shells ,而这些 shell 的查询就是藉由 /etc/shells 这个文件啰!
举例来说,某些 FTP 网站会去检查使用者的可用 shell ,而如果你不想要让这些使用者使用 FTP 以外的主机资源时,可能会给予该使用者一些怪怪的 shell,让使用者无法以其他服务登陆主机。 这个时候,你就得将那些怪怪的 shell 写到 /etc/shells 当中了。举例来说,我们的 CentOS 5.x 的 /etc/shells 里头就有个 /sbin/nologin 文件的存在,这个就是我们说的怪怪的 shell 啰~
那么,再想一想,我这个使用者什么时候可以取得 shell 来工作呢?还有, 我这个使用者默认会取得哪一个 shell 啊?还记得我们在第五章的在终端界面登陆linux小节当中提到的登陆动作吧? 当我登陆的时候,系统就会给我一个 shell 让我来工作了。 而这个登陆取得的 shell 就记录在 /etc/passwd 这个文件内!这个文件的内容是啥?
如上所示,在每一行的最后一个数据,就是你登陆后可以取得的默认的 shell 啦!那你也会看到, root 是 /bin/bash ,不过,系统账号 bin 与 daemon 等等,就使用那个怪怪的 /sbin/nologin 啰~关于使用者这部分的内容,我们留在第十四章的账号管理时提供更多的说明。
Bash shell 的功能
既然 /bin/bash 是 Linux 默认的 shell ,那么总是得了解一下这个玩意儿吧!bash 是 GNU 计划中重要的工具软件之一,目前也是 Linux distributions 的标准 shell 。 bash 主要兼容于 sh ,并且依据一些使用者需求,而加强的 shell 版本。不论你使用的是那个 distribution ,你都难逃需要学习 bash 的宿命啦!那么这个 shell 有什么好处,干嘛 Linux 要使用他作为默认的 shell 呢? bash 主要的优点有底下几个:
命令编修能力 (history):
bash 的功能里头,鸟哥个人认为相当棒的一个就是『他能记忆使用过的命令!』 这功能真的相当的棒!因为我只要在命令列按『上下键』就可以找到前/后一个输入的命令!而在很多 distribution 里头,默认的命令记忆功能可以到达 1000 个!也就是说, 你曾经下达过的命令几乎都被记录下来了。
这么多的命令记录在哪里呢?在你的家目录内的 .bash_history 啦! 不过,需要留意的是,~/.bash_history 记录的是前一次登陆以前所运行过的命令, 而至于这一次登陆所运行的命令都被缓存在内存中,当你成功的注销系统后,该命令记忆才会记录到 .bash_history 当中!
这有什么功能呢?最大的好处就是可以『查询曾经做过的举动!』 如此可以知道你的运行步骤,那么就可以追踪你曾下达过的命令,以作为除错的工具! 但如此一来也有个烦恼,就是如果被黑客入侵了,那么他只要翻你曾经运行过的命令, 刚好你的命令又跟系统有关 (例如直接输入 MySQL 的密码在命令列上面),那你的主机可就伤脑筋了! 到底记录命令的数目越多还是越少越好?这部份是见仁见智啦,没有一定的答案的。
命令与文件补全功能: ([tab] 按键的好处)
还记得我们在第五章内的重要的几个热键小节当中提到的 [tab] 这个按键吗?这个按键的功能就是在 bash 里头才有的啦!常常在 bash 环境中使用 [tab] 是个很棒的习惯喔!因为至少可以让你 1)少打很多字; 2)确定输入的数据是正确的! 使用 [tab] 按键的时机依据 [tab] 接在命令后或参数后而有所不同。我们再复习一次:
1.[Tab] 接在一串命令的第一个字的后面,则为命令补全;
2.[Tab] 接在一串命令的第二个字以后时,则为『文件补齐』!
所以说,如果我想要知道我的环境中,所有可以运行的命令有几个? 就直接在 bash 的提示字符后面连续按两次 [tab] 按键就能够显示所有的可运行命令了。 那如果想要知道系统当中所有以 c 为开头的命令呢?就按下『 c[tab][tab] 』就好啦! ^_^
是的!真的是很方便的功能,所以,有事没事,在 bash shell 底下,多按几次 [tab] 是一个不错的习惯啦!
命令别名配置功能: (alias)
假如我需要知道这个目录底下的所有文件 (包含隐藏档) 及所有的文件属性,那么我就必须要下达『 ls -al 』这样的命令串,唉!真麻烦,有没有更快的取代方式?呵呵!就使用命令别名呀!例如鸟哥最喜欢直接以 lm 这个自定义的命令来取代上面的命令,也就是说, lm 会等于 ls -al 这样的一个功能,嘿!那么要如何作呢?就使用 alias 即可!你可以在命令列输入 alias 就可以知道目前的命令别名有哪些了!也可以直接下达命令来配置别名呦:
工作控制、前景背景控制: (job control, foreground, background)
这部分我们在第十七章 Linux 过程控制中再提及! 使用前、背景的控制可以让工作进行的更为顺利!至于工作控制(jobs)的用途则更广, 可以让我们随时将工作丢到背景中运行!而不怕不小心使用了 [Ctrl] + c 来停掉该程序!真是好样的!此外,也可以在单一登录的环境中,达到多任务的目的呢!
程序化脚本: (shell scripts)
在 DOS 年代还记得将一堆命令写在一起的所谓的『批处理文件』吧?在 Linux 底下的 shell scripts 则发挥更为强大的功能,可以将你平时管理系统常需要下达的连续命令写成一个文件, 该文件并且可以透过对谈交互式的方式来进行主机的侦测工作!也可以藉由 shell 提供的环境变量及相关命令来进行设计,哇!整个设计下来几乎就是一个小型的程序语言了!该 scripts 的功能真的是超乎我的想象之外!以前在 DOS 底下需要程序语言才能写的东西,在 Linux 底下使用简单的 shell scripts 就可以帮你达成了!真的厉害!这部分我们在第十三章再来谈!
通配符: (Wildcard)
除了完整的字符串之外, bash 还支持许多的通配符来帮助用户查询与命令下达。 举例来说,想要知道 /usr/bin 底下有多少以 X 为开头的文件吗?使用:『 ls -l /usr/bin/X* 』就能够知道啰~此外,还有其他可供利用的通配符, 这些都能够加快使用者的操作呢!
Bash shell 的内建命令: type
我们在第五章提到关于 Linux 的联机帮助文件部分,也就是 man page 的内容,那么 bash 有没有什么说明文件啊?开玩笑~ 这么棒的东西怎么可能没有说明文件!请你在 shell 的环境下,直接输入 man bash 瞧一瞧, 嘿嘿!不是盖的吧!让你看个几天几夜也无法看完的 bash 说明文件,可是很详尽的数据啊! ^_^
不过,在这个 bash 的 man page 当中,不知道你是否有察觉到,咦! 怎么这个说明文件里面有其他的文件说明啊?举例来说,那个 cd 命令的说明就在这个 man page 内? 然后我直接输入 man cd 时,怎么出现的画面中,最上方竟然出现一堆命令的介绍?这是怎么回事? 为了方便 shell 的操作,其实 bash 已经『内建』了很多命令了,例如上面提到的 cd , 还有例如 umask 等等的命令,都是内建在 bash 当中的呢!
那我怎么知道这个命令是来自于外部命令(指的是其他非 bash 所提供的命令) 或是内建在 bash 当中的呢? 嘿嘿!利用 type 这个命令来观察即可!举例来说:
透过 type 这个命令我们可以知道每个命令是否为 bash 的内建命令。 此外,由于利用 type 搜寻后面的名称时,如果后面接的名称并不能以运行档的状态被找到, 那么该名称是不会被显示出来的。也就是说, type 主要在找出『运行档』而不是一般文件档名喔! 呵呵!所以,这个 type 也可以用来作为类似 which 命令的用途啦!找命令用的!
命令的下达
我们在第五章的开始下达命令小节已经提到过在 shell 环境下的命令下达方法,如果你忘记了请回到第五章再去回忆一下!这里不重复说明了。 鸟哥这里仅就反斜杠 (\) 来说明一下命令下达的方式啰!
上面这个命令用途是将三个文件复制到 /root 这个目录下而已。不过,因为命令太长, 于是鸟哥就利用『 \[Enter] 』来将 [Enter] 这个按键『跳脱!』开来,让 [Enter] 按键不再具有『开始运行』的功能!好让命令可以继续在下一行输入。 需要特别留意, [Enter] 按键是紧接着反斜杠 (\) 的,两者中间没有其他字符。 因为 \ 仅跳脱『紧接着的下一个字符』而已!所以,万一我写成: 『 \ [Enter] 』,亦即 [Enter] 与反斜杠中间有一个空格时,则 \ 跳脱的是『空格键』而不是 [Enter] 按键!这个地方请再仔细的看一遍!很重要!
如果顺利跳脱 [Enter] 后,下一行最前面就会主动出现 > 的符号, 你可以继续输入命令啰!也就是说,那个 > 是系统自动出现的,你不需要输入。
总之,当我们顺利的在终端机 (tty) 上面登陆后, Linux 就会依据 /etc/passwd 文件的配置给我们一个 shell (默认是 bash),然后我们就可以依据上面的命令下达方式来操作 shell, 之后,我们就可以透过 man 这个在线查询来查询命令的使用方式与参数说明, 很不错吧!那么我们就赶紧更进一步来操作 bash 这个好玩的东西啰!
转自:http://vbird.dic.ksu.edu.tw/linux_basic/0320bash_1.php
硬件、核心与 Shell
这应该是个蛮有趣的话题:『什么是 Shell 』?相信只要摸过计算机,对于操作系统 (不论是 Linux 、 Unix 或者是 Windows) 有点概念的朋友们大多听过这个名词,因为只要有『操作系统』那么就离不开 Shell 这个东西。不过,在讨论 Shell 之前,我们先来了解一下计算机的运行状况吧! 举个例子来说:当你要计算机传输出来『音乐』的时候,你的计算机需要什么东西呢?
1.硬件:当然就是需要你的硬件有『声卡芯片』这个配备,否则怎么会有声音;
2.核心管理:操作系统的核心可以支持这个芯片组,当然还需要提供芯片的驱动程序啰;
3.应用程序:需要使用者 (就是你) 输入发生声音的命令啰!
这就是基本的一个输出声音所需要的步骤!也就是说,你必须要『输入』一个命令之后, 『硬件』才会透过你下达的命令来工作!那么硬件如何知道你下达的命令呢?那就是 kernel (核心) 的控制工作了!也就是说,我们必须要透过『 Shell 』将我们输入的命令与 Kernel 沟通,好让 Kernel 可以控制硬件来正确无误的工作! 基本上,我们可以透过底下这张图来说明一下:
tu
我们在第零章内的操作系统小节曾经提到过, 操作系统其实是一组软件,由于这组软件在控制整个硬件与管理系统的活动监测, 如果这组软件能被用户随意的操作,若使用者应用不当,将会使得整个系统崩溃!因为操作系统管理的就是整个硬件功能嘛! 所以当然不能够随便被一些没有管理能力的终端用户随意使用啰!
但是我们总是需要让用户操作系统的,所以就有了在操作系统上面发展的应用程序啦!用户可以透过应用程序来指挥核心, 让核心达成我们所需要的硬件任务!如果考虑如第零章所提供的操作系统图标(图4.2.1), 我们可以发现应用程序其实是在最外层,就如同鸡蛋的外壳一样,因此这个咚咚也就被称呼为壳程序 (shell) 啰!
其实壳程序的功能只是提供用户操作系统的一个接口,因此这个壳程序需要可以呼叫其他软件才好。 我们在第五章到第十章提到过很多命令,包括 man, chmod, chown, vi, fdisk, mkfs 等等命令,这些命令都是独立的应用程序, 但是我们可以透过壳程序 (就是命令列模式) 来操作这些应用程序,让这些应用程序呼叫核心来运行所需的工作哩! 这样对于壳程序是否有了一定的概念了?
为何要学文字接口的 shell?
文字接口的 shell 是很不好学的,但是学了之后好处多多!所以, 在这里鸟哥要先对您进行一些心理建设,先来了解一下为啥学习 shell 是有好处的,这样你才会有信心继续玩下去 ^_^
文字接口的 shell:大家都一样!
鸟哥常常听到这个问题:『我干嘛要学习 shell 呢? 不是已经有很多的工具可以提供我配置我的主机了?我为何要花这么多时间去学命令呢?不是以 X Window 按一按几个按钮就可以搞定了吗?』唉~还是得一再地强调, X Window 还有 Web 接口的配置工具例如 Webmin (注1) 是真的好用的家伙, 他真的可以帮助我们很简易的配置好我们的主机,甚至是一些很进阶的配置都可以帮我们搞定。
但是鸟哥在前面的章节里面也已经提到过相当多次了, X Window 与 web 接口的工具,他的接口虽然亲善,功能虽然强大, 但毕竟他是将所有利用到的软件都整合在一起的一组应用程序而已, 并非是一个完整的套件,所以某些时候当你升级或者是使用其他套件管理模块 (例如 tarball 而非 rpm 文件等等) 时,就会造成配置的困扰了。甚至不同的 distribution 所设计的 X window 接口也都不相同,这样也造成学习方面的困扰。
文字接口的 shell 就不同了!几乎各家 distributions 使用的 bash 都是一样的!如此一来, 你就能够轻轻松松的转换不同的 distributions ,就像武侠小说里面提到的『一法通、万法通!』
远程管理:文字接口就是比较快!
此外,Linux 的管理常常需要透过远程联机,而联机时文字接口的传输速度一定比较快, 而且,较不容易出现断线或者是信息外流的问题,因此,shell 真的是得学习的一项工具。而且,他可以让您更深入 Linux ,更了解他,而不是只会按一按鼠标而已!所谓『天助自助者!』多摸一点文本模式的东西,会让你与 Linux 更亲近呢!
Linux 的任督二脉: shell 是也!
有些朋友也很可爱,常会说:『我学这么多干什么? 又不常用,也用不到!』嘿嘿!有没有听过『书到用时方恨少?』 当你的主机一切安然无恙的时候,您当然会觉得好像学这么多的东西一点帮助也没有呀! 万一,某一天真的不幸给他中标了,您该如何是好?是直接重新安装? 还是先追踪入侵来源后进行漏洞的修补?或者是干脆就关站好了?这当然涉及很多的考虑, 但就以鸟哥的观点来看,多学一点总是好的,尤其我们可以有备而无患嘛!甚至学的不精也没有关系,了解概念也就 OK 啦!毕竟没有人要您一定要背这么多的内容啦!了解概念就很了不起了!
此外,如果你真的有心想要将您的主机管理的好,那么良好的 shell 程序编写是一定需要的啦!就鸟哥自己来说,鸟哥管理的主机虽然还不算多, 只有区区不到十部,但是如果每部主机都要花上几十分钟来查阅他的登录文件信息以及相关的信息, 那么鸟哥可能会疯掉!基本上,也太没有效率了!这个时候,如果能够藉由 shell 提供的数据流重导向以及管线命令,呵呵! 那么鸟哥分析登录信息只要花费不到十分钟就可以看完所有的主机之重要信息了!相当的好用呢!
由于学习 shell 的好处真的是多多啦!所以,如果你是个系统管理员,或者有心想要管理系统的话,那么 shell 与 shell scripts 这个东西真的有必要看一看!因为他就像『打通任督二脉,任何武功都能随你应用』的说!
系统的合法 shell 与 /etc/shells 功能
知道什么是 Shell 之后,那么我们来了解一下 Linux 使用的是哪一个 shell 呢?什么!哪一个?难道说 shell 不就是『一个 shell 吗?』哈哈!那可不!由于早年的 Unix 年代,发展者众,所以由于 shell 依据发展者的不同就有许多的版本,例如常听到的 Bourne SHell (sh) 、在 Sun 里头默认的 C SHell、 商业上常用的 K SHell、, 还有 TCSH 等等,每一种 Shell 都各有其特点。至于 Linux 使用的这一种版本就称为『 Bourne Again SHell (简称 bash) 』,这个 Shell 是 Bourne Shell 的增强版本,也是基准于 GNU 的架构下发展出来的呦!
在介绍 shell 的优点之前,先来说一说 shell 的简单历史吧(注2):第一个流行的 shell 是由 Steven Bourne 发展出来的,为了纪念他所以就称为 Bourne shell ,或直接简称为 sh !而后来另一个广为流传的 shell 是由柏克莱大学的 Bill Joy 设计依附于 BSD 版的 Unix 系统中的 shell ,这个 shell 的语法有点类似 C 语言,所以才得名为 C shell ,简称为 csh !由于在学术界 Sun 主机势力相当的庞大,而 Sun 主要是 BSD 的分支之一,所以 C shell 也是另一个很重要而且流传很广的 shell 之一 。
那么目前我们的 Linux (以 CentOS 5.x 为例) 有多少我们可以使用的 shells 呢? 你可以检查一下 /etc/shells 这个文件,至少就有底下这几个可以用的 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 的功能都差不多,但是在某些语法的下达方面则有所不同,因此建议你还是得要选择某一种 shell 来熟悉一下较佳。 Linux 默认就是使用 bash ,所以最初你只要学会 bash 就非常了不起了! ^_^! 另外,咦!为什么我们系统上合法的 shell 要写入 /etc/shells 这个文件啊? 这是因为系统某些服务在运行过程中,会去检查使用者能够使用的 shells ,而这些 shell 的查询就是藉由 /etc/shells 这个文件啰!
举例来说,某些 FTP 网站会去检查使用者的可用 shell ,而如果你不想要让这些使用者使用 FTP 以外的主机资源时,可能会给予该使用者一些怪怪的 shell,让使用者无法以其他服务登陆主机。 这个时候,你就得将那些怪怪的 shell 写到 /etc/shells 当中了。举例来说,我们的 CentOS 5.x 的 /etc/shells 里头就有个 /sbin/nologin 文件的存在,这个就是我们说的怪怪的 shell 啰~
那么,再想一想,我这个使用者什么时候可以取得 shell 来工作呢?还有, 我这个使用者默认会取得哪一个 shell 啊?还记得我们在第五章的在终端界面登陆linux小节当中提到的登陆动作吧? 当我登陆的时候,系统就会给我一个 shell 让我来工作了。 而这个登陆取得的 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 啦!那你也会看到, root 是 /bin/bash ,不过,系统账号 bin 与 daemon 等等,就使用那个怪怪的 /sbin/nologin 啰~关于使用者这部分的内容,我们留在第十四章的账号管理时提供更多的说明。
Bash shell 的功能
既然 /bin/bash 是 Linux 默认的 shell ,那么总是得了解一下这个玩意儿吧!bash 是 GNU 计划中重要的工具软件之一,目前也是 Linux distributions 的标准 shell 。 bash 主要兼容于 sh ,并且依据一些使用者需求,而加强的 shell 版本。不论你使用的是那个 distribution ,你都难逃需要学习 bash 的宿命啦!那么这个 shell 有什么好处,干嘛 Linux 要使用他作为默认的 shell 呢? bash 主要的优点有底下几个:
命令编修能力 (history):
bash 的功能里头,鸟哥个人认为相当棒的一个就是『他能记忆使用过的命令!』 这功能真的相当的棒!因为我只要在命令列按『上下键』就可以找到前/后一个输入的命令!而在很多 distribution 里头,默认的命令记忆功能可以到达 1000 个!也就是说, 你曾经下达过的命令几乎都被记录下来了。
这么多的命令记录在哪里呢?在你的家目录内的 .bash_history 啦! 不过,需要留意的是,~/.bash_history 记录的是前一次登陆以前所运行过的命令, 而至于这一次登陆所运行的命令都被缓存在内存中,当你成功的注销系统后,该命令记忆才会记录到 .bash_history 当中!
这有什么功能呢?最大的好处就是可以『查询曾经做过的举动!』 如此可以知道你的运行步骤,那么就可以追踪你曾下达过的命令,以作为除错的工具! 但如此一来也有个烦恼,就是如果被黑客入侵了,那么他只要翻你曾经运行过的命令, 刚好你的命令又跟系统有关 (例如直接输入 MySQL 的密码在命令列上面),那你的主机可就伤脑筋了! 到底记录命令的数目越多还是越少越好?这部份是见仁见智啦,没有一定的答案的。
命令与文件补全功能: ([tab] 按键的好处)
还记得我们在第五章内的重要的几个热键小节当中提到的 [tab] 这个按键吗?这个按键的功能就是在 bash 里头才有的啦!常常在 bash 环境中使用 [tab] 是个很棒的习惯喔!因为至少可以让你 1)少打很多字; 2)确定输入的数据是正确的! 使用 [tab] 按键的时机依据 [tab] 接在命令后或参数后而有所不同。我们再复习一次:
1.[Tab] 接在一串命令的第一个字的后面,则为命令补全;
2.[Tab] 接在一串命令的第二个字以后时,则为『文件补齐』!
所以说,如果我想要知道我的环境中,所有可以运行的命令有几个? 就直接在 bash 的提示字符后面连续按两次 [tab] 按键就能够显示所有的可运行命令了。 那如果想要知道系统当中所有以 c 为开头的命令呢?就按下『 c[tab][tab] 』就好啦! ^_^
是的!真的是很方便的功能,所以,有事没事,在 bash shell 底下,多按几次 [tab] 是一个不错的习惯啦!
命令别名配置功能: (alias)
假如我需要知道这个目录底下的所有文件 (包含隐藏档) 及所有的文件属性,那么我就必须要下达『 ls -al 』这样的命令串,唉!真麻烦,有没有更快的取代方式?呵呵!就使用命令别名呀!例如鸟哥最喜欢直接以 lm 这个自定义的命令来取代上面的命令,也就是说, lm 会等于 ls -al 这样的一个功能,嘿!那么要如何作呢?就使用 alias 即可!你可以在命令列输入 alias 就可以知道目前的命令别名有哪些了!也可以直接下达命令来配置别名呦:
alias lm='ls -al'
工作控制、前景背景控制: (job control, foreground, background)
这部分我们在第十七章 Linux 过程控制中再提及! 使用前、背景的控制可以让工作进行的更为顺利!至于工作控制(jobs)的用途则更广, 可以让我们随时将工作丢到背景中运行!而不怕不小心使用了 [Ctrl] + c 来停掉该程序!真是好样的!此外,也可以在单一登录的环境中,达到多任务的目的呢!
程序化脚本: (shell scripts)
在 DOS 年代还记得将一堆命令写在一起的所谓的『批处理文件』吧?在 Linux 底下的 shell scripts 则发挥更为强大的功能,可以将你平时管理系统常需要下达的连续命令写成一个文件, 该文件并且可以透过对谈交互式的方式来进行主机的侦测工作!也可以藉由 shell 提供的环境变量及相关命令来进行设计,哇!整个设计下来几乎就是一个小型的程序语言了!该 scripts 的功能真的是超乎我的想象之外!以前在 DOS 底下需要程序语言才能写的东西,在 Linux 底下使用简单的 shell scripts 就可以帮你达成了!真的厉害!这部分我们在第十三章再来谈!
通配符: (Wildcard)
除了完整的字符串之外, bash 还支持许多的通配符来帮助用户查询与命令下达。 举例来说,想要知道 /usr/bin 底下有多少以 X 为开头的文件吗?使用:『 ls -l /usr/bin/X* 』就能够知道啰~此外,还有其他可供利用的通配符, 这些都能够加快使用者的操作呢!
Bash shell 的内建命令: type
我们在第五章提到关于 Linux 的联机帮助文件部分,也就是 man page 的内容,那么 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 命令的用途啦!找命令用的!
命令的下达
我们在第五章的开始下达命令小节已经提到过在 shell 环境下的命令下达方法,如果你忘记了请回到第五章再去回忆一下!这里不重复说明了。 鸟哥这里仅就反斜杠 (\) 来说明一下命令下达的方式啰!
范例:如果命令串太长的话,如何使用两行来输出? [vbird@www ~]# cp /var/spool/mail/root /etc/crontab \ > /etc/fstab /root
上面这个命令用途是将三个文件复制到 /root 这个目录下而已。不过,因为命令太长, 于是鸟哥就利用『 \[Enter] 』来将 [Enter] 这个按键『跳脱!』开来,让 [Enter] 按键不再具有『开始运行』的功能!好让命令可以继续在下一行输入。 需要特别留意, [Enter] 按键是紧接着反斜杠 (\) 的,两者中间没有其他字符。 因为 \ 仅跳脱『紧接着的下一个字符』而已!所以,万一我写成: 『 \ [Enter] 』,亦即 [Enter] 与反斜杠中间有一个空格时,则 \ 跳脱的是『空格键』而不是 [Enter] 按键!这个地方请再仔细的看一遍!很重要!
如果顺利跳脱 [Enter] 后,下一行最前面就会主动出现 > 的符号, 你可以继续输入命令啰!也就是说,那个 > 是系统自动出现的,你不需要输入。
总之,当我们顺利的在终端机 (tty) 上面登陆后, Linux 就会依据 /etc/passwd 文件的配置给我们一个 shell (默认是 bash),然后我们就可以依据上面的命令下达方式来操作 shell, 之后,我们就可以透过 man 这个在线查询来查询命令的使用方式与参数说明, 很不错吧!那么我们就赶紧更进一步来操作 bash 这个好玩的东西啰!
转自:http://vbird.dic.ksu.edu.tw/linux_basic/0320bash_1.php
发表评论
文章已被作者锁定,不允许评论。
-
Linux ubuntu配置SSH免密登陆
2017-05-05 16:15 4611、安装 Ubuntu14.04默认安装了ssh-client ... -
Linux ubuntu虚拟机连接上网总结
2017-05-05 13:37 5111.首先查看主机的ip信息 ipconfig /all ... -
Linux七个运行级别
2015-03-03 09:20 542运行级别就是操作系统当前正在运行的功能级别。级别是从0到6,具 ... -
第二十四章 CentOS 系统配置工具: setup
2014-10-30 20:05 671系统配置除了使用手动 ... -
第二十二章 启动过程的问题解决
2014-10-28 19:34 421很多时候,我们可能因 ... -
第二十二章 Boot Loader: Grub
2014-10-27 19:44 567在看完了前面的整个启 ... -
第二十二章 核心与核心模块
2014-10-23 19:28 342谈完了整个启动的流程 ... -
第二十二章 Linux 的启动流程分析
2014-10-22 20:08 389启动不是只要按一下电 ... -
第二十一章 管理的抉择:RPM 还是 Tarball
2014-10-20 19:24 499这一直是个有趣的问题 ... -
第二十一章 YUM 线上升级机制
2014-10-15 19:33 525我们在本章一开始的地方谈到过 yum 这玩意儿,这个 yum ... -
第二十一章 SRPM 的使用 : rpmbuild
2014-10-14 19:44 955谈完了 RPM 类型的软件之后,再来我们谈一谈包含了 Sour ... -
第二十一章 RPM 软件管理程序: rpm
2014-10-13 20:10 449RPM 的使用其实不难,只要使用 rpm 这个命令即可!鸟哥最 ... -
第二十章 函式库管理
2014-10-13 19:25 475在我们的 Linux 操作系统 ... -
第二十章 Tarball 的管理与建议
2014-10-10 19:54 491在我们知道了原始码的 ... -
第二十章 用 make 进行巨集编译
2014-10-09 20:04 529在本章一开始我们提到过 make 的功能是可以简化编译过程里面 ... -
第二十章 开放源码的软件安装与升级简介
2014-10-09 19:47 439如果鸟哥想要在我的 Lin ... -
第十九章 分析登录文件
2014-10-08 19:34 408登录文件的分析是很重要的!你可以自行以 vi 进入登录文 ... -
第十九章 登录文件的轮替(logrotate)
2014-10-08 19:28 511假设我们已经将登 ... -
第十九章 syslogd :记录登录文件的服务
2014-09-28 20:11 678刚刚提到说 Linux 的登录文件主要是由 syslogd 在 ... -
第十八章 系统开启的服务
2014-09-25 19:33 715好了,现在假设你已经知道了 daemons 的启动文件放置的目 ...
相关推荐
【认识 BASH 这个 Shell】 BASH,全称Bourne-Again SHell,是Linux系统中最常用的Shell之一,尤其对于初学者来说是必须掌握的基础工具。它是一种命令解释器,允许用户通过文本界面与操作系统内核进行交互,执行各种...
第11章 认识Bash Shell 第12章 正则表达式 第13章 学习Shell脚本 第四部分 Linux用户管理 第14章 Linux账号与身份管理 第15章 Linux磁盘配额 第16章 例行性命令的建立 第17章 ...
第十一章“Shell重定向”讲解了如何改变程序的标准输入、输出和错误输出,使得数据可以被重定向到文件、管道或其他进程。这是实现数据流程控制的关键,也是Shell强大之处的体现。 第十二章“管道和过滤器”则涉及...
第11章 认识与学习bash 第12章 正则表达式与文件格式化处理 第13章 学习shell script 第四部分 Linux使用者管理 第14章 Linux账号管理与ACL权限设置 第15章 磁盘配额(Quota)与高级文件系统管理 第16章 例行性...
第0章 计算机概论 第1章 Linux是什么 第2章 Linux 如何学习 第3章 主机规划与磁盘分区 第4章 安装Centos5.x 与多重引导...第11章 认识与学习BASH 第12章 正规表示法与文件格式化处理 第13章 学习Shell Scripts ........
教程名称:老段带你学鸟哥Linux(第三版)视频教程课程目录:【】第10章:vim程序编辑器【】第11章:认识与学习bash【】第12章:正则表达式与文件格式化处理【】第13章:学习shell script【】第14章:Linux...
- Shell脚本可以接收命令行参数,`$0`表示脚本本身,`$1`到`$9`分别表示第一个到第九个参数。 - `shift`命令可以改变参数的位置,`shift 2`会将`$3`变成新的`$1`。 6. **控制结构** - 条件测试:`if`、`[[`和`...
"第11课认识和学习bash.pptx"将介绍Bash shell,它是Linux中最常用的命令解释器。Bash提供了强大的脚本编写能力,通过学习Bash,用户可以编写自动化任务,提高工作效率。 "第14课Shell编程.pptx"则进一步深入到...
第11章可能是高级主题,如进程调度、内存管理和设备驱动。这部分内容对于系统管理员和开发者来说非常重要,因为它涉及到如何优化系统性能和处理硬件资源。 每个章节都通过PDF文档的形式提供,这使得你可以方便地...
第十一讲:Linux系统监控 在这一讲中,你将学习如何监控Linux系统的性能,包括CPU、内存、磁盘I/O等资源的使用情况,以及日志分析。 第十二讲:Linux安全与防火墙 本讲将介绍Linux的基本安全措施,如防火墙iptables...
- 第十一个字段表示文件所有者。 - 第十二个字段表示文件所属组。 - 第十三个字段表示文件大小(以字节为单位)。 - 最后两个字段表示最后修改的时间和日期以及文件名。 - **示例四**:使用`-R`参数递归显示当前...
理解shell命令行工具,如grep、sed、awk以及bash脚本的基本语法,对于自动化运维至关重要。同时,了解Linux系统管理,如用户权限、服务管理、网络配置等,也是运维人员的基础。 **测试** 软件测试包括单元测试、...
《Linux私房菜》第三版中涵盖了以下几个主要的知识点: 1. **Linux基础知识**:包括Linux的历史、哲学以及发行版的选择,让读者对Linux有基本的认识。 2. **Linux安装与启动**:介绍了如何安装Linux系统,理解GRUB...
11. **脚本编程**:介绍了bash shell脚本的编写,包括变量、流程控制、函数,以及正则表达式的应用。 12. **虚拟化技术**:简述了虚拟化的基本概念,如KVM、VirtualBox和Docker,以及它们在Linux环境中的应用。 ...
- Bash Shell的基本用法。 - **知识点7**:Shell脚本编写 - 脚本的创建、编辑和执行流程。 - 常见Shell脚本示例解析。 - **第四部分:Linux使用者管理** - **知识点8**:用户账户管理 - 用户账户的添加、修改...
在IT领域,UNIX操作系统是一个历史悠久且广泛应用于服务器、科学计算及工程领域的系统。...这份"UNIX初级教程"将是你踏入这个强大世界的第一步,使用超星阅读器打开后,相信你会对UNIX有更全面的认识。
1. **Linux系统概述**:介绍Linux的发展历程、特点、应用领域,以及与Unix的关系,让读者对Linux有一个全面的认识。 2. **Linux安装**:包括各种Linux发行版的安装过程,涵盖了硬盘安装、网络安装、LiveCD/DVD安装...
- **Bash (Bourne Again Shell)**: 默认的Shell环境之一,支持丰富的脚本功能。 - **Ksh (Korn Shell)**: 结合了Bash和Csh的优点,兼容性较好。 - **Csh (C Shell)**: 特别适合编写简单的脚本,但在Solaris系统中...