熟悉Linux操作系统

本文介绍了在Linux环境下进行目录复制、重命名、文件内容查看以及使用tar打包和gdb调试C程序的基本操作,包括cp/mv命令用法,cat、head、tail和ls命令的应用,以及gdb调试的步骤和技巧。
摘要由CSDN通过智能技术生成

第五关:Linux之目录复制/重命令

任务描述

本关主要讲解在Linux命令行下如何对目录进行拷贝和重命名操作。

本关任务:将一个指定目录拷贝到指定的目录下,同时对一个已存在的目录重命名。 提示:连接命令行后,先执行命令 cd /tmp, 进入临时目录,再执行练习操作。所有操作在/tmp/下执行,否则可能破坏实验环境,导致评测不能通关。

相关知识
Linux拷贝目录

Linux中使用cp -r命令将一个或多个源目录复制到指定的目录下。它可以将单个源目录复制成一个指定目录名的具体的目录或一个已经存在的目录下。

具体命令如下:cp 参数 源目录 目的目录

常用参数如下:

  • -r 是递归把源目录下的目录递归进行移动;
  • -f:强行复制文件或目录,不论目标文件或目录是否已存在;
  • -i:覆盖既有文件之前先询问用户;
  • -p:保留源文件或目录的属性;

具体说明:

  • cp命令支持同时复制多个目录,当一次复制多个目录时,目的目录参数必须是一个已经存在的目录,否则将出现错误;

  • cp命令支持同时复制多个目录,当一次复制多个目录时,多个目录名用空格分隔;

  • cp命令拷贝目录和拷贝文件大致用法相似,最大差别就是拷贝目录的时候必须加上-r参数,而拷贝文件的时候不需要加-r参数。

Linux重命名目录

Linux中使用mv命令来重命名一个目录名。

mv命令还可以用来移动目录,类似于Windows上的剪切功能。

具体命令如下:mv 参数 源目录 目的目录

具体说明:

  • 参数可选,可以不带
  • 如果一次想移动多个目录,则每个目录名用空格隔开。
  • mv命令可以使用通配符来移动目录。
  • mv命令移动目录和移动文件的使用大致一样,唯一不同的是如果出现源目录和目标目录重名,则采用合并的方式,而对于文件则是直接覆盖。
编程要求

本关的编程任务是补全右侧代码片段中beginend中间的代码,具体要求如下:

  • 将当前目录下的目录Dir1Dir2拷贝到目录Dir下;
  • 将当前目录下的目录Dir1拷贝到目录Dir下并重命名为Dir1Cpy
  • 将当前目录下的目录Dir3Dir4移动到目录Dir下;
  • 将当前目录下的目录Dir5重命名为Dir6
通关代码

cp Dir1 Dir2 Dir

cp Dir1 Dir/Dir1Cpy

mv Dir3 Dir4 Dir

mv Dir5 Dir6

第六关:Linux之文件/目录内容查看

任务描述

本关主要讲解在Linux命令行下如何查看文件内容和目录下内容。

本关任务:查看一个文件的内容和列出一个目录下的所有内容。

相关知识
Linux查看文件内容

Linux中查看文件内容的命令有很多,接下来我们介绍常用的几个命令。

cat命令

具体命令如下:cat 参数 文件名

常用参数如下:

  • -n 或 --number:由1开始对所有输出的行数编号;
  •  -b 或 --number-nonblank:和-n相似,只不过对于空白行不编号。

具体说明:

  • cat命令支持同时查看多个文件,当一次查看多个文件时,每个文件的内容都会被打印到屏幕上;

  • cat命令不能对文件进行编辑操作,只能查看文件内容。

应用示例:

查看文件/etc/passwd内容,则可以使用如下命令:

cat /etc/passwd

,

head命令

具体命令如下:head 参数 文件名

常用参数如下:

  • -n number:显示文件的前number行内容;

具体说明:

  • head命令是从文件的开头显示内容,默认情况下只显示前10行的内容;

  • head命令不能对文件进行编辑操作,只能查看文件内容。

应用示例:

查看文件/etc/passwd的前8行内容,则可以使用如下命令:

head -n 8 /etc/passwd

,

tail命令

具体命令如下:tail 参数 文件名

常用参数如下:

  • -n number:显示文件的最后number行内容;

具体说明:

  • tail命令是从文件的结尾显示内容,默认情况下只显示最后10行的内容;

  • tail命令不能对文件进行编辑操作,只能查看文件内容。

应用示例:

查看文件/etc/passwd末尾5行内容,则可以使用如下命令:

tail -n 5 /etc/passwd

,

 Linux查看目录内容

Linux中使用ls命令来查看一个目录下的内容。

具体命令如下:ls 参数 目录

常用参数如下:

  • -a:显示所有档案及目录(ls内定将档案名或目录名称为“.”的视为影藏,不会列出);
  • -A:显示除影藏文件“.”和“..”以外的所有文件列表;
  • -l:列出内容的详细信息;
  • -r:以文件名反序排列并输出目录内容列表;
  • -s:显示文件和目录的大小,以区块为单位;
  • -i:显示文件索引节点号(inode)。一个索引节点代表一个文件;
  • -R:递归处理,将指定目录下的所有文件及子目录一并处理。

