1、Linux 程序设计实验报告姓 名: 杨 帆班 级: 计 1242学 号: 121842284专 业:计算机科学与技术指导老师: 赵帼英 实验一 Linux 系统安装与启动(选做实验)一、 实验目的(通过实践及查阅资料完成如下实验)1. 掌握虚拟机的配置过程。2. 掌握 Linux 系统的安装过程和简单配置方法。3. 掌握与 Linux 相关的多操作系统的安装方法。4. 掌握 Linux 系统的启动、关闭步骤。5. 了解 Linux 文件系统和目录结构。二、 实验内容1. 安装虚拟机软件(如 VMware、Virtualbox)。2. 在虚拟机软件中安装 Linux 操作系统(如 Fedora
2、、Ubuntu、redhat 等) 。3. 配置 Linux 系统运行环境。4. 正确地启动、关闭系统。三、 实验步骤1 .安装虚拟机软件(VMware Workstation 7.0 ) 。2.在虚拟机软件中新建 Linux 虚拟机 2.1 设置内存大小(建议大于256MB)2.2 设置虚拟硬盘大小(建议大于 8GB)2.3 设置虚拟光驱(虚拟方式,镜像文件)2.4 设置网络连接模式(建议采用桥接方式)2.5 设置共享目录(建议英文目录名)1. 在 Linux 虚拟机中安装 Linux 操作系统(fedora10 )。3.1 选择安装界面3.2 检测安装截介质(建议跳过)3.3 安装过程中的
3、语言、键盘选择3.4 磁盘分区(采用自动分区,总大小与 2.2 相匹配)3.5 引导程序选择(采用 GRUB)3.6 注意事项(禁用 SELinux)2. 通过相关命令实现对操作系统的登录、退出与关机3. 使用文件浏览器査看 Linux 操作系统目录结构四、实验思考题1. 举例说明 Linux 操作系统不同目录下文件的主要作用。2. 列出你发现的 Linux 与 Windows 操作系统区别。3. 列出决定文本界面及图形界面显示的关键文件,并说明设置的关键。4. 列出你所能想到的虚拟机软件的用途。实验结论:实验二:linux 基本命令(必做实验)一、 实验目的、要求(请在操作后附实验结果)1.
4、 熟悉 Linux 操作环境。2. 掌握 Linux 般命令格式。3. 掌握有关文件和目录操作的常用命令。4. 掌握有关进程操作的常用命令。二、 实验内容1.熟练掌握登录和退出系统,创建,删除用户等命令(命令:运行结果)。2.熟悉 date,cal,who,echo, clear,passwd,man 等命令。3.在用户主目录下对文件进行如下操作:复制一个文件、显示文件内容、查找指 定内容、排序、文件比较、文件删除。4.对目录进行管理:创建和删除子目录、改变和显示工作目录、列出文件权限、 建立链接文件等。1. 显示系统中的进程信息。三、 实验步骤1. 登录进入系统,打开 shell 环境(终端
5、)。2. 使用 date,cal, who, echo, clear 等命令,了解 Linux 命令格式。3. 利用 man 命令查看 date,echo 等命令的帮助说明。4. 目录操作4.1 在用户默认工作目录下新建目录 testdirl(命令:运行结果)。4.2 在用户目录下复制 testdirl 为 testdir2(命令:运行结果)。4.3 在用户目录下删除 testdir2。(命令:运行结果)5. 文件操作5.1 进入用户默认工作目录。5.2 运行 date testl,然后运行 cat test 1,记录观察到的信息(命令:运行结果)。5.3 再次运行 date testl,然后
6、运行 cat testl,记录观察到的信息(命令:运行结果)。5.4 运行 datetestl,然后运行 cattestl,记录观察到的信息并说明原因(命令:运行结果)。5.5 复制 testl 为 test2。5.6 査看 testl 和 test2 的文件详细信息,记录并说明其异同。5.7 统计 testl 文件内容的行数、字数。5.8 显示 testl 的内容。5.9 建立 testl 的链接文件 test3。5.10 复制 testl 到上一级目录。5.11 在用户目录下删除 testl,删除 testdirl。四、实验思考题1. 如何显示当前工作目录的完整路径。在 Linux 层次目
7、录结构中,用户可以在被授权的任意目录下利用 mkdir 命令创建新目录,也可以利用 cd 命令从一个目录转换到另一个目录。然而,没有提示符来告知用户目前处于哪一个目录中。要想知道当前所处的目录,可以使用 pwd 命令,该命令显示整个路径名。pwd 说明:此命令显示出当前工作目录的绝对路径。例:$ pwd /home/xu 显示的路径名为/home/xu,每个目录名都用“/”隔开,根目录以开头的“/”表 示。2. 举例说明 Linux 命令的常用格式。mkdir -p /srv/ftp/linux-10 创建文件夹 -p 如果文件夹不存在自动创建 free 命令 free 命令的功能是查看当前系
8、统内存的使用情况,它显示系统中剩余及已用的物理内存和交换内存,以及共享内存 和被核心使用的缓冲区。3. 举例说明如何使用 Linux 命令帮助(命令:运行结果)。实验结论:4实 验 三 文 件 权 限 管 理 (必 做 实 验 )一、 实验目的1. 熟悉 Linux 操作环境。2. 掌握 Linux 般命令格式。3. 理解 Linux 中文件所有者和权限的概念。4. 掌握有关权限操作的常用命令。5. 掌握文件/目录的打包和压缩命令。二、 实验内容1.2.1 普通文件与目录权限的修改。1.2.2 改变文件属主。1.2.3 普通文件与目录的打包和压缩。三、 实验步骤1. 文件权限操作1.1 在用户
9、默认工作目录下创建目录 test03,进入 test03 目录,使用 touch命令创 建空文件 filel。1.2 显示 filel 详细信息,记录文件的权限信息,所属用户和组。1.3 对 filel 设置权限,使其他用户可以对此文件进行写操作,并查看设置结果。1.4 取消同组用户对 filel 的读取权限,并査看设置结果。51.5 用数字形式来为 filel 设置权限,使所有者可读、可写、可执行;其他用户和 所属组用户只有读和执行的权限,并查看设置结果。1.6 用数字形式更改 filel 权限,使所有者只能读取此文件,其他任何用户都没有 权限,并査看设置结果。1.7 为其他用户添加写权限,
10、并査看设置结果。1.8 回到上层目录,查看 test03 的权限。1.9 为其他用户添加对此目录的写权限,查看设置结果。1.10 査看并记录目录 test03 及其中文件的所属用户和组。1.11 把目录 test03 及其下的所有文件的所有者改成 bin,所属组改成 daemon,并 査看设置结果。61.12 删除目录 test03 及其下的文件。1.13 设定 umask 为 000 ($ umask 000),创建 testdir 目录,并査看其权限。2. 打包压缩命令操作2.1 将/etc 目录拷贝 SlJ 用户默认工作目录下,重命名为 etctest。72.2 用 tar 命令将 et
11、ctest 目录打包成 etctest.tar.gz,查看 etctest.tar.gz的权限,解压 缩 etctest.tar.gz8四、实验思考题4.1 列举 ls 命令不同选项的功能。(1)ls:显示所有非隐藏文件(按字典顺序排序) (2)ls -a:显示所有文件包括隐藏文件 (3)ls -l:显示所有文件的详细信息 (4) 显示总数4.2 说明文件权限和文件所有者的含义。-rw-r-r-是文件的权限。Root 是用户组。4.3 举例说明 umask 命令的功能。umask 设置了用户创建文件的默认 权限,它与 chmod 的效果刚好相反,umask 设置的是权限“补码”,而 chmod
12、 设置的是文件权限码。一般在/etc/profile、$ HOME/.bash_profile 或$HOME/.profile 中设置 umask 值。4.4说明后缀名为 tar.gz 和 tar.bz2 的文件的压缩和解压命令。Linux 下最常用的打包程序就是 tar 了,使用 tar 程序打出来的包我们常称为 tar 包,tar包文件的命令通常都是以.tar 结尾的。生成 tar 包后,就可以用其它的程序来进 行压缩了,所以首先就来讲讲 tar 命令的基本用法: tar 命令的选项有很多(用 man tar 可以查看到),但常用的就那么几个选项,下面 来举例说明一下: # tar -cf
13、 all.tar *.jpg 这条命令是将所有.jpg 的文件打成一个名为 all.tar 的包。-c 是表示产生新的包 ,-f 指定包的文件名。 # tar -rf all.tar *.gif 这条命令是将所有.gif 的文件增加到 all.tar 的包里面去。-r 是表示增加文件的 意思。 # tar -uf all.tar logo.gif 这条命令是更新原来 tar 包 all.tar 中 logo.gif 文件,-u 是表示更新文件的意思。 # tar -tf all.tar 这条命令是列出 all.tar 包中所有文件,-t 是列出文件的意思 # tar -xf all.tar 9
14、这条命令是解出 all.tar 包中所有文件,-x 是解开的意思 以上就是 tar 的最基本的用法。为了方便用户在打包解包的同时可以压缩或解压文件,tar 提供了一种特殊的功能。这就是 tar 可以在打包或解包的同时调用其它的压缩程序。实验结论:通过这个实验我了解了普通文件与目录权限的修改。10实 验 四 用 户 和 组 的 管 理 (必 做 实 验 )一、 实验目的1. 熟悉 Linux 操作环境。2. 掌握 Linux 般命令格式。3. 熟悉命令行操作方式进行用户和用户组管理。二、 实验内容2. 建立新用户账号权限测试。3. 为新用户建立账号和工作组,并进行相应配置。4. 以该用户身份登录
15、,修改密码。5. 删除该用户。三、 实验步骤1. 创建用户(以 zhangsan 为例)1.1 创建一个新用户 zhangsan。1.2 査看/etc/passwd 文件的最后一行内容,并记录。1.3 査看/etc/shadow 文件的最后一行内容,并记录。1.4 给用户 zhangsan 设置密码。1.5 查看/etc/shadow 文件的最后一行内容,记录并说明变化。111.6 使用 zhangsan 用户登录系统,测试能否登录成功。2. 创建用户(以 user 为例)2.1 使用 1 的步骤创建新用户 user。2.2 更改 zhangsan 所属群组为 root。2.3 査看/etc/
16、passwd 文件,记录 zhangsan 用户和 user 用户的属组情况。2.4 更改用户 zhangsan 的帐户名为 user。122.5 査看/etc/passwd 文件的最后一行内容,记录并说明变化。2.6 删除用户 user。3. 组的管理(以 stuff 为例)3.1 创建一个新组,组名为 stuff。3.2 査看/etc/group 文件的最后一行内容,并记录。3.3 创建一个新帐户 test,并将其起始组和附属组都设为 stuff。3.4 査看/etc/group 文件中的最后一行内容,记录并说明变化。133.5 设置 stuff 组密码。3.6 在 stuff 组中删除用
17、户 test。3.7 查看/etc/group 文件中的最后一行,记录并说明变化。3.8 删除会且 stuff。四、实验思考题1. 说明所属群组与所属附加群组的区别。14chgrp(change group)改变文件所属群组,hown (change owner)改变文件所有者属性。2. 如普通用户遗失密码后要求恢复用户权限,说明 root 用户可能采取的方式。1) 在 root 账户下,打开/etc/shadow (不是 passwd 文件,因为密码实际上经过加密后放在了“影子口令”文件 shadow 中了。passwd 文件每个用户均可见,但是 shadow 只有root 可以见)。 2)
18、 找到普通用户名 cicikasa,然后删除第二个域即可,域之间用“:”隔开的,如下user:TdkakkkYUukkjkjk:14672:0:99999:7: 上述红色部分就是经过加密的密码,删除即可。 3) 在普通用户下,输入 passwd 即可输入新密码。3. 如何指定不同用户的默认工作目录。1) 修改/etc/vsftpd/vsftpd.conf 将guest_username=virtual_useruser_config_dir=/etc/vsftpd_useruser_sub_token=$USER 加进去2) 在/etc 目录下手工建立 vsftpd_user 目录3) 在/e
19、tc/vsftpd_user 目录下建立用户文件,用户文件名称=要登录的用户名。例如:FTP 用户是 test111 那么就在/etc/vsftpd_user/下建立一个 test111 文件,文件内容 local_root=/home/test111/$USER4) 重启服务 service vsftpd restart实 验 五 文 本 编 辑 器 ( 选 做 实 验 )一、 实验目的1. 掌握 Vi 编辑器的进入与退出方法。2. 了解文本编辑器的三种模式。3. 熟练掌握使用 vi 编辑器进行编辑、选择及操作文本文件的命令。二、 实验内容1. 进入和退出 vi。2. 利用文件拷贝方式建立一
20、个文件。3. 在该文件上移动光标位置。4. 对该文件内容执行删除、修改、替换等操作。三、 实验步骤1. 在当前用户默认工作目录下新建一个名为“test02”的目录。2. 将文件“/etc/rsyslog.conf 复 制 到 “test” 目录下。3.使用 vi 打开 est 目 录 下 的 rsyslog.conf4. 指出设定 umask (类似于“umask0022”)的所在行号。5. 将光标移到该行,并复制该行内容。6. 将该行内容内容粘贴至最后一行。7. 撤销第 6 步的动作。8. 光标移到“$ FileOwner syslog”,删除该行。9. 存盘但不退出。10. 将光标移到首行
21、,插入模式下输入“Hello,this is vi world!”。11. 向下查找字符串“syslog”。12. 再向上査找字符串“TCP”。13. 强制退出 vi,不存盘。四、 实验思考题1. 举例说明实验中使用的命令处于何种模式下?2. 说明在 vi 中如何实现字符串的查找,并实现查找结果的自动换行。3. 说明在 vi 中如何实现行号的显示与关闭。实验六 库文件的建立与引用(必做实验)按照课本第一章,第 7-11 页,建立并引用库文件,写出实验过程及结果。库函数介绍:1. Linux 系统调用,文件的描述符使用的是一个整数,库函数访问文件使用 FILE 类型的指针去指向描述文件;2. 库
22、函数不随系统平台而变,即不管 win 还是 Linux 都适用;库函数 - 读文件size_t fread(void *ptr, size_t size, size_t n, FILE *stream)功能:从 stream 指向的文件中读取 n 个字段,每个字段为 size 字节,并将读取的数据放入 ptr 所指向的字符数组中,返回实际已读取的字节数。(读出来的数据量为 size*n)库函数 - 写文件size_t fwrite(const void *ptr, size_t size, size_t n, FILE *stream)功能:从缓冲区 ptr 所指向的数组中把 n 个字段写到
23、stream 指向的文件中,每个字段长为 size 个字节,返回实际写入的字段数。库函数 - 创建和打开FILE *fopen(const char *filename, const char *mode)filename:打开的文件名(包含路径,缺省为当前路径)mode:打开模式实例代码#include #include #include #define BUFFER_SIZE 1024/*程序入口*/int main(int argc,char *argv)FILE *from_fd;FILE *to_fd;7/*判断入参*/if(argc!=3)printf(“Usage:%s from
24、file tofilen“,argv0); long file_len=0;char bufferBUFFER_SIZE;char *ptr;/* 打开源文件 */ if(from_fd=fopen(argv1,“rb“)=NULL) printf(“Open %s Errorn“,argv1); exit(1); /* 创建目的文件 */ if(to_fd=fopen(argv2,“wb“)=NULL) printf(“Open %s Errorn“,argv2); exit(1); /*测得文件大小*/fseek(from_fd,0L,SEEK_END);file_len=ftell(fr
25、om_fd);fseek(from_fd,0L,SEEK_SET);printf(“form file size is=%dn“,file_len);/*进行文件拷贝*/while(!feof(from_fd) fread(buffer,BUFFER_SIZE,1,from_fd);if(BUFFER_SIZE=file_len)fwrite(buffer,file_len,1,to_fd);else fwrite(buffer,BUFFER_SIZE,1,to_fd);file_len=file_len-BUFFER_SIZE;bzero(buffer,BUFFER_SIZE); fclos
26、e(from_fd); fclose(to_fd); exit(0); 结果及说明:rootwl-MS-7673:/home/wl/桌面/c+# g+ file_lib_copy.cpp -o file_lib_copyfile_lib_copy.cpp: 在函数int main(int, char*)中:file_lib_copy.cpp:43:41: 警告: 格式 %d expects argument of type int, but argument 2 has type long int -Wformatrootwl-MS-7673:/home/wl/桌面/c+# ./file_lib_copy file_lib_copy.cpp test2.cform file size is=1030rootwl-MS-7673:/home/wl/桌面/c+#