📄 0320bash.htm
字号:
<b><font color="#000066">指令补全</font></b>:如果在执行命令的时候不想按下太多的按键,例如指令pcprofiledump 够长吧!好了,那么如果你输入了 pcprofile 之后,再按下 [Tab]按键的话,那么 bash 马上会自动的将后面的 dump 接上来!那如果有重复的指令呢?那么按下两次[Tab] 将会把所有重复的指令给他列出来啰!那么就有个特殊的案例啦,就是『<b><font color="#000066">直接在提示字符后面连按两次<tab> 键,则系统会将所有可以使用的指令都列出来!</font></b>』那么如果我想要知道目前系统里面,所以b 开头的指令呢?呵呵!就是按下 b 之后,连按两次 <tab> 就可以知道啦!</li><li><b><font color="#000066">文件名称补全</font></b>:此外,如果你用 vi 来读取某个档案时,例如/etc/man.config 这个档案好了,那么您可以输入 vi /etc/man. 之后,直接按下<tab> 按键,那么该文件名称就会被自动的补齐啰!呵呵!很方便,而且对于文件名称或者指令名称的正确性上面,帮助还蛮大的吧!是的!真的是很方便的功能,所以,<b><font color="#000066">有事没事,在bash shell 底下,多按几次 <tab> 是一个不错的习惯啦</font></b>!</li></ul></ul><ul><li><b><font color="#000099">命令别名(alias)设定功能:</font></b></li><br>假如我需要知道这个目录底下的所有档案(包含隐藏档)及所有的档案属性,那么我就必须要下达ls -al 这样的指令列,唉!真麻烦,有没有更快的取代方式?呵呵!就使用命令别名呀!例如我最喜欢直接以lm 这个自订的命令来取代上面的命令,也就是说, lm 会等于 ls -al 这样的一个功能,嘿!那么要如何作呢?就使用alias 即可!你可以在指令列输入 alias 就可以知道目前的命令别名有哪些了!也可以直接下达命令来设定别名呦:<ul><font color="#000066" face="SimSun">alias lm='ls -al'</font></ul></ul><ul><li><b><font color="#000099">工作控制(jobs)、前景背景控制:</font></b></li><br>这部分我们在之后的资源管理章节中会再提及!使用前、背景的控制可以让工作进行的更为顺利!至于工作控制(jobs)的用途则更广,可以让我们随时将工作丢到背景中执行!而不怕不小心使用了[Ctrl] + C 来停掉该程序!真是好样的!此外,也可以在单一登入的环境中,达到多任务的目的呢!</ul><ul><li><b><font color="#000099">Shell scripts 的强大功能:</font></b></li><br>在 DOS 年代还记得将一堆指令写在一起的所谓的『批次档』吧?在 Linux 底下的shell scripts 则发挥的更为强大的功能,可以将您日常生活当中常需要下达的连续指令写成一个档案,该档案并且可以透过对谈交互式的方式来进行主机的侦测工作!也可以藉由shell 提供的环境变量及相关指令来进行设计,哇!整个设计下来几乎就是一个小型的程序语言了!该scripts 的功能真的是超乎我的想象之外!以前在 DOS 底下需要程序语言才能写的东西,在Linux 底下使用简单的 shell scripts 就可以帮你达成了!真的利害!!这部分我们在后续章节再来谈!</ul></blockquote><blockquote><font color="#000000">在了解了 BASH 的优点之后,再来我们要来讨论的是:</font><font color="#3333ff">那如何在Shell 提供的环境中下达指令呢</font><font color="#000000">?其实很简单的,下达指令的方式为:</font><table bgcolor="#000000" border="1" cols="1" width="770"><tbody><tr><td><font size="-1" face="SimSun"><font color="#ffffff">[root@test/root]# </font><font color="#ffff00">command [-options] parameter1 parameter2...</font></font><br><font size="-1" face="SimSun"><font color="#ffffff">               </font><font color="#ff9900">     指令     选项      参数(1)   参数(2)</font></font><p><font size="-1" color="#ff9900" face="SimSun">1. command 为指令的名称,例如变换路径的指令为cd 等等;</font><br><font size="-1" color="#ff9900" face="SimSun">2. 中刮号[]并不存在于实际的指令中,而加入参数设定时,通常为- 号,有时候完整名称会输入 -- 符号;</font><br><font size="-1" color="#ff9900" face="SimSun">3. parameter1parameter2.. 为依附在 option 后面的参数,或者是 command 的参数;</font><br><font size="-1" color="#ff9900" face="SimSun">4. command,-options, parameter1.. 这几个咚咚中间以空格来区分,不论空几格 shell 都视为一格;</font><br><font size="-1" color="#ff9900" face="SimSun">5. 指令太长的时候,可以使用\ 符号来跳脱 [Enter] 符号,使指令连续到下一行。</font></p><p><font size="-1" color="#ffffcc" face="SimSun">实例:</font><br><font size="-1" face="SimSun"><font color="#ffffff">[root@test/root]# </font><font color="#ffff00">ls -al /root </font><font color="#ffffff"> </font><font color="#ff9900"><==以 ls 列出 /root 这个目录中的隐藏文件与相关的属性参数;</font></font><br><font size="-1" face="SimSun"><font color="#ffffff">[root@test/root]# </font><font color="#ffff00">./configure --prefix=/usr/local --with-tcp_wrappers\</font></font><br><font size="-1" face="SimSun"><font color="#ffffff">></font><font color="#ffff00">--with-pam  </font><font color="#ffffff">  </font><font color="#ffff00"><==这两行实际上是同一行的指令,但是加上 \ 跳脱符号后,指令可以连续到下一行!</font></font><br><font size="-1" face="SimSun"><font color="#ffffff">[root@test/root]#</font><font color="#ffff00"> ls          -al   /root </font><font color="#ffffff"> </font><font color="#ff9900"><==这个指令与第一个相同,空格符不论几个,仅视为一个来处理。</font></font></p></td></tr></tbody></table>很简单吧!OK!那么再来一个问题:『<font color="#000099">Shell 是什么时候开始接管Linux 主机的!?</font>』我们在后面会再提到『<font color="#000099">开机流程</font>』的介绍,这里先跳过去,假设你的机器已经开机成功了,那么主机便进入等待使用者login 的状态。当使用者输入了账号与密码,并且顺利的 pass 之后,经过了 shell的环境变量档案读取功能,最后,使用者进入自己的『家目录』之后,例如 root的家目录在 /root 底下,一般使用者的家目录则在 /etc/passwd 这个档案里面规定,那么主机就已经丢了一个程序称为bash 的给你操作啰!</blockquote><hr width="100%"><a name="variable"></a><font color="#000099"><font size="+1">变量与变量的设定:</font><a href="#echo">echo</a>,<a href="#env">env</a>,<a href="#set">set</a>,<a href="#rule">变量设定规则</a>,<a href="#export">export</a>,<a href="#unset">unset</a>,</font><blockquote>再继续研究 BASH 之前,我们要就<b><font color="#000099">变量</font></b>这个东西来讨论一番,因为在主机里面有太多的数据需要进行存取了,而这些数据都是一些服务所必须的,例如mail 的存取路径在 /var/spool/mail 、家目录预设在 /home/useraccount 等等,当然我们可以改变这些个变量,但是如果该变量是直接深植于套件当中,那么当你修改了某些参数之后,嘿嘿!你的套件就必须要『<font color="#000099">由原始码直接更新再编译</font>』才行!这样似乎很麻烦,所以啰,就会有变量这个好东西出来了!<blockquote> <table bgcolor="#ffcccc" cols="1" width="600"><tbody><tr><td><font color="#000099">举个简单的例子来说, sendmail 的 smtp 存放 mail路径是经由 /etc/profile 里头的</font><blockquote><font color="#000099">MAIL="/var/spool/mail/$USER"</font></blockquote><font color="#000099">来设定的,而当我修改了上面这一个咚咚,然后重新开机之后,嘿嘿嘿嘿!我的邮件就可以存放到不同的路径去了!而且不会有问题!可以顺利的『在Linux 主机上面』收发。然而问题发生在 pop3 这个服务上面,由于 pop3 的预设路径是在source code 里头,而且就正是 /var/spool/mail 这个路径,也就是说,不论我怎么修正我的『变量』,pop3 都不为所动!唉~真惨,所以就无法直接以 pop3 来收信了(例如 OutLook就不能工作了)!会发生密码不接受的问题呢!</font></td></tr></tbody></table></blockquote>此外,例如我们在执行程序的时候,系统怎么知道你的 ls 这个指令放在哪里?原来是有PATH 这个变量,系统会透过这个变量里面所设定的路径去依序寻找该指令系统,如果找不到的话,那么才在屏幕上显示『command not found 』字样!这些还都只是系统预设的变量的目的,如果是个人的设定方面:例如你要写一个大型的script (批次文件)时,有些数据因为可能由于使用者习惯的不同而有差异,比如说路径好了,由于该路径在script 被使用在相当多的地方,如果下次换了一部主机,都要修改 script 里面的所有路径,那么我一定会疯掉!这个时候如果使用变量,而将该变量的定义写在最前面,后面相关的路径名称都以变量来取代,嘿嘿!那么你只要修改一行就等于修改整篇script 了!方便的很!所以,良好的程序设计师都会善用变量的定义!(这个部分我们在底下还会再提到!)<br> <br>如果说的学理一点,那么由于在 Linux System 下面,所有的执行续都是需要一个执行码,而就如同上面提到的,你『<font color="#000099">真正以shell 来跟 Linux 沟通,是在正确的登入 Linux 之后!</font>』这个时候你就有一个bash 的执行程序,也才可以真正的经由 bash 来跟系统沟通啰!而在进入 shell之前,也正如同上面提到的,由于系统需要一些变量来提供他数据的存取(或者是一些环境的设定参数值,例如是否要显示彩色等等的),所以就有一些所谓的『<b><font color="#000066">环境变量</font></b>』需要来读入系统中了!这些环境变量例如PATH、HOME、MAIL、SHELL等等,都是很重要的,为了区别与自订变量的不同,环境变量通常以大写字符来表示呢!<br> <br>说了那么久,那么到底『<font color="#000099">什么是变量</font>』呢?简单的说,『<font color="#000099">变量就是以一组文字或符号等,来取代一些设定或者是一串保留的数据!</font>』,例如:『VBird』就是『鸟哥』,所以当你读取VBird 的时候,系统自然就会知道!哈!那就是鸟哥!最简单的例子可以取 PATH来说明!如果你对于『<a href="http://linux.vbird.org//linux_basic/0220filemanager.php#abslut_relate">相对路径与绝对路径</a>』还有点印象的话,那么应该晓得『<font color="#000099">要下达正确的指令,应该需要指定路径与文件名』</font>才行!例如你的ls 指令应该需要以『/bin/ls』来下达指令才对,那么为何你在任意的路径下都可以执行ls 呢?而不需要指定路径呢?这是因为系统已经预设了一些『<font color="#000066">搜寻路径(PATH)</font>』了,所以当你需要执行一些指令的时候,系统就会依照该PATH 的设定来进行指令的搜寻!而这个 PATH 就是所谓的变量了!那么<font color="#000099">如何『显示变量</font>』呢?这就需要使用到echo 这个指令啦!<ul><hr width="100%"><li><a name="echo"></a><b><font color="#000099" face="SimSun">echo</font></b></li><br><b><font color="#000099" face="SimSun">显示变量内容</font></b><br><font color="#ff0000">语法</font>:<table bgcolor="#000000" border="1" cols="1" width="500"><tbody><tr><td><font size="-1" face="SimSun"><font color="#ffffff">[test @testtest]#</font><font color="#ffff00"> echo $variable</font></font><br><font size="-1" color="#ffffcc" face="SimSun">参数说明:</font><br><font size="-1" color="#ffffcc" face="SimSun">范例:</font><br><font size="-1" face="SimSun"><font color="#ffffff">[test @testtest]# </font><font color="#ffff00">echo $PATH</font></font><br><font size="-1" color="#ffffff" face="SimSun">/bin:/sbin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/loc</font><br><font size="-1" color="#ffffff" face="SimSun">al/bin:/bin:/usr/bin:/usr/X11R6/bin</font></td></tr></tbody></table>就如同上面的范例,当我们要显示目前的 PATH 这个变量时,使用了 echo ,而为了要分辨是否为变量,那么Linux 系统预设变量名称前面会加上一个『 <b>$</b> 』符号,所以就必须要写成echo $PATH 啰!<table border="1" cols="1" width="90%"><tbody><tr><td>例题:请在屏幕上面显示出您的环境变量 PATH, HOME 与 MAIL:<br>答:<blockquote><font color="#000066" face="SimSun">[root@test root]#echo $PATH</font><br><font color="#000066" face="SimSun">/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin:/usr/local/sbin</font><br><font color="#000066" face="SimSun">[root@test root]# echo $HOME</font><br><font color="#000066" face="SimSun">/root</font><br><font color="#000066" face="SimSun">[root@test root]# echo $MAIL</font><br><font color="#000066" face="SimSun">/var/spool/mail/root</font></blockquote></td></tr></tbody></table><p></p><hr width="100%"><br><b><font color="#000099">有多少的环境变量呀?使用 env 与 set 来看看:</font></b><br>嗯!既然环境变量是挺重要的,那么到底有多少的环境变量在 Linux 系统中呢?呵呵!你可以简单的使用
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -