操作系统-第二次实验

本文档详细介绍了Linux shell的基本操作,包括通配符查找、输入输出重定向、管道操作、群命令及vi编辑器的使用。同时,讲解了进程控制,如监控、管理和操作进程,以及如何使用grep、sort、head和tail命令处理文本文件。最后,探讨了C编程的gcc编译、gdb调试和makefile管理。实验旨在提升用户对Linux环境的熟悉度和C语言开发能力。
摘要由CSDN通过智能技术生成

实验4 shell初步

1)实验目的

 1、熟悉shell的基本操作。
 2、使用LINUX中最常用的数据处理命令。

2)实验要求

本次实验要求完成以下内容:
 • 使用通配符来进行文件名的查找
 • 重定向标准输入、标准输出、标准错误输出
 • 使用管道操作,将一个进程的输出作为另一个进程的输入
 • 使用群命令和命令行续行符
 • 在指定的目录中,对满足条件的文件名进行递归查找
 • 了解vi编辑器的基本用法
 • 在文本文件中,查找符合指定模式的文本行
 • 将文本文件中的各行,按顺序排列
 • 显示一个文本文件的前几行或者后几行

3)实验内容

1、使用通配符来进行文件名的查找


通配符用于模式匹配,如文件名匹配、路经名搜索、字符串查找等。常用的通配符有*、?和括在方括号[ ]中的字符序列。用户可以在作为命令参数的文件名中包 含这些通配符,构成一个所谓的“模式串”,在执行过程中进行模式匹配。

2、重定向标准输入、标准输出、标准错误输出

重定向就是将标准输入、标准输出甚至标准报错重定向到一个文件。也就是说,可以让命令从某个文件中读取参数和数据,命令的输出结果也可以送至某个文件中而不是在终端上显示出来。实现重定向的最简单的方法是使用改向操作符。改向操作符可以将标准输入、标准输出和标准报错改向到某个文件。

另一 种实现重定向的方法是使用管道(|),它将一条命令的输出发送到另一条命令的输入。

3、使用管道操作,将一个进程的输出作为另一个进程的输入

管道操作符将一条命令的输出定向到另一条命令的输入,而不是定向到终端或文件。

4、使用群命令和命令行续行符

 如果希望在成功地执行一个命令之后再执行另一个命令,或者在一个命令失败后再执行另一个命令,&&和||可以完成这样的功能。相应的命令可以是系统命令shell脚本。

 shell还提供了在当前shell或子shell中执行一组命令的方法,即使用()和{ }。

5、在指定的目录中,对满足条件的文件名进行递归查找

find是一个非常有效的工具,它可以遍历当前目录甚至于整个文件系统来查找某些文件或目录。find命令的一般形式为:
         find pathname -options [-print – exec –ok]
         pathname:find命令所查找的目录路径。
          -print:find命令将匹配的文件输出到标准输出。
          -exec:find命令对匹配的文件执行该参数所给出的shell命令。
          -ok 和- exec的作用相同,只不过在执行每一个命令之前,都会给出提示,让用户来确定是否执行

6、了解vi编辑器的基本用法

         vi编辑器是UNIX的强有力的文本文件编辑工具,利用它可以建立、修改文本文件。
          a) vi编辑器的进入:
                   vi 文件名(自动进入命令方式)。
          b) vi编辑器的退出:
                   在指令模式下键入:q,:q!,:wq或:x(注意:号),就会退出vi。其中:wq和:x是存盘退出,而:q是直接退出。
          c) 基本编辑指令
          新增 (append)
                   a :从光标所在位置後面开始新增资料。
                   A: 从光标所在列最後面的地方开始新增资料
          插入 (insert)
                   i: 从光标所在位置前面开始插入资料。
                   I :从光标所在列的第一个非空白字元前面开始插入资料。
          开始 (open)
                   o :在光标所在列下新增一列并进入输入模式。
                   O: 在光标所在列上方新增一列并进入输入模式。
                   x: 删除光标所在字符。
                   dd :删除光标所在的列。
                   r :修改光标所在字元,r 后接着要修正的字符。
                   R:进入取替换状态,新增文字会覆盖原先文字,直到按
                   [ESC] 回到指令模式下为止。
                   s: 删除光标所在字元,并进入输入模式。
                   S: 删除光标所在的列,并进入输入模式。

7、在文本文件中,查找符合指定模式的文本行

         grep命令从指定的输入文件中查找与指定的正则表达式相匹配的行。默认情况下,grep命令将输出所找到的匹配行。
 grep命令的一般形式如下:
          grep [options] [regular-expression] [file1, file2, …]
          其中,options指定grep命令的各种选项,regularexpression
         指定用来查找的正则表达式,file1,file2,…等参数是要查找的输入文件名。在最简单的情况下,用来查找的正则表达式可以是简单的字符串。

8、将文本文件中的各行,按顺序排列

         sort命令的功能是对文件中的各行进行排序,并将结果显示在标准输出上。如不指定输入文件或使用“-”,则表示排序内容来自标准输入。
          sort 命令的一般形式为:
                   sort [options] file

9、显示一个文本文件的前几行或者后几行

          head命令与tail命令
          例: 显示/etc/passwd文件的前10行的内容
          $ head -10 /etc/passwd
          例:显示/etc/passwd文件的前5行的内容
          $ head -5 /etc/passwd
          例:显示/etc/passwd文件的后10行的内容
          $ tail -10 /etc/passwd

实验5 控制进程

1)实验目的

 1、熟悉进程的操作与控制
 2、掌握使用linux命令管理和操作进程的方法

2)实验要求

