⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 0320bash.htm

📁 鸟哥的linux私房菜
💻 HTM
📖 第 1 页 / 共 5 页
字号:
		<a href="#set">set</a>, <a href="#export">export</a><br>
	    2.4 <a href="#variable_locale">语系档案的变数 (locale)</a><br>
	    2.5 <a href="#variable_range">变数的有效范围</a>∶<br>
	    2.6 <a href="#variable_read">变数键盘读取、阵列与宣告</a>∶ <a href="#read">read</a>, 
		<a href="#declare">declare</a>, <a href="#array">array</a><br>
	    2.7 <a href="#variable_ulimit">与档案系统及程序的限制关系∶ ulimit</a><br>
	    2.8 <a href="#variable_other">其他额外变数功能</a><br>
	</span>
3. <a href="#alias_history">命令别名与历史命令∶</a><br>
	<span class=text_h2>
	    3.1 <a href="#alias">命令别名设定∶ alias, unalias</a><br>
	    3.2 <a href="#history">历史命令∶ history, HISTSIZE</a><br>
	</span>
4. <a href="#settings">Bash shell 使用环境∶</a><br>
	<span class=text_h2>
	    4.1 <a href="#settings_path">绝对路径与相对路径</a><br>
	    4.2 <a href="#settings_issue">登录讯息显示资料∶ /etc/issue, /etc/motd</a><br>
	    4.3 <a href="#settings_bashrc">环境设定档∶</a> bashrc, ~/.bashrc, ~/.profile, profile...,/etc/inputrc, source<br>
	    4.4 <a href="#settings_set">终端机的环境设定∶ stty, set</a><br>
	    4.5 <a href="#settings_wildcard">万用字元与特殊符号∶</a><br>
	</span>
5. <a href="#redirect">资料流重导向 (redirecte)</a><br>
	<span class=text_h2>
	    5.1 <a href="#redirect_redirect">何谓资料流重导向?</a><br>
	    5.2 <a href="#redirect_com">命令执行的判断依据∶ ; , &&, ||</a><br>
	</span>
6. <a href="#pipe">管线命令 (pipe)∶</a><br>
	<span class=text_h2>
	    6.1 <a href="#pipe_1">撷取命令∶</a> <a href="#cut">cut</a>, <a href="#grep">grep</a><br>
	    6.2 <a href="#pipe_2">排序命令∶</a> <a href="#sort">sort</a>, <a href="#wc">wc</a>, 
		<a href="#uniq">uniq</a><br>
	    6.3 <a href="#pipe_3">双向重导向∶</a> <a href="#tee">tee</a><br>
	    6.4 <a href="#pipe_4">字元转换命令∶</a> <a href="#tr">tr</a>, <a href="#col">col</a>, 
		<a href="#join">join</a>, <a href="#paste">paste</a>, <a href="#expand">expand</a><br>
	    6.5 <a href="#split">分割命令∶ split</a><br>
	    6.6 <a href="#xargs">参数代换∶ xargs</a><br>
	    6.7 <a href="#pipe_7">关于减号 - 的用途</a><br>
	</span>
7. <a href="#FAQ">本章习题练习</a><br>
<span class=text_h2>
8. <a href="http://phorum.vbird.org/viewtopic.php?t=23884"
    target="_blank">针对本文的建议∶http://phorum.vbird.org/viewtopic.php?t=23884</a>
</span>
</span>
</div>

