Linux实验报告-(2)_第1页
Linux实验报告-(2)_第2页
Linux实验报告-(2)_第3页
Linux实验报告-(2)_第4页
Linux实验报告-(2)_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

LinuxLinux 实验报告实验报告 姓姓 名名 黄芳恺黄芳恺 班班 级级软件工程软件工程 114114 学学 号号 119074258119074258 指导教师指导教师 阮越阮越 目录目录 实验一实验一 LinuxLinux 基本命令的使用基本命令的使用 实验二实验二 简单简单 ShellShell 程序设计程序设计 实验三实验三 LinuxLinux 下简单下简单 C C 程序设计与文件操作程序设计与文件操作 实验四实验四 LinuxLinux 下进程操作与进程间通信下进程操作与进程间通信 实验五实验五 LinuxLinux 线程的使用线程的使用 实验六实验六 LinuxLinux 进程间的进程间的 IPCIPC 实验七实验七 LinuxLinux 下访问下访问 MysqlMysql 数据库数据库 实验八实验八 LinuxLinux 下网络编程下网络编程 练习题 练习题 grep bash 生产者消费者生产者消费者 实验一实验一 LinuxLinux 基本命令的使用基本命令的使用 1 1 实验目的 实验目的 学习和掌握 Linux 的基本命令 2 2 实验内容和步骤 实验内容和步骤 步骤步骤 1 1 以 user login 用户身份并使用 telnet 登录 Linux 服务器 按照提示创建自己的 账户和口令 步骤步骤 2 2 使用新创建的用户账户和口令登录 Linux 系统 察看登录后的界面 步骤步骤 3 3 使用 pwd 命令察看当前的工作目录 然后用 ls 命令查看当前目录下的内容 尝试 使用 a l F A lF 等不同选项并比较不同之处 a do not ignore entries starting with I ignore PATTERN do not list implied entries matching shell PATTERN l use a long listing format F classify append indicator one of to entries A almost all do not list implied and lF ignore file 步骤步骤 4 4 在当前目录下建立一个名为 test 的新目录 然后将工作目录切换到 test 下 尝 试将 etc 目录下的文件 passwd 拷贝到该目录下 cp 源文件 目的目录 察看当前目录下 的 passwd 文件的属主和文件权限 步骤步骤 5 5 尝试向当前目录下的 passwd 文件和 etc passwd 文件分别写入一些新内容 可使 用 echo 字符串 文件的命令 看看操作能否成功 如果不能成功 请说明原因 用 cat 命令浏览文件 password 的内容 用 more 命令进行浏览翻页操作 再用 less 命令浏 览文件的内容 比较这几个命令的不同之处 对当前目录中成功 因为该目录下的 passwd 文件对当前用户具有写的权限 对 etc passwd 文件的操作被拒绝因为对当前用户不具有写的权限 cat 命令将文件的内容全部显示 more 命令将文件内容分屏显示 less 命令进行刷新的全部 显示 步骤步骤 6 6 用 ls 命令查看 test 下文件的权限 用 mv 命令更改文件 password 的文件名为 test txt 尝试用 chown 和 chgrp 更改文件的属主为 root 组为 root 看看能否成功 不 成功 请说明原因 尝试用 chomd 将文件权限为 rw 看看能否成功 不成功 请说明原因 用 chown 和 chgrp 更改文件的属主为 root 组为 root 不成功 因为 chown 和 chgrp 一般 是 root 的权限 步骤步骤 7 7 用 rm 命令删除 test 目录下的所有文件 再用 rmdir 命令删除 test 目录 想 一想有没有一条命令将目录及目录下的所有文件删除 写出这条命令 rm rf test 步骤步骤 8 8 使用 ps 命令查看当前系统内的进程 并利用 man 命令获取 ps 命令的参数 写出 获取当前终端进程执行情况的 ps 命令 步骤步骤 9 9 使用 df 命令查看当前系统已安装的文件系统的空间使用情况 记录结果 步骤步骤 1010 使用 du 命令查看用户的工作目录占用了多少空间 记录结果 步骤步骤 1111 使用 free 命令查看内存资源的使用情况 记录结果 步骤步骤 1212 使用 man 获取 tar 和 gzip 的帮助信息 尝试将 test 目录下的文件打包并压缩 然后到另外一目录 tmp 下解包 写出这几条命令 步骤步骤 1313 尝试执行 ls l tmp 看看这条命令的执行会出现什么结果 解释一下这 条命令 创建一个名为 tmp 的文件并将 ls l 输出的内容写入 tmp 中 步骤步骤 1414 尝试执行 find usr src name c print xargs grep include 看看 这条命令的执行会出现什么结果 解释一下这条命令 匹配查找列表输出 usr src 下以 c 结尾的文件中含有 include 的内容 步骤步骤 1515 执行 cal 和 date 命令 说说这两条指令的用途 步骤步骤 1616 执行命令 clear 和 logout 退出系统 想一想有没有其他的方法 写出这种方 法 Exit 步骤步骤 1 17 7 执行命令 shutdown 关闭系统 想一想有没有更简单的命令 写出这条命令 Init 0 3 实验结论 实验结论 通过对通过对 linuxlinux 的常用命令的学习 让我对的常用命令的学习 让我对 linuxlinux 的系统有了初步的认识的系统有了初步的认识 这是一个完全基这是一个完全基 于命令操作的操作系统 这些命令组成了强大的命令系统 提供了完善的功能 这些命令于命令操作的操作系统 这些命令组成了强大的命令系统 提供了完善的功能 这些命令 操作将为我以后的操作将为我以后的 linuxlinux 学习打下良好的基础 学习打下良好的基础 实验二实验二 简单简单 ShellShell 程序设计程序设计 1 1 实验目的 实验目的 1 学习和掌握 vi 编辑器的基本使用方法 2 学习和掌握编写简单的 shell 程序 2 2 实验内容和步骤 实验内容和步骤 2 12 1 vivi 的使用的使用 步骤步骤 1 1 以 root 用户身份登录进入 Linux 系统 步骤步骤 2 2 启动 Vi 切换到输入模式 输入一段英文 This ia an exercise We use Vi to edit it Left down up right 步骤步骤 3 3 尝试匹配其中的一串字符 写出这命令及执行结果 Left 步骤步骤 4 4 尝试替换其中的一串字符 写出这命令及执行结果 3s Left 123 g 步骤步骤 5 5 尝试复制 删除其中的一行或几行文本 写出命令及执行结果 命令模式下 光标移动到那一行按 n yy n为要复制的行数 再按p粘贴 命令模式下 光标移动到那一行按 n dd n为要删除的行数 删除一行或几行 步骤步骤 6 6 尝试复制 删除其中的一个单词或几个字符 写出命令及执行结果 命令模式下 光标移动到那一行按 n yw n为要复制的单词数 再按p粘贴 命令模式下 光标移动到那一行按 n dw n为要删除的单词数 删除一个或几个字符 步骤步骤 7 7 尝试使用鼠标复制文本 写出命令及执行结果 直接使用鼠标选中复制 将光标移动到要粘贴的地方用鼠标粘贴即可完成复制文本 步骤步骤 8 8 尝试存盘退出操作 写出命令 wq 2 22 2 简单的简单的 shellshell 程序程序 步骤步骤 1 1 使用 Vi 将程序清单 2 1 的程序输入 步骤步骤 2 2 尝试运行该程序 如果不能运行 原因是什么 怎样修改 没有执行权限 chmod x test 步骤步骤 3 3 执行程序 写出程序的执行结果 步骤步骤 4 4 阅读程序 掌握 shell 函数的编写方法 补全函数 file run file run ls l awk x print 9 步骤步骤 5 5 修改程序中的函数 uers 使得显示在线用户时不分行 提示 可以使用循环 对每个在线用户分别处理 uers echo there are who wc l users online echo who are for i in who awk print 1 do printf s i done echo 3 实验结论 实验结论 Linux 系统系统 shell 编程其本质就是编程其本质就是 linux 命令的组合 通过许多简单命令的组合可以完成很命令的组合 通过许多简单命令的组合可以完成很 多功能 可以开发一些小型程序 多功能 可以开发一些小型程序 实验三实验三 LinuxLinux 下简单下简单 C C 程序设计与文件操作程序设计与文件操作 1 1 实验目的 实验目的 3 学习和掌握 gcc 等 Linux 的开发调试环境 4 学习并掌握 Linux 的文件操作 5 编写并实现实验步骤 6 要求的程序 2 2 实验内容和步骤 实验内容和步骤 步骤步骤 1 1 使用 Vi 将程序清单 3 1 和 3 2 的程序输入 并在当前目录下创建文件 file in 和文件 file out 尽可能的使文件 file in 大一些 步骤步骤 2 2 利用 gcc 分别编译这两个程序 写出编译命令和执行结果 如果不成功 尝试利 用 gdb 调试 gcc o list3 1 list3 1 c gcc o list3 2 list3 2 c 步骤步骤 3 3 仔细观察这两个程序 比较标准 C 的文件操作和 Linux 的系统调用 open read write 等的使用区别 答 标准 c 的文件操作一个是库函数的调用 linux 中系统调用文件操是底层的文件调用 其运行效率略有差距 同时参数也不同 返回的数据类型也不同 步骤步骤 4 4 按照说明重新修改程序 3 2 并使用 time 命令察看程序执行的时间效率上有何区 别 步骤步骤 5 5 输入 编译并运行程序 3 3 和 3 4 写出执行结果 并比较他们 fseek 和 lseek 在 使用方法上的异同 两者都是对文件的读写指针进行设置但两者的返回类型不同 fseek 返回的是 int 型 lseek 返回的是 off t 型 步骤步骤 6 6 学习并分别使用标准 C 的文件操作函数和 Linux 的系统调用创建一个对学生基本 信息进行操作 插入 修改和删除 的 C 程序 学生基本信息以结构体的形式存储在文件 stu info 中 struct stu info 的定义如下 struct stu info char stu num 12 char name 10 short int sex 0 为女生 1 为男生 char mobile phone 12 3 实验结论 实验结论 通过对文件操作的编程 让我掌握了文件的创建 打开 读写 以及特定位置的读写关闭通过对文件操作的编程 让我掌握了文件的创建 打开 读写 以及特定位置的读写关闭 等操作 并且从系统底层调用和标准等操作 并且从系统底层调用和标准 c 函数库两个角度对文件的操作比较中 认识到两者函数库两个角度对文件的操作比较中 认识到两者 的异同 的异同 实验四实验四 LinuxLinux 下进程操作与进程间通信下进程操作与进程间通信 1 1 实验目的 实验目的 1 学习和掌握 fork 等系统调用的基本使用方法 2 利用 Linux 中的管道实现父子进程间的同步 2 2 实验内容与步骤 实验内容与步骤 步骤步骤 1 1 使用 Vi 将程序清单 4 1 的程序输入 编译并运行 学习和掌握 fork 的基本调用 方法 步骤步骤 2 2 使用 Vi 将程序清单 4 2 4 3 和 4 4 的程序输入 利用 gcc 分别编译这三个程序 写出编译命令和编译结果 如果不成功 尝试利用 gdb 调试 gcc o list4 2 list4 2 c gcc o father father c gcc o child child c 步骤步骤 3 3 写出编译这三个程序的 makefile 然后利用 make 进行编译 谈谈这么做的好处 可以节省劳动时间 让三个程序同时编译 简化了操作 步骤步骤 4 4 运行这三个程序 写出运行结果 步骤步骤 5 5 屏幕上显示出的执行结果是哪一个进程执行的结果 father 和 child 步骤步骤 6 6 父进程中的 printf 有向屏幕输出吗 为什么 没有 因为父进程的标准输出已经被重定向 步骤步骤 7 7 利用父子进程间的管道通信方式 改写实验 3 步骤 6 要求的程序 3 实验结论 实验结论 通过该节实验 我更进一步理解了通过该节实验 我更进一步理解了 fock 函数函数 dup 函数函数 exercl 函数的工作原理 让我了解函数的工作原理 让我了解 到了进程并发的概念 学习了如何创建子进程 进程映象替换 以及通过无名管道实现父到了进程并发的概念 学习了如何创建子进程 进程映象替换 以及通过无名管道实现父 子进程中的输入输出重定向子进程中的输入输出重定向 实验五实验五 LinuxLinux 线程的使用线程的使用 1 1 实验目的 实验目的 学习和掌握 Linux 线程的创建以及同步方法 2 2 实验内容和步骤 实验内容和步骤 步骤步骤 1 1 输入程序 5 1 编译并运行写出执行结果 thread function is running Argument was 10 Waiting for thread to finish Thread joined it returned Thank you for the CPU time share int is now 10 步骤步骤 2 2 仔细研读代码 描述pthread create函数中各个参数的意义 并给出线程的入口 函数的调用方法 描述两线程间参数传递的方式 该函数有四个参数 第一个参数为一个指向pthread t类型数据的指针 第二个参数为创建 线程的属性 一般用NULL表示用默认属性 第三个参数为指向要调用函数的函数指针 第四个参数是传给该函数的参数 参数传递方式 首先线程的函数要定义成void start routine void 的形式 主线程创建子线程时可将要 传给子线程的信息放在pthead create函数的第四个参数上 子线程创建后就可以通过函数的 参数直接获得 为一个void类型的指针 步骤步骤 3 3 打开注释掉的全局变量 aa 及操作 aa 的相关代码 回答这跟进程有什么不同 由于线程是共享进程内资源的 所以子线程如果改变了aa的值 主线程内aa的值也会发生 改变 而如果是创建了一个子进程 若子进程改变了aa的值 主进程内aa的值是没有发生 改变的 步骤步骤 4 4 输入程序 5 2 编译并运行 写出运行结果 Input some text Enter end to finish basjk You input 5 characters end Waiting for thread to finish Thread joined 步骤步骤 5 5 仔细研读代码 描述利用信号量实现线程间同步调用方法 定义一个全局的sem t类型的变量 通过函数sem init The value argument specifies the initial value for the semaphore If pshared has the value 0 then the semaphore is shared between the threads of a process If pshared is nonzero then the semaphore is shared between processes 步骤步骤6 6 学习并使用线程间的同步方法 重新改写实验3步骤6要求的程序 要求启用两个线 程 其中主线程接受用户对文件stu info的操作命令然后发给子线程 子线程完成对文件 的实际操作 注意线程间的同步 3 实验结论 实验结论 通过本节实验学习了如何创建线程 如何在线程之间传递参数已经共享数据 以及如何利通过本节实验学习了如何创建线程 如何在线程之间传递参数已经共享数据 以及如何利 用信号量同步线程 如何在线程之间传递参数已经共享数据 以及如何利用信号量同步线用信号量同步线程 如何在线程之间传递参数已经共享数据 以及如何利用信号量同步线 程 程 实验六实验六 LinuxLinux 进程间的进程间的 IPCIPC 1 1 实验目的 实验目的 学习和掌握 Linux 进程间的 IPC 及同步方法 2 2 实验内容和步骤 实验内容和步骤 步骤步骤 1 1 输入程序 6 1 6 2 编译并运行写出执行结果 步骤步骤 2 2 仔细研读代码 写出程序中实现 P V 操作的相关函数和代码 描述程序的同步工 作过程 上述代码实现多个进程读写临界区时 使用信号量进行同步的例子 读临界区时先 P 操作 出临界后 V 操作 上面结果中 O 与 X 的出现都是成队的 步骤步骤 3 3 输入程序 6 3 和 6 4 编译执行并写出结果 步骤步骤 4 4 程序 6 3 和 6 4 中哪段代码实现了共享 描述实现内存共享的主要函数的参数意 义和这些函数的使用方法 int shmget key t key size t size int shmflg 向系统申请一块共享内存 void shmat int shmid const void shmaddr int shmflg 将共享内存挂载到 shmaddr 指针上 int shmdt const void shmaddr 卸载共享内存 int shmctl int shmid int cmd struct shmid ds buf 删除共享内存以及其他控制 shmctl shmid IPC RMID 0 步骤步骤5 5 学习并使用IPC中信号量和共享内存的使用方法 重新改写实验3步骤6要求的程序 要求启动多个进程 每一个进程都可以单独对文件进行操作 进程间通过信号量进行同步 对文件的操作映射到共享内存中 3 实验结论实验结论 通过对改节实验 让我了解了进程通过对改节实验 让我了解了进程 IPC 信号量访问临界区 以及进程之间访问共享内存的信号量访问临界区 以及进程之间访问共享内存的 实现方法和同步机制 掌握了上述一系列函数的使用方法 实现方法和同步机制 掌握了上述一系列函数的使用方法 IPC 用于完成进程间通信 包用于完成进程间通信 包 括信号量 共享内存已及消息队列 在编写括信号量 共享内存已及消息队列 在编写 linux 程序时非有用程序时非有用 实验七实验七 LinuxLinux 下访问下访问 MysqlMysql 数据库数据库 1 1 实验目的 实验目的 学习和掌握 Mysql 数据库及编程访问方法 2 2 实验内容和步骤 实验内容和步骤 步骤步骤 1 1 在 Mysql 中使用 sql 命令 create database foo 命令创建数据库 foo 步骤步骤 2 2 在数据库 foo 中创建表 children create table children childno int 11 not null auto increment fname varchar 30 age int 11 primary key childno 步骤步骤 3 3 向表 children 中插入若干记录 insert into children values 1 Jenny 17 Insert into children values 2 Andrew 13 Insert into children values 3 Alex 12 Insert into children values 4 Tom 11 Insert into children values 5 Jack 7 Insert into children values 6 Ella 14 步骤步骤 4 4 输入 编译并运行程序 7 1 7 2 和 7 3 写出运行结果 步骤步骤5 5 学习并使用C语言访问Mysql的基本方法 重新改写实验3步骤6要求的程序 要求使 用数据库保存stu info结构 3 实验结论 实验结论 通过通过 mysql h C 语言可以使用数据库 通过该节实验我掌握了语言可以使用数据库 通过该节实验我掌握了 linux 下怎么用下怎么用 c 语言进行简语言进行简 单的数据库方面的编程 单的数据库方面的编程 实验八实验八 LinuxLinux 下网络编程下网络编程 1 1 实验目的 实验目的 学习和掌握 socket 函数的基本使用方法 2 2 实验内容和步骤 实验内容和步骤 步骤步骤 1 1 输入 编译并运行程序 8 1 和 8 2 写出程序的执行结果 步骤步骤 2 2 学习并使用socket函数的基本使用方法 完善并重新改写前几个实验实现的程序 要求用户在客户端实现数据操作请求的输入 然后上传到服务器端完成对数据库的实际操 作 同学在实现时应尽可能的使用前几个实验的成果 即应该包括多线程或多进程 数据 库以及socket等 3 实验结论 实验结论 通过改节实验我掌握了通过改节实验我掌握了 linux 下用下用 c 语言进行网络编程 语言进行网络编程 socket 可以实现不同主机间进程的可以实现不同主机间进程的 通信 可以编写出网络应用程序通信 可以编写出网络应用程序 课堂练习 课堂练习 1 grep include include int main int argc char argv FILE fp char tmp 100 c char tmp1 int l 0 line 1 if argc 3 printf input wrong n return 0 if fp fopen argv 2 r printf can t open file n return 0 fscanf fp c NEW LINE while c n l fscanf fp c tmp l 0 tmp1 tmp while l 0 if strncmp argv 1 tmp1 sizeof argv 1 printf line d s n line tmp l tmp1 sizeof char fscanf fp c line if feof fp goto NEW LINE return 1 运行结果 2 bash include include include include include void main pid t pid char arg 100 char parg p int lenth i j printf mysh while 1 j 0 fgets arg sizeof arg stdin fgets 比 gets 多接收一个 LF 换行 即 n gets arg if strcmp arg exit n return pid fork if pid 0 lenth strlen arg lenth arg lenth 0 printf s n arg printf d n arg 2 printf d n lenth if lenth 0 return parg char malloc sizeof char parg j arg j for i 0 i lenth 1 i if arg i arg i 0 p parg j p char malloc sizeof char parg j arg i 1 j printf s s s parg 0 parg 1 parg 2 execvp parg parg else wait 0 printf mysh 运行结果 3 生产者消费者 semaphore union semun int val struct semid ds buf unsigned short int array struct seminfo buf static int set semvalue int val int th static void del semvalue int th static int semaphore p int th static int semaphore v int th static int sem id int main int running 1 void shared memory void 0 struct shared use st shared stuff int shmid sem id semget key t 1234 2 0666 IPC CREAT set semvalue 1 0 set semvalue 0 1 srand unsigned int getpid shmid shmget key t 1234 sizeof struct shared use st 0666 IPC CREAT if shmid 1 fprintf stderr shmget failed n exit EXIT FAILURE shared memory shmat shmid void 0 0 if shared memory void 1 fprintf stderr shmat failed n exit EXIT FAILURE printf Memory attached at X n int shared memory shared stuff struct shared use st shared memory while running semaphore p 1 printf You wrote s shared stuff some text sleep rand 4 if strncmp shared stuff some text end 3 0 running 0 semaphore v 0 if shmdt shared memory 1 fprintf stderr shmdt failed n exit EXIT FAILURE if shmctl shmid IPC RMID 0 1 fprintf stderr shmctl IPC RMID failed n exit EXIT FAILURE exit EXIT SUCCESS static int set semvalue int val int th union semun sem union sem union val val if semctl sem id th SETVAL sem union 1 return 0 return 1 static void del semvalue int th union semun sem union if semctl sem id th IPC RMID sem union 1 fprintf stderr Failed to delete semaphore n static int semaphore p int th struct sembuf sem b sem b sem num th sem b sem op 1 sem b sem flg SEM UNDO if semop sem id return 0 return 1 static int semaphore v int th struct sembuf sem b sem b sem num th sem b sem op 1 sem b sem flg SEM UNDO if semop sem id return 0 return 1 semaphore union semun int val struct semid ds buf unsigned short int array struct seminfo buf static int set semvalue int val int th static void del semvalue int th static int semaphore p int th static int semaphore v int th

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论