基础教程(清华课件)第2部分操作系统命令及shell编程_第1页
基础教程(清华课件)第2部分操作系统命令及shell编程_第2页
基础教程(清华课件)第2部分操作系统命令及shell编程_第3页
基础教程(清华课件)第2部分操作系统命令及shell编程_第4页
基础教程(清华课件)第2部分操作系统命令及shell编程_第5页
已阅读5页,还剩298页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Linux基础教程(1) 操作系统基础,清华大学计算机基础教育课程系列教材 汤荷美 董渊 李莉 程志锐 编著,总 目 录,第1部分 Linux操作系统 第1章 操作系统概述 第2章 处理机管理 第3章 存储管理 第4章 调度 第5章 设备 第6章 文件系统,第2部分 操作系统命令及shell编程 第7章 Linux基本命令 第8章 使用vi编辑文件 第9章 shell编程 第3部分 系 统 管 理 第10章 Linux系统软件的获取和安装 第11章 账号管理 第12章 文件系统管理 第13章 TCP/IP网络管理 第14章 备份与恢复 第15章 XWindow及Genie应用程序,第1部分 Linux操作系统 第1章 操作系统概述,1.1 操作系统简介 1.2 操作系统接口 1.3 操作系统功能 1.4 操作系统结构 1.5 Linux操作系统介绍 1.6 Linux的内核特征 1.7 Linux的发展及展望 1.8 小结 习题,第2部分 操作系统命令及shell编程 第7章 Linux基本命令,7.1 Linux的登录和退出 7.2 文件命令 7.3 目录和层次命令 7.4 查找命令 7.5 目录和文件安全性 7.6 磁盘存储命令 7.7 进程命令 7.8 联机帮助命令 7.9 小结 习题,本章介绍Linux基本的交互实用程序,包括登录和退出,文件命令,目录和层次命令, 查找命令,目录和文件安全性,磁盘存储命令,进程命令,联机帮助命令。没有列出的命令请通过联机帮助命令获取,通过这些实用程序的学习,使读者进一步理解Linux系统。,7.1 Linux的登录和退出 1. 启动Linux系统 启动Linux系统需要的过程可能和其他操作系统有点不同。 如果计算机没有安装其他操作系统,只需接通电源,等待数秒后将看到计算机显示LILO,然后系统再暂停一会,接着会继续显示各种启动信息。但是,如果让Linux和其他操作系统共享一台计算机,就必须执行以下任务: 在LILO提示下选择Linux(如果设置的名称是Linux)如果安装了LILO, 并为包含其他操作系统的分区标注了启动标记, 计算机就被设置成多重引导。 这就意味着可以在LILO Boot:提示符下输入想引导的操作系统的名称。 如果在,LILO 提示下按Tab键, 会看到LILO可以引导的操作系统的清单。 选择Linux, 就可以运行了。 使用传统的DOS操作系统时,只要打开电源,等待主机从软盘或硬盘启动即可,当出现“C”时,表明系统已成功启动,可以在“C”后运行各种命令了。但Linux系统却没这么简单。当从硬盘或软盘引导Linux时,将在系统控制台上打印大量信息,表明启动的整个过程。这些信息将分别存放在/var/log/syslog和/var/log/messages等文件中。这些信息对于事后分析系统的启动过程有着重要的作用。大量信息打印完,最后出现login提示符。,2. 登录Linux系统 我们对系统的使用都是从登录开始的。首先要求使用者必须拥有一个合法的个人账号,只有系统认可了的账号,才会获得系统的使用权。系统有两种用户:超级用户root和一般用户。当机器启动完毕后,将看到以下类似的信息: XLinux release 1.0 Kernel 2.2.12-4XL on an i686 login: 从最后一行可以看出, 现在可以登录了。,第一次登录Linux系统必须以超级用户root身份登录。这个账号对系统的一切拥有完全的控制权限。通常用root账号进行系统管理及维护,包括建立新的用户账号,启动、关闭、后备及恢复系统等。 因为root的权限不受限制,一旦误操作可能会导致不可预料的后果,所以在以root身份登录时, 必须格外小心, 并且只有在必须时才用root登录。如果是系统管理员或者独自拥有这台机器,就可以用超级用户登录。登录的方式是在系统提示符后键入root, 例如: login:root Password:,键入root账号后,按下回车键,然后在系统提示Password后输入超级用户的密码。系统将验证输入的用户名和密码是否正确,若正确,会出现如下提示: root xLinux /root # 这表明已经进入系统,此处的“#”符号是超级用户的系统提示符,而普通用户的提示符是“”。如果密码输入错误,将出现如下提示: Login incorrect 稍后,又会出现“login:”,要求重新输入用户名。,注意,这里输入的密码并不在屏幕上回显,这样独特的设计同样是为了安全的需要,以免旁边的人轻易地看到密码。正像在Windows中输入密码使用 “*”显示一样,它有效地保护了密码,维护了系统的安全性。 普通用户登录时,过程相似。例如,有个用户zhang,登录如下: XLinux release 1.0g Kernel 2.2.12-4XL on an i686 login:zhang Password: 密码正确后将出现如下提示: zhang xLinux zhang ,一旦注册进入系统后, 可以用passwd命令来修改密码。 这时系统会询问当前的密码, 然后是新密码: zhangxLinux zhang passwd Changing password for zhang (current) UNIX password: New UNIX password: Retype new UNIX password: passwd: all authentication tokens updated successfully zhang xLinux zhang ,与root不同的是,这里的提示符是“”。提示符的不同只是系统对不同级别用户的一种标识,有时使用了不同shell程序的用户的提示符也不相同。 进入系统后,就可以执行各种任务了。 3. 退出Linux系统 当用户执行完各种操作后,就要及时退出系统,这是一个良好的习惯,即使是暂时离开机器也同样如此。退出的操作很简单,只需键入下面的命令即可: zhang xLinux zhang exit 在提示符后键入命令exit后回车即可退出系统,重新出现login提示符。有的系统中用logout,或按下Ctrl+d也能退出或注销用户,但我们推荐使用exit命令。,4 重新启动和关闭系统 有时在对系统的某一配置做了修改以后,或者安装了新的软件,需要重新启动才能使所做的修改生效,这时就要用到重新启动命令reboot,它需要超级用户的权限。进入超级用户后,命令如下: root xLinux /root #reboot 键入reboot命令后回车,系统将重新启动。还有一种重新启动的方法是不需要先进入超级用户,在login状态下,同时按下Ctrl+Alt+Del键,系统同样可以重新启动,这就是所说的热启动。当做完所有的工作后,我们就要关闭系统了,这时切不可直接关掉电源,一定要首先执行关闭系统命令。此命令的执行同样要在超级用户下执行, 命令如下:,root xLinux /root #halt 关闭系统命令是halt,有的系统可能是haltsys,不同的版本可能稍有差别,这可以参照不同版本的说明书。其实,一般的关闭系统命令是shutdown,它的具体用法将在以后详述。 5. 为什么使用关闭系统命令 如前所述,Linux在内存中缓冲了磁盘读写。通常,对磁盘同一个块的多次读写可能实际上是对RAM(Random Access Memory)的操作,这极大地提高了系统的性能,但是,如果出现意外情况,如突然掉电或者机器重启动,内存缓冲区中的数据将不能写进硬盘,造成数据丢失。所以,为防止这种无谓的损失,大多数系统都采取了补救措施,由,/etc/rc.d/rc.s或rc.sysinit启动的/sbin/update程序每30秒钟把缓冲区的内容写入磁盘。这在一定程度上保证了数据的及时写盘。但为了安全起见,在系统结束运行前仍需有一个安全的关闭。这不仅能保证磁盘缓冲区正确地同步,而且可以让所有正在执行的进程正常地退出。,7.2 文件命令 在Linux系统中,几乎所有内容包括文档、命令、设备和目录等都组织成文件的形式,用文件来管理, 常用的文件命令有: 1. cat、more、less命令 (1) cat命令 功能:显示文本文件内容 语法: cat 文件名称 范例: cat file1 显示file1的内容。,cat file1 file2 file3 把file1和file2的内容输入到file3中。 (2) more命令 功能: 一次以一个page显示 语法: more 文件名称 描述:通常在看一篇很长的文件时都希望是从头 看到尾,在Linux中,more命令可以以一个page为单位来浏览文件。当使用more时,可看到屏幕的左下方有一个“-more-”的信息,这时若按下回车键,则会显示下一行;若按下空格键,则会显示下一个page。,(3) less命令 功能: 与more命令相似,一次以一个page显示, 可以前翻、后翻 语法: less 文件名称 描述:若按下空格键,则会显示下一个page, 按下回车键则一行行地下翻,按下b键往上翻一页。 相关命令:zless 2. ls命令 命令名称: ls 功能: 查看目录及文件 语法: ls,描述:ls命令用来浏览文件与目录,这个动作相当于DOS中的dir命令。 例如:ls -l- -rwxr-r-1 root dba 65520 Jan 29 1998 profile1 -rw-rr-1 root dba 103614 Jan 29 1999 services 这里大家看到的-rwr-r是文件的许可权限,r是读权限,w是写权限,x是执行权限。 3. cp命令 命令名称 : cp 功能: 拷贝文件 语法:cp 文件 目的地,描述:其实cp的语法与DOS的copy语法大致相同。须注意的是,在使用cp时一定要有目的地才行,在DOS中做copy 时,有时可省略目的地,但在Linux中就无法这样做。在cp中也可以使用通配符,像“*”、“?”等,例如,我们要将root目录内的所有文件,但不包括隐藏文件,拷贝至根目录下的temp内,其命令为: #cp /root/* /temp 若要拷贝所有小写字母开头的隐藏文件,其命令为: #cp /root/.a-z* /temp,4. rm命令 命令名称: rm 功能: 删除文件 语法:rm 文件 描述:rm与DOS的del命令有些类似之处,不同的是,rm功能的强大与其相对杀伤力远不是DOS的del可以相比。只要是文件,不管是否隐藏,或是文件使用权限设置成只读,rm皆可删除,在此要注意的是已删除的文件是无法恢复的,所以在使用rm时要特别小心。 例如,我们删除temp目录下的file1文件,可用:cd temp;rm file1 在Linux中要一次键入两个不同的命令时,只需在命令与命令,之间加上分号即可,这样Linux便会依照排列的先后次序来执行,在本例中,会先执行cd temp, 再执行 rm file1。 5. mv命令 命令名称: mv 功能: 文件更名或搬移 语法: mv 文件名称 搬移的目的地(或更改的新名) 描述:有的时候我们会做文件更名的操作,或是移动文件。其实文件更名与移动文件的操作原理是一样的,差别只是路径的不同。mv命令通常被用来移动文件,例如,把现在所在的目录中的netscape文件移到/usr内,可用:,mv netscape /usr 相关的命令还有:touch,file,diff等。,7.3目录和层次命令 同dos/windows操作系统一样,在linux系统中文件也是按目录保存在一个树形目录层次结构中的,目录层次的顶部是“根”目录,使用符号“/”。常用的目录和层次命令包括: 1. pwd命令 命令名称: pwd 功能:显示当前工作目录 语法:pwd 描述:pwd命令显示当前目录在文件系统层次中 的位置。,2. cd命令 命令名称: cd 功能: 切换目录 语法:cd 目录名称 描述:cd除了有切换目录的功能外,还有一个功能就是不管在哪个目录内,只要输入cd命令不用接任何参数,就可回到用户目录(home directory)内。,3. mkdir、rmdir命令 命令名称: mkdir/rmdir 功能: 创建目录和删除目录 语法: mkdir 目录名称 rmdir 目录名称 描述:在Linux中用mkdir命令,后面输入欲创建的目录名即可在当前目录中建立一个新目录,用rmdir并指定欲删除的目录即可删除指定的目录,操作方法与DOS中的md、rd是完全相同的,差别只是命令的名称不同而已。另外,在使用rmdir时,要确保该目录内已无任何文件存在,否则该命令不成功。,4. cp命令 命令名称: cp 功能: 带目录拷贝 语法:cp -r 目录 目的目录 描述:假如要拷贝一个目录,但该目录内还有好多个子目录的话,可以使用选择项“-r”,来拷贝目录内的子目录及文件,并且在拷贝时会自动建立目录,而此功能就相当于DOS内的 xcopy。例如,要将root目录内的所有文件(包括目录),但不包括隐藏文件,拷贝至根目录下的temp内,其作法为: #cp -r /root/* /temp,若要拷贝所有小写字母开头隐藏文件(包括隐藏目录)的话,其作法为: #cp -r /root/.a-z* /temp 5. rm命令 命令名称: rm 功能: 删除目录 语法:rm -r 目录 描述:选择项“-r”,与cp中的“-r”有类似的功能,它指在删除目录的同时一并删除目录内的子目录及文件,这个功能相当于DOS中的deltree功能,通常在使用deltree时会有提示信息,但在Linux中使用rm没有任何的提示信息,值得注意的是已删,除的文件是无法挽救回来的,所以在使用rm时要特别小心。当某个目录不再需要,例如,要删除temp目录,可以用下面的命令: #rm -r /temp 6. mv命令 命令名称: mv 功能:目录更名或搬移 语法: mv目录名称 搬移的目的地(或更改的新 名) 描述:有的时候需要做目录更名的操作,或是移动目录。目录更名与移动目录操作原理是一样的,差别只是路径的不同。例如,要把现在所在的目录,中的user1目录移到/home内,可用: #mv user1 /home 7.4 查找命令 1. find命令命令名称: find 功能:搜寻文件与目录 语法:find 目录名 选项 常用选项有: -name filename按名字查找 -type x 查找类型为x的文件(x包括:b,c,d,f, l等) user username 查找属主为username的文件,-atime n 查找n天以前被访问过的文件 -mtime n 查找n天以前被修改过的文件 -cmin n 查找n分钟以前被修改过的文件 -exec cmd 对查找出来的文件执行cmd命令,表示找到的文件,命令要以“;”结束。 范例如下: find /home/lin -name hash 在 /home/lin 目录下找寻名为 hash 的文件 find / -name fs* -print 从 / 根目录开始搜寻所有以 fs 开头的文件,然后用参数 -print 印出符合条件的文件路径。 find. -name *.c -exec rm-f ;,表示在用户当前的目录,搜寻所有以 .c 为结尾的文件名*.c,然后用参数 -exec 执行 rm-f ; 删除全部以 .c 结尾的文件(注意大括号里面没有空格)。 相关的查找命令还有:locate,whereis 2. grep命令 命令名称: grep 功能:在文件中查找字符串 语法:grep 字符串 文件名 范例如下: grep tigger file1 在 file1文件中找寻tigger字符串,grep “big tigger“ file1 在 file1文件中找寻 big tigger字符串。 另外,grep 命令还可以用于查找用正则表达式所定义的目标。正则表达式包括字母和数字,以及那些对grep有特殊含义的字符。比如, 指示一行的开头 指示一行的结束 . 代表任意单一字符 * 表示匹配零个或多个*之前的字符 范例如下: grep b file1,查找文件file1中所有以b开头的行。 grep b file1 查找文件file1中所有以b结尾的行。 grep an. file2 查找文件file2中所有以an为头两个字符的3个字符,包括any,and等。,7.5 目录和文件安全性 Linux系统中每一个文件或目录都明确地定义其拥有者(owner)、组(group) 和它的使用权限等。用户可用下面的命令规定自己主目录下的文件权限,以保护自己的数据和信息,防止他人非法使用。 1. chown命令 命令名称: chown 功能: 改变文件拥有者 语法: chown 用户账号 文件或目录名称 使用人: 该文件或目录的拥有者和root 用户,描述:如果(假设账号是xLinux1)有一个名为file.list的文件,其拥有权要给予另一位账号为xLinux2的同事,则可用chown来完成此功能,当改变完文件拥有者之后,该文件虽然在xLinuxl的home目录下,但该用户已经无任何修改或删除这个文件的权限了,这点读者应特别注意。范例: - -rw-1 xLinux1 users 6 Oct 4 12:50 file.list chown xLinux2 file.list -rw-1 xLinux2 users 6 Oct 4 12:50 file.list,2. chgrp命令 命令名称: chgrp 功能: 改变文件的所属组 语法: chgrp 组名称 文件或目录名称 使用人: root 描述: 该命令和chown用法一样,其功能是把文件或目录所属组改成另一个组。 范例: - -rwxr-x- 1 root bin 11700 Oct 12 06:48 shutdown* # chgrp system /sbin/shutdown,执行chgrp把shutdown所属组改成system组 - -rwxr-x- 1 root system 11700 Oct 18 06:48 shutdown * 3. chmod命令 命令名称: chmod 功能: 修改文件的权限 语法: chmod 权限参数 文件或目录名称 使用人: 每一位用户 描述: 前面在介绍ls命令时,已经介绍文件的权限形态,例如 rwx-。要设置这些文件的形态就用 chmod这个命令来设置,然而在使用chmod 之前需要先了解权限参数的用法。权限参数可以有两种使用方法:英文字母表示法和数字表示法。,(1) 英文字母表示法 一个文件用十个小格位记录文件的权限,第一小格代表文件类型。“-”表示普通文件;“d”表示目录文件;“b”表示块特别文件;“c”表示字符特别文件。接下来是每三小格代表一类型用户的权限。前三小格是用户本身的权限,用u代表;中间三小格代表和用户同一个组的权限,用g代表;最后三小格代表其他用户的权限,用o代表。即:-rwx-属于用户存取权限,用u代表;-rwx-属于组用户存取权限,用g代表。-rwx属于其他用户存取权限,用o代表。而每一种用户的权限就直接用r、w、x来代表对文件可读、可写、可执行,然后再用 + , - 或 = 将各类型用户代表符号u、g、o和 rwx3个字母链接起来即可。,范例: - -rwx- chmod u+rwx file1 用户本人对file1可以进行读写执行的操作;- -rw- chmod u-x file1 删除用户对file1的可执行权限; -rw-rw-r- chmod g+rw,o+r file1 同组用户对file1增加权限为能读写,其他用户则只 能读。,(2) 数字表示法 数字表示法是用三位数字XXX,最大值为777来表示的。第一个数字代表用户存取权限,第二个数字代表同组用户使用权限,第三个数字代表其他用户存取权限。前面介绍的可读的权限r用数字4表示,可写的权限w用2表示,而可执行的权限x用1表示,即: r=4 w=2 x=1 假设用户对file1的权限是可读可写可执行rwx,用数字表示则把4、2、1 加起来等于7,代表用户对file1这个文件可读可写可执行, 这里rwx等价于 4+2+1=7。,至于同组用户和其他用户的权限,就顺序指定第2位数字和第3位数字即可。如果不指定任何权限的话,就要补0!下面举几个范例就明白了,请大家注意数字的变化。 范例: -rwx-chmod 700 file1 指定用户本人对file1的权限是可读,可写,可执行; -rw- chmod 600 file1 指定用户本人对file1的权限是可读,可写; -rwxrwxrwx chmod 777 file1 指定所有用户对file1的权限是可读,可写,可执行。,总之,数字表示法就是将3位数字分成3个字段,每个字段都是4、2、1相加任意的组合。 相关的命令还有:umask,7.6磁盘存储命令 硬盘空间是一个有限的资源,用户用下面的命令可以随时了解当前硬盘空间的使用情况。 1. df命令 命令名称: df 功能: 显示磁盘的使用 语法: df 可选参数 例如: df -k 显示系统所配置的每一个磁盘当前被占用的空间 大小。,2. du命令 命令名称: du 功能: 显示目录的使用 语法: du 可选参数 例如: du 按块(512字节)显示一个目录及其所有子目录 的使用。,1. ps命令 命令名称: ps 功能: 查询正在执行的进程 语法: ps 可选参数 描述:ps命令提供Linux系统中正在发生的事情的一个快照,能显示正在执行进程的进程号、发出该命令的终端、所使用的CPU时间以及正在执行的命令。 例如: ps aux,7.7 进程命令,2. kill命令 命令名称: kill 功能: 终止正在执行的进程 语法: kill 进程号 例如: kill -9 PID# 无条件删除进程号为PID#的进程。 相关命令还有:w,who等,7.8联机帮助命令 各种在线帮助是学习Linux很好的工具, 以下是常用的在线辅助工具: 1. man 命令 系统上几乎每条命令都有相关的Man(manual) page。 在有问题或困难时, 可以立刻找到这个文件。 例如, 如果使用ls命令时遇到困难, 可以输入: man ls 系统就会显示出 ls 的 man page。,由于man page是用less程序来看的, 所以在man page里可以使用less的所有选项。 在less中比较重要的键有: q退出 Enter一行行地下翻 Space一页页地下翻 b往上翻一页 /往后寻找一个字符串和Enter键来寻找字符串 n寻找上一次查寻的下一个符合的字符串,2. 内包的文件 (DOC) 许多软件包都提供有readme文件和其他文档。 专为Linux制作的包的文件定义了一个标准的地方存放这些文件, 每个包的文件都放在 /usr/doc下的一个子目录中。子目录名称取决于软件包的名称和版本号。 例如zip软件包可能是2.1版。 那么,它的文件就放在/usr/doc/zip-2.1目录。大多数情况, /usr/doc中的文件是ASCII码。 你可以用more filename 或者less filename来阅读。,3. Howto和FAQ 如果你安装了它们,目录/usr/doc/Howto包含了你的Linux 光盘发行时所能找到的所有Howto。 为了节约空间,它们用gzip命令进行了压缩, 所以在阅读之前必须解压缩。 有一种方法可以阅读压缩的Howto, 不会让解压缩后的文件搞乱你的硬盘, 即使用 zless: zless 3DfxHowto.gz zless使用和less一样的键, 所以可以在Howto中容易地翻页。 /usr/doc/FAQ 包含了ASCII格式(和部分html格式)的一些FAQ(常见问题)。 可以用more 或者 less来阅读。,7.9 小结 本章主要介绍了Linux系统常用的一些命令,包括如何登录和退出系统、创建及删除目录、文件管理等。为了使用Linux,首先需要有一个合法的账号,其次要学会使用man命令,以便随时获取需要的帮助信息。,习题 7-1 登录进入系统,在你的根目录下建一个子目录tmp。查看同时系统上正在运行哪些进程。 7-2 将/etc/passwd文件拷到你自己建的tmp子目录下,使用grep查看你的账号是不是在这个文件中。 7-3 删除你自己建的tmp子目录。,第8章 使用vi编辑文件,8.1 vi的启动与退出 8.2 vi的两种模式 8.3 基本vi命令 8.4 使用vi查找和替换 8.5 编辑多个文件 8.6 小结 习题,vi的名字取自于visual,意为“直观”,它是一个全屏幕文本编辑程序。在Linux系统中vi是最常用的编辑程序,它的文本编辑功能十分强大,但使用起来比较复杂。初学者可能感到困难,经过一段时间的学习和使用后,你就会体会到使用vi非常方便。Linux系统中的vi其实是vim。vi与vim的用法很像,因为vim是vi的增强版,所以vi的功能vim都有,而且vim新增了许多vi没有的功能,它比vi容易使用。本章介绍vi编辑程序的两种工作模式,即命令模式和输入模式。,1. vi的启动 输入vi命令后,便进入全屏幕编辑环境,此时的状态为命令模式。 (1) vi 进入vi的一个临时缓冲区,光标定位在该缓冲区第1行第1列的位置上。 (2) vi file1 如果file1文件不存在,将建立此文件;如该文件存在,则将其拷贝到一个临时缓冲区。光标定位在该缓冲区第1行第1列的位置上。,8.1 vi的启动与退出,(3) vi+file1 如果file1文件不存在,将建立此文件;如该文件存在,则将其拷贝到一个临时缓冲区。光标定位在文件最后1行第1列的位置上。 (4) vi+Nfile1(N:为数字) 如果file1文件不存在,将建立此文件;如该文件存在,则将其拷贝到一个临时缓冲区。光标定位在文件第N行第1列的位置上。 (5) vi+/string file1 如果file1文件不存在将建立此文件;如该文件存在则将其拷贝到一个临时缓冲区。光标定位在文件中第一次出现字符串string的行首位置。,2. 退出vi 建议在退出vi前,先按ESC键,以确保当前vi的状态为命令方式,然后再键入“:”(冒号),输入下列命令,退出vi。 (1) :w 将编辑缓冲区的内容写入文件,则新的内容就替代了原始文件。这时并没有退出vi,必须进一步输入下述命令才能退出vi: :w filename(存入指定文件) :q,(2) :wq 即将上面的两步操作可以合成一步来完成,先执行w,后执行q。 (3) :x和zz(注意:zz前面没有“:”) 功能与(2)等价。 (4) :q!(或:quit) 强行退出vi,使被更新的内容不写回文件中。仅键入命令:q时,如vi发现文本内容已被更改,将提示用户使用“:quit”命令退出。,8.2 vi的两种模式 当vi工作在命令模式下,输入的字符被视为执行特定vi功能的命令;而工作在输入模式下,输入的字符是编辑文件的正文。命令模式是vi的默认模式,命令模式下输入英文大小写字母的含义是有区别的。两种模式的切换见图8.1。 图8.1 模式转换示意图,在命令模式下,你所能进行的操作有移动光标在屏幕上的位置,标记、删除、移动、复制字符或文本区块,还可以将文件写入或退出编辑器,亦可设置编辑环境,如寻找字符串、列出行号等。此外在系统提示符下输入vi及文件名称后,即进入vi全屏幕编辑画面(命令模式)。 只有在输入模式下,才可进行文字输入,按ESC键可以回到命令模式。在命令模式下可按“i”或“a”或“o”等键进入输入模式。 i在目前光标前插入所要输入之文字。 a在目前光标后开始输入文字。 o在当前光标所在行下新增一空行,并从行首开始输入文字。,I插于行首。 A插于行尾。 O在当前光标所在行上新增一空行,并从行首开始输入文字。 按下ESC键随时可返回vi的命令模式。如果不能确定现在vi是在哪个模式下,按下ESC键以使其在命令模式下,然后再从这里继续;如果按下ESC键时已经在命令模式了,系统会鸣叫且屏幕闪一下,通知你已在命令模式中。,8.3 基本vi命令 1. 移动光标 移动光标h、j、k、l:分别控制光标左、下、上、右移一格。 Ctrl+b: 上滚一屏。 Ctrl+f: 下滚一屏。 Ctrl+d: 下滚半屏。 Ctrl+u: 上滚半屏。 G: 移到文件最后。 w: 移到下个字的开头。 b: 跳至上个字的开头。,2. 删除 x: 删除当前光标所在后面一个字符。 #x: 删除当前光标所在后面#个字符。例如,5x表示删除5个字符。 dd: 删除当前光标所在行。 #dd: 删除当前光标所在后面#行。例如,5dd表示删除自光标算起的5行。 :l,#d: 例如,:1,12d表示删除自行1至行12的文字。 X: 删当前光标的左字符。 D: 删至行尾。,3. 更改 cw: 更改光标处的字到此单字的字尾处。 c#w: 例如,c3w表示更改3个字。 cc: 修改行。 C: 替换到行尾。 4. 取代 r: 取代光标处的字符。 R: 取代字符直到按ESC为止。,5. 复制 yw: 拷贝光标处的字到字尾至缓冲区。 P: 把缓冲区的资料贴上来。 yy: 拷贝光标所在之行至缓冲区。 #yy: 例如,5yy,拷贝光标所在之处以下5行至缓冲区。 6. 复原 u: 复原至上一操作。 g: 列出行号,及相关信息。 7. 列出行号 :set nu (nu为行数),8. 寻找字符串 /word由首至尾寻找“word”字符串,按n可往下继续找。 ?word由尾至首寻找“word”字符串,按N可往前继续找。 9. 跳行 :100可跳至第100行。 10. 重复上一个命令 .重复上一个命令。,8.4 使用vi查找和替换 vi提供了几种定位查找一个指定的字符串在文件中位置的方法。同时还提供一种功能强大的全局替换功能。 1. 查找一个字符串 一个字符串是一行上的一个或几个字符。 为查找一个字符串,在vi命令模式下键入“/”,后面跟要查找的字符串,再按回车。vi将光标定位在该串下一次出现的地方上。键入n跳到该串的下一个出现处,键入N跳到该串的上一个出现处。 为了在文件中回头查找,使用?代替/。在此情况下,键入n跳到该串的上一个出现处,键入N跳到该串的下一个出现处。,如果vi找到要求的串,光标会停留在该串第一次出现的地方。如果没有找到该串,vi会在屏幕的最后一行显示pattern not found。 查找通常是区分大小写的,如果希望vi在查找过程中忽略大小写,则键入:set ic。要使其变回默认状态,则键入:set noic。 某些特殊字符(/&!.*?)对查找过程有特殊意义,因此如果这些字符出现在查找串中必须进行转意。为转意一个特殊字符,需要在该字符前面加一个反斜杠()。例如,要查找字符串anything?,则键入/anything?再按回车键。,2. 精确查找字符串 在vi中可以通过在字符串中加入如下特殊字符,从而使得查找更加精确。 匹配行首,字符串要以开头 匹配行尾,字符串要以结束 匹配词首,字符串的串首键入 匹配任意字符,字符串的要匹配的位置键入一个点(.) 例如, 要查找一个以search为行首的行,则键入/search ,要查找一个以search为行尾的行,则键入/search。,3. 替换一个字符串 替换字符串是以查找为基础,所有用于查找的特殊匹配字符都可以用于查找和替换。替换时要指定替换的范围(1,n),1和n指行号,n为时指最后一行。s是替换命令,g代表全程替换。例如, :l,s/patternl/pattern2/g将行l至结尾的文字,patternl的字符串改为pattern2的字符串,如无g则仅更换每一行所匹配的第一个字符串,如有g则将每一个字符串均做更换。,8.5 编辑多个文件 1. 将一个文件插入另一个文件中 将另一个文件filename插入当前文件的line#行位置。命令格式, :line# r filename 例如,将文件file1插入到当前文件的当前光标位置,键入, :r file1,2. 编辑一系列文件 要想编辑多个文件,需要在vi命令之后列多个文件名,中间用空格分开。键入:n进入下一个文件。要想跳转到下一个文件,而不保存对当前文件所做的修改,则键入:n!来代替:n。 vi file1 file2 file3 3. 文件之间复制行 为将行从一个文件file1复制到另一个文件file2,先编辑第一个文件file1,用#yy(#代表数字)把要复制的行拷贝到缓冲区,不退出vi,编辑另一个文件,键入, :n file2 再按p键,把缓冲区中的内容贴在当前光标位置。,8.6 小结 本章主要介绍了vi编辑器的使用,重点要掌握vi的两种操作模式:输入模式和命令模式,并熟练掌握命令模式下的插入、修改、删除、拷贝粘贴,以及查找和替换命令。,习题 8-1 vi中拷贝一行文字并粘贴到另一位置用什么命令? 8-2 vi中把某个字符串全程替换为另一个字符串的命令是什么? 8-3 使用vi编辑器在目录里创建一个文本文件,然后输入一篇英文文章,并练习使用各种编辑命令。,第9章 shell编程,9.1 shell概述 9.2 shell的基本功能 9.3 shell启动及其命令 9.4 shell命令的集成 9.5 shell变量 9.6 shell的控制结构 9.7 shell的运行环境 9.8 shell应用实例 9.9 小结 习题,shell是一种命令语言,同时又是一种程序设计语言。shell的语言处理能力,使得用户能够方便地定义各种变量、参数,并使用各种控制语句编写复杂的命令程序完成多种工作。本章介绍shell、shell程序设计语言、shell的运行环境及shell程序的调试。,9.1 shell概述 9.1.1 什么是shell shell是一种命令解释程序(命令解释器),shell解释用户输入的命令行,提交系统内核处理,并将结果返回给用户。与Linux命令一样都是实用程序,但两者又有区别。一旦用户注册到系统后,shell就被系统装入内存,并一直运行到用户退出系统之止;而一般命令仅当被调用时,才由系统装入内存执行。 shell本身也是一种可编程的程序设计语言。用shell写的程序(shell脚本)相当于dos/windows下的批处理文件,它可以简单到只有一条命令,也可以复杂到包括大量循环、条件语句、数学运算、控制结构,也可以是介于两者之间的程序。,9.1.2 shell程序语言的特点 shell允许通过编程来完成复杂的功能处理,但其作为语言与高级语言相比较具有不同的特点: (1) shell是解释性的,多数高级语言是编译性的; (2) shell语言与高级语言处理的对象不同; (3) shell与系统有密切的关系; (4) shell易编写、调试、灵活性较强,但速度低; (5) shell作为命令级语言,命令组合功能很强。,9.1.3 shell的版本 shell有两种主要语法类型: Bourne shell和C shell,彼此不兼容。Bourne shell家族:sh ksh bash psh zsh;C shell家族:csh tcsh。 其中bash和 zsh在不同程度上支持 csh 的语法。 这里,我们再着重介绍一下bash的特点: (1) 自动补全功能 假设要输入的命令很长,或者命令后面要给的文件名很长。这个时候只要按一个Tab键,bash就会在可能的命令或文件名里面找寻匹配的命令,找到的话就会自动帮你补齐。,(2) 命令行编辑程序 bash的命令行编辑是在提示符下,可对未执行的命令字符任意地修改。 (3) 命令历史(command history) 所谓的命令历史就是把曾经输入过的命令记录起来,方便日后的查询与使用。只要按向上键就可以调出前一个命令,再按一次向上键就可以调出更前一个命令,依此类推,用向下键可以回到下个命令,所以用上、下键就可以选择以前输入过的命令。,9.2 shell的基本功能 9.2.1 程序的运行 当用户输入一行命令后,shell负责解释、分析输入的内容,并且决定做什么,同时替系统内核删除命令行中不必要的信息。命令是一个可执行的Linux命令、程序、工具或shell脚本。 例1: ls -l file1 file2 file3 例2: echo Welcome to Tsinghua University. 例3: echo Welcome to Tsinghua University. 注意: 例2和例3的结果是完全一样的。,9.2.2 使用保留字和元字符 shell有一些具有特殊意义的字(保留字) ,如在shell脚本中,像do、done、for、while等保留字控制循环操作,if、then、else等保留字进行条件控制。保留字随shell的不同而不同。 在Linux系统里,有一组特殊意义字符,这就是所谓的元字符(通配符)。 现在列出一些常用的通配符的意义,供参考。 上一层目录,与cd命令配合用得比较多 . 目前工作的目录 * 任意长度的字符 ? 长度为一个的任意字符, 括号内的一个字符 m 等于某个通配符,如*、?等 a-z* 小写字母开头的所有字符串 转义符号,用以解除特殊字符的特殊意义 用户目录 ; 分隔符,当命令行有多个命令时,做分隔用 BourneShell的提示符,同时也作为shell语言的位置变量参数 # 做注释用 | 建立一个管道,使一命令的输出作为另一个命令的输入 & 将命令以后台方式执行, 将命令的输出重导入文件中 相反 将命令的输出加在一个已经存在的文件后面 括号内的一个字符串 例: ls -x t*显示当前目录下以t打头的所有文件。,9.2.3 变量、文件名的替换 1. 变量的替换 shell允许对变量赋值。shell一旦在命令行中发现变量名时,将在变量名的位置上用以前赋给该变量的值替代变量名。 例: myhome=/usr/app1 echo myhome /usr/app1 ls -x myhome file1 file2 file3 file4,2. 文件名的替换 shell在命令行中将文件名进行替换。事实上,shell在确定要执行的程序名和它的自变量之前,要对命令行扫描,找出元字符进行相应的文件名的替换。 例: ls -x file1 file2 file3 file4 echo* file1 file2 file3 file4,9.2.4 输入输出重定向(改向) shell处理命令行的输入输出重定向,它扫描命令行中特殊改向字符“”、“”、“ msg cat msg Please call me:62781849 注意: 就程序或命令本身而言,它并不知道其标准输出已被改向,只是简单地按照自身的方式向标准输出输送信息。,正如shell扫描命令行查找重定向字符一样,它也查找管道字符“|”。对于所发现的每个管道字符,它将管道字符前面的命令的标准输出连接到管道字符后面的命令的标准输入中,然后启动两个程序的执行。 例: w|wc -l(假设有8个用户上机) 8,9.2.5 运行环境的控制 当用户登录到Linux系统中,系统启动一个交互式的shell命令解释器(称为注册shell)。该shell为此用户创建工作环境。shell提供了一定的命令,允许用户对自己运行的环境进行控制,即对运行环境实现客户化。用户的运行环境包括:主目录、终端类型、输入命令提示符、查找命令的路径名、以及其他全局变量等。例如,Bourne again Shell、Bourne Shell、Korn Shell和C Shell的环境文件分别为.bash-profile、.profile、.kshrc和.cshrc。,9.2.6 支持shell的编程 shell除了具有命令解释器的功能外,它本身就是一种程序设计语言,这种语言也由shell解释执行的。用户可以在文件中编写一组shell命令,该文件称为shell脚本或shell程序。通过把命令、变量赋值及条件控制语句结合起来,用户就获得了一个强大的编程工具。需要说明的是,在Linux系统本身就存在大量的shell程序,用于各种管理和应用。,9.3 shell启动及其命令 9.3.1 shell的启动 1.系统在用户登录时启动shell 在Linux系统引导过程中,首先启动init进程以查询终端的各个端口及其特性,当发现活动的终端时,调用getty进程。接着getty进程在接受用户名和口令后,调用login进程。login进程负责验证用户身份,验证后把控制权交给shell程序。shell根据环境文件建立系统范围内的工作环境和该用户自己的工作环境,最后显示命令提示符(#、%)。 在/etc/passwd文件中指定要启动的shell,如下所示:,root:x:0:0:root:/root:/bin/bash john:x:201:Certerstarf:/home:/bin/sh 2. 命令行状态下的交互shell启动 在系统中可能有多种版本的shell存在,可通过相应的命令来启动,如: bsh ksh sh 3. 执行用户命令时启动shell(子shell) 由系统生成新的子shell来执行该命令。,9.3.2 命令的查询 环境变量PATH的构成决定了寻找shell命令和其他程序的途径,是影响shell程序效率的主要因素之一。PATH变量设置要考虑以下几点:在PATH变量中,命令使用得多的程序目录应放在前面,极少用目录不设在PATH变量中。在shell程序内用得较多的程序目录应加在变量PATH中。并且PATH应尽可能地短,不要出现重复的目录。还要尽量避免查询大目录,如需设置,将其路径放在PATH路径的最后位置。 例: PATH=/bin:/usr/bin:/etc:.,9.3.3 shell常用的命令 Linux系统通常提供了许多命令以方便用户与系统的交互对话。这些命

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论