|
第八章结果
我的linux,英语和语文都不是很牛,所以有错误的地方大家来一起修改,有些地方也没有翻译过来,大家一起翻译一下吧
第八章.Shell
目录
用户
命令行
Bourne Again Shell(bash)
虚拟终端
小节
在一个图形界面环境下,接口是由一个可以创建窗口,滚动条,菜单等的程序提供的.而在一个命令行的环境下,用户接口是"shell"提供的,shell解释命令且通常使电脑上的东西可以运行.在登陆(本章将做说明)之后,用户会被立即放置到shell程序中,并通过shell来做他们想做的事情.本章将对shell--Bourne Again Shell(bash),Linux用户普遍使用的一种shell--做以介绍.如果想得到关于本章的更多详细的信息,请查阅帮助页bash(1).
用户
登陆
当你的电脑启动之后,你会看到类似如下的字符提示:
Welcome to Linux 2.2.14
darkstar login:
##这一段有关什么四维通道的翻译不是很准确
##Hmm.. nobody said anything about a login. And what's a darkstar? Don't worry; you probably didn't accidentally fire up a hyperspace comm-link to the Empire's artificial moon. (I'm afraid the hyperspace comm-link protocol isn't currently supported by the Linux kernel.) No, darkstar is just the name of one of our computers, and its name gets stamped on as the default. If you specified a name for your computer during setup, you should see it instead of darkstar.
恩..没有人提起过关于登陆的任何事情.那么这里的darkstar是什么意思?不必担心,你根本没有偶然的打开一个通向帝国人造月球的四维通道.(恐怕目前linux的内核还不支持多位空间连接协议),darkstart只是你的计算机名字而已,而且他是默认的计算机名字,如果在安装过程中你给你计算机起了一个名字,那么darkstart将被你起的名字替代掉.
对于登陆么...如果这是你的第一次登陆,你将会以root用户的身份登陆,然后系统会提示你输入密码.密码一般在安装时候设定,如果你没有设定密码那么只要按enter键就可以了.好了--你已经登陆成功了!
Root:超级用户
root是什么,又在你的系统上做些什么?
恩,在Unix和类Unix(如linux)的操作系统里,有很多使用者所以有了用户的概念.本章的后面部分将对此做详细的介绍,你现在仅仅需要知道的是root是高于其他用户的一个用户,root是无所不能,无所不知的,没有人可以不服从root.所以我们不得不正确的称root用户为"超级用户".更好的是你现在就是root.
是不是很酷?
如果你不确定:是的,那样的确很酷.但是我们忽略了一些问题,root可以随心所欲的破坏任何东西.你可以先跳到12章去看看如何添加一个用户,然后我们以一个普通用户登陆,回到这里,继续我们的学习.为了减小root的破坏力,只有在必要的时候才使用root用户是一个明智的办法.
顺便一提,你可以很轻易的从任何一个用户变为root用户,只需使用su(1)命令.输入密码后你将获得root身份,直到你使用命令exit或者logout.只要你知道其他用户的密码你也可以使用su命令变成其他用户的身份,比如:su logan,你将使用我的帐号登陆.
命令行
运行程序
##这一段实在翻译不出来
##It's hard to get much accomplished without running a program; you might be able to prop something up with your computer or hold a door open, and some will make the most lovely humming noise when running, but that's really about it. And I think we can all agree that its use as a humming doorstop isn't what brought the personal computer the popularity it now enjoys.
还记得linux下所有东西都是文件么?程序也是如此.你运行(不是shell的内部程序)的每一个程序都是你电脑上某个地方的一个文件.你可以通过指明程序的详细路径来运行它.
举个例子,还记得上一节我们使用过的su命令么?实际上它位于目录/bin下:/bin/su也可以让su运行起来.你可能会问为什么只输入su也可以运行?我并没有指明su是在/bin这个目录下啊?su也有可能在/usr/local/bin这个目录下,不是么?shell是怎么知道su到底在哪里的呢?答案是" ATH环境变量".大多数shell都会有PATH这个变量,或与之类似的变量.PATH主要由一系列包含可执行文件的路径组成,当你运行run的时候,shell会自动到PATH的目录去寻找那些名字为su的可执行文件,而且只运行它第一个查找的文件.如果你不表明路径,程序就会按如上的方法运行,如果你的到了一个"Command not found error(无法找到该命令)"的错误提示,就意味着你的命令不再PATH的目录列表里.(当然了,也可能那个程序根本就不存在).我们将在Bourne Again Shell(bash)一节中更深的讨论有关环境变量的问题.
你要记住,符号"."是一个你所在目录的缩略表示方法,如果你在/bin下,./su也就是一个完整的路径:/bin/su
通配符匹配
几乎任何一种shell都存在这样一种替代或缩写用的字符,这些字符表示他们所在的位置可以是任何东西字符串.这样的字符被称为通配符,最长使用的是'*'和'?'.一般来说,'?'通常匹配任何单个字符.举个例子,假如你所在的文件夹里面有这样三个文件:ex1.txt,ex2.txt,和ex3.txt.你想同时把这三个文件(使用cp命令,第十章将做介绍)拷贝到另外一个文件夹,如,/tmp文件夹.如说使用:cp ex1.txt ex2.txt ex3.txt /tmp 这样拷贝的话好像有些太麻烦.如果这样的话:cp ex?.txt /tmp就简单多了,这里的'?'匹配所有字符,如'1','2','3'或其他的字符.
什么?你还是觉的这样很麻烦?你是对的.那样太骇人听闻了,我们有劳动法保护我们免做那样的事情.幸运的是,我们还有'*'.就像我们上面提过的,'*'可以匹配任意数量的字符,包括没有任何字符的情况.所以像上面的例子,如果你的文件下面只有那三个文件,那么可以使用cp * /tmp,一步到位!假如文件下面还有一个叫example.txt和hejaz.txt的文件.我们想拷贝example.txt文件,但是不想拷贝hejaz.txt文件,这样可以使用cp example* /tmp.
cp example?.txt /tmp这个命令将只能得到原来的三个文件,因为文件下面没有匹配'?',所以example.txt将不会被拷贝.
输入输出重定向和管道
(下面要讲的东西很酷了!)
$ ps > blargh
你知道上面的命令是什么意思么?我使用ps命令来查看当前运行的程序,ps命令在第十一章介绍.这个命令没有什么酷的地方,酷的是后面的部分" > blargh",这个部分的意思是将ps命令的输出写到一个名字为blargh的文件中.但是等等,下面的更酷
$ ps | less
这个命令将ps的输出通过"管道"传给less命令,这样我就可以使用滚屏来看.
$ ps > > blargh
这是第三个最常使用的重定向命令,这个命令中的>>和>基本相同,不同点是>>会检测并报告blargh文件是否存在,如果存在就在原文件追加新的内容,如果不存在>>会像>一样创建一个文件.(使用'>'会覆盖原来的文件)
还有一个'<'操作符,用来从文件中读入输入的数据,但是这个符号不经常使用.
$ fromdos < dosfile.txt > unixfile.txt
如果你把他们叠起来的话会更有趣
$ ps | tac > > blargh
这个命令将运行ps,颠倒输出的每一行然后将结果写入blargh文件中.你可以叠加更多的命令,但要记住他们的解释顺序是从左到右的.
你可以通过帮助页bash(1)得到更多的有关重定向的信息.
Bourne Again Shell (bash)
环境变量
Linux系统是一个复杂的怪物,有很多东西你需要明白,这些细节的东西在你和不同程序交互过程中起到作用(一些你可能根本不需要知道的东西).没有人希望在运行每个程序时都传递一些基本的参数,如终端如何使用,计算机名,提示符风格...
所以我们有了一个拷贝机制的环境.环境定义了程序运行的条件,这些条件中有些是可以改变的变量
##这一句也翻译不好
##The environment defines the conditions in which programs run, and some of this definition is variable; the user can alter and play with it, as is only right in a Linux system.
几乎所有的shell都有环境变量(如果没有,那么那种shell可能不太好用).我们下面将给出一个在命令行下操作环境变量的命令概述.
$ set
只是用set命令时,系统将返回所有的变量和他们的值.像其他的大多数的bash内置,他也可以做一些其它的事情(加参数);你可以查看bash(1)去看更详细的介绍.下面是我的电脑上set命令的部分输出.
PATH=/usr/local/lib/qt/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:
/usr/openwin/bin:/usr/games:.:/usr/local/ssh2/bin:/usr/local/ssh1/bin:
/usr/share/texmf/bin:/usr/local/sbin:/usr/sbin:/home/logan/bin
PIPESTATUS=([0]="0")
PPID=4978
PS1='\h:\w\$ '
PS2='> '
PS4='+ '
PWD=/home/logan
QTDIR=/usr/local/lib/qt
REMOTEHOST=ninja.tdn
SHELL=/bin/bash
我们可以看到先前提过的PATH变量,我可以直接用文件名运行任何包含在PATH变量的路径下的文件.
$ unset VARIABLE
unset将删除一个变量,包括变量值和变量名,而且是永久性删除.(不必担心.除非你那个部分明确的定义,变量可能被其他程序重新定义<Don't worry. Unless it's something you explicitly defined in that shell session, it'll probably get redefined in any other session>)
$ export VARIABLE=some_value
export很简单,你可以使用他来把环境变量 VARIABLE 的值设为 "some_value";如果VARIABLE不存在则创建,存在将覆盖以前的值.这样有些时候并不是很好,比如你想增加一个路径PATH变量中,你可能要按下面的方法来完成
$ export PATH=$PATH:/some/new/directory
注意到我们使用了$PATH,把一个$放到PATH前面来解释PATH的值.例如,echo $PATH将返回PATH的值,我的电脑上就应该显示:
$ echo $PATH
/usr/local/lib/qt/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:
/usr/openwin/bin:/usr/games:.:/usr/local/ssh2/bin:/usr/local/ssh1/bin:
/usr/share/texmf/bin:/usr/local/sbin:/usr/sbin:/home/logan/bin
tab键补全
(这里又有一些很酷的东西了)
1.命令行意味着要打很多字.
2.打字是一种工作.
3.没有人喜欢工作.
从2,3中我们可以推断4:没有人喜欢打字,幸运的是,bash把我们从结论5(没有人喜欢命令行)中解救出来.
你可能会问bash何德何能?bash除了通配符扩展外,还有一个tab键补全的功能.
我们来看看tab键补全是如何工作的:比如你想打一个文件的名字,可能他在你的PATH变量的路径中,你可能将名字完整的打出来,其实你只需要打出文件名不同于其他的文件名的部分然后按tab键,bash将自动补全整个文件名.
我们来检测一下./usr/src 下面有两个子目录:/usr/src/linux和 /usr/src/sendmail,我想看看/usr/src/linux目录下面的东西,我输入 ls /usr/src/l,然后按tab键,bash将把命令补全为ls /usr/src/linux
如果现在有这样两个子目录/usr/src/linux 和 /usr/src/linux-old,如果我输入/usr/src/l后按tab键的话,bash将补全尽可能多的字符,所以我们将的得到这样的结果:/usr/src/linux.我们可以在这里停下来,或者我们在按一下tab键得到符合目前的字符串的所有路径,
因此,大大减少输入的内容(而且因此,人们喜欢命令行终端).所以我说他很酷的!
虚拟终端
当你正在执行某个程序的时候,你发现你又需要做一些别的事情,你可能中断当前的程序,去做你要做的事情,但是linux不是一个多用户系统么?你不是可以同时等录n次么?那么为什么你只能同时做一个事情那?
你可以同时做多件事情的.我们一台机器不可能有多个键盘,多个鼠标和多个显示器;幸运的是,也没有必要有.我们不是通过硬件来解决这个问题,那么这个问题只能由软件来解决.Linux通过"虚拟终端"简称"VTs"来解决这个问题.
你可以通过按Alt和一个功能键在虚拟终端之间切换;每一个功能键对应一个控制台.Slackware默认有6个虚拟控制台.如,Alt+F2你将切换到第二个终端,Alt+F3是第三个等等.
其余的功能键被X sessions占用.每一个X session用户拥有自己VT(虚拟终端),从第七个(Alt+F7)到最后.当你在X中时,由于Alt+功能键可能会冲突,因此我们用Alt+Ctrl+功能键来替换,所以你要从X切换回一个字符登陆界面而不退出X session的话,Ctrl+Alt+F3将切换到第三个控制台.(如果你使用第一个X session的话,可以用Alt+F7将切换回X)
小节
这一章我们讨论了用户,shell,命令行和虚拟终端.你可能可以很顺利的使用命令行工作了:运行程序,使用重定向来组合命令等.最后,你应该对root这个超级用户有一些了解并牢记一直使用root不是一件好事情. |
|