具体说明:

  • 如果一次查看多个目录,则每个目录名用空格隔开。
 编程要求

本关的编程任务是补全右侧代码片段中beginend中间的代码,具体要求如下:

  • 查看当前目录下的文件file1的所有内容;
  • 查看当前目录下的文件file2的头5行内容;
  • 查看当前目录下的文件file2的末尾5行内容;
  • 查看目录/home目录下的所有内容(包括隐藏内容)。
 通关代码

cat file1

head -n 5 file2

tail -n 5 file2

ls -a /home

 第七关:tar打包命令

任务描述

有时,我们会在Linux系统中将多个文件打包成一个单独的文件,通过本关的学习,我们将学会如何在Linux系统中将多个文件/目录打包生成一个文件。

本关任务:使用tar命令完成文件和目录的打包操作。

 相关知识

tartape archive的简写)工具可完成许多功能,其名称源于它的原始功能-创建和读取归档文件和备份磁带。如今,该工具常用来将多个文件或多个目录打包成一个tar文件,或者将某个tar文件分解开。

接下让我们详细的学习tar的使用方法。

打包

tar命令可以将多个文件/目录进行打包,将多个文件生成一个文件,生成的文件后缀为.tar

具体打包命令如下:

tar -cvf 生成的tar包名 要打包的文件/目录列表

常用命令参数如下:

  1. -c 建立新的归档文件;
  2. -v 处理过程中输出相关信息;
  3. -f 对普通文件操作;
解包

tar命令可以将已经打包好的文件解压出来。

具体打包命令如下:

tar -xvf 解压包名 -C 解压到指定目录

常用命令参数如下:

  1. -x 或--ext\fract或--get:从备份文件中还原文件;
  2. -v 处理过程中输出相关信息;
  3. -f 对普通文件操作;
  4. -C <目的目录> 切换到指定的目录;

如果不使用-C(大写)参数,则默认解压到当前目录下。

 编程要求

在右侧编辑器中补充代码,使用tar命令打包和解包,具体编程要求如下:

  • 使用tar命令将当前目录下的oldFile1oldFile2文件打包成一个newFile.tar文件;

  • 使用tar命令将当前目录下的oldFile.tar文件解压到当前目录下。

通关代码

tar -cvf newFile.tar oldFile1 oldFile2

tar -xvf oldFile.tar

 第十二关:gdb调试C程序

任务描述

本关任务:使用gdb调试给出的代码,找出代码的问题,并修改正确。

相关知识

为了完成本关任务,你需要掌握:1.gdb的常用命令,2.C语言字符串相关知识。

源代码

,

gdb调试参考
一、启动GDB调试

,

二、输入list,查看源代码并根据行号/函数名设置断点(断点位置仅供参考,不需雷同)

,

三、观察变量值,并作分析,推测错误
四、修正程序并运行。

• 常用命令: run 运行选择的程序并将参数传给它 kill 终止正在调试的程序 quit 退出gdb help [] 帮助 • 单步跟踪和从断点开始继续执行: c[ontinue] 从断点开始继续执行 s[tep] 执行下一个源程序行,必要时进入下一个函数(逐语句) n[ext] 在不单步执行进入其他函数的情况下,向前执行一行源代码(逐过程) finish 运行程序,直到当前函数完成返回。并打印函数返回时的堆栈地址和返回值及参数值等信息。 • 断点相关: b[reak] [] 在代码里设置断点, 这将使程序执行到这里时被挂起 可以是16进制地址、函数名、行号、相对的行位移。 info break[points] 列出当前所有的断点 clear [] 去除一个指定的断点 • 查看相关的命令: list [] 列出产生执行文件的源代码部分 info [] 显示与该程序有关的各种信息 可以是局部变量和函数参数,比如info breakpoints/threads/locals…… p[rint] [] 打印变量或是表达式的值

编程要求

本关任务是学会使用gdb调试C程序。

具体编程要求如下:(除非特别说明,其他步骤都在右侧命令行操作)

1、 在当前目录下用vi编辑reverse.h,将以下代码写入reverse.h; void reverse(char *str);

2、 在当前目录下用vi编辑reverse.c,将上面提供的代码写入reverse.c;

3、 按以下步骤编译,如有警告信息,请修改代码至无警告信息 gcc -Wall reverse.c -o reverse

4、再次编译,编译时加入调试信息 gcc -g reverse.c -o reverse

5、使用gdb调试至代码正确(参考“gdb调试参考”部分的内容)

6、最终,使用gcc编译生成名为reverse的可执行文件 执行可执行文件,验证代码已修改正确

通关代码

#include <stdio.h>

#include "reverse.h"

#include <string.h>

void reverse(char *str)

{

     int i;

     int len;

     char c;

     len = strlen(str);

     for(i=0;i<len/2;i++)

     {

         c = *(str + i);

         *(str+i) = *(str + len -i - 1);

         *(str+len-i-1)=c;

      }

       

}

int main(void)

{

        char str[1024];

        scanf("%s",str);

        reverse(str);

        printf("REVERSED:%s\n",str);

        return 0;

}

 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值