本次实验要求完成下列内容:
 • 使用ps与jobs命令监视进程
 • 使用kill与jobs命令控制进程
 • 显示当前进程的ID

3)实验内容

1、进程的结构
         ⑴ 登录进程系统,显示当前的进程ID。
         ⑵ 创建一个子shell。
         ⑶执行ls –R / > outfile2 2>> errfile &命令后,立即再运行一个命令,列出你的所有正在运行的进程。
         ⑷使用exit命令,中止你的子shell进程。如果再次使用exit命令,退出你的登录shell,此时,发生了什么?
         再次使用exit命令,会退出shell控制台。
         ⑸显示出当前进程环境中的所有变量。
         ⑹创建一个变量x,并将它的值赋为10,查看变量x的值,再次列出当前进程环境中的所有变量。

         ⑺创建一个子shell。查看子shell中变量x的值。它的值是多少?列出子shell中所有的当前变量,有变量x吗?
         没有变量x。
         ⑻返回到父进程。将变量x的值传递给子进程。创建一个子shell,并且查看变量x的值。

         ⑼在子shell中将200赋给变量x。查看变量的值是否已经改变了。
         ⑽回到父进程中。查看当前环境中,变量x的值。子shell中对变量x的值的改变,上传到了父shell中吗?
         未上传到父shell,因为子进程的环境变量不会传回给父进程。
         ⑾ 创建一个shell脚本,将其命名为sc1,它的内容应是:pwd ; cd / ; pwd
         ⑿将文件sc1设置成可执行,而后运行该文件。你现在处于哪个目录中呢?为什么?
         仍处于原目录,shell脚本是新建了一个子进程去运行,所以不会改变父进程。
         ⒀创建另一个名为sc2的shell脚本。它的内容是:                              var1=hello;var2=$LOGNAME;export var1 var2
         ⒁将文件sc2设置成可执行,而后运行该文件。运行结束后,查看变量var1与var2的值。var1与var2的值分别为多少?为什么?

         均为空,子进程的环境变量不会传给父进程。
         ⒂再次运行文件sc2。 此次,使用’.’命令,强迫该文件在当前shell中运行。运行结束后,查看变量var1与var2的值。现在var1与var2的值分别为多少?为什么?

         由于在父进程的shell强制执行,所以父进程环境变量改变了。

2、作业控制
         ⑴ 在前台执行命令ls –R / > outfile 2> errfile。
         ⑵ 暂停这个刚刚启动的作业。
         ⑶将上面暂停的作业转至后台继续运行。
         ⑷把这个作业转到前台来。
         ⑸ 当ls命令执行结束时,在后台重新启动它。显示出进程的ID,而后退出系统。
         ⑹重新登录进来,查看该后台进程是否仍在运行。
         ⑺创建一个包含如下内容的shell脚本文件sc3。
         ⑻再次登录进来,查看进程是否仍在运行。
         ⑼进程完成后,显示输出文件outfile的内容。

3、结束一个进程
         ⑴使用ls –R / 命令(将错误重定向,将输出重定向),在后台启动这个运行时间很长的作业。请记录该后台进程的ID号。
         ⑵如果你启动后台进程时,没有记录下进程的ID,那么你如何找到它呢?在知道进程ID的情况下,杀死这个进程。确认你已经杀死了该进程。

         进程结束过快,已被杀死。没有记录下进程的ID用PS指令打印出来即可。

4、查看用户信息
         ⑴查看目前在系统中登录的所有用户清单
         ⑵显示登陆者信息

实验6 C编程与调试

1)实验目的

 1、使用户熟悉C编程工具gcc、gdb、make
 2、熟练掌握gcc、gdb、make ,为后续项目作准备

2)实验要求

本次实验要求完成下列内容:
 • 熟悉gcc编译四阶段,习惯gcc界面与查错,用gcc编译一个示例程序。
 • 熟悉gdb常见调试命令,用gdb调试一个示例程序,熟悉调试环境。
 • 熟悉make和makefile规则,通过查看一个示例程序makefile,学会用makefile管理自己的项目。

3)实验内容

1、Gcc

         ⑴用熟悉的编辑器编译.c文件

         创建hello.c文件

直接编译运行

四阶段编译

⑵使用gcc发现程序错误

2、Gdb

调试工具gbd的功能:
         常用功能:
                   设置断点
                   显示栈帧;

         调试过程中可以用到:
                   显示变量
                   显示寄存器
                   单步执行
                   监视点
                   改变变量的值

         如果进程已经运行中:
                   生成转储文件进行分析
                   attach到进程
                   初始化文件。

3、make

         (1)什么是Make以及Makefile?
          makefile关系到了整个工程的编译规则,一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。
          makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。

         (2)Makefile实例
PREFIX ?= /usr/local
DOCDIR ?= $(PREFIX)/share/doc/bashtop
all:
 @echo Run 'make install' to install bashtop.
install:
 @mkdir -p $(DESTDIR)$(PREFIX)/bin
 @cp -p bashtop $(DESTDIR)$(PREFIX)/bin/bashtop
 @mkdir -p $(DESTDIR)$(DOCDIR)
 @cp -p README.md $(DESTDIR)$(DOCDIR)
 @chmod 755 $(DESTDIR)$(PREFIX)/bin/bashtop
uninstall:
 @rm -rf $(DESTDIR)$(PREFIX)/bin/bashtop
 @rm -rf $(DESTDIR)$(DOCDIR)

 ‘make install’ 提示安装
Install 安装
Mkdir 创建文件夹
Cp 复制
Uninstall 卸载
Chmod 更改用户权限

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是蒸饺吖~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值