系统编程第一次实验

如有错误,欢迎批评指正,站内联系或邮箱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.cb.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.coutput.c,要求使用vi完成对2个文件的编辑。output.c中存在一个方法,原型是 void MyPrint(char* str),用于打印字符串,hello.c中使用代码调用MyPrint输出”helloXXX”。(XXX代表你本人名字的拼音全称)。然后使用gcc2个文件编译成为一个可执行文件,然后在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

本来运行命令行该有截图的,但是我做完作业关了虚拟机,才想起来没有截图。。。下次注意

原文地址:https://www.cnblogs.com/PineZhuo/p/10460339.html