实验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 更改用户权限