2010年10月1Unix/Linux操作系统2010年10月2温故而知新•ls、chmod、chown、chgrp•cut、paste•find、touch、stat•zip、unzip、gzip、gunzip、bzip2、bunzip2•tar•linux磁盘结构管理2010年10月3探索shell2010年10月4本章主要内容•shell的类型、主要功能及如何更改shell•以bash为例–shell中几个特殊的元字符–echo–命令序列–命令编组–后台符号–管道符号–shell变量2010年10月5本章主要内容•临时或长期定义变量•了解一些系统环境变量和shell自身定制变量•定义个性化shell提示符•export•history、alias、sleep、nohup、tee、grep、sort•用户登录过程、系统启动–init、shutdown、reboot•进程管理–ps、top、kill2010年10月6什么是shell•shell是一个应用程序•shell被称为命令行解释器•是用户和OS的接口•服务器上不安装图形套件,你要完成日常工作一定要学会和shell打交道!!2010年10月7用户和shell的交互过程2010年10月8shell的类型•BourneShell–sh,最早的shell版本•KornShell–ksh,完全兼容sh•CShell–美国加利福尼亚大学伯克利分校开发的•BourneAgainShell–大多数Linux系统采用的默认shell类型•tcsh、ash、zch等等2010年10月9shell的主要功能•执行命令–内置命令和系统应用程序命令•文件名替换•I/O重定向•管道•环境控制•后台处理•shell脚本2010年10月10更改shell•cat/etc/shells#查看系统支持的shell类型•临时更改shell–输入一种shell的名字,就可以临时切换当前使用的shell,例如输入/bin/csh–exit#退回到切换前的shell类型,最好不要形成多层shell嵌套,和su是一样的道理•长期更改用户登录shell–用户登录shell类型存储在什么地方?2010年10月11更改shell•长期更改用户登录shell–用户使用命令chsh可以更改自己的登录shell•chsh回车•输入要更改的shell的全路径名•用户重新登录,修改生效–以root身份修改配置文件/etc/passwd中的某个用户的最后一个域信息,即修改登录shell类型的全路径名,用户重新登录,修改生效!2010年10月12echo•echo[选项]参数–解析参数,将其内容显示在终端上•选项–-n禁止换行–-e解析转义字符2010年10月13echo•选项-e后面可以添加转义字符,要用双引号括起来–\a#终端报警响铃–\b#回退–\c#禁止换行–\t#水平制表符2010年10月14echo•举例–echo-nhi–echo-ehi\c–echo\a–echo-e\a–echo-ea\tb–echo-ea\nb2010年10月15echo•举例–退格键\b和\c的常用方法–vi一个新文件file,编写内容•echo-einputanumber:_\b\c•reada•echo$a–保存文件–chmod700file–./file2010年10月16shell元字符•回顾一下shell通配符!–?、*、[]、[!]•重点介绍的元字符包括–反引号``#位于tab键上方的按键–双引号–单引号''–转义符号\2010年10月17反引号•反引号``用于执行命令–shell会将反引号括起来的部分当成一个命令来执行,并将命令的执行结果作为内容,代替反引号括起来的部分显示•举例–echotodayis:`date`–echo-elistfilenameinyourcurrentdirectory:\n`ls-F`2010年10月18转义符号•转义符号\,可以使有特殊意义的符号变成普通字符使用•举例–我想查看一个目录的权限,目录的名字叫tools?•ls-ldtools?•ls-ldtools\?–在终端显示有特殊意义的字符•echo\\\\'\`\\\\\\2010年10月19双引号•双引号可以取消大多数字符的特殊含义•双引号内,除了美元符($),反引号(`)和双引号()之外,其他字符都按普通字符处理•举例–echoit'sme–echo$PATH–echo`pwd`–echo•认为你没有输入完,等待匹配的另一个2010年10月20双引号•双引号还有保留多个空格,制表符(tab键空格)和换行符(\n)的作用•举例–echostop!stop!stop!–echostop!stop!stop!–echo-ehi!\tfollowme!–echo-ehi!\nfollowme!•注意,!的后面不要直接接任何字符2010年10月21双引号•思考,我想用echo命令在终端显示如下结果,如何实现?–“welcometoChina!”(双引号也要显示)–$HOME=/root(HOME的值根据具体用户给出)•注意:双引号括起来的字符串中,空格不再具有命令和选项之间的分割符的作用–echo`ls-l`–echo`ls-l`#shell会将ls-l当成一个命令的全名来执行,不会区分出命令ls和选项-l2010年10月22单引号•单引号''内,除了单引号(')外,其他字符都按普通字符处理•举例–echo'$HOME'–echo'`pwd`'–echo'enjoyyourholiday!'–echo'''•#等待你输入匹配的单引号'2010年10月23单引号•单引号也有保留多个空格,换行符(\n)和制表符(\t)的作用–echostop!stop!stop!–echo'stop!stop!stop!'–echo-e'hi!\tfollowme!'–注意,!后也不要直接接符号2010年10月24单引号•如果想用echo命令在终端中显示如下结果,命令如何组合呢?–I'mateacher•注意:单号括起来的字符串中,空格也不再具有命令和选项之间的分割符的作用–echo`ls-l`–echo`'ls-l'`#shell会将ls-l当成一个命令的全名来执行,不会区分出命令ls和选项-l2010年10月25思考•一个文件file用作分割符,想取出文件中的第一个域,如何实现?2010年10月26命令序列•用户可以在命令行中输入一系列命令,命令之间用分号隔开,回车后,shell依次解析,执行•举例–pwd;ls-l;ls-lresult.txt–date;who;whoami2010年10月27命令编组•用户可以将几个命令编为一组,放在小括号中,这样可以方便对操作的整体结果进行处理•举例–(date;whoami;pwd;ls;)result.txt2010年10月28后台处理符号•shell后台符号(&)提供了后台运行程序的方法,也就是让程序不独占当前终端•举例–gftp–gftp&•如果后台程序在终端上也会有输出结果,建议将其结果重定向到文件中,否则和后面程序的终端输出内容会交叉在一起2010年10月29管道符号•shell中的管道符号(|),允许进程之间共享数据,可以将前一个程序的输出作为后一个程序的输入•举例–ls-l|wc-l–ls|more–rpm-qa|grepjdk2010年10月30shell变量•shell变量按作用范围分–全局变量–局部变量–临时局部变量2010年10月31shell变量•全局变量–由系统管理员在系统配置文件中定义的变量,例如/etc/profile、/etc/bashrc等等•局部变量–用户在自己的家目录中的个人配置文件中定义的变量,例如$HOME/.bash_profile,$HOME/.bashrc•临时局部变量–只对当前用户的当前shell有效2010年10月32shell变量•shell变量又可分为–预定义变量–用户定义变量•预定义变量是操作系统设计和实现时,规定或者通用定义的变量•用户定义变量,就是用户根据自己需要定义的局部变量或者临时局部变量2010年10月33shell变量•shell变量又可分为–系统环境变量–shell变量•通常对于系统预定义变量来说,可以按照这种方法对shell变量分类–系统环境变量定义系统环境,如PATH–shell变量定义shell本身的环境,如PS12010年10月34查看shell变量•命令set可以显示系统所有变量的名称和值–set|more–set|grepHOME•命令env和printenv可以显示所有系统环境变量的名称和值–env|more–printenv|more•echo$变量名称,显示某一具体变量的值–echo$PATH2010年10月35定义shell变量•变量的命名–变量可以是大小写字母、数字和下划线的组合,但不能以数字开头–变量名严格区分大小写•举例–PATH–path–_path–JAVA_HOME2010年10月36定义shell变量•变量名=变量值–等号两边不能有空格–变量名严格区分大小写–如果变量值中有空格、制表符、换行符等特殊符号,要用双引号括起来–如果变量定义中引用了其他变量的值,要将引用的变量用双引号括起来2010年10月37定义shell变量•举例–HOME=/usr/home/tom–MESSAGE=“hi!goodluck–STRING=a\tb–echo-e$STRING–STRING1=a\tb–echo-e$STRING1–PATH=$PATH:/usr/local/jdk1.4/bin2010年10月38定义shell变量•举例–STRING=Thisis$numth–echo$STRING–STRING=Thisisthe$numth–echo$STRING–STRING=Thisisthe${num}th–echo$STRING2010年10月39定义shell变量•临时定义变量,就是在命令提示符中输入变量名=变量值•长期定义变量,就是写在配置文件中–/etc/profile,/etc/bashrc–$HOME/.bash_profile,$HOME/.bashrc•记住,要在用户重新登录后,配置文件改动的内容才生效2010年10月40取消shell变量定义•临时取消shell变量的定义,改变只对当前shell有效,切换shell或者关闭终端后,取消就被恢复了–unset变量名•永久删除长期定义的变量,就是从相应的配置文件中删掉变量的定义,也是要重新登录才能生效2010年10月41了解一些环境变量•HOME存放用户的家目录•PATH存放命令搜索路径•SHELL存放用户登录shell类型•PWD存放用户当前工作路径•LOGNAME存放登录名•MAIL存放邮件的文件•MAILCHECK存放检测新邮件的时间间隔2010年10月42了解一些shell定制变量•PS1Shell提示符•PS2命令没有输入完整时显示的提示符•IFS内部字段分隔符•HISTSIZE历史命令的个数•HISTFILE历史命令文件•TMOUT终端一段时间不用,自动关闭,设置这个时间段的2010年10月43个性化shell提示符•\!显示执行命令的序列号•\\$root用户用#显示,普通用户用$表示•\d在提示符中显示日期•\t在提示符中显示时间•\s在提示符中显示shell名称•\u在提示符中显示用户登录名•\w在提示符中显示当前路径•注意,定义时要用双引号括起参数2010年10月44个性化shell提示符•举例–PS1_BAK=$PS1#一定要备份变量的值!!–PS1=$PS1\!–PS1=$PS1_BAK–PS1=$PS1\d–PS1=$PS1_BAK–PS1=$PS1\s–PS1=$PS1_BAK2010年10月45export•export命令输出变量定义到子进程中•举例–STRING=testing–STRING2=t