<!-- 本文的正式部分 -->
<hr><a NAME="bash"></a><img src="images/penguin-m.gif" alt="大标题的图示" height="34" width="25" align="middle" /><span class="text_h1">Bash shell</span><br>
<div class=block1>
	我们在前面的 <a href="0110whatislinux.php">什么是 Linux</a> 那个章节当中,提到了,
	管理整个硬体的其实是核心 (kernel),那我们一般使用者 (user) 则是以 shell 来跟核心沟通~
	让核心达到我们所想要达到的工作目的。那么系统有多少 shell 可用呢?
	为什么我们要使用 bash 啊?!底下分别来谈一谈喔!<br><br>

	<hr><a name=bash_what></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class=text_h2>什么是 Shell?</span><br>
	<div class=block2>
		这应该是个蛮有趣的话题∶『<span class=text_import2>什么是 Shell</span>
		?』相信只要摸过电脑,对于作业系统 ( 不论是 Linux 、 Unix 或者是 Windows
		) 有点概念的朋友们大多听过这个名词,因为只要有『作业系统』那么就离不开
		Shell 这个东西。不过,在讨论 Shell 之前,我们先来了解一下电脑的运作状况吧!
		举个例子来说∶<span class=text_import2>当你要电脑传输出来『音乐』的时候,你的电脑需要什么东西呢</span>?
		<ol>
		<li>当然就是需要你的硬体有『音效卡晶片』这个硬体配备,否则怎么会有声音;</li>
		<li>作业系统的核心可以支援这个晶片组,当然还需要提供晶片的驱动程式棉;</li>
		<li>需要使用者(就是你)输入发生声音的指令棉!</li>
		</ol>
		这就是基本的一个输出声音的需要的步骤!那么也就是说,你必须要『输入』一个指令之后,
		『硬体』才会透过你下达的指令来工作!嘿嘿!那么硬体如何知道你下达的指令呢?那就是
		kernel (核心)的控制工作了!了解了吗?没错!也就是说,<span class=text_import2>我们必须要透过『
		Shell 』将我们输入的指令与 Kernel 沟通,好让 Kernel 可以控制硬体来正确无误的工作</span>!
		基本上,我们可以透过底下这两张图来说明一下∶<br><br>

		<center><img SRC="0320bash/0320bash_1.jpg" 
			TITLE="硬体、核心与使用者的相关性图示"
			alt="硬体、核心与使用者的相关性图示"><br>
			图一、硬体、核心与使用者的相关性图示</center><br>
		<center><img SRC="0320bash/0320bash_2.jpg" 
			TITLE="硬体、核心与使用者的相关性图示"
			alt="硬体、核心与使用者的相关性图示"><br>
			图二、硬体、核心与使用者的相关性图示</center><br>

		基本上,替我们工作的是『硬体』,而控制硬体的是『核心』,再来,我们使用者乃是利用『Shell』控制一些
		kernel 提供的 『工具 (Utility)』来操控硬体替我们正确的工作。再进一步来说,由于
		kernel 听不懂人类的语言,而人类也没有办法直接记得 kernel 的语言,所以两者的沟通就得藉由
		shell 来支援了!(<span class=text_vbird>其实早期的 DOS 的文字介面也是使用 shell 来沟通呀!那个
		shell 的名称就叫做 command.com ,还记得吗? ^_^</span>)<br><br>

		以字面上的意思来说, kernel 是『核心』的意思,而 Shell 是『壳』的意思,呵呵!也就是说,
		shell 是最外头的咚咚!而 kernel 乃是最内层的的咚咚啦!核心是作业系统的最底层的东西!
		这个核心里头包括了各种的支援硬体的工具!当然棉,如果你的硬体太新,而你的
		kernel 并没有支援的话,那么很抱歉,你的 Shell 能力再怎么强,也没有办法使硬体工作的!
		这样可以了解了吗?呵呵!没错!使电脑主机工作的正是核心的任务,但是操作核心来替使用者工作的,却是
		shell 喔!因此,有时候你的 shell 搞了老半天,硬体却不能工作的时候,请注意,
		您的『核心』是否正确呢?阿!扯远了!这是 kernel 章节才要说的东西。<br><br>

		<li><span class=text_import1>我干嘛要学习文字模式的 Shell 呢?</span></li>
		<div class=block2>
		我们常常提到的 shell 其实是比较狭隘的定义,一般来说,在 Linux 里头,所谓的 shell 就是指 
		BASH 这个文字模式的 shell 棉。但是,广义的 shell 也可以是 KDE 之类的图形介面控制软体呢!
		因为他也可以帮我们与 kernel 进行沟通啊!不过,在鸟哥的 Linux 私房菜里面,
		如果没有特别说明的话,那么我们的 shell 指的是比较狭义的,也就是文字模式的 shell 喔!<br><br>

		另外,鸟哥常常听到这个问题∶『<span class=text_import2>我干嘛要学习 shell 呢?
		不是已经有很多的工具可以提供我设定我的主机了?我为何要花这么多时间去学指令呢?不是以
		X Window 按一按几个按钮就可以搞定了吗?为什么要这么麻烦?</span>』唉~还是得一再地强调,
		X Window 还有 Web 介面的设定工具例如 webmin 是真的好用的家伙,
		他真的可以帮助我们很简易的设定好我们的主机,甚至是一些很进阶的设定都可以帮我们搞定。<br><br>

		但是鸟哥在序章里面也已经提到过相当多次了, X Window 的介面虽然亲善,功能虽然强大,而
		web 介面的工具也可以提供我们很友善的服务,但是毕竟他是将所有利用到的套件都整合在一起的一个套件而已,
		并非是一个完整的套件,所以某些时候当你升级或者是使用其他套件管理模组(
		例如 tarball 而非 rpm 档案等等 )时,就会造成设定的困扰了。<br><br>

		此外,远端连线时,<span class=text_import2>文字介面的传输速度一定比较快,
		而且,较不容易出现断线或者是资讯外流的问题</span>,因此,
		shell 真的是得学习的一项工具。而且,他可以让您更深入 Linux ,更了解他,
		而不是只会按一按滑鼠而已!所谓『天助自助者!』多摸一点文字模式的东西,会让你与
		Linux 更亲近呢!<br><br>

		有些朋友也很可爱,常会说∶『<span class=text_import2>我学这么多干什么?
		又不常用,也用不到</span>!』嘿嘿!有没有听过『书到用时方恨少?』
		当你的主机一切安然无恙的时候,您当然会觉得好像学这么多的东西一点帮助也没有呀!
		万一,某一天真的不幸给他中标了,您该如何是好?是直接重新安装?
		还是先追踪入侵来源后进行漏洞的修补?或者是乾脆就关站好了?这当然涉及很多的考量,
		但就以鸟哥的观点来看,多学一点总是好的,尤其我们可以有备而无患嘛!甚至学的不精也没有关系,了解概念也就
		OK 啦!毕竟没有人要您一定要背这么多的内容啦!了解概念就很了不起了!<br><br>

		此外,<span class=text_import2>如果您真的有心想要将您的主机管理的好,那么良好的
		shell 程式编写是一定需要的啦</span>!就鸟哥自己来说,我管理的主机虽然还不算多,
		只有区区不到十部,但是如果每部主机都要花上几十分钟来查阅他的
		log file 以及相关的资讯,那么我可能会疯掉!基本上,也太没有效率了!这个时候,如果能够藉由
		shell 提供的命令重导向( 或称资料流重导向 ),以及管线命令,呵呵!那么我分析
		log file 只要花费不到十分钟就可以看完所有的主机之重要资讯了!相当的好用呢!<br><br>

		由于学习 shell 的好处真的是多多啦!所以,如果您是个系统管理员,或者有心想要管理系统的话,那么
		shell 这个东西与 shell scripts 这个东西,真的真的有必要看一看!
		</div>
	</div>

	<hr><a name=bash_shells></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class=text_h2>系统的 shell 与 /etc/shells 
	功能</span><br>
	<div class=block2>
		知道什么是 Shell 之后,那么我们来了解一下 Linux 使用的是哪一个
		shell 呢?什么!哪一个?难道说 shell 不就是『一个 shell 吗?』哈哈!那可不!由于早年的
		Unix 年代,发展者众,所以由于 shell 依据发展者的不同就有许多的版本,例如常听到的
		Bourne SHell (sh) 、在 Sun 里头预设的 C SHell、 商业上常用的 K SHell、,
		还有 TCSH 等等,每一种 Shell 都各有其特点。至于 Linux 使用的这一种版本就称为『
		<span class=text_import2>Bourne Again SHell (简称 bash)</span>  』,这个 Shell 是 
		Bourne Shell 的增强版本,也是基准于 GNU 的架构下发展出来的呦!<br><br>

		在介绍 shell 的优点之前,先来说一说 shell 的简单历史吧∶第一个流行的
		shell 是由 Steven Bourne 发展出来的,为了纪念他所以就称为 Bourne shell
		,或直接简称为 sh !而后来另一个广为流传的 shell 是由柏克莱大学的 Bill
		Joy 设计依附于 BSD 版的 Unix 系统中的 shell ,这个 shell 的语法有点类似
		C 语言,所以才得名为 C shell ,简称为 csh !由于在学术界 Sun 
		主机势力相当的庞大,而 Sun 主要是 BSD 的分支之一,所以 C shell 
		也是另一个很重要而且流传很广的 shell 之一 ( 因为太多的程式设计师使用的就是 C 
		语言啦! )!(<span class=text_vbird>还记得我们在 <a href="0110whatislinux.php">Linux</a> 
		是什么那一章提到的吧? Sun 公司的创始人就是 Bill Joy,而 BSD 最早就是 Bill Joy 
		发展出来的啊!</span>)。<br><br>

		那么目前我们的 Linux (以 FC4 为例) 有多少我们可以使用的 shells 呢?
		你可以检查一下 /etc/shells 这个档案,至少就有底下这几个可以用的 shells∶<ul>
		<li>/bin/sh (已经被 /bin/bash 所取代)
		<li>/bin/bash (就是 Linux 预设的 shell)
		<li>/bin/ksh (Kornshell 由 AT&T Bell lab. 发展出来的,相容于 bash)
		<li>/bin/tcsh (整合 C Shell ,提供更多的功能)
		<li>/bin/csh (已经被 /bin/tcsh 所取代)
		<li>/bin/zsh (基于 ksh 发展出来的,功能更强大的 shell)</ul>
		由上面的说明中,我们大概可以发现,其实各主要 shell 的功能都差不多,
		有的只是语法上面的不同而已。目前一般的使用者使用习惯上,似乎是以 bash 及 csh 为主要的两个 
		shell 。OK!这么多的 shell 我要使用哪一个啊?呵呵!使用 Linux 支援最广泛的 bash 就好了!

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -