首页计算机计算机软件Unix&Linux教程 13 第13章 使用shell:命令和定制.pptx

13 第13章 使用shell:命令和定制.pptx

页数:63页文件大小:748.7 KB来源: Unix&Linux教程ppt课件

本课件讲解shell命令与定制:元字符与引用转义、内部命令与外部命令的搜索路径、shell提示的定制与变量插入、历史列表的使用、自动补全与命令行编辑,以及别名的定义与三个典型示例。

第13章使用shell:命令和定制封面,标示本章讲解的元字符、搜索路径、历史列表与别名
本章需要解决的几个问题要点讲解,涵盖什么是元字符、引用字符的3种不同方式是什么、什么是内置命令等
13.1元字符要点讲解,涵盖字母数字字符-在输入时、元字符-拥有特殊含义的字符等
查看本课件的文字版(共 63 页,供检索与复制)

第1页:第13章使用shell:命令和定制

本页为第13章使用shell:命令和定制的章节封面,标示本章讲解的元字符、搜索路径、历史列表与别名。

第2页:本章需要解决的几个问题

  • 什么是元字符?
  • 引用字符的3种不同方式是什么?
  • 什么是内置命令?

第3页:13.1元字符

  • 字母数字字符-在输入时,所见即所得的字母和数字字符。
  • 元字符-拥有特殊含义的字符。-如:$、;、|、<、>等。

第4页:13.2引用和转义

  • 引用字符-在输入时,告诉shell,希望按字面含义解释字符,而不使用其特殊含义。

第5页:13.2引用和转义:引用字符的3种方法-

  • 引用字符的3种方法-1.使用反斜线引用单个字符echo It is a warm and sunny\; come here当我们使用反斜线引用单个字符时,称反斜线为转义字符。

第6页:13.2引用和转义:引用字符的3种方法-

  • 引用字符的3种方法-2.使用单引号引用一串字符echo ‘It is a warm and sunny; come & visit’

第7页:13.2引用和转义:引用字符的3种方法-

  • 引用字符的3种方法-3.使用双引号引用一串字符,但是保留$、`(反引号)和\(反斜线)的特殊含义、echo “My userid is <$USER>;”

第8页:13.3强引用和弱引用

  • 按引用能力的强弱可以分为强引用和弱引用
  • 单引号称为强引用
  • 双引号称为弱引用
  • 反斜线最强,但没有特殊称呼。例子:反斜线可以引用<Return>$ date\<Return>

第9页:13.4 shell内置命令type

  • shell命令分类
  • 内部命令(内置命令)由shell直接解释
  • 外部命令执行命令对应的程序

第10页:shell内置命令type:如何判断命令

  • 如何判断命令是否是内置的?-使用type命令typecommand…如:$ type date time setdate is /bin/datetime is a shell keywordset is shell builtin特殊的内部命令,用于编程内置命令

第11页:13.5学习内部命令

方式1
看shell的说明书页-man bashman kshman tcshman csh

第12页:13.5学习内部命令:方式2

  • 方式2:看内置命令的说明书页-apropos builtinman builtin (FreeBSD)man shell_builtin (Solaris)man csh

第13页:13.5学习内部命令:方式3

方式3
使用help命令-help[-s] [command…]-s:只看语法定义例子:help set | less

第14页:13.6外部命令及搜索路径

  • shell在什么地方查找外部命令?-环境变量PATH中保存的路径,这个路径又被称为“搜索路径”

第15页:13.7修改搜索路径

  • 修改路径的三种情形:-1.重新设置路径例子:Bourne shell:export PATH=“/bin:/usr/bin:/usr/local/bin”C-Shellset path=(/bin /usr/bin usr/local/bin)

第16页:13.7修改搜索路径:修改路径的三种情形

  • 修改路径的三种情形:-2.将新路径加到PATH路径的后面例子:Bourne shell:export PATH=“$PATH:$HOME/bin”C-Shellset path=($path $HOME/bin)

第17页:13.7修改搜索路径:修改路径的三种情形

  • 修改路径的三种情形:-3.将新路径加到PATH路径的前面例子:Bourne shell:export PATH=“$HOME/bin:$PATH”C-Shellset path=($HOME/bin $path)

第18页:13.8黑客如何使用搜索路径

  • 黑客利用搜索路径入侵系统步骤:-step1:将入侵程序ls放到自己的工作目录-step2:将自己工作目录放到PATH的前面export PATH=“.:$PATH”-step3:请求管理帮助,管理员以root登录

第19页:黑客如何使用搜索路径

  • 黑客利用搜索路径入侵系统步骤:-step4:管理运行ls命令查看目录时,就运行了黑客的ls程序-step5:黑客的ls除了系统ls的功能之外,还有一个副作用。在以root权限运行它的时候,会创建一个拥有特殊权限的秘密文件。-step6:黑客通过这个文件(或称后门)获取超级用户的访问权限。

第20页:13.9 shell提示

  • 各个shell系统默认的shell提示

第21页:13.10修改shell提示

  • 修改shell提示的方法-Bourne shellexport PS1=“newvalue”-C-Shellset prompt = “newvalue”

第22页:修改shell提示:export PS1

  • 例子export PS1=“bash$”export PS1=“ksh$”set prompt = “chs%”set prompt = “tchs>”

第23页:修改shell提示:三种增强shell的

  • 三种增强shell的方式:-1.将变量的值插入到提示符中-2.利用转义字符使用各种特殊码-3.将命令的结果插入到提示中(称为命令替换)

第24页:13.11将变量的值插入到提示符中

  • export PS1=“${VARIABLE}$”set prompt =“${VARIABLE}%”

第25页:将变量的值插入到提示符中

  • shell提示中有用的环境变量

第26页:13.12引用变量时使用哪类引号

  • 看两个例子export PS1=‘Your lucky number is ${RANDOM}$’export PS1=“${USER}$”

第27页:13.12引用变量时使用哪类引号:Why

  • Why?-因为第一个中RANDOM的值是每次显示shell提示符的时候都在变化的,需要在PS1的值中将其解释为元字符,因此使用强引用;-第二个中,PS1在赋值的时候,已经将${USER}用当前用户标识做了替换。

第28页:13.13利用转义字符使用各种特殊码

  • 什么是特殊码?-转义字符加上一个非元字符例如:\w\h\u
  • 并非所有shell都支持特殊码-只有bash和tcsh支持
  • 下图给出shell支持的特殊码

第29页:利用转义字符使用各种特殊码:什么是特殊码

本页为课件图示页,源文件仅保留小节标题“13.13利用转义字符使用各种特殊码”,配合图形讲解什么是特殊码、并非所有shell都支持、下图给出shell支持的等内容,建议对照原图补充细节。

第30页:13.14命令替换

  • 什么是命令替换?-看个例子$ echo “Date and time is`date`”Date and time is Mon Dec 21 10:30:00 2012

第31页:13.14命令替换:什么是命令替换

  • 什么是命令替换?-看个例子$ echo “Date and time is`date`”Date and time is Mon Dec 21 10:30:00 2012

第32页:13.14命令替换:命令替换的定义-

  • 命令替换的定义-在一条命令中嵌入另一条命令。shell首先执行嵌入的命令,并用输出替换该命令。然后shell在执行整个命令。

第33页:13.14命令替换:在shell提示进行

  • 在shell提示进行命令替换-例子1:将shell的名称放入到shell提示中。export PS1=“`basename ${SHELL}` $”-例子2:将userid放入到shell提示中。export PS1=“`whoami` $”

第34页:13.15键入命令并进行修改

  • 命令行编辑
  • 自动补全
  • 别名
  • 修改已键入命令的几种方法:-历史列表

第35页:13.16历史列表

  • 查看历史列表的命令:-Bourne shell:fc-C-Shell:history和!在使用这几个命令之前,先了解几个名词。

第36页:13.16历史列表:跟历史列表相关的几个

跟历史列表相关的几个名词-事件
历史列表中的每一条命令称为一个事件。-事件编号:每个事件有一个内部编号,称为事件编号。

第37页:历史列表:历史列表的内容$ fc1

  • 历史列表的内容$ fc1 ls2 who3 datq4 date5 vi tempfile6 fc

第38页:13.16历史列表:利用历史列表执行命令

  • 利用历史列表执行命令-1.执行历史列表中指定编号的命令Bourne shell:fc-s[number]C-Shell:!number例如:执行who命令$ fc-s 2

第39页:13.16历史列表:利用历史列表执行命令

  • 利用历史列表执行命令-2.执行历史列表最新的命令Bourne shell:fc-sC-Shell:!!例如:执行who命令$ fc-s 2

第40页:13.16历史列表:利用历史列表执行命令

  • 利用历史列表执行命令-3.在命令执行之前修改命令Bourne shell:fc-spattern=replacement numberC-Shell:!number:s/pattern/replacement/例如:将命令列表中vi命令的参数改为data$ fc-s tempfile=data 5% !5:s/tempfile/data/

第41页:13.16历史列表:利用历史列表执行命令

  • 利用历史列表执行命令-4.在命令执行之前修改最近用过的命令Bourne shell:fc-spattern=replacementC-Shell:^pattern^replacement例如:假设vi tempfile是最近用过的命令,将tempfile修改为data$ fc-s tempfile=data% ^tempfile^data

第42页:13.17历史列表:设置大小

  • 历史列表怎么保存?-保存在一个文件中,称为历史文件。-对于Bourne shell来说,历史文件可以被自动保存和恢复。-对于C-Shell来说,只有设置了shell变量savehist,才会自动保存和恢复。

第43页:历史列表:设置大小:设置历史列表大小

  • 设置历史列表大小-Bourne shell:export HISTSIZE=size-C-Shell:set history =size如果希望当前的历史列表中的n条命令保存到下一个回话,则设置savehist的值:set savehist =n

第44页:13.18历史列表:避免删错文件

  • 以例子说明用户想删除temp和extra开头的文件,那么他可以使用如下命令:rm temp* extra*。但是用户怕其中有一些重要的文件被错删,因此使用ls temp* extra*进行查看。确认没有错误后,再使用rm temp* extra*进行删除。

第45页:历史列表:避免删错文件

  • 正常的处理过程$ ls temp* extra*$ rm temp* extra*利用历史列表的处理过程$ ls temp* extra*$ fc-s ls=rm或% ls temp* extra*% ^ls^rm避免输入错误

第46页:在shell提示中显示事件编号&工作目录

  • 在shell提示中显示事件编号export PS1=“bash[\!] $”export PS1=“ksh[!] $”set prompt =“csh[\!] %”set prompt =“tcsh[%\!] >”

第47页:在shell提示中显示事件编号&工作目录

  • 在shell提示中显示工作目录export PS1=“bash(\w) $”export PS1=‘ksh(${PWD}) $’export PS1=“ksh(\${PWD}) $”set prompt =“csh[\!] %”set prompt =“tcsh(%~) >”

第48页:13.20自动补全

  • 以例子说明(bash)$ touch xaax xabx xacx xccx$ ls xc<Tab>$ ls xccx$ ls xa<Tab>$ ls xa<Tab><Tab>xaax xabx xacx$ ls xa

第49页:13.20自动补全:自动补全键显示所有可

  • 自动补全键显示所有可能补全单词shell<Tab> <Tab><Tab>Bash<Esc>=<Esc>Korn Shell^D<Esc>C-Shell^D<Tab>Tcsh

第50页:13.21自动补全:高级应用

  • 自动补全类型补全对象自动补全Shell文件和目录文件名补全B K C T命令、路径命令补全B· · T变量变量补全B· · T系统上的用户标识用户标识补全B· C T局域网上的计算机主机名补全B· · ·

第51页:不使用显示所有环境变量

3种方式
-env^M-env^J-<Tab><Tab>

第52页:13.23命令行编辑

  • :bindkey
  • 什么是命令行编辑?-在shell的命令行上进行文本编辑。包括:输入和修改命令、使用历史列表和使用自动补全。-shell的命令行编辑可以使用vi或Emacs的命令如果使用vi命令,则shell处于vi模式;如果使用Emacs命令,则shell处于Emacs模式。

第53页:命令行编辑:设置命令行编辑模式-

  • 设置命令行编辑模式-bash和Korn shellset-o emacsset-o vi-Tcshbindkey-ebinkey-v

第54页:13.24别名

  • 定义别名-Bourne shell:alias[name=commands]-C-Shell:alias[name commands]

第55页:13.24别名:$ alias lt

  • 例子$ alias lt=‘ls-l temp*’$ alias info=‘date;who’

第56页:13.24别名:怎么区分命令

  • 怎么区分命令和别名-使用type命令$ type infoinfo is aliased to ‘date;who’

第57页:13.24别名:查看别名的值-查看指

查看别名的值-查看指定别名
aliasname-查看所有别名:alias

第58页:13.24别名:删除别名-删除指定别

  • 删除别名-删除指定别名unaliasname-删除所有别名Bourne shell: unalias-aC-Shell:alias *

第59页:13.25临时挂起别名

  • 别名与原始命令一样,需要执行原始命令的时候怎么办?-临时挂起别名:/别名例如:$ alias ls=‘ls-l’$ ls(执行别名)$ /ls(执行原始命令)

第60页:13.26别名示例:避免删错文件

  • 在13.18中有使用历史列表避免删错文件的例子$ ls temp* extra*$ fc-s ls=rm可以给第二条命令一个别名$ alias del=‘fc-s ls=rm’这样可以直接输入$ ls temp* extra*$ del进一步避免了书写错误。

第61页:别名示例:避免删错文件

  • 对于C-Shell比较麻烦% ls temp* extra*% ^ls^rm不能给第二条命令定义一个别名% alias del ‘rm\!ls:*’这样可以直接输入% ls temp* extra*% del

第62页:13.27别名示例:从历史列表中重用命令

  • 示例$ alias r=‘fc-s’$ r$ r 2$ r 5 tempfile=date$ r d

第63页:别名示例:在shell提示中显示工作目录

  • 在C-Shell中将$PWD放在提示中,无法自动更新。因此,给出替代方法:% alias cd ‘cd\!* && set prompt=“($PWD)%” ’% cd bin(/home/harley/bin)%其中:\!*指在原始命令行上键入的任何参数,执行完原始cd命令后,其参数传递给别名cd。
顶部目录