系统编程第一次实验
如有错误,欢迎批评指正,站内联系或邮箱zhuo2333@qq.com
一、 实验目的
1、 创建CentOS虚拟机,也可安装CentOS双系统。
2、 熟悉Linux常见命令。
3、 了解超强的vi编辑器。
4、 熟悉gcc编译器。
5、 本实验设计意在提供解决问题的基本工具以及方式,因此详细以及进阶内容请自行查询书、网络或者询问助教。
6、 通过本实验学会如何在linux上进行开发。
二、 实验环境
CentOS
三、 实验指导
1、 创建CentOS
① 使用虚拟机创建CentOS在实验指导书(《Linux编程基础》黑马程序员)中有详细步骤。
我用的是CentOS6.8 安装包百度云链接:
链接: https://pan.baidu.com/s/1cF1llXJU1pYGqQy_PrFIzw
提取码:pnix
下载第一个压缩包即可
② 双系统安装方式,建议熟练或者有兴趣的同学尝试,提供几条博客链接:
https://blog.csdn.net/mengxiangjia_linxi/article/details/78965103
https://blog.csdn.net/flyer1011/article/details/78185509
2、 Linux常见命令(请学会使用终端Terminal)
(1) 绝对路径和相对路径:
Linux操作系统中存在着两种路径:绝对路径和相对路径。我们在访问文件或文件夹的时候,其实都是通过路径来操作的。两种路径在实际操作中能起到同等的作用。
绝对路径永远都是相对于根文件夹的。它们的标志就是第一个字符永远都是“/”。
相对路径永远都是相对于我们所处的文件夹位置。它们的第一个字符没有“/”。
比如/home/usr/test/h.c,这就是绝对路径。如果当前处于usr文件夹下,那么相对路径就是test/h.c。
‘.’表示当前路径,./test/h.c和以上相对路径等价,’..’表示上一级目录,故也可写作 ../usr/test/h.c
(2) 文件操作命令
ls 查看目录和文件 如 “ls /home/usr/test”,就会列出该目录下文件。
pwd 查看当前路径。
mkdir 创建目录, mkdir /home/usr 在/home下创建usr目录
cd 切换目录,cd /home/usr/test 。cd 可以使用 .和.. ,即cd . 和 cd ..
cp 复制文件,命令格式 cp [源路径] [目的路径]
mv 移动文件,命令格式 mv[源路径] [目的路径]
rm 删除文件或目录,命令格式 rm [目标路径],参数-r递归删除,即删除子文件夹,-f强制删除。“rm –rf /*“ 毁灭世界。
rmdir 删除目录 rmdir [路径]
cat 查看文件内容, cat /home/usr/test/h.c , 输出文件中内容
more 分页查看。比如当cat输出大量文本内容时,很难看清,则可以通过cat [文件] | more来分页查看。f/空格显示下一页,回车显示下一行,Q/q退出。此处涉及到管道,有兴趣的可自行搜索。
(3) 权限操作命令
su 切换到root,root账户具有最高权限。返回当前用户则使用exit。
sudo 在指令前加上sudo,使得本条指令以最高权限运行。
chmod使用chmod命令更改文件权限。
chow 使用chown命令更改文件所有者。
chgrp 使用chgrp命令更改文件的所属组。
(4) 网络管理命令
Ifconfig 查看当前网络配置,如ip等。
Netstat 查看当前网络状态。
Ping 检查网络是否连通。Ping www.baidu.com
(5) 查询命令帮助手册 man命令
比如man ls, 就会打印ls的使用方法。更详细的man使用方式见百度或者:
https://www.cnblogs.com/Jason-Ch/articles/2772973.html
(6) yum命令
centos安装包管理通常是使用yum完成,yum list可显示当前安装的程序包。
1、使用时首先配置源,即程序包来源。http://mirrors.163.com/.help/centos.html
2、配置好源后,则可以通过 sudo yum install xxxx命令来安装包。卸载包则是通过sudo yum remove xxx。
3、更详细内容请参考man yum或者百度搜索。
3、 vi编辑器
在命令行中编辑文件可以通过执行 vi xxx进行,下面简要介绍常用(不全)命令。
进入vi后是命令模式,通过按键控制光标移动以及文本内容的复制粘贴删除。
1、光标上下左右移动对应kjhl,部分vi支持上下左右键。
2、Home移动到行首,End移动到行尾。
3、x删除光标所在字符, dd删除光标所在行。
4、yy复制当前行,nyy复制自当前行起,包含当前行在内的n行,如3yy。
5、p将内容粘贴到光标处。
6、u 撤掉上一次操作。
只有在插入模式下才能修改文本, i或者Insert从命令模式进入插入模式。
底行模式则是在输入模式下按Esc进入,常用输入 :q 退出vi,:w 保存修改内容, :wq退出并保存。:q! 强制退出等。
Vi更多使用参见书或者man或者网络。
4、 GCC编译器
(1) 检查gcc版本
使用gcc –v输出信息,如果不存在gcc,请使用yum安装gcc。
(2) gcc编译单文件
编译方式是 gcc [文件路径],默认文件名是a.out,执行方式是 ./a.out 。
通过-o指定文件名, gcc hello.c –o hello,编译生成hello执行文件。
(3) gcc编译多文件
当程序源码分散在多个文件中时,举例为 gcc a.c b.c –o test,将a.c和b.c联合编译生成test可执行文件。
(4) 其他
如使用-o1 –o2 –o3来进行程序优化,更多请百度或者参考书。
四、 实验题目
1、 写出满足下列题目要求的命令,并解释每条命令中你使用的选项、参数的含义。
注意:每个小题只能使用一条命令完成,命令的格式参考:command [options] [arguments]。
(1) 假设在当前路径下不存在任何目录,现在当前路径下创建名为“a1”的目录,并在“a1”目录中创建名为“b1”的目录。
mkdir /a1 在当前路径下创建a1目录
mkdir /a1/b1 在a1目录中创建b1目录
(2) 在当前路径下删除一个非空子目录/tmp。
rm -rf /tmp
删除目录下所有文件包括子目录方法:rm -rf 目录名
由于/tmp是系统文件,尽量不要删除,这里可以选择删除第一小题创建的a1目录(由于内含b1目录,因此a1也是非空子目录)
本题不能使用rmdir命令,rmdir只能用于删除空目录
现已在用户coding个人目录下创建了目录software,完成以下(3)、(4)两个小题。
(3) 搜索etc目录下所有以“pa”开头的文件,并拷贝到software中。
cp /etc/pa* /home/coding/software
cp 复制文件,命令格式 cp [源路径] [目的路径]
其中,源路径/etc/pa*表示etc中所有以pa开头的文件,/home/coding/software是目的路径
(4) 将目录software下所有内容建立成一个tar包,并命名为software.tar.gz。
tar -cvf software.tar.gz /home/coding/software
tar是打包器 -cvf是打包,software.tar.gz是压缩文件名,/home/coding/software是要被打包的目录路径
2、 对一个文件file.txt执行命令:#chmod 746 file.txt。请解释该命令的含义并写出执行该命令后该文件的权限信息。(用r、w、x和-表示)
chmod使用chmod命令更改文件权限
r(4)表示可写
w(2)表示可读
x(1)表示可执行
7=4+2+1
4=4+0+0
6=4+2+0
所以746就是rwx r-- rw-
3、 在根目录下创建一个Lab1文件夹,并创建hello.c和output.c,要求使用vi完成对2个文件的编辑。output.c中存在一个方法,原型是 void MyPrint(char* str),用于打印字符串,hello.c中使用代码调用MyPrint输出”helloXXX”。(XXX代表你本人名字的拼音全称)。然后使用gcc将2个文件编译成为一个可执行文件,然后在shell中执行该文件,最后输出。请提交在终端输入命令和输出结果的完整截图,可添加一些必要的文字说明。
使用 / 命令进入根目录
当程序源码分散在多个文件中时,举例为 gcc a.c b.c –o test,将a.c和b.c联合编译生成test可执行文件
截图中的警告是个人问题(在output.c中忘记写头文件)
使用chomd命令,使得test文件拥有x权限,也即可执行
./xxx表示运行可执行文件xxx
4、用vi编辑器,执行下述操作,并详细说明操作过程及方法。
删除第5,15和25行指令:——
命令:nd表示删除第n行
在删除一行过后,下面的行数会发生变化,所以应该从下面开始删除
esc进入命令模式
:25d
:15d
:5d
将文本中所有的”etc”替换为”config”:——
:%s/etc/config/g
使用%才能在全文搜索,使用s命令进行替换,最后加/g以替换每一行中的每一个etc
复制第11~20行的内容,并且贴到文件最后一行之后:——
11,20y p
a,by是复制命令,表示从第a行到第b行的复制,然后将光标移至最后一行,使用p命令进行粘贴
然后将光标移动至文件最后:——
一直按↓
将每行开头第一个字符”#”删除:——
:%s/^#/
%表示全文,s是替换命令,把每一行的第一个#替换成空白,完成删除操作
删除包含有字符串”conf”的那几行: ——
:g/conf/d
使用g/表示全局查询,查询到conf之后,使用/d命令完成删除整行
在第一行新增一行,输入你的姓名,学号:——
光标移动至第一行,点击i进入插入模式,回车然后输入姓名学号 xxx 17373xxx
文件另存为new-inittab.conf: ——
:w new-inittab.conf
使用w命令完成另存为操作
思考题(建议思考,不要求必须完成)
系统中引入了文件和目录的概念方便了用户的使用。设想如果有一个不使用文件或目录的系统,我们可以用什么其他方式来代替它们的功能?在生活中有没有这样的例子?请简要回答并说明原因。(思考方向:建议了解文件的组织结构,文件的作用)
胡思乱想了一通,就不贴上来了23333
本来运行命令行该有截图的,但是我做完作业关了虚拟机,才想起来没有截图。。。下次注意