Linux中的shell与shell命令
shell与shell命令
本章主要内容:
shell基本功能及种类
shell基本概念
I/O重定向与管道
shell的启动
基本shell命令
3.1 shell基本功能与基本概念
3.1.1 shell基本功能
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]?或当前⽬录下所有不以a、b、c、d、m开头且后⾯只跟有⼀个字符的⽂件名
[^ab-dm]?
/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,don 转义字符所代表的意义转义字符所代表的意义\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# 字符终端切换。⽐如Alt+F2将终端切换⾄F2
Ctrl+Alt+F# 从图形介⾯切换终端到字符终端。⽐如Ctrl+Alt+F1从图形界⾯切换⾄F1
3.1.3 ⽂件命名及⽂件类型
1. ⽂件与⽂件名
⽂件是被命名(称为⽂件名)的存储在某种介质(如磁盘、光盘和磁带等)上的⼀组信息的集合。UNIX/Linux的⽂件均为⽆结构的字符流形式。
⽂件名是⽂件的⼀种标识,⼀般情况下,它由字母、数字、下划线和圆点组成的字符串来构成。Linux⽀持长⽂件名,但要求⽂件名的长度限制在255个字符以内。
2. ⽂件类型
UNIX/Linux系统中有三种基本的⽂件类型:
普通⽂件
⽬录⽂件
设备⽂件
母亲节的诗歌
3.1.4 ⽬录结构与路径
1. ⽬录与⽬录结构
UNIX/Linux系统以⽂件⽬录的⽅式来组织和管理系统中的所有⽂件。所谓⽂件⽬录就是将所有⽂件的说明信息采⽤树型结构组织起来——即⽬录。
UNIX/Linux系统中,整个⽂件系统有⼀个“根”(root),然后在根上分“杈”(directory),任何⼀个分杈上都可以再分杈,也可以长出“叶⼦”。“根”和“杈”在Linux中被称为“⽬录”或“⽂件夹”,⽽“叶⼦”则是⼀个个的⽂件。
在UNIX/Linux系统中⽂件系统的根⽬录⽤符号“/”表⽰。
Linux是⼀个多⽤户系统,操作系统本⾝的程序或数据存放在以根⽬录开始的某些专⽤⽬录中,有时被指定为系统⽬录
2. ⼯作⽬录、⽤户主⽬录与路径
⾃从⽤户登录到系统中之后,每时每刻都“处在”某个⽬录之中,此⽬录被称作⼯作⽬录或当前⽬录(Working Directory)。⼯作⽬录⽤“.”表⽰,且可以随时改变。
⽤户刚登录到系统中时,其⼯作⽬录便是该⽤户主⽬录。root⽤户的主⽬录为/root,其它⽤户的主⽬录是在/home下的与登录名相同的⽬录。
路径是指从树型⽬录中的某个⽬录层次到某个⽂件或⽬录路线。
对任⼀⽂件在⽂件系统中的位置可以由相对路径或绝对路径来决定。绝对路径是指从“根”开始的路径;相对路径是从⽤户⼯作⽬录开始的路径。
3.1.5 shell命令解释及执⾏
命令格式如下:
命令名 [选项] [参数] […]
在Linux系统中默认的分隔符为⽩空格。参数是Linux命令操作的对象,⽽选项则影响命令对对象的操作⾏为。
选项是由符号“-”引导的字符或字符串,“-”是必须的,Linux⽤它来区别选项和参数。在Linux系统中选项有两种形式:⼀种是传统UNIX风格的选项,以“-”开始,紧跟⼀个字符;另⼀种是GNU风格的选项,以“--”开始,紧跟着完整的英⽂单词或由“-”连接的单词组合,来说明选项的意义。
bash命令⾏具有命令和⽂件名扩展特性。
bash也能列出当前⽬录下部分匹配的⽂件名来完成⽂件名扩展。
bash还允许⽤户对正在输⼊的命令⾏进⾏编辑。
Linux的回车后命令也被保留在历史记录中,通过光标键“↑”和“↓”上下翻动历史记录,对出现的当前记录可以进⾏编辑和使⽤。
若⽤户要重新执⾏某条历史记录的命令可以使⽤格式:!记录编号
⽤户还可使⽤格式: history n
bash命令⾏编辑键
编辑键意义
Ctrl+A 光标移⾄⾏⾸
Ctrl+E 光标移⾄⾏尾
Alt+F 光标前移⾄右⼀词末
Alt+B 光标后移⾄左⼀词前
Ctrl+L 清屏并在屏幕顶端重显当前⾏
Ctrl+- 恢复上⼀次的操作
Ctrl+K 删除光标处⾄⾏末内容
Ctrl+U 删除光标处⾄⾏⾸内容
Alt+D 删除光标处⾄单词末内容
Alt+DEL 删除光标处⾄单词⾸内容
Ctrl+W 删除光标处左⼀词⾄词⾸内容
Ctrl+Y 将刚删除的内容插⼊到光标处
3.1.6 环境变量与变量
1. 环境变量
shell在开始执⾏时就已经定义了⼀些和系统的⼯作环境有关的变量,⽤户还可以重新定义这些变量。
环境变量可⽤命令env来查询。
常⽤的shell环境变量有:
HOME:根⽬录。
LOGNAME:登录⽤户名。
IFS:命令⾏内部域分割符:空格,tab。
PATH:命令搜索路径。
TERM:终端的类型。
PWD:当前⼯作⽬录的绝对路径名,该变量的取值随cd命令的使⽤⽽变化。
PS1:主提⽰符,默认情况下,超级⽤户的主提⽰符是#,普通⽤户主提⽰符是$。
PS2:辅助提⽰符,提⽰⽤户继续输⼊命令的其余部分,默认的辅助提⽰符是“>”
2. 变量
在UNIX/Linux系统中,除了环境变量外,⽤户还可以定义⾃⼰的变量。定义后的变量就像在其它程序设计语⾔⾥⼀样被引⽤。
变量引⽤时需要使⽤“$”作为变量名的前导字符。
变量的定义⽅法:
var_name=var_value
3.1.7 标准流与输⼊输出重定向
当执⾏⼀个命令时,shell通常会⾃动为其打开三个标准⽂件,即标准输⼊⽂件、标准输出和标准错误。
⽂件号描述符使⽤设备
标准输⼊0 stdin 键盘
标准输出 1 stdout 屏幕
标准错误 2 stderr 屏幕
I/O重定向(也称作改道)是指通过⽂件的形式实现I/O输⼊和输出。I/O重定向可以通过以下符号实现:
◆<:输⼊重定向。
◆>:以覆盖⽅式实现输出重定向。
◆>>:以追加⽅式实现输出的重定向。
◆&>:标准输出和标准错误同时重定向。
3.1.8 管道
◆管道机制是在两个或多个进程之间建⽴⼀种连接,使得前⼀个命令的输出作为后⼀个命
令的输⼊。
◆管道机制常⽤于进程间的通信。◆实现管道机制的符号是“|”,其⽅法为:
命令1 | 命令2 | … |命令n
◆有时候需要对某⽂件处理既要在屏幕上看到输出同时⼜要保存⼀个副本。这时使⽤管道
与tee命令配合来实现。
◆tee命令的功能是读取标准输⼊的数据,并将其内容输出到指定⽂件,其⽤法为:tee [-ai]
[⽂件…]
-a 追加⽅式。
-i 忽略中断信号
3.1.9 引号机制、命令替换与参数替换
1. 引号机制
◆在shell中引号分为三种:单引号(’),双引号(”)和反单引号(`)。
◆由单引号括起来的字符都作为普通字符。
◆反单引号的作⽤是命令替换。
◆命令替换的另⼀种形式是:$(cmd)它的作⽤与`cmd`相同。
◆双引号的作⽤与单引号的功能基本⼀样,可⽤来定义变量,所不同的是在双引号内可进
⾏变量和命令替换。
例:
#string=’$PATH’#定义string变量
#echo $string #显⽰变量的值
$PATH
#x=`pwd` #通过命令pwd替换定义变量x。pwd的功能是显⽰⽤户⼯作⽬录
#y=`whoami` #通过命令whoami替换定义变量y。whoami的功能是显⽰⽤户名
#echo $x $y #显⽰变量x和y的内容
/root root
#MyVar=$(whoami) #通过命令whoami替换定义变量MyVar
#echo $MyVar $(pwd) #显⽰变量MyVar和$(pwd)的值
root /root
#myname=`whoami` #通过命令替换定义变量myname
#定义变量myself。注意使⽤了变量替换和命令替换
#myself=”I am a student my uname is $myname and my work dir is `pwd`.”
#定义变量myself1。注意使⽤了继续⾏和转义字符
#myself1=”I am a student my uname is \”$myname\” \
and my work dir is \”`pwd`\”.” #echo $myself
I am a student my name is root and my work dir is /root. #echo myself1
I am a student my uname is “root” and my work dir is “/root”. 2. 参数替换
参数替换主要是指命令⾏参数的替换。在执⾏命令时,它的命令⾏参数也可以是变量,也可以包括命令替换。
设有命令DispAllVar ⽤于显⽰所有的命令⾏参数,有变量x 其值为test parm ,则命令 DispAllVar I am `whoami` the value of x is $x 的输出为: I am root the value of x is test parm 在程序的执⾏过程中`whoami`被替换为root ,变量x 的值被替换为其值test parm 。
3.1.10 shell 种类
UNIX/Linux 中的shell 有多种类型,其中最常⽤的⼏种是Bourne shell (sh 或bsh )、Bourne again shell (bash ),C shell (csh )、tc shell (tcsh )、Korn shell (ksh )和Z shell (zsh )等。
3.2 shell
启动
3.3 Linux 系统的基本命令
3.3.1 ⽬录基本操作命令
1. 列⽬录内容(ls )
其⽤法为:ls [选项] … [⽂件] … 例:
1) 列出⽬前⼯作⽬录下所有名称是s 开头的⽂件,按修改时间倒排序 #ls -ltr s*
2) 递归列/bin ⽬录及其⼦⽬录 #ls -lR /bin
3) 列当前⽬录,在⽬录名后加/,可执⾏⽂件名后加* # ls –AF 选项意义
张丹峰洪欣写真
-a 列所有⽂件及⽬录(Linux 规定以点“.”开头为隐藏⽂件,默认情况下不会列出) -A 同-a ,但不列出 . 和 ..
-b 以⼋进制数字⽅式列不可显⽰的⽂件 -i
列⽬录时显⽰i 节点信息 -l 长格式列表
-F 短格式列表,⽂件名称后加⼀符号表⽰属性:可执⾏⽂件加*. ⽬录/ -r 将⽂件以相反排序⽅式列出(默认按⽂件名ASCII 码值排序) -R 递归列⽬录及其⼦⽬录 -t 按⽂件依修改时间排序 -U
以不排列⽅式列⽬录
2. 建⽴⼦⽬录(mkdir )
⽤法:mkdir [-p] [-m MODE] dirnames
-p :如果要创建的⽬录存在也不报错,必要时可⼀同创建⽗⽬录。 -m ,--mode=MODE :按照权限
MODE 创建⼦⽬录。例:
1) 在⼯作⽬录下,建⽴⼀个名为temp 的⼦⽬录 # mkdir temp 2) ⼀次创建多个⽬录 # mkdir temp2 temp3 temp4
3) 在⼦⽬录temp 下创建⼦⽬录child ,若⽗⽬录不存在,则⼀同创建之 # mkdir –p temp5/child
3. ⽬录删除(rmdir)
⽤法为:rmdir [-p] dirName
例:
删除⼦⽬录temp,若⾮空则报错
#rmdir temp
4. 改变⼯作⽬录(cd).
⽤法为:cd [dirName]
例:
#cd /tmp #切换到⽬录/tmp
#cd /usr/bin #切换到⽬录/usr/bin
#cd .. #切换到上级⽬录
#cd #切换到家⽬录$HOME
5. 显⽰当前⽬录(pwd)
⽤法为:pwd
3.3.2 ⽂件操作基本命令
1. 显⽰⽂件的内容或合并⽂件(cat)
撷怎么读其⽤法为:cat [-options] filenames
选项意义
-E 在⾏显⽰$符号
-
n 为所有⾏添加⾏号
-s 当有⼀个或多个空⾏时只显⽰⼀个
-T 将Tab建显⽰为^I(Ctrl+I)
-v 显⽰所有内容
显⽰⽂件的内容或合并⽂件(cat)
例:
1) 显⽰⽂件的内容
#
2) 显⽰⽂件的内容,并为所有⾏添加⾏号
# cat -
3) 显⽰所有的*.txt⽂件
# cat *.txt
4) 将⽂件和合并为 # >
5) 从键盘读⼊内容并将其保存到⽂件myfile
#cat > myfile
2. ⽂本编辑命令(vi)
vi有三种⼯作模式:命令模式、编辑模式和命令项模式。
◆命令模式:当进⼊vi时,它处在命令模式。在这种模式下,⽤户可通过vi的命令对⽂
件的内容进⾏处理,⽐如删除、移动、复制等;也可通过命令进⼊编辑模式。
◆编辑模式:⽤户可在命令模式下通过o,O,a,A,I,I等命令使vi进⼊编辑模式。在
编辑模式下,⽤户能在光标处输⼊内容,或通过光标键移动光标。也可通过按ESC键返回命令模式。
◆命令项模式或叫底⾏模式:也是命令模式的⼀种,在命令模式下⽤户输⼊冒号后光标会
跳到底⾏,输⼊相关命令后可完成指定操作。
使⽤⽅式:vi [ -options ] files
vi的命令选项
选项功能描述
+[#] 进⼊vi后光标直接定位到第#⾏,若不指定#,则光标定位到⽂件尾-r/-L 列出当前⽬录内所有因vi⾮正常退出⽽残留的交换⽂件,以使恢复
-R<.#.swp> 以交换⽂件 .#.swp中恢复⽂件
-r file 从vi crash或⾮正常退出中恢复⽂件
-R 以只读⽅式编辑⽂件,使⽤此参数时,被编辑的⽂件不能回存,但可以另存vi启动的常⽤⽅法
命令功能描述命令功能描述
vi file 从第⼀⾏开始vi +#file 从第#⾏开始
vi +file 从⽂件尾开始vi +/pattern file 从指定的模式匹配处开始
vi –r file 从瘫痪恢复vi –L/-r 从瘫痪中列恢复列表
vi的插⼊模式功能键
键或命令功能描述键或命令功能描述
i 光标处插⼊I ⾏⾸插⼊
a 光标后追加 A ⾏末追加
o 当前⾏下⾯插⼊新⾏O 当前⾏上⾯插⼊新⾏周迅主演的电影
vi的删除命令
命令功能描述命令功能描述
x 删除光标处的字符X 删除光标前的字符d0 从光标处删除到⾏⾸dw 删除光标后的下个word #d 删除(含)光标所在后的#⾏#x 删除光标所在处的#个字符
vi的修改与替换命令
命令功能描述命令功能描述
林心如个人简历
R/cc 替换/修改⼀整⾏cw 修改⼀个字
C 修改光标后的部分s 替换光标处的字符
S 替换光标所在的⾏r 替换当前⼀个字符
R 从当前字符开始替换
vi的搜索与定位命令
命令功能描述命令功能描述
O 定位⾏⾸$ 定位⾏末
文明礼仪伴我行演讲稿
:# 定位到#⾏:$ 定位到⽂件尾
/exp 后向定位到exp ?exp 前向定位到exp /^exp 定位到⾏⾸为exp的⾏/exp$ 定位到⾏末为exp的⾏n,m?|/exp 在n-m⾏前/后向搜索exp n 重复以前定位,即继续查vi的搜索与替换命令
命令功能描述
:s/exp1/exp2/g 将当前⾏的exp1替换成exp2
:n,ms/exp1/exp2/g 将从n到m⾏中的exp1替换为exp2
:n,mg/exp1/s/exp2/g 将从n到m⾏中的exp1替换为exp2
:g/exp1/s//exp2/g 将全⽂中的exp1替换为exp2 vi的⽂件内容的移动、复制、删除和保存
命令功能描述
:n1,n2d 删除n1-n2⾏的内容
:n1,n2w[!] [file] 将n1-n2⾏内容写⼊⽂件file :n1,n2tn3 将n1-n2⾏内容复制到n3
: n1,n2mn3 将n1-n2⾏内容移动到n3
说明:在表⽰⾏号和范围有以下规定
. 当前⾏
% 1,$