Linux伊甸园论坛 - 【转帖】shell入门绝佳!
页码,1/29
学习外汇投资
增进外汇市场知识,与专业讲师练习 交
易,即时登记3课免费课堂。
Migrate Mainframe Apps
INFINITE zSERIES migrates Mainframe apps
to Windows, Unix or Linux
Goooooogle
返回首页
控制面板
自由新闻
自由软件
自由文档
自由论坛
自由商城
Linux伊甸园论坛 » 综合信息发布交流板区 » Linux学习资源资源交
流及软件需求发布
欢迎回来, xylrq
您上次访问时间是: 2004-03-27 09:32
【转帖】shell入门绝佳!
控制面板博客频道
New! 帮助日历银行小黑屋画廊新帖搜索
快速链接
注销
转到首个未读
2006-03-30, 01:27
dgkgnrt
注册用户
注册日期: 2005年11月
帖子: 59
精华: 3
现金: 361 Eden积分
资产: 361 Eden积分
主题工具
搜索本主题
主题评分
#1
【转帖】shell入门绝佳!
原文: http://www.mandrakeuser.org/doc
中译本:吴晓光 http://dummy.linux.net.cn/~xgwu/cmuo/
整理: flaboy 北南南北
点评:flaboy兄当时整理时发在了LinuxSir.Org 论坛 SHELL讨论区中,《Linux Sh
ell简介》,是作为基础教材的形式 帖出的,他在整理时“本文编译整理时对相关章
节做了相应的删改处理,去掉了针对Mandrake Linux的部分内容。”;
我看这个文档极其不错,进行了再次整理,并对文档的结构进行了调整,根据文档
的内容,我适当的加了序列号,并做了一个目录,主要是方便大家阅读;感谢原作
者及中译者,同时也感谢flaboy兄的整理;
目录
版权信息
前言
第一篇:超级工具/Terminals,xterms 和 Shells
二、为了说明 shell ,这里需要一些背景知识。
¡ 1、Terminals, xterms 与 Shells
l 一、超级工具
2、终端(Terminals)
3、xterms
4、Shells
三、Shell 起步
第二篇:自动补齐/命令行的历史记录/编辑命令行/可用的 Shell 快捷方式
l 一、自动补齐;
二、命令行的历史记录
三、可用的 Shell 快捷方式
第三篇:命令的排列/命令的任务调度/命令的替换
l 一、命令的排列
二、命令的任务调度
http://www.linuxeden.com/forum/t141687.html
2006-4-8
Linux伊甸园论坛 - 【转帖】shell入门绝佳!
页码,2/29
三、命令的替换
第四篇:文件名匹配/输出重定向
l 一、文件名匹配
二、引用 shell 的特殊字符
三、输出重定向
¡ 1、在多个命令间重定向
2、重定向至文件
第五篇:bash 配置文件/提示符/改变 $PATH
l 一、bash 配置文件
二、提示符
三、改变 $PATH
第六篇:命令的别名、Shell 函数/从这里出发/Shell 常见问题
l 一、命令的别名、Shell 函数
¡ 1、命令的别名
2、Shell 函数
二、从这里出发
关于本文
相关文档
+++++++++++++++++++++++++++++++++++++++++++++++++++++
正文
+++++++++++++++++++++++++++++++++++++++++++++++++++++
版权信息
本文的内容来源于 MUO 的 Basics 部分,其原始英文版可以从这里获得http://ww
w.mandrakeuser.org/docs。中文版来自吴晓光的CMUO http://dummy.linux.net.cn/
~xgwu/cmuo/。MUO 是 Mandrake Linux( http://www.mandrakelinux.com/ )为
用户提供的入门手册,其内容实用并且实时更新,非常适合初学者做入门参考。与
常见的各种Linux教程不同,MUO介绍给Linux初学者的是学习Linux的方法而非对
某个系统的描述,这对各种有着千差万别的Linux发行版的学习尤为重要。
本文编译整理时对相关章节做了相应的删改处理 ,去掉了针对Mandrake Linux的部
分内容。
前言
使用 Shell
以下将介绍并解释基本的 shell 命令和机制。
第一篇:超级工具/Terminals,xterms 和 Shells
一、超级工具
您或许听过这样的论调:命令行(the mommand line) 早就已经过时了,那东西神秘
兮兮的,等等。有些人甚至觉得操作系统中应该没有这些命令才好。
http://www.linuxeden.com/forum/t141687.html
2006-4-8
Linux伊甸园论坛 - 【转帖】shell入门绝佳!
页码,3/29
事实是上,您可以不懂任何 shell ,就能使用 Linux 。您启动系统后可以直接进
入 X Window ,最后在 X Window 下关机。
我坚信,用 Linux 而不懂 shell ,就象开车只会用头档(first gear)一样。当然,最
初看起来,直接而简单,在大多数情况下都管用。但速度慢,而且无法真正体验驾
驶的乐趣。
对,命令行很有趣。就象用一大堆收集到的积木,竟可以完成许多意想不到的创
举,一些极其复杂的工作,只需几行命令就可以解决。这是因为,在 Unix 中,sh
ell 可不是简单的命令解释器(典型的有 Windows 中的 DOS ),而是一个全功能
的编程环境。
这并不意味着 shell 非常容易学通,您知道,好事多磨,这还是要花点工夫的。;-)
但请相信我,这绝对值得。您在很短时间内,就能被一大帮门外汉吹捧为 Unix wiz
ard(奇才) 。*grin*
二、为了说明 shell ,这里需要一些背景知识。
1、Terminals, xterms 与 Shells
追溯到 Unix 诞生的那个年代,当时还没有现在流行的"个人计算机"。被称为计算
机的机器,还是吞吐磁带与 magnetic memory (用术语'core'来表示系统 memor
y)的庞然大物。DEC 公司(现在的 Compaq)推出的 PDP-11 ,体积小(被称
为 mini)而且价格底,在大学中引起了巨大的反响,很多学校直到那时才买得起
一台计算机(PDP-11 物美价廉,只有 10000$)。
这些机器的操作系统由汇编语言、机器语言写成,所以运行起来效率很高,但都无
法移植(unportable)。每家计算机公司都给自己的机器配上独有的操作系统,然后
再销售。
这种笨拙的作法很快就被人们意识到了,于是就开始兴建一个可以在不同品牌机器
上运行的操作系统。1969 年,Ken Thompson 开始写后来成为 Unix 的第一行代
码。(Thompson 曾经参加了一个项目:MULTICS,Unix 是与这有关的一个玩笑
词) 其实,Dennis Ritchie 为这个新的操作系统设计了一种新的编程语言-- C 语言
后,事情才真正开始。
虽然 Unix 的效率不及原来的操作系统,但有三个突出的优点:可以任意移植到其
他机器,其中的 C 语言大大简化了编程,而且这些都 free 。很快,全美国的大学
都忙着开始为机器安装 Unix 。
2、终端(Terminals)
Unix 是可以在许多种机器上运行的操作系统,但人们又如何使用这些机器呢?他们
是通过哑终端来连接到这些机器,也就是用键盘、显示器及足够的 electronics
(电子元件)组成的机器与中央计算机(central computer)相连。在这些终端上,用
户可以敲字符(teletypy),这就是字符串'tty'表示终端设备文件,和'getty'命令的
名称来历。
您可能会问,现在这些东西都在哪儿。 这些终端的厂家无法达成一项最终标准,
这导致每种牌子的终端都有各自的键盘布局、各自的在屏幕上显示字符的方法、发
送或接收什么信号表示什么字符、控制代码等等。
为了避免这些混乱,就创建了一个含有所有不同终端特性的(capability)文件,这就
是'termcap'。用一个工具打开'/etc/termcap'瞧瞧,可别吓着了 ;-) 。
Linux 终端大多数用'vt100'或'linux'作为终端类型。
3、xterms
http://www.linuxeden.com/forum/t141687.html
2006-4-8
Linux伊甸园论坛 - 【转帖】shell入门绝佳!
页码,4/29
在八十年代初期,产生了一个 Unix 的图形子系统-- the X Window System 。九十
年代早期,为了更好地实现基于 Intel 的 Unix 类系统上(如FreeBSD、NetBSD、
Linux)的应用,产生了一个系统分支-- XFree86 。
X Window 中一个很大的好处是可以运行多个虚拟(virtual)终端。甚至在 X Windo
w 下就有这么个应用程序--'xterm'。您将发现'xterm'和'virtual terminal'在很多情况
下都是一样的。有的地方说'打开一个 xterm',其实您不是非要用'xterm'程序,其他
的终端模拟器(terminal emulator) ,如 rxvt、konsole、aterm、eterm、wterm 等
等,一样有效。
终端模拟器(又称为虚拟终端)通过伪(pseudo) tty 设备-- pty 与系统相连,并且使
用自己的显示标准-- xterm 。这导致不同的终端模拟器可能在一些按键或程序上存
在细小的差别,这取决于模拟器多大程度上遵守了'xterm'的显示标准。
4、Shells
为了在终端中运行程序,需要 shell 。shell 是操作系统的一部分,用来与用户打交
道,并且可以用来协调各个命令。
第一个真正的 Unix shell -- 'sh',亦称为'Bourne shell',诞生于 1975 年,作者是
Steve Bourne 。很快,出现了其他 shell ,如基于原始'Bourne shell'的'ksh'、'zs
h',后者常用作专属 Unixes 系统中的标准 shell ;也有一些从 C 语言中衍生出来
的 shell ,如'csh'或'tcsh'。
在 Linux 中,标注的 shell 是'bash',即 the GNU Bourne-Again Shell (有点玩笑
的味道……)。这个 shell 功能非常强大(甚至有人觉得太庞大了),压缩的 ma
n page 就有 50 KB 。
三、Shell 起步
首先,有一点小说明:在平常应用中,建议您不要用'root'帐号运行 shell ,如果您
还是新手,这一点尤其要注意。作为普通用户,不管您有意还是无意,都无法破坏
系统;但如果是'root',那就不同了,只要敲几个字母,就可能导致灾难性后果。
当您登入系统或打开一个 xterm 窗口,首先看到的是提示符(prompt)。Red Hat Li
nux 的标准提示符包括了您的用户名、登入的主机名(没有设置的话,是'localhos
t')、当前所在的目录(working directory)、提示符号:
[tom@belbo tom]$
我以用户名'tom'登入名为'belbo'的主机,当前在我的 home 目录--'/home/to
m'中。'root'的提示符:
[root@belbo root]#
除了不同的用户名外,提示符号由'$'变成了'#'。根据 Bourne shell 的传统,普通用
户的提示符以'$'结尾,而超级用户用'#'。
提示符的每个部分都可以定制,您在后面将有更深的了解。
要运行命令的话,您只要在提示符后敲进命令,然后在按 键。shell 将
在其路径中(详情见后)搜索这个命令,找到以后就运行,并在终端里输出相应的
结果(如果有的话),命令结束后,再给出新的提示符:
[tom@belbo tom]$ whoami
tom
http://www.linuxeden.com/forum/t141687.html
2006-4-8
Linux伊甸园论坛 - 【转帖】shell入门绝佳!
页码,5/29
[tom@belbo tom]$
顺带指出,当您敲 ENTER 时,光标(cursor)在哪里并不要紧,因为 shell 总是会
整行地读取。
基本的命令有:'ls'(list directory ,列出目录内容)、'cp'(copy ,复制)、'm
v'(move / rename ,移动/重命名),'cd '(change directory ,改变目录),这
些命令后面都可以跟上一帮可选项,这方面 man page 有详细的介绍(man ls, ma
n mv 等等)。
在您动身前往 shell 领地前,这里有几个术语(terminology)的简短说明。命令可能
带一些可选项(options)、参数(arguments):
mv -i file dir
其中'-i'是命令'mv'的一个可选项,而'file'和'dir'则是参数。所有可选项在该命令的 m
an page 都中有详细的介绍(此例中用 man mv),而参数则由您提供。可选项决
定命令如何工作,而参数则用于确定命令作用的目标。
到目前为止,介绍得有点象许多人厌恶轻视的 DOS shell ,但伴随着下面的介绍,
您将会有新的体验。
第二篇:自动补齐/命令行的历史记录/编辑命令行/
可用的 Shell 快捷方式
Unix (及后继者 Linux)在命令行下面诞生,因此,Unix 中的命令行有许多非常
实用的功能。在本篇中,我们将来作一些了解。
一、自动补齐;
如何用'cd'(改变目录,change directory)最快地从您当前所在的 home 目录跳
到'/usr/src/redhat/' 呢?
cd /usrr
这称为'命令行自动补齐'(automatic command line completion) ,这在平常应用中是
不可缺少的。让我们仔细看看这个例子:
cd /u
扩展成了 cd /usr/ ,很简单吧。下面的
cd /usr
扩展为 cd /usr/src/ 。如果您只敲了cd /us,'/usr'下匹配的('cd /u*/s
*')三个子目录将列出供您选择:'/usr/sbin'、'/usr/share'和'/usr/src'。
因此, 键可以很方便地用于根据前几个字母,来查找匹配的文件或子目
录。比如,ls /usr/bin/zip 将列出所有'/usr/bin'下面,以字符串'zip'开头的文
件或子目录。当然,完成这类任务还有更厉害的命令,但这个方法确实很管用。
另外,碰到长文件名时就显得特别方便。假设您要安装一个名为'boomshakalakwhi
zbang-4.6.4.5-i586.rpm'的 RPM 包,您输入 rpm -i boom ,如果目录下没
有其他文件能够匹配,那 shell 就会自动帮忙补齐。
http://www.linuxeden.com/forum/t141687.html
2006-4-8
Linux伊甸园论坛 - 【转帖】shell入门绝佳!
页码,6/29
cd /usrl
将扩展成 cd /usr/src/linux ,并等待继续。'/usr/src'中有两个匹配的目录:'/usr/src/
linux-[...]'、'/usr/src/linux'。如何告诉 shell 您想要后面的那个呢?只要跟一个斜线
(/ ,slash),就可以选择后面的那个了。
假如您不确定是'/usr/src/linux/Documentation' 还是'/usr/src/linux/documentation' 。
而您知道,Linux 是区分大小写的。如果已经仔细读过前面部分的话,您想到可以
用:
cd /usrl/d
扩展成了'/usr/src/linux/drivers/',因此应该是'Documentation'(大写的'D')。
这种补齐对命令也有效:
[tom@belbo tom]$ gre
grecord grefer grep
[tom@belbo tom]$ gre
在这里 shell 将列出所有以字符串'gre'开头的已知命令。
二、命令行的历史记录
通过按向上方向键,您可以向后遍历近来在该控制台下输入的命令。用向下方向键
可以向前遍历。与 SHIFT 键连用的话,您还可以遍历以往在该控制台中的输出。
您也可以编辑旧的命令,然后再运行。
按
后,shell 就进入"reverse-i(ncremental)-search"(向后增量搜索)模
式。现在输入您要找的命令的首字母:
(reverse-i-search)`':. 敲入 'i'可能会变成:
(reverse-i-search)`i': isdnctrl hangup ippp0
如果您再按 键,上面的命令将再次执行。而如果您按了向右、向左方向
键或 ,上面的命令将回到普通的命令行,这样您就可以进行适当编辑。
编辑命令行
通过光标和功能键(Home、End 等键),您可以浏览并编辑命令行,如果您需
要,还可以用键盘的快捷方式来完成一般的编辑:
l :删除从光标到行尾的部分
l :删除从光标到行首的部分
l :删除从光标到当前单词结尾的部分
l :删除从光标到当前单词开头的部分
l :将光标移到行首
l :将光标移到行尾
l :将光标移到当前单词头部
l :将光标移到当前单词尾部
l :插入最近删除的单词
l :重复前一个命令最后的参数。
例如:您用命令 mkdir peter/pan/documents/tinkerbell 新建了一个目录,现在您向
http://www.linuxeden.com/forum/t141687.html
2006-4-8
Linux伊甸园论坛 - 【转帖】shell入门绝佳!
页码,7/29
用命令'cd'进入该目录,您可以用 cd !$,shell 将把前一个命令'mkdir'的参数添加到
现在的'cd'后面。
当您更深入了解Linux后,将看到这些快捷方式在其他应用程序下输入时,有时也
有效,比如,在浏览器中的输入框中。
三、可用的 Shell 快捷方式
Red Hat Linux 带有不少快捷方式,其中一部分是 bash 原来就有的,而还有一些
则是为您预先设置的(在后面您将看到如何设置)。
由于 home 目录是每位用户的活动中心,许多 Unix 对此有特殊的快捷方式。
'~'就是您的 home 目录的简写形式。我们假设您在其他目录,想把一个名为'somet
ext'的文件复制到您 home 目录下的 'docs'子目录中。除了输入:
cp sometext /home/myusername/docs
您还可以用简写:
cp sometext ~/docs
理论上,这也可以应用在命令'cd'上。无论当前路径在哪里,cd ~ 将回到您的 hom
e 目录。其实还可以简化,只要键入 cd ,就可以返回 home 目录了。
Red Hat Linux 为您提供了一些预先设置的快捷方式(称为'别名',aliases),比
如:
l ll :将执行'ls -l -k'(以长格式列出目录内容,包括一些文件属性,并以
KB 而不是 byte 为单位显示文件大小)
l ls :将执行'ls -F --color=auto'(列出目录内容,加上文件类型标识,并使用颜
色)
现在,您应该对 shell 及一些快捷方式有了进一步的了解,下面我们来看看除了应
用一些简单的命令,shell 还能作什么。
学习外汇投资策略
此
成功投资并非必然,学习技术及基本 外汇市场分析,即时登记3课免
帖
费课堂
于
www.fxpowercourse-asia.com
2
0
0
6
-03-30 01:32 被 dgkgnrt 编辑.
Migrate Mainframe Apps
INFINITE zSERIES migrates Mainframe apps to Windows, Unix or
Linux
www.californiasoftware.com
2006-03-30, 01:29
dgkgnrt
注册用户
注册日期: 2005年11月
帖子: 59
向管理团队举报这个帖子
#2
第三篇:命令的排列/命令的任务调度/命令的替换
一、命令的排列
现在您将看到一些常用的命令排列。您可能想在一行中给出所有命令,然后就可以
把注意力转移到其他地方。没问题,shell 允许您在不同的命令之间,放上特殊的
排列字符(queuing characters) 。这儿将介绍最常用的两种。
http://www.linuxeden.com/forum/t141687.html
2006-4-8
Linux伊甸园论坛 - 【转帖】shell入门绝佳!
页码,8/29
精华: 3
现金: 361 Eden积分
资产: 361 Eden积分
请注意,为了看起来更清楚,我在这些字符两旁加了空格。而在实际应用中,您不
一定要这么做,'ls -a ; du -hs'和'ls -a;du -hs'的效果是一样的。
command1 ; command2
先执行 command1 ,不管 command1 是否出错,接下来执行 command2 。
例如:
ls -a ; du -hs
将先在屏幕上列出目录中的所有内容,然后列出所有目录及其子目录所占磁盘大
小。
command1 && command2
只有当 command1 正确运行完毕后,才执行 command2 。
例如:
ls -a bogusdir && du -hs
将返回 ls: bogusdir: No such file or directory ,而'du'则根本没有运行(这是因为
您没有'bogusdir'目录)。如果您将符号换成了';','du'将被执行。
为了进一步说明';'和'&&'的区别,及一般命令排列的用处,下面举一个经典的例
子:Linux 内核的编译和安装。
要编译、安装 Linux ,您需要执行一串命令:'make dep'、'make clean'、'make b
zImage'、'make modules'、'make modules_install' 和'make install'。如果要等一个
命令完成后,再输入下一个,再等,再输入,……,那就太麻烦了。另一方面,每
个命令只有当前面的命令都正确执行完毕后,才能开始执行。如果您用';'来排列命
令,则即使有命令执行失败,后面的也照常运行,最后,您可能在'/boot'目录下得
到一个有问题的内核映像(image)。而用'&&':
make dep && make clean && make bzImage && make modules && make module
s_install && make install
不需要中途打断,就可以编译内核及其模块,并完成后面的安装。
二、命令的任务调度
当您在终端里运行一个命令或开启一个程序时,终端要等到命令或程序运行完毕
后,才能再被使用。在 Unix 中,我们称这样的命令或程序在前台(foreground)运
行。如果您想在终端下运行另一个命令,则需要再打开一个新的终端。
但这里还有一个更优雅的办法,称为任务调度(jobbing)或后台(backgrounding)。当
您运用任务的调度或将命令置于后台,终端就立即解放了,这样一来,终端立即就
可以接受新的输入。为实现这样的目的,您只需在命令后面添加一个 & :
gqview &
告诉 shell 将图片查看器'GQview'放到后台去执行(即当成 job 来运行)。
命令 jobs 将告诉您,在这个终端窗口中,运行着哪些命令与程序:
jobs
[1]+ Running gqview &
当您要关闭终端窗口时,这一点就很重要,因为关闭终端将导致所有在其中运行的
任务都将被中止,在此例中,如果您关闭了终端,由这个终端开启的 GQview 程
序也将被关闭。
但如何将前台运行的一个程序放到后台去?没问题:
http://www.linuxeden.com/forum/t141687.html
2006-4-8