### Linux系统的基础操作与C语言编程
#### 实验目的与意义
本次实验旨在帮助学习者熟悉Linux操作系统的基本操作,理解并掌握使用各种Shell命令来进行文件管理等基础操作的方法,同时学习如何利用vi编辑器或其他编辑器来编写简单的C语言程序,并通过make工具完成程序的编译,以及使用gdb工具进行程序调试的基础知识。通过实践操作,学生不仅能够建立起对Linux系统的直观认识,还能掌握一定的编程技能,这对于进一步深入学习Linux系统管理和C语言编程具有重要意义。
#### 实验环境搭建
为了顺利完成本次实验,需要具备以下条件:
- 安装有Windows操作系统的计算机一台;
- 计算机上安装有支持Linux虚拟机的软件,如VirtualBox或VMware等。
#### 预备知识
在开始实验之前,建议先了解以下知识点:
1. **虚拟机软件使用**:熟悉虚拟机软件的基本操作方法,如创建新虚拟机、安装操作系统等。
2. **Linux基础操作命令**:通过查阅相关资料,熟悉Linux常用命令,例如`ls`, `cd`, `pwd`, `mkdir`, `rm`等,以便于更好地完成实验任务。
3. **Linux Shell脚本**:学习如何编写简单的Shell脚本,了解Shell脚本的基本语法结构和命令行参数的使用。
4. **C语言开发与调试**:掌握在Linux环境下使用gdb进行程序调试的方法,包括断点设置、单步执行、变量查看等基本功能。
#### 实验内容与步骤详解
##### 实验步骤1:Linux系统的基础操作
1. **命令选项的作用**
- `ls`: 列出当前目录下的文件和目录。
- `ls -l`: 使用长格式列出文件和目录的详细信息。
- `ls -lh`: 使用长格式列出文件和目录的信息,并以易读的人类可读形式显示文件大小。
**知识点总结**:通过这些命令的学习,可以了解到Linux中文件权限、所有者、所属组、大小等信息的表示方式。
2. **文件和目录的操作**
- `pwd`: 显示当前工作目录。
- `mkdir newdir`: 创建名为`newdir`的新目录。
- `cd newdir`: 进入`newdir`目录。
- `touch newfile`: 在当前目录下创建一个名为`newfile`的新文件。
- `cd ..`: 返回上级目录。
- `rm -r newdir`: 删除目录及其内容。
- `rm --rf newdir`: 强制删除目录及其内容。
**知识点总结**:理解Linux文件系统的层级结构,熟悉基本的文件和目录操作命令。
3. **符号链接**
- `echo "hello, world" > newfile`: 将文本写入`newfile`文件。
- `cat newfile`: 显示`newfile`的内容。
- `file newfile`: 显示`newfile`的文件类型。
- `ln -s newfile newlink`: 创建指向`newfile`的软链接`newlink`。
- `cat newlink`: 显示`newlink`的内容。
- `file newlink`: 显示`newlink`的文件类型。
**知识点总结**:了解符号链接的概念及其与硬链接的区别。符号链接类似于Windows中的快捷方式,指向的是另一个文件的路径名。
4. **用户管理**
- `useradd tempuser`: 添加新用户`tempuser`。
- `passwd tempuser`: 设置`tempuser`的密码。
- 退出当前会话,重新登录尝试使用`tempuser`登录。
**知识点总结**:熟悉Linux用户的添加与密码设置流程,了解用户登录的过程。
5. **文件复制与移动**
- `cp newfile nfile`: 复制文件`newfile`到`nfile`。
- `mv newfile nnfile`: 移动文件`newfile`并重命名为`nnfile`。
- `mv nnfile nnnfile`: 再次移动文件`nnfile`并重命名为`nnnfile`。
**知识点总结**:掌握文件复制与移动的区别,理解文件重命名的命令使用方法。
6. **网络配置**
- `ifconfig`: 显示网络接口的配置信息。
- `ping [网关地址]`: 向指定网关地址发送ICMP请求包。
**知识点总结**:了解`ifconfig`命令的功能,学会使用`ping`命令测试网络连通性。
7. **进程管理**
- `ps -ef | more`: 显示所有进程的信息,并分页显示。
- 在另一个终端运行`ps -ef`命令,找到刚才运行的命令进程的PID。
- `kill -9 [PID]`: 结束指定PID的进程。
**知识点总结**:熟悉Linux进程管理的相关命令,理解进程ID的作用。
##### 实验步骤2:Shell脚本编写
编写一个Shell脚本程序,用于显示斐波那契数列的前20项,格式为:`ID:number`。通过编写此脚本,可以加深对Shell脚本的理解,掌握基本的循环控制结构和数据处理方法。
##### 实验步骤3:C语言编程与调试
1. **UDP协议编程**
- 客户端向服务器端发送字符串`How are you?`。
- 服务器端接收到消息后,显示出来,并发送回复`I am fine.`。
- 客户端收到回复后,显示出来。
**知识点总结**:学习UDP协议的基本概念,理解客户端与服务器端之间的通信机制,掌握简单的套接字编程技巧。
2. **Makefile的使用**
- 编写Makefile文件,用于自动化编译客户端和服务器端程序。
**知识点总结**:熟悉Makefile文件的编写规则,学会如何通过Makefile自动化构建项目。
3. **程序调试**
- 学习如何使用gdb工具进行简单的程序调试,包括设置断点、单步执行、查看变量值等基本操作。
**知识点总结**:理解gdb工具的基本用法,提高程序调试能力。
#### 实验报告要求
1. **实验预习报告**:包括实验目的、实验环境、预备知识、实验内容和步骤等内容。
2. **实验报告格式**:按照特定格式撰写实验报告。
3. **实验内容撰写要求**:要求每个实验步骤都需要进行详细的总结与分析,对于涉及编程的部分,需要提供源代码及相应的注释和输出结果。
通过以上内容的学习与实践,不仅可以提升对Linux系统操作的熟练度,还能增强编程和调试的能力,为后续深入学习打下坚实的基础。