Linux Shell简介
linux命令解释程序设计与实现
Linux命令解释程序,通常称为shell,是一个在Linux操作系统中非常重要的组件。
它为用户提供了与操作系统交互的接口,允许用户输入命令并查看结果。
下面,我们将讨论shell 的设计与实现。
**1. Shell的架构**Linux shell基本上是一个命令行解析器,它接收用户输入的命令,解析这些命令,然后执行它们。
shell会按照输入的命令顺序逐个执行,直到遇到一个需要子进程的命令,例如管道(`|`)或后台运行(`&`)。
**2. Shell的类型**Linux有几种不同的shell,包括bash, sh, ksh, csh, zsh等。
每种shell都有其特性和优缺点,因此选择哪种shell通常取决于用户的个人或项目需求。
例如,bash具有丰富的特性,如编程接口,命令行编辑,和丰富的命令行实用工具。
**3. Shell的语法**Shell具有特定的语法规则,允许用户组合命令以创建更复杂的命令序列。
这些语法规则包括命令序列、管道、输入/输出重定向、后台运行等。
**4. Shell的变量和环境**Shell允许用户定义和使用变量。
这些变量可以存储各种数据类型,包括字符串、整数和数组。
此外,shell还维护了一个环境变量,这可以影响shell的行为和子进程的环境。
**5. Shell的流程控制**Shell提供了多种流程控制语句,如if-then-else语句、for循环、while循环、until循环等。
这些语句允许用户根据条件或循环来控制命令执行的流程。
**6. Shell的函数和命令**Shell允许用户定义和使用函数,这些函数可以执行一系列命令。
此外,shell还提供了一系列内置命令,如`cd`, `echo`, `date`等。
**7. Shell的实现**Shell的实现通常涉及C或C++等编程语言。
实现shell需要理解编程基础、文件和目录操作、进程控制、内存管理等知识。
Linux中的shell与shell命令
s h e l l与s h e l l命令本章主要内容:shell基本功能及种类shell基本概念I/O重定向与管道shell的启动基本shell命令3.1shell基本功能与基本概念3.1.1shell基本功能shell是用户和Linux内核之间的接口程序。
shell是一个命令语言解释器,它拥有自己内建的shell命令集,shell也能被系统中其他应用程序所调用。
shell一个解释型的程序设计语言,shell程序设计语言支持绝大多数在高级语言中能见到的程序元素,如函数、变量、数组和程序控制结构shell具有以下基本功能:1.命令解释执行2.文件名替换.3.输入输出重定向4.连通管道建立5.系统环境设置6.shell编程3.1.2字符与保留字1.字符(1)白空格(2)通配符*:代表从它所在位置开始的任何字符串。
?:代表它所在位置上的任何单个字符。
[]:代表一个指定范围的字符。
方括号中的字符范围可以由直接给出的字符组成,也可以由表示限定范围的起始字符、终止字符及中间的连字符“-”组成。
通配符模式串意义* 当前目录下所有文件名,但不包括.开头的文件。
例如abc但不是.abc *Text* 当前目录下所有文件名中包含有Text的文件名,但不包括.开头的文件[ab-dm]* 当前目录下所有以a、b、c、d、m开头的文件名[ab-dm]? 当前目录下所有以a、b、c、d、m开头且后面只跟有一个字符的文件名[!ab-dm]?或[^ab-dm]?当前目录下所有不以a、b、c、d、m开头且后面只跟有一个字符的文件名/dev/hd? 目录/dev下所有以hd开头且只有三个字符的文件名(3)注释符与注释在shell命令或shell编程中从字符“#”开始以后到行末的部分作为注释,因此以“#”开头的行是注释行。
(4)转义字符(5)Linux系统的特殊键2.保留字任何编程语言或系统都有一定数量的保留字,bashell的部分保留字如下:!,[,],(,),{,},break,continue,cd,echo,eval,exec,exit,export,function,getopts,hash,pwd,read,readonly,return,select,set,shift,test,time,trap,type,ulimit,unset,umask,wait,for,do,done,case,in,esac,if,else,elif,if,while,until转义字符所代表的意义转义字符所代表的意义\a 响铃符\t Tab键\b 退格键\v 垂直制表符\f 换页\\ \\n 换行\0??? 8进制表示\x?? 16进制表示\’’\` ` \””特殊键意义Ctrl+D 结束当前程序输入或终止当前程序或从系统中注销Ctrl+C 终止当前程序的执行Ctrl+\ 终止当前程序的执行(系统内部处理时不同于Ctrl+C)Ctrl+Z 挂起当前程序执行,将推到后台Ctrl+S/Ctrl+Q 暂停/继续屏幕的输出,必须配合使用ScrollLock 暂停/继续屏幕的输出,开关键Ctrl+Alt+Del 默认动作为重启系统Alt+F# 字符终端切换。
linux shell发展史
linux shell发展史Linux Shell发展史在计算机领域,操作系统是非常重要的一部分,它可以管理计算机硬件和软件资源,为用户和应用程序提供一个运行环境。
操作系统提供了很多不同的接口,其中之一就是Shell。
Shell是一个命令行解释器,它使用户能够与操作系统交互,并执行命令和任务。
本文将详细介绍Linux Shell的发展史,从诞生的起源到现在广受欢迎的Bash Shell,逐步回答你关于Shell发展的问题。
一、早期操作系统的命令行接口在早期的计算机操作系统中,命令行是主要的用户接口。
用户通过键盘输入命令,计算机处理后执行相应的操作。
这些命令通常是针对硬件直接的指令,比如读取磁碟、写入内存等。
这种接口非常原始,需要用户有底层的计算机知识,对于普通用户来说非常不友好。
二、Unix Shell的出现1969年,AT&T贝尔实验室的肯·汤普森、丹尼斯·里奇等人开发了Unix 操作系统。
他们设计了一种新的操作方式,称之为“shell”。
区别于早期的命令行接口,Unix Shell提供了一个更友好和易用的用户界面。
它能够解析用户输入的命令,并将其传递给操作系统执行。
在Unix系统中,Shell是用户与操作系统之间的桥梁。
三、Bourne Shell的诞生在Unix系统中,第一个广泛使用的Shell是Bourne Shell(sh)。
它由肯·汤普森在1979年开发。
Bourne Shell提供了很多强大的功能,比如命令扩展、I/O 重定向、管道等。
这些功能使得Shell脚本编程成为可能,可以将一系列的命令组合成脚本文件,并通过Shell执行。
四、C Shell和Korn Shell的出现在Bourne Shell之后,出现了更多的Shell变种,比如C Shell(csh)和Korn Shell(ksh)。
C Shell由比尔·乔伊在1978年开发,基于C语言的语法,引入了一些新特性,比如命令历史、命令别名等。
linux shell read用法
linux shell read用法摘要:一、Linux Shell 概述二、Shell 命令简介三、read 命令的基本用法1.read 命令的作用2.read 命令的语法3.read 命令的参数四、read 命令的实例应用1.读取用户输入2.读取文件内容3.文件内容处理五、read 命令与管道符的结合使用六、read 命令的注意事项正文:Linux Shell 是一个强大的命令行界面,用户可以通过Shell 来与操作系统进行交互。
Shell 命令是Linux 系统中的一种重要操作方式,其中read 命令是一个常用的交互式命令,用于从标准输入读取数据。
read 命令的基本用法如下:```read [选项] [参数]```其中,选项包括:- -p:在提示符前显示一个字符串- -s:静默模式,禁止显示错误信息参数包括:- 变量名:用于存储读取到的数据,可以是一个或多个变量名read 命令的作用是从标准输入读取一行数据,并将读取到的数据存储到指定的变量中。
在实际应用中,read 命令常用于获取用户的输入,以及读取文件内容。
下面通过几个实例来详细介绍read 命令的应用:1.读取用户输入```echo "请输入您的名字:"read nameecho "您好,$name!"```这段代码会显示一个提示信息,要求用户输入名字。
然后使用read 命令读取用户输入的内容,并将其存储在变量name 中。
最后,通过echo 命令输出欢迎信息。
2.读取文件内容```#!/bin/bashfile="example.txt"echo "文件内容:"read content < "$file"echo "文件内容已读取:$content"```这段代码首先定义了一个文件变量file,然后使用read 命令读取文件example.txt 的内容,并将其存储在变量content 中。
linux sh 传参数
linux sh 传参数摘要:1.Linux 简介2.Shell 简介3.传参方式a.位置参数b.选项参数c.变量参数d.标准输入4.传参示例5.总结正文:Linux 是一种自由和开放源代码的类Unix 操作系统。
它具有良好的稳定性、高度可定制性和强大的功能,广泛应用于服务器、嵌入式系统和超级计算机等领域。
在Linux 系统中,Shell 是一个重要的组成部分,它提供了用户与操作系统之间的交互界面。
在Shell 中,我们可以通过命令行来执行各种操作。
今天,我们将探讨在Linux Shell 中如何传递参数。
在Linux Shell 中,有多种传参方式:a.位置参数:这是最常用的传参方式。
命令名后的参数按照从左到右的顺序依次对应位置参数。
例如,`ls -l`命令中,`-l`是一个选项参数,`ls`命令会将位置参数`-l`解释为一个文件名。
b.选项参数:选项参数以`-`或`--`开头。
它们用于控制命令的行为或提供额外选项。
例如,`ls -l`命令中,`-l`是一个选项参数,表示以长格式显示文件列表。
c.变量参数:在Shell 脚本中,我们可以使用变量来存储参数。
这使得参数的传递更加灵活。
例如,`ls $1`命令中,`$1`是一个变量参数,表示将位置参数1 的值作为文件名传递给`ls`命令。
d.标准输入:标准输入(STDIN)是命令行中的默认输入源。
我们可以通过`cat`、`echo`等命令将数据输入到标准输入中,供其他命令使用。
例如,`sort < input.txt`命令中,`< input.txt`表示将`input.txt`文件的内容作为标准输入传递给`sort`命令。
下面我们通过一个简单的示例来演示这些传参方式:```bash#!/bin/bash# 使用位置参数echo "位置参数:$1"# 使用选项参数echo "选项参数:$2"# 使用变量参数echo "变量参数:$3"# 使用标准输入cat < /etc/passwd | grep -v "^root"```在这个示例中,我们定义了一个简单的Shell 脚本,它可以接受三个参数。
Linux之19——Shell编程基础详解
Linux之19——Shell编程基础详解第⼀部分:Linux Shell 简介Shell 是⼀个⽤ C 语⾔编写的程序,它是⽤户使⽤ Linux 的桥梁。
Shell 既是⼀种命令语⾔,⼜是⼀种程序设计语⾔。
Shell 是指⼀种应⽤程序,这个应⽤程序提供了⼀个界⾯,⽤户通过这个界⾯访问操作系统内核的服务。
Ken Thompson 的 sh 是第⼀种 Unix Shell,Windows Explorer 是⼀个典型的图形界⾯ Shell。
当⼀个⽤户登陆linux 系统后,系统就会为该⽤户创建⼀个shell程序。
Shell的版本:Bourne Shell:是贝尔实验室开发的,unix普遍使⽤的shell,在编程⽅⾯⽐较优秀,但在⽤户交互⽅⾯没有其他shell优秀。
BASH:是GNU的Bourne Again Shell,是GNU操作系统上默认的shell,在bourne shell基础上增强了很多特性,如命令补全,命令历史表等等Korn Shell:是对Bourne Shell 的发展,在⼤部分内容上与Bourne Shell兼容,集成了C Shell和Bourne shell优点。
C Shell:是SUN公司Shell的BSD版本,语法与c语⾔相似,⽐bourne shell 更适合编程第⼆部分 shell 程序设计基础2.1 shell输⼊输出2.1.1 echoecho命令可以显⽰⽂本⾏或变量取值,或者把字符串输⼊到⽂件中格式: echo stringecho的常⽤功能:\c 不换⾏ \f 不进纸 \t 跳格 \n 换⾏note:对于linux系统,必须使⽤-e选项来使以上转义符⽣效例:$ echo -e "hello\tboy"hello boyecho命令对特殊字符敏感,如果要输出特殊字符,需要⽤\屏蔽其特殊含义。
常⽤的特殊字符:双引号"" 反引号`` 反斜线\例:$ echo "\"\"" //想输出""""2.1.2 readread命令从键盘或者⽂件的某⼀⾏⽂本中读⼊信息,并将其赋给⼀个变量。
Linux基础之shell
变量设置规则
变量设置规则(1/2) 变量与变量内容(值)用等号连接 等号两边不能直接接空格符 变量名称只能是英文字母与数字,但是数字不能是开 头字符 若有空格符可以使用双引号或单引号来将变量内容括 起来。注意:双引号内的特殊字符可以保有变量特性, 但是单引号内的特殊字符则仅为一般字符必要时需要 转义字符“\”来将特殊符号(如回车换行,$,\,空 格符,单引号等)变成一般符号。如果没有引号,那 么该值中的第二个单词会当作命令执行。例如: aa=b pwd aa=“b pwd”
shell编程语言如BASH、SH、TCSH、 GAWK、Perl、Tcl和Tk都利用自己的解释 器。用这些语言编制的文件,可以直接运 行。编译器则不同,它将生成一个独立的 二进制代码文件然后才可以运行。
BASH shell
BASH shell是GNU计划中重要的工具软件 之一,目前也是 GNU操作系统中标准的 shell ,与sh兼容。 BASH shell的四大功能
LINUX shell编程
目录
一 基础理论 二 Shell编程实验 三 考核内容
一 基础理论
Shell是Linux系统中一个重要的层次,它是用户与系统 交互作用的界面。在介绍Linux命令时,Shell都作为命 令解释程序出现:它接收用户打入的命令,进行分析, 创建子进程实现命令所规定的功能,等子进程终止工作 后,发出提示符。这是Shell最常见的使用方式。 Shell 除了作为命令解释程序以外,还是一种高级程 序设计语言,它有变量,关键字,有各种控制语句,如 if, case, while, for 等语句,有自己的语法结构。利用 Shell程序设计语言可以编写出功能很强、但代码简单的 程序,特别是它把相关的Linux命令有机地组合在一起, 可大大提高编程的效率,充分利用Linux系统的开放性 能,设计出适合自己要求的命令。
LINUX SHELL
LINUX SHELLlinuxshellLinux shell主要命令的详细说明shell是用户和linux操作系统之间的接口。
linux中有多种shell,其中缺省使用的是bash。
本章讲述了shell的工作原理,shell的种类,shell的一般操作及bash的特性。
什么是贝壳linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口。
它是命令语言、命令解释程序及程序设计语言的统称。
Shell是用户和Linux内核之间的接口程序。
如果你认为Linux内核是一个球体的中心,那么外壳就是内核的外层。
当命令从shell或其他程序传递到Linux时,内核将做出相应的响应。
shell是一个命令语言解释器,它拥有自己内建的shell命令集,shell也能被系统中其他应用程序所调用。
用户在提示符下输入的命令都由shell先解释然后传给linux核心。
shell中包含了一些命令,例如更改工作目录命令CD。
其他命令,如copy命令CP和move命令RM,是存在于文件系统目录中的独立程序。
对于用户来说,命令是构建在shell 中还是构建在单独的程序中并不重要。
shell首先检查命令是否是内部命令,若不是再检查是否是一个应用程序(这里的应用程序可以是linux本身的实用程序,如ls和rm,也可以是购买的商业程序,如xv,或者是自由软件,如emacs)。
然后shell在搜索路径里寻找这些应用程序(搜索路径就是一个能找到可执行程序的目录列表)。
如果键入的命令不是一个内部命令并且在路径里没有找到这个可执行文件,将会显示一条错误信息。
如果能够成功找到命令,该内部命令或应用程序将被分解为系统调用并传给linux内核。
shell的另一个重要特性是它是一种解释性编程语言。
Shell编程语言支持高级语言中可以看到的大多数程序元素,例如函数、变量、数组和程序控制结构。
Shell编程语言简单易学。
可以在提示符下键入的任何命令都可以放入可执行的shell程序中。
linux shell 实验报告
linux shell 实验报告Linux Shell 实验报告一、引言Linux Shell 是一种命令行解释器,它允许用户与操作系统进行交互。
作为一个开源的操作系统,Linux 提供了多种 Shell,如 Bash、Zsh、Ksh 等,每种 Shell 都有其特点和用途。
本实验旨在通过实际操作,深入了解 Linux Shell 的使用和功能。
二、实验目的1. 熟悉 Linux Shell 的基本概念和操作;2. 掌握 Shell 的常用命令和参数;3. 理解 Shell 脚本的编写和执行过程。
三、实验环境本次实验使用的实验环境为 Ubuntu 20.04 LTS 操作系统,使用默认的 Bash Shell。
四、实验内容1. Shell 基本操作在 Linux 系统中,打开终端即可进入 Shell 环境。
Shell 提供了丰富的命令用于文件操作、系统管理等。
以下是一些常用的 Shell 命令示例:- ls:列出当前目录下的文件和子目录;- cd:切换当前工作目录;- mkdir:创建新目录;- rm:删除文件或目录;- cp:复制文件或目录;- mv:移动文件或目录。
2. Shell 变量和环境变量Shell 变量用于存储数据,可以通过赋值和引用来操作变量。
环境变量是一种特殊的 Shell 变量,用于存储系统环境的信息。
以下是一些常用的变量和环境变量示例:- 变量赋值:name="John";- 变量引用:echo $name;- 环境变量:$HOME、$PATH、$USER。
3. Shell 脚本编写与执行Shell 脚本是一种批处理文件,由一系列命令组成,可以实现自动化操作。
以下是一个简单的 Shell 脚本示例:```shell#!/bin/bashname="John"echo "Hello, $name!"```将上述脚本保存为 `hello.sh`,通过 `chmod +x hello.sh` 命令给予执行权限,然后通过 `./hello.sh` 执行脚本。
linux 的 shell 种类
linux 的 shell 种类Linux的shell种类:在Linux系统中,有多种不同的shell可供选择。
每种shell都有其特定的功能和用途。
下面将详细介绍几种常见的Linux shell。
1. Bourne shell (sh):Bourne shell是早期Unix系统中使用的原始shell。
它是许多其他shell的基础,如Bash和Korn shell。
Bourne shell提供了基本的命令和语法,但没有更高级的功能,如命令历史记录和命令补全。
它使用的扩展名通常是.sh。
2. Bourne-Again shell (Bash):Bash是Linux系统中最常用的shell之一。
它是Bourne shell的改进版本,提供了许多额外的功能和语法。
Bash支持命令历史记录、命令补全、作业控制等功能。
它是许多Linux发行版的默认shell,并且可以运行Bourne shell的大多数脚本。
Bash 的扩展名通常是.sh。
3. Korn shell (ksh):Korn shell是另一种常用的Unix shell。
它结合了Bourne shell 和C shell的特性,并添加了更多的功能和命令。
Korn shell在Bash之前出现,因此在一些早期的Unix系统中可能是默认的shell。
它的扩展名通常是.ksh。
4. C shell (csh):C shell是最早的Unix shell之一,其语法类似于C语言。
它提供了许多与C语言相似的特性,如条件语句和循环结构。
C shell还具有用于作业控制和命令别名的功能。
C shell的扩展名通常是.csh。
5. TC shell (tcsh):TC shell是C shell的改进版本,提供了更多的特性和命令。
它支持命令历史记录、命令补全和命令别名等功能。
TC shell在某些Linux发行版中用作默认shell。
它的扩展名通常是.tcsh。
linux shell详解
linux shell详解Linux Shell 是一种运行在 Linux 操作系统上的命令行解释器,它提供了一种与系统进行交互的方式。
本文将详细介绍Linux Shell 的相关知识,包括 Shell 的基本概念、常用命令以及一些实用技巧。
## 一、Shell 的基本概念Shell 是用户与操作系统内核之间的接口,它接收用户输入的命令,并将其转发给内核执行。
在Linux 中,常见的Shell 有Bash (Bourne Again Shell)、Csh(C Shell)等。
Bash 是最常用的Shell,也是默认的 Shell。
Shell 的主要功能包括命令解析与执行、环境控制、脚本编程等。
用户可以通过Shell 提供的命令来执行文件操作、进程管理、权限控制等操作。
## 二、常用 Shell 命令1. 目录操作命令:- `ls`:列出当前目录下的文件和子目录。
- `cd`:切换当前工作目录。
- `pwd`:显示当前工作目录的路径。
2. 文件操作命令:- `cp`:复制文件或目录。
- `mv`:移动文件或目录。
- `rm`:删除文件或目录。
- `cat`:查看文件内容。
3. 进程管理命令:- `ps`:显示当前正在运行的进程。
- `top`:实时显示进程状态。
- `kill`:终止指定进程。
4. 网络命令:- `ping`:测试与指定主机的连通性。
- `ifconfig`:查看和配置网络接口信息。
- `ssh`:远程登录到其他主机。
5. 权限管理命令:- `chmod`:修改文件或目录的权限。
- `chown`:修改文件或目录的所有者。
- `chgrp`:修改文件或目录的所属组。
## 三、Shell 脚本编程Shell 脚本是一种可以用来编写一系列命令的脚本文件,它可以实现自动化任务的目的。
Shell 脚本通常以 `.sh` 作为文件后缀名。
以下是一个简单的Shell 脚本示例,用于统计指定目录下文件的数量:```shell#!/bin/bashdir_path="/path/to/directory"file_count=0# 遍历目录下的文件for file in $(ls $dir_path)doif [ -f $dir_path/$file ]; then((file_count++))fidoneecho "文件数量:$file_count"```以上脚本中,使用了 `for` 循环遍历目录下的文件,并通过判断是否是普通文件来统计文件数量。
linuxshell基本工作原理
linuxshell基本工作原理
Linux Shell 工作原理
1、shell不断询问是否有键盘输入,用户以enter结束键盘输入后,shell程序以空格为分隔符,得到"ls","-l","*.c",三个字符串。
2、shell发现第三个字符串包含"*"通配符,就会在当前路径(或指定路径)下搜索满足这个通配符的文件。
...
3、shell然后搜索PATH这个全局变量保存的路径,寻找一个叫"ls"的命令。
4、ls程序执行后,会分析argc和argv,"-l"表示这是一个选项开关,表明用户想得到文件的详细信息,并把这个开关量保存,以便最后输出的时候选择信息的格式。
5、ls执行完既定的步骤后,退出并返回退出码,若成功则返回0,否则根据错误的不同返回不同的非零数字。
6、shell在得到成功退出码后,继续等待用户输入。
linux的shell类型
linux的shell类型
Linux的shell类型是指在Linux系统中可以使用的不同类型的shell,它们是指用户界面的命令行解释器。
目前最常用的Linux shell类型有以下几种:
1. Bash shell:Bash是Bourne-Again SHell的简称,也是Linux 中最常用的shell之一。
它是GNU计划的一部分,是自由软件的一种。
2. C shell:C shell是另一种流行的shell,在一些Unix系统上使用较多。
C shell的语法类似于C语言。
3. Korn shell:Korn shell是由AT&T实验室的David Korn于1983年开发的一种shell。
它在很多方面都类似于Bash shell,但是Korn shell具有更好的脚本编程能力。
4. Z shell:Z shell是Bash shell的扩展版本,它的设计目的是提供更好的命令行交互体验。
它提供了很多高级功能,例如自动补全、主题和插件等。
5. Fish shell:Fish shell是一种相对较新的shell,它的设计着眼于简化命令行操作。
Fish shell提供了易于记忆的命令语法和智能补全功能。
总之,Linux的shell类型有很多种,每种shell都有其独特的特点和用途。
用户可以根据自己的需要选择适合自己的shell。
- 1 -。
什么是shell(Linux)?
什么是shell(Linux)?Shell是一种具备特殊功能的程序,它是介于使用者和UNIX/Linux 操作系统之核心程序(kernel)间的一个接口。
为什么我们说shell 是一种介于系统核心程序与使用者间的中介者呢?读过操作系统概论的读者们都知道操作系统是一个系统资源的管理者与分配者,当您有需求时,您得向系统提出;从操作系统的角度来看,它也必须防止使用者因为错误的操作而造成系统的伤害?众所周知,对计算机下命令得透过命令(command)或是程序(program);程序有编译器(compiler)将程序转为二进制代码,可是命令呢?其实shell 也是一支程序,它由输入设备读取命令,再将其转为计算机可以了解的机械码,然后执行它。
各种操作系统都有它自己的Shell,以DOS 为例,它的shell 就是 檔。
如同DOS 下有NDOS,4DOS,DRDOS 等不同的命令解译程序可以取代标准的 ,UNIX 下除了Bourne shell(/bin/sh)外还有C shell(/bin/csh)、Korn shell(/bin/ksh)、Bourne again shell(/bin/bash)、Tenex C shell(tcsh)…等其它的shell。
UNIX/Linux 将shell 独立于核心程序之外,使得它就如同一般的应用程序,可以在不影响操作系统本身的情况下进行修改、更新版本或是添加新的功能。
什么是SSH?SSH是英文Secure Shell的简写形式。
通过使用SSH,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。
使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。
SSH有很多功能,它既可以代替Telnet,又可以为FTP、Pop、甚至为PPP提供一个安全的"通道"。
linux shell发展史
linux shell发展史【原创实用版】目录1.Linux Shell 的发展历程2.Linux Shell 的特点与功能3.Linux Shell 的常用类型及特点4.Linux Shell 的发展趋势正文一、Linux Shell 的发展历程Linux Shell 是 Linux 操作系统的一部分,它的发展历程可以追溯到 20 世纪 80 年代。
当时,Linux Shell 的前身——Unix Shell,主要用于 Unix 操作系统的命令行界面。
随着 Linux 操作系统的诞生和发展,Linux Shell 也逐渐演化成为如今的形态。
二、Linux Shell 的特点与功能Linux Shell 是一个强大的命令行界面,它具有以下特点和功能:1.命令行解析:Linux Shell 可以解析用户输入的命令,并将其传递给操作系统进行执行。
2.命令行补全:Linux Shell 可以根据用户输入的命令进行补全,帮助用户更快速地执行命令。
3.脚本支持:Linux Shell 支持脚本编写,用户可以通过编写脚本来实现一系列复杂的操作。
4.环境变量管理:Linux Shell 可以管理环境变量,允许用户在不同的环境下执行不同的命令。
三、Linux Shell 的常用类型及特点Linux Shell 有多种类型,其中常用的有以下几种:1.Bash:Bash(Bourne-Again Shell)是一种通用的 Linux Shell,广泛应用于 Linux 系统中。
它具有丰富的命令和强大的脚本支持,是许多用户首选的 Shell。
2.Zsh:Zsh(Z Shell)是一种功能强大的 Linux Shell,它的补全功能和脚本支持相较于 Bash 更加出色。
然而,Zsh 的学习曲线较陡峭,对于新用户不太友好。
3.Dash:Dash 是一种轻量级的 Linux Shell,它的体积小巧,符合POSIX 标准。
linux系统基本组件
linux系统基本组件Linux操作系统是一种开源的操作系统,由多个基本组件构成。
以下是Linux系统的一些基本组件:1. 内核(Kernel)内核是Linux系统的核心部分,负责管理系统资源、处理硬件设备、调度进程等基本功能。
Linux内核采用单一级保护模式,具有模块化设计,可以根据需求动态加载或卸载内核模块。
2. ShellShell是Linux系统的用户界面,提供命令行界面(CLI)与系统内核进行交互。
常见的Shell有Bash、Zsh、Tcsh等。
Shell可以执行脚本,自动化系统管理任务。
3. 文件系统Linux支持多种文件系统,如Ext4、XFS、Btrfs等。
文件系统负责组织和管理磁盘上的文件和目录。
Linux采用层级式目录结构,以"/"作为根目录。
4. 系统库系统库是一组公共代码库,提供各种编程接口和函数,供应用程序调用。
常见的系统库有C库(libc)、线程库(pthread)等。
5. 系统实用程序Linux提供了大量的系统实用程序,用于管理和维护系统。
常见的实用程序包括文件操作工具(cp、mv、rm等)、文本处理工具(grep、sed、awk等)、压缩解压缩工具(tar、gzip等)、网络工具(ping、ifconfig等)等。
6. 图形界面虽然Linux原生是命令行界面,但也提供了多种图形用户界面(GUI),如GNOME、KDE、Xfce等。
图形界面为用户提供了友好的可视化操作环境。
7. 软件包管理工具Linux发行版通常提供软件包管理工具,用于安装、升级和卸载软件包。
常见的包管理工具有apt、yum、dnf等。
它们可以自动解决软件依赖关系,方便管理软件。
以上是Linux系统的一些基本组件,它们协同工作,为用户提供了强大、稳定和高效的操作环境。
shell的概念
shell的概念Shell是指用户与操作系统内核交互的命令行界面,是Linux系统的重要组成部分。
Shell的作用是解释用户输入的命令,然后将命令转换为操作系统内核能够理解的指令,最终执行相应的操作。
Shell 是Linux系统中最常用的命令行界面之一,也是Linux系统管理的基础。
Shell的分类Shell可以分为两大类:Bourne Shell和C Shell。
Bourne Shell 是由Unix系统的创始人Ken Thompson和Dennis Ritchie创建的第一个Shell,它的特点是简单、高效、稳定,被广泛应用于Unix和Linux系统中。
C Shell是由Bill Joy开发的,它的特点是更加人性化,支持命令行编辑、命令历史记录等功能,被广泛应用于BSD系统中。
Shell的功能Shell具有以下功能:1.命令解释。
Shell可以解释用户输入的命令,并将命令转换为操作系统内核能够理解的指令,最终执行相应的操作。
2.环境控制。
Shell可以控制用户的环境变量,包括PATH、HOME、USER等,以便用户可以在不同的目录下执行命令。
3.命令行编辑。
Shell支持命令行编辑功能,用户可以使用方向键、删除键等操作来编辑命令行,提高工作效率。
4.命令历史记录。
Shell可以记录用户执行过的命令,以便用户可以方便地查找和重复执行历史命令。
5.管道操作。
Shell可以通过管道操作将多个命令连接起来,实现数据的传递和处理。
6.脚本编程。
Shell支持脚本编程,用户可以编写Shell脚本来完成一系列复杂的操作。
Shell的常用命令Shell中有很多常用的命令,如下所示:1.cd命令:切换当前目录。
2.ls命令:列出当前目录下的文件和子目录。
3.mkdir命令:创建一个新目录。
4.rm命令:删除一个文件或目录。
5.cp命令:复制一个文件或目录。
6.mv命令:移动一个文件或目录。
7.echo命令:输出一段文本。
linux sh 语法
Linux Shell(sh)是一种命令行界面,用于与操作系统进行交互。
它允许用户执行各种操作,如运行程序、管理文件系统和处理文本数据。
下面是关于 Linux Shell (sh) 语法的详细解释:
1.命令行语法:
在 Linux Shell 中,每个命令通常由命令本身和一些选项或参数组成。
语法一般如下所示:
这里:
–command_name是要执行的命令的名称。
–[option(s)]是可选的标志,用于修改命令的行为。
–[argument(s)]是要对其执行操作的对象或输入。
2.变量:
在 Shell 脚本中,你可以使用变量来存储数据。
变量赋值的一般语法如下:
例如:
3.条件语句:
在 Shell 脚本中,可以使用条件语句根据条件执行不同的命令。
一般的语法如下所示:
或者:
这里的condition是一个表达式,如果其值为真,则执行then语句块中的命令。
4.循环语句:
Shell 脚本中的循环语句用于多次执行相同或类似的命令。
常见的循环结构包括for、while和until。
例如:
或者:
或者:
5.函数:
Shell 脚本中的函数用于将一系列命令组织成单个单元。
定义函数的语法如下:
例如:
6.注释:
你可以在脚本中使用注释来解释代码。
在 Shell 脚本中,注释以#开头,后面跟着注释的文本。
这些是 Linux Shell (sh) 的基本语法要点。
它们是使用 Shell 编写脚本和执行命令时的基本构建模块。
Linux Shell概述
Linux Shell概述英文shell的本意是“壳”。
它形象地说明了shell在Linux系统中的作用。
shell 就是紧紧包裹在Linux内核外面的一个壳程序。
用户让操作系统做的所有任务,都是通过shell与系统内核的交互来完成的。
shell所处的地位,就相当于DOS中的程序,但比的功能更加强大。
shell是用户与操作系统的内核之间的接口,是系统的用户界面,并且具有相当丰富的功能。
利用shell可以编写出代码简捷,但功能很强的脚本文件。
1 了解ShellShell是使用Linux系统的基本环境。
虽然不使用Shell,通过X Window也能操作Linux,但是,无论如何看待文本环境下的工作,都可以肯定地说,一旦全面体验到纯文本的强大功能,就会被它所折服。
文本就是简洁,文本就是速度。
管理网络的系统管理员在使用Shell方面是最有经验的。
那些被迫在慢速调制解调器连接上使用图形工具的用户很快也会被折服。
Shell提供了用户与操作系统之间通信的方式,可以以交互方式(从键盘输入,并且可以立即得到响应)执行,也可以以非交互方式(shell script方式)执行。
这里的shell script是放在文件中的一串shell和操作系统命令,它们可以重复使用,本质上,shell script是将命令行命令简单地组合到一个文件里面。
此外,shell还可分为交互式shell和非交互式shell。
其中,交互式模式是指shell 等待用户的输入,并且执行用户提交的命令,由于需要与用户进行交互,因而被称为交互式shell;这种模式也是大多数用户所熟悉的:登录、执行一些命令、退出,当用户退出系统后,shell也就终止了。
shell也可以在非交互式模式下运行,在这种模式下,shell不与用户进行交互,而是读取存放在文件中的命令,并且执行它们,当读到文件尾时,shell将终止。
shell是用户和Linux内核之间的接口程序,如果把Linux内核想象成一个球体的中心,那么shell就是围绕内核的外层。
linux+shell脚本语言基础知识
linux shell脚本语言基础知识一.shell简介Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的界面,更确切的说,shell是用户与Linux操作系统沟通的桥梁。
用户既可以输入命令执行,又可以利用Shell脚本编程,完成更加复杂的操作。
shell是一个命令解释器,它从输入设备读取命令,再将其转为计算机可以了解的指令,然后执行它。
在linux中,shell又不仅是简单的命令解释器,而且是一个全功能的编程环境。
Linux的Shell种类众多,常见的有:Bourne Shell(/usr/bin/sh或/bin/sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh)、K Shell(/usr/bin/ksh)、Shell for Root(/sbin/sh),等等。
不同的Shell语言的语法有所不同,所以不能交换使用。
每种Shell都有其特色之处,基本上,掌握其中任何一种就足够了。
通常用Bash,也就是Bourne Again Shell进行编程。
二.shell使用1.建立和运行shell程序shell脚本程序:按照一定的语法结构把若干linux命令组织在一起,是这些命令按照我们的要求完成一定的功能。
它可以进行类似程序的编写,并且不需要编译就能执行。
(只需修改其权限)像编写高级语言的程序一样,编写shell程序需要一个文本编辑器,如VI和VIM,通常使用VIM文本编辑器,支持更便利的插入模式。
首先使用VIM编辑器编辑一个hello.sh文件:#!/bin/bash#hello world exampleecho "hello world"这样,一个最简单的shell程序就编写完了。
第一行:#!说明hello.sh这个文件的类型的,这有点类似于Windows系统下的用不同的文件后缀来表示不同的文件类型,但又不完全相同。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Linux Shell简介版权信息作者未知文章出处黄嘴企鹅论坛 flaboy兄转贴文档制作拒绝正版本文的内容来源于 MUO 的 Basics 部分其原始英文版可以从这里获得http://www./docs/中文版来自吴晓光的CMUO /~xgwu/c muo/MUO 是 Mandrake Linux /为用户提供的入门手册其内容实用并且实时更新非常适合初学者做入门参考与常见的各种Linux教程不同MUO介绍给Linux初学者的是学习Linux的方法而非对某个系统的描述这对各种有着千差万别的Linux发行版的学习尤为重要本文编译整理时对相关章节做了相应的删改处理去掉了针对Mandrake Linux的部分内容使用 Shell以下将介绍并解释基本的 shell 命令和机制第一篇超级工具Terminals xterms 和 Shells超级工具您或许听过这样的论调命令行(the mommand line)早就已经过时了那东西神秘兮兮的等等有些人甚至觉得操作系统中应该没有这些命令才好事实是上您可以不懂任何 shell 就能使用 Linux 您启动系统后可以直接进入 X Window 最后在 X Window 下关机我坚信用 Linux 而不懂 shell 就象开车只会用头档(first gear)一样当然最初看起来直接而简单在大多数情况下都管用但速度慢而且无法真正体验驾驶的乐趣对命令行很有趣就象用一大堆收集到的积木竟可以完成许多意想不到的创举一些极其复杂的工作只需几行命令就可以解决这是因为在 Unix 中shell 可不是简单的命令解释器典型的有 Windows 中的 DOS 而是一个全功能的编程环境这并不意味着 shell 非常容易学通您知道好事多磨这还是要花点工夫的;-) 但请相信我这绝对值得您在很短时间内就能被一大帮门外汉吹捧为 Unix wizard奇才*grin*为了说明 shell 这里需要一些背景知识Terminals, xterms 与 Shells追溯到 Unix 诞生的那个年代当时还没有现在流行的"个人计算机"被称为计算机的机器还是吞吐磁带与 magnetic memory 用术语'core'来表示系统 memory的庞然大物D EC 公司现在的 Compaq推出的 PDP-11 体积小被称为 mini而且价格底在大学中引起了巨大的反响很多学校直到那时才买得起一台计算机PDP-11 物美价廉只有 10000$这些机器的操作系统由汇编语言机器语言写成所以运行起来效率很高但都无法移植(u nportable)每家计算机公司都给自己的机器配上独有的操作系统然后再销售这种笨拙的作法很快就被人们意识到了于是就开始兴建一个可以在不同品牌机器上运行的操作系统1969 年Ken Thompson 开始写后来成为 Unix 的第一行代码Thompson 曾经参加了一个项目MULTICS Unix 是与这有关的一个玩笑词其实Dennis Ritchie 为这个新的操作系统设计了一种新的编程语言-- C 语言后事情才真正开始虽然 Unix 的效率不及原来的操作系统但有三个突出的优点可以任意移植到其他机器其中的 C 语言大大简化了编程而且这些都 free 很快全美国的大学都忙着开始为机器安装 Unix终端TerminalsUnix 是可以在许多种机器上运行的操作系统但人们又如何使用这些机器呢他们是通过哑终端来连接到这些机器也就是用键盘显示器及足够的 electronics 电子元件组成的机器与中央计算机(central computer)相连在这些终端上用户可以敲字符teletypy这就是字符串'tty'表示终端设备文件和'getty'命令的名称来历您可能会问现在这些东西都在哪儿这些终端的厂家无法达成一项最终标准这导致每种牌子的终端都有各自的键盘布局各自的在屏幕上显示字符的方法发送或接收什么信号表示什么字符控制代码等等为了避免这些混乱就创建了一个含有所有不同终端特性的(capability)文件这就是'termcap'用一个工具打开'/etc/termcap'瞧瞧可别吓着了 ;-)Linux 终端大多数用'vt100'或'linux'作为终端类型xterms在八十年代初期产生了一个 Unix 的图形子系统-- the X Window System 九十年代早期为了更好地实现基于 Intel 的 Unix 类系统上如FreeBSD NetBSD Linux的应用产生了一个系统分支-- XFree86X Window 中一个很大的好处是可以运行多个虚拟(virtual)终端甚至在 X Window 下就有这么个应用程序--'xterm'您将发现'xterm'和'virtual terminal'在很多情况下都是一样的有的地方说'打开一个 xterm'其实您不是非要用'xterm'程序其他的终端模拟器(terminal emulator)如 rxvt konsole aterm eterm wterm 等等一样有效终端模拟器又称为虚拟终端通过伪(pseudo) tty 设备-- pty 与系统相连并且使用自己的显示标准-- xterm 这导致不同的终端模拟器可能在一些按键或程序上存在细小的差别这取决于模拟器多大程度上遵守了'xterm'的显示标准Shells为了在终端中运行程序需要 shell shell 是操作系统的一部分用来与用户打交道并且可以用来协调各个命令第一个真正的 Unix shell -- 'sh'亦称为'Bourne shell'诞生于 1975 年作者是 Steve Bourne 很快出现了其他 shell 如基于原始'Bourne shell'的'ksh''zsh'后者常用作专属 Unixes 系统中的标准 shell 也有一些从 C 语言中衍生出来的 shell 如'csh'或'tcsh'在 Linux 中标注的 shell 是'bash'即 the GNU Bourne-Again Shell 有点玩笑的味道这个 shell 功能非常强大甚至有人觉得太庞大了压缩的 man page 就有50 KBShell 起步首先有一点小说明在平常应用中建议您不要用'root'帐号运行 shell 如果您还是新手这一点尤其要注意作为普通用户不管您有意还是无意都无法破坏系统但如果是'root'那就不同了只要敲几个字母就可能导致灾难性后果当您登入系统或打开一个 xterm 窗口首先看到的是提示符(prompt)Red Hat Linux 的标准提示符包括了您的用户名登入的主机名没有设置的话是'localhost'当前所在的目录(working directory)提示符号[tom@belbo tom]$我以用户名'tom'登入名为'belbo'的主机当前在我的 home 目录--'/home/tom'中'root'的提示符[root@belbo root]#除了不同的用户名外提示符号由'$'变成了'#'根据 Bourne shell 的传统普通用户的提示符以'$'结尾而超级用户用'#'提示符的每个部分都可以定制您在后面将有更深的了解要运行命令的话您只要在提示符后敲进命令然后在按 <ENTER> 键shell 将在其路径中详情见后搜索这个命令找到以后就运行并在终端里输出相应的结果如果有的话命令结束后再给出新的提示符[tom@belbo tom]$ whoamitom[tom@belbo tom]$顺带指出当您敲 ENTER 时光标(cursor)在哪里并不要紧因为 shell 总是会整行地读取基本的命令有'ls'list directory 列出目录内容'cp'copy 复制'mv'move / rename 移动重命名'cd 'change directory 改变目录这些命令后面都可以跟上一帮可选项这方面 man page 有详细的介绍man ls, man mv 等等在您动身前往 shell 领地前这里有几个术语(terminology)的简短说明命令可能带一些可选项options参数argumentsmv -i file dir其中'-i'是命令'mv'的一个可选项而'file'和'dir'则是参数所有可选项在该命令的 man pag e 都中有详细的介绍此例中用 man mv而参数则由您提供可选项决定命令如何工作而参数则用于确定命令作用的目标到目前为止介绍得有点象许多人厌恶轻视的 DOS shell 但伴随着下面的介绍您将会有新的体验第二篇自动补齐命令行的历史记录编辑命令行可用的 Shell 快捷方式Unix 及后继者 Linux在命令行下面诞生因此Unix 中的命令行有许多非常实用的功能在本篇中我们将来作一些了解自动补齐如何用'cd'改变目录change directory最快地从您当前所在的 home 目录跳到'/usr/sr c/redhat/'呢cd /u<TAB>sr<TAB>r<TAB>这称为'命令行自动补齐'(automatic command line completion)这在平常应用中是不可缺少的让我们仔细看看这个例子cd /u<TAB>扩展成了 cd /usr/ 很简单吧下面的cd /u<TAB>sr<TAB>扩展为 cd /usr/src/ 如果您只敲了cd /u<TAB>s<TAB>'/usr'下匹配的'cd /u*/s*'三个子目录将列出供您选择'/usr/sbin''/usr/share'和'/usr/src'因此<TAB> 键可以很方便地用于根据前几个字母来查找匹配的文件或子目录比如ls /usr/bin/zip<TAB> 将列出所有'/usr/bin'下面以字符串'zip'开头的文件或子目录当然完成这类任务还有更厉害的命令但这个方法确实很管用另外碰到长文件名时就显得特别方便假设您要安装一个名为'boomshakalakwhizbang-4.6.4.5-i586.rpm'的 RPM 包您输入 rpm -i boom<TAB> 如果目录下没有其他文件能够匹配那 shell 就会自动帮忙补齐cd /u<TAB>sr<TAB>l<TAB>将扩展成 cd /usr/src/linux 并等待继续'/usr/src'中有两个匹配的目录'/usr/src/linux-[...] ''/usr/src/linux'如何告诉 shell 您想要后面的那个呢只要跟一个斜线/ slash就可以选择后面的那个了假如您不确定是'/usr/src/linux/Documentation'还是'/usr/src/linux/documentation'而您知道Linux 是区分大小写的如果已经仔细读过前面部分的话您想到可以用cd /u<TAB>sr<TAB>l<TAB>/d<TAB>扩展成了'/usr/src/linux/drivers/'因此应该是'Documentation'(大写的'D')这种补齐对命令也有效[tom@belbo tom]$ gre<TAB>grecord grefer grep[tom@belbo tom]$ gre在这里 shell 将列出所有以字符串'gre'开头的已知命令命令行的历史记录通过按向上方向键您可以向后遍历近来在该控制台下输入的命令用向下方向键可以向前遍历与 SHIFT 键连用的话您还可以遍历以往在该控制台中的输出您也可以编辑旧的命令然后再运行按 <CTRL r> 后shell 就进入"reverse-i(ncremental)-search"向后增量搜索模式现在输入您要找的命令的首字母(reverse-i-search)`':. 敲入 'i'可能会变成(reverse-i-search)`i': isdnctrl hangup ippp0如果您再按 <ENTER> 键上面的命令将再次执行而如果您按了向右向左方向键或< ESC> 上面的命令将回到普通的命令行这样您就可以进行适当编辑编辑命令行通过光标和功能键Home End 等键您可以浏览并编辑命令行如果您需要还可以用键盘的快捷方式来完成一般的编辑l <CTRL k>删除从光标到行尾的部分l <CTRL u>删除从光标到行首的部分l <ALT d>删除从光标到当前单词结尾的部分l <CTRL w>删除从光标到当前单词开头的部分l <CTRL a>将光标移到行首l <CTRL e>将光标移到行尾l <ALT a>将光标移到当前单词头部l <ALT e>将光标移到当前单词尾部l <CTRL y>插入最近删除的单词l <!$>重复前一个命令最后的参数例如您用命令 mkdir peter/pan/documents/tinkerbell 新建了一个目录现在您向用命令'cd'进入该目录您可以用 cd !$shell 将把前一个命令'mkdir'的参数添加到现在的'cd'后面当您更深入了解Linux后将看到这些快捷方式在其他应用程序下输入时有时也有效比如在浏览器中的输入框中可用的 Shell 快捷方式Red Hat Linux 带有不少快捷方式其中一部分是 bash 原来就有的而还有一些则是为您预先设置的在后面您将看到如何设置由于 home 目录是每位用户的活动中心许多 Unix 对此有特殊的快捷方式'~'就是您的 home 目录的简写形式我们假设您在其他目录想把一个名为'sometext'的文件复制到您 home 目录下的 'docs'子目录中除了输入cp sometext /home/myusername/docs您还可以用简写cp sometext ~/docs理论上这也可以应用在命令'cd'上无论当前路径在哪里cd ~ 将回到您的 home 目录其实还可以简化只要键入 cd 就可以返回 home 目录了Red Hat Linux 为您提供了一些预先设置的快捷方式称为'别名'aliases比如l ll 将执行'ls -l -k'以长格式列出目录内容包括一些文件属性并以 KB 而不是 byte 为单位显示文件大小l ls 将执行'ls -F --color=auto'列出目录内容加上文件类型标识并使用颜色现在您应该对 shell 及一些快捷方式有了进一步的了解下面我们来看看除了应用一些简单的命令shell 还能作什么第三篇命令的排列命令的任务调度命令的替换命令的排列现在您将看到一些常用的命令排列您可能想在一行中给出所有命令然后就可以把注意力转移到其他地方没问题shell 允许您在不同的命令之间放上特殊的排列字符(queuing characters) 这儿将介绍最常用的两种请注意为了看起来更清楚我在这些字符两旁加了空格而在实际应用中您不一定要这么做'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 bzImag e''make modules''make modules_install'和'make install'如果要等一个命令完成后再输入下一个再等再输入那就太麻烦了另一方面每个命令只有当前面的命令都正确执行完毕后才能开始执行如果您用';'来排列命令则即使有命令执行失败后面的也照常运行最后您可能在'/boot'目录下得到一个有问题的内核映像(image)而用'&&'make dep && make clean && make bzImage && make modules && make modules _install && make install不需要中途打断就可以编译内核及其模块并完成后面的安装命令的任务调度当您在终端里运行一个命令或开启一个程序时终端要等到命令或程序运行完毕后才能再被使用在 Unix 中我们称这样的命令或程序在前台(foreground)运行如果您想在终端下运行另一个命令则需要再打开一个新的终端但这里还有一个更优雅的办法称为任务调度(jobbing)或后台(backgrounding)当您运用任务的调度或将命令置于后台终端就立即解放了这样一来终端立即就可以接受新的输入为实现这样的目的您只需在命令后面添加一个 &gqview &告诉 shell 将图片查看器'GQview'放到后台去执行即当成 job 来运行命令 jobs 将告诉您在这个终端窗口中运行着哪些命令与程序jobs[1]+ Running gqview &当您要关闭终端窗口时这一点就很重要因为关闭终端将导致所有在其中运行的任务都将被中止在此例中如果您关闭了终端由这个终端开启的 GQview 程序也将被关闭但如何将前台运行的一个程序放到后台去没问题gqview<CTRL z>[2]+ Stopped gqviewbg[2]+ gqview &组合键 <CTRL z> 将挂起终端中正在运行的程序然后您就可以用 bg 命令将其放到后台去执行请注意在后台运行图形应用程序有时候是有用处的这样可以在终端下显示这个程序的出错信息虽然这对您可能没有直接的帮助当如果碰到了麻烦向别人询问时这些出错提示就有用武之地了一些图形程序很可能还处在测试期(Beta)尽管在后台执行也会在终端中输出一些信息如果您对此不满可以用下面命令command &>/dev/null &这不仅将程序送到后台执行还将其输出发到'/dev/null'文件'/dev/null'是系统的"碎纸机" (s hredder)所有送到那里的信息都将消失殆尽命令的替换命令替换(Command substitution)是一项很实用的功能我们假设您想看看 XFree86 文档中的 'README.mouse'文件但您不知道这个文件的位置但您是位机灵的用户已经听说了'locate'命令也安装了'slocate'包您就可以用locate README.mouse发现那个文件在'/usr/X11R6/lib/X11/doc'现在您就可以在终端里用'less'或在文件管理器中进入那个目录然后读取文件而命令替换可以给您带来一些便捷less $(locate README.mouse)一步到位命令'locate README.mouse'的输出(= /usr/X11R6/lib/X11/doc/README.mou se)作为'less'的参数然后就可以显示文件内容了这种机制的语法是command1 $(command2)除了'$( )'您还可以用后引号(backquote)command1 `command2`这样虽然可以减少输入但可读性差而且很容易就和没有替换功能的一般单引号混淆我更欣赏前一种方法但这最终起决于您这里有另外一个例子我们假设您打算结束一个名为'rob'的程序您先得用命令'pidof'找出相应的进程号(Process ID)然后以这个 PID 为参数运行'kill'命令这样就可以结束'rob'程序除了用pidof rob567kill 567您还可以试试kill `pidof rob`怎么样效率有所提高吧在下一篇中我将接着介绍 shell 的另外两种实用的机制文件名匹配输出重定向第四篇文件名匹配输出重定向文件名匹配文件名匹配使得您不必一一写出名称就可以指定多个文件您将用到一些特殊的字符称为通配符(wildcards)假设您想用'rm'命令删除目录下所有以字符串'.bak'结尾的文件除了在'rm'后跟上所有文件名作为参数您还可以用通配符'*'rm *.bak'*'可匹配一个或多个字符在本例中您告诉 shell 将命令'rm'的参数扩展到"所有以'*.bak'结尾的文件"shell 就将扩展后的参数告诉'rm'命令您将看到shell 在命令执行前就将读取并解释命令行正是因为这个您才可以将通配符用于 shell 命令的参数中让我们更进一步地来认识通配符'*'假定您有个目录其中含文件'124.bak''346.bak'及'5 83.bak'您想只保留文件'583.bak'可以用rm *4*.bakshell 就将'*4*.bak'扩展成"所有含'4'并以'.bak'结尾的字符串"注意到 rm 4*.bak 无法工作因为这匹配的是以'4'开头的文件由于目录中没有这样的文件shell 将这个模式扩展为空的字符串故'rm'将返回出错信息rm: cannot remove `4*.bak': No such file or directory如果您想保留文件'345.bak'而删除'124.bak'和'583.bak'这看起来有些难度因为被删文件的名称除了后缀其他都不同但幸运的是您可以用不含有来指定文件rm *[!6].bak这将被读为除了以'6.bak'结尾的文件删除其他所有以'.bak'结尾的文件您必须将取反号(negation sign)与取反字符这里是6放到括号中不然的话shell 会将惊叹号(excl amation mark)解释成历史记录替换的开始(the beginning of a history substitution)取反号在本篇介绍的所有匹配模式中都有效请注意通配符'*'与取反号连用很容易产生问题猜猜rm *[!6]*.bak表示什么这个命令将删除所有文件甚至包括名称中包含'6'的文件如果您将通配符'*'放到了取反号前面和后面实际上取反号将失效因为 shell 将其解释为"所有名称中任何位置都不含该字符的文件"在我们的例子里只有文件'666.bak'不符合该模式第二个通配符是问号(question mark)'?'在匹配时一个问号只能代表一个字符为了示范其用途我们在上例的假设中添加两个新文件'311.bak~'和'some.text'现在列出所有在点号后有四个字符的文件ls *.????问号通配符能够有效地避免上面提到的'取反号陷阱'(negation trap)rm *[!4]?.*将扩展成"所有除了点号前倒数第二个字符为'4'的文件"也就是只保留文件'346.bak'您可能会问有没有其他匹配方式到目前为止您只看到了在指定位置匹配唯一字符的方法但其实您也可以这样ls [13]*将列出所有以字符'1'或'3'开头的文件在我们的例子中文件'124.bak''311.bak~'和'346.bak'匹配注意到您必须用中括号将匹配的模式括起来否则模式只匹配以字符串'13'开头的文件接下来您将高兴地看到还可以定义匹配的范围ls *[3-8]?.*将列出所有点号前倒数第二个字符落在'3'到'8'范围的文件在我们的例子中匹配的文件是'346.bak'和'583.bak'引用 shell 的特殊字符但是上面的那些机制存在一个缺点shell 总在命令执行前试着进行扩展有时候会变得很棘手l 文件名包含特殊字符假设您在那个目录中还有一个名为'!56.bak'的文件下面试图进行模式匹配rm !*rmrm: too few argumentsshell 将'!*'解释成历史记录的替换加入前一个命令的所有参数而不是匹配方式l 命令本身带特殊字符作参数一些 Linux 下的命令行工具比如 (e)grep sed awk f ind 及 locate 都使用自己的正则表达式(regular expressions)这些表达式与模式匹配看起来惊人地相似但在某些地方又有所不同但为了使这些特殊命令生效shell 就不能先将其当作模式匹配来解释find . -name [1-9]* -printfind: paths must precede expression应该是find . -name '[1-9]*' -print./346.bak./124.bak./583.bak./311.bak~您可以通过反斜线(back slash)来引用特殊字符比如 ! $ ? 或空格ls \!*!56.bak或者用单引号ls '!'*!56.bak请注意要看清楚引号应该放在什么位置命令 ls '!*' 将查找名为'!*'的文件这是由于通配符也在引号间所以只能依照字面来解释输出重定向Unix 的理念是汇集许多小程序每个东东都有特殊的专长复杂的任务不是由大型软件完成而是运用 shell 的机制组合许多小程序共同完成重定向就在其中发挥着重要的作用在多个命令间重定向这要通过管道(pipe)由管道符号来标识语法是command1 | command2 | command3 等等这种格式您一定已经见到过了管道经常将一个程序的输出送到'more'或'less'来阅读ls -l | less其中第一个命令提供目录内容第二个则将其以翻页的方式显示更复杂的例子如rpm -qa | grep ^x | less第一个命令给出所有已安装的 RPM 包第二个则将其过滤(filter'grep')只剩下以'^x'开头的包第三个命令则将结果以翻页的方式显示重定向至文件有时您希望将命令的输出结果保存到文件中或以文件内容作为命令的参数这可以通过'>'和'<'来实现command > file将 command 的输出保存到 file 中这将覆盖 file 中的内容ls > dirlist将当前目录的内容保存到'dirlist'文件command < file将 file 内容作为 command 的输入sort < dirlist > sdirlist将文件'dirlist'的内容送到命令'sort'然后再将排序后的结果送到文件'sdirlist'当然您也可以一步到位ls | sort > sdirlist一种特殊的方式是'command 2> file'这将 command 执行的出错信息送到 file 中这个您到时候会需要另一种操作符是'>>'这将输出添加到已存在的文件中echo "string" >> file将 string 加到文件 file 中这是不打开文件而完成编辑的好办法但是'<'和'>'操作符都有一个重要的限制command < file1 > file1将删除 file1 的内容而command < file1 >> file1却可以很好地工作将加工过的 file1 内容加回到文件中是不是有点多;-) 不必惊慌您完全可以按照自己的速度一步步地来学习别忘了实践是最好的学习方法熟知了许多 shell 的机制后您可能急着想知道如何来定制环境在后面的两篇中您将得到这方面的启示在最后一篇中还有一段如何处理 shell 出错信息的常见问答(FAQ)及一些配置技巧第五篇bash 配置文件提示符改变 $PATHbash 配置文件在您的 home 目录下运行ls .bash*您将看到这些文件l .bash_history 记录了您以前输入的命令l .bash_logout 当您退出 shell 时要执行的命令l .bash_profile 当您登入 shell 时要执行的命令l .bashrc 每次打开新的 shell 时要执行的命令请注意后两个的区别'.bash_profile'只在会话开始时被读取一次而'.bashrc'则每次打开新的终端如新的 xterm 窗口时都要被读取按照传统您得将定义的变量如 PATH 放到'.bash_profile'中而象 aliases别名和函数之类则放在'.bashrc'但由于'.bash_profile'经常被设置成先读取'.bashrc'的内容您如果图省事的话就把所有配置都放进'. bashrc'这些文件是每一位用户的设置系统级的设置存储在'/etc/profile''/etc/bashrc'及目录'/etc/ profile.d'下的文件中但您得习惯用各自的配置文件编辑不需要'root'权限还可以使您的设置更有个性当系统级与用户级的设置发生冲突时将采用用户的设置读取'.bashrc'的内容您如果要省点事的话就把您所有的配置都放进'.bashrc'上面的这些文件是每位用户的设置系统级的设置存储在'/etc/profile''/etc/bashrc'及目录' /etc/profile.d'下的文件中您最好习惯使用各自的配置文件编辑不需要'root'权限还可以使您的设置更具个性当系统级与用户级的设置发生冲突时将优先采用用户的设置提示符每次当您打开一个控制台(console)或 xterm 时最先看到的就是提示符(prompt)类似于account@hostname ~ $在默认设置下提示符将显示您的用户名主机名默认是'localhost'当前所在目录在。