跳转至

1、计算机基础与编程环境

1.1 在Linux系统终端中使用mkdir、cp、rm、mv等命令新建、复制、删除、移动文件或目录

​ 在Linux系统中,mkdircprmmv等命令是基本的文件系统操作命令,用于新建、复制、删除、移动文件或目录。下面将分别介绍这些命令的基本用法。

1. mkdir 命令

mkdir(make directory)命令用于新建目录。

  • 基本用法:mkdir 目录名
  • 例如,新建一个名为example的目录:mkdir example

2. cp 命令

cp(copy)命令用于复制文件或目录。

  • 复制文件:cp 源文件 目标文件
  • 复制目录(需要使用-r参数,表示递归复制):cp -r 源目录 目标目录
  • 例如,复制名为file1.txt的文件到file2.txtcp file1.txt file2.txt
  • 例如,复制名为dir1的目录到dir2cp -r dir1 dir2

3. rm 命令

rm(remove)命令用于删除文件或目录。

  • 删除文件:rm 文件名
  • 删除目录(需要使用-r参数,表示递归删除):rm -r 目录名
  • 例如,删除名为file.txt的文件:rm file.txt
  • 例如,删除名为dir的目录:rm -r dir

4. mv 命令

mv(move)命令用于移动文件或目录,或重命名文件或目录。

  • 移动文件或目录:mv 源文件或目录 目标文件或目录
  • 重命名文件或目录:mv 原名 新名
  • 例如,将file1.txt移动到new_directory目录下:mv file1.txt new_directory/
  • 例如,重命名old.txtnew.txtmv old.txt new.txt

注意事项

  • 在使用这些命令时,可以加上-v(verbose)参数来显示操作的详细过程。
  • 对于重要的文件或目录,在使用rm命令时要特别小心,因为一旦删除,数据将很难恢复。
  • 在使用这些命令时,还可以使用通配符(如*)来匹配多个文件或目录。

以上就是mkdircprmmv等命令的基本用法,通过这些命令可以实现文件系统的基本操作。

1.2 在Linux系统终端中使用cd、pwd、ls等命令更改、显示目录路径和查看目录中的文件

​ 在Linux系统中,cdpwdls等命令用于导航文件系统,显示当前目录的路径,以及查看目录中的文件和子目录。下面详细介绍这些命令的基本用法。

1. cd 命令

cd(change directory)命令用于更改当前工作目录。 - 基本用法:cd 目录 - 切换到用户主目录:cdcd ~ - 切换到上一级目录:cd .. - 切换到之前的工作目录:cd - - 例如,切换到/home/user目录:cd /home/user

2. pwd 命令

pwd(print working directory)命令用于显示当前工作目录的完整路径。 - 基本用法:pwd - 例如,如果当前工作目录是/home/user,则pwd命令会输出/home/user

3. ls 命令

ls(list)命令用于查看目录中的文件和子目录。 - 基本用法:ls [选项] [目录] - 查看当前目录下的文件和子目录:ls - 查看指定目录下的文件和子目录:ls 目录名 - 查看包括隐藏文件(以.开始的文件)在内的所有文件:ls -a - 以详细列表格式显示文件和目录信息:ls -l - 以详细列表格式显示所有文件,包括隐藏文件:ls -lals -l -a - 例如,查看当前目录下的所有文件和子目录:ls - 例如,以详细列表格式查看/home目录下的所有文件:ls -l /home

注意事项

  • 在使用ls命令时,可以结合多个选项来定制输出,如ls -lha(其中h表示以人类可读的格式显示文件大小,如KB、MB)。
  • cd命令与路径相关的操作非常常用,特别是在脚本中或是进行文件管理时。
  • 了解和熟练使用这些命令,对于在Linux环境下有效地导航和管理文件系统至关重要。

​ 以上就是cdpwdls等命令的基本用法,通过这些命令可以方便地在Linux文件系统中导航、查看当前工作目录的位置以及查看目录内容。

1.3 在Linux系统下使用Gedit、Vim或Emacs等文本编辑工具编写代码

​ 在Linux系统中,有多种文本编辑器可以用于编写代码,包括图形界面的编辑器和命令行界面的编辑器。Gedit、Vim和Emacs是其中最常用的几种。下面分别介绍这三种编辑器的基本使用方法。

1. Gedit

Gedit是一个图形界面的文本编辑器,通常随GNOME桌面环境安装。它用户友好且易于上手,适合初学者使用。 - 打开文件:直接在系统的文件管理器中双击文件,或者在终端中输入gedit 文件名。 - 新建文件:打开Gedit后,通过文件菜单中的新建选项创建新文件。 - 保存文件:使用文件菜单中的保存或另存为选项。 - Gedit支持语法高亮显示,对于多种编程语言都有很好的支持。

2. Vim

Vim是一个高度可配置的文本编辑器,建立在Vi编辑器的基础上。它是命令行界面的编辑器,功能强大,有着广泛的用户群体。 - 打开或新建文件:在终端中输入vim 文件名。 - Vim有两种主要模式:普通模式和插入模式。 - 普通模式:用于执行命令,如保存、退出等。 - 插入模式:按i进入,用于输入文本。 - 保存文件并退出:在普通模式下,输入:wq。 - 强制退出(不保存更改):在普通模式下,输入:q!。 - Vim拥有丰富的快捷键和命令,学习曲线较陡,但一旦熟练,将大大提高编码效率。

3. Emacs

Emacs是另一种强大的文本编辑器,功能丰富,可高度自定义,它不仅是一个文本编辑器,还可以被看作是一个整合的开发环境。 - 打开或新建文件:在终端中输入emacs 文件名。 - Emacs基本上是通过组合键来控制的,例如: - 保存文件:Ctrl + x Ctrl + s - 退出Emacs:Ctrl + x Ctrl + c - 复制、粘贴、剪切等操作也都有对应的快捷键。 - Emacs的学习曲线也比较陡峭,但它的强大功能和高度的可定制性使它有着忠实的用户群体。

总结

  • Gedit适合初学者和那些喜欢图形界面的用户。
  • VimEmacs功能强大,但需要一定的学习和适应时间。它们适合希望提高编码效率和喜欢使用键盘快捷键的用户。
  • 选择哪个编辑器主要取决于个人偏好和工作需求。对于信息学奥赛编程,选择一个你觉得舒服且能提高效率的编辑器是很重要的。

1.4 熟悉g++、gcc等编译器以及优化、数学库等常见编译选项

​ 在Linux系统中,g++gcc是最常用的C++和C编译器。它们是GNU编译器集合(GCC)的一部分,能够提供强大的编程语言支持。熟悉这些编译器及其常见的编译选项对于高效开发和优化程序至关重要。以下是一些基本的编译命令和常用的编译选项介绍:

基本编译命令

  • g++用于编译C++程序,gcc用于编译C程序。
  • 示例:编译C++程序,g++ source.cpp -o executable,其中source.cpp是源文件,executable是编译后生成的可执行文件名。
  • 示例:编译C程序,gcc source.c -o executable

常见编译选项

  • -Wall:开启所有警告信息,有助于识别潜在的错误。
  • -O0-O1-O2-O3:优化选项。-O0表示不进行优化,-O2是默认的优化级别,-O3进行更多的优化,可能会增加编译时间。
  • -g:生成调试信息,使得可以使用调试器(如gdb)进行调试。
  • -std=c++14-std=c99:指定特定的语言标准,例如C++14或C99。
  • -static:静态链接所有库,使得生成的可执行文件更大,但便于在没有安装相应库的系统上运行。
  • -I:指定头文件搜索目录。例如,-Ipath/to/include
  • -L-l:指定库文件的搜索目录和链接的库。-Lpath/to/library用于添加库文件的搜索路径,-lname用于链接库文件,其中name是库名,省略前缀lib和后缀.so.a

数学库和其他库

  • 对于需要数学计算的程序,链接数学库是常见需求,使用-lm来链接数学库(math library)。
  • 对于使用了其他特定功能的库(例如pthread线程库),需要使用相应的-l选项来链接,如-lpthread

性能优化

  • 使用-O2-O3进行编译时,编译器会尝试优化代码以提高程序的运行速度。但要注意,过度优化有时候可能会导致编译时间大幅增加或者在某些情况下产生不预期的结果。
  • 使用-march=native可以让编译器产生针对当前CPU架构优化的代码,进一步提高程序的运行效率。

实例

Bash
1
g++ -Wall -O2 -std=c++14 program.cpp -o program -lm
​ 这个命令会以C++14标准编译program.cpp文件,开启常规优化(-O2),打开所有警告(-Wall),并链接数学库(-lm),最后生成名为program的可执行文件。

​ 熟悉这些编译选项可以帮助你更有效地编译和优化你的程序,尤其是在参与信息学奥赛等需要精细控制程序性能的场合。

1.5 在Linux系统终端中运行程序,并使用time命令查看程序用时

​ 在Linux系统的终端中运行程序是一个基本操作,而time命令可以用来测量程序的运行时间,包括实际经过的时间(wall clock time)、用户态花费的时间和内核态花费的时间。这对于优化程序性能和评估算法效率非常有帮助。下面将介绍如何运行程序和使用time命令。

运行程序

  1. 首先,确保你的程序已经编译成可执行文件。假设你的可执行文件名为program
  2. 在终端中,使用./来运行位于当前目录下的程序,例如:
    Text Only
    1
    ./program
    
  3. 如果程序位于其他目录,需要提供程序的相对路径或绝对路径,例如:
    Text Only
    1
    /path/to/your/program
    
    Text Only
    1
    ../anotherDirectory/program
    

使用time命令查看程序用时

  • time命令的基本语法为:
    Text Only
    1
    time [选项] 命令 [参数...]
    
  • 要测量上面提到的可执行文件program的运行时间,可以这样使用:
    Text Only
    1
    time ./program
    
  • 运行之后,time命令会输出程序的运行时间,通常包括三个部分:
  • real:程序从开始运行到结束的实际时间。
  • user:程序在用户模式下执行的CPU时间。
  • sys:程序在核心模式下执行的CPU时间。
  • 这些时间有助于了解程序执行的效率和系统资源的使用情况。

示例

​ 如果你有一个名为sort_algorithm的程序,它对一系列数字进行排序,并且你想测量其执行所需的时间,你可以在终端中执行如下命令:

Text Only
1
time ./sort_algorithm
假设输出结果如下:
Text Only
1
2
3
real    0m0.005s
user    0m0.002s
sys     0m0.003s
这意味着程序总共用时5毫秒,其中用户态用时2毫秒,内核态用时3毫秒。

​ 通过这种方式,你可以对比不同算法或程序优化前后的性能差异,进而分析哪些优化措施更有效。这对于信息学奥赛等场合,其中程序效率至关重要,尤其有帮助。

1.6 了解调试工具gdb及其break、display、continue、step等命令

gdb是GNU项目的调试器,广泛用于Unix-like系统上进行C、C++等语言编写的程序的调试。它提供了强大的功能,如设置断点、单步执行、查看变量值等,对于分析程序执行过程中的错误和行为非常有帮助。以下是一些基本的gdb命令及其用法:

启动gdb

要使用gdb调试程序,首先确保你的程序是以调试信息编译的(通常是使用-g选项进行编译)。然后,使用如下命令启动gdb

Text Only
1
gdb your_program
其中your_program是你的可执行文件。

break命令

break命令用于在程序的指定位置设置断点,程序执行到这里时会暂停,等待进一步的调试命令。 - 在函数开始处设置断点:break 函数名 - 在指定行号设置断点:break 文件名:行号

display命令

display命令用于设置在每次程序停下来时自动显示某个表达式的值。 - 显示变量的值:display 变量名

continue命令

continue命令用于从当前停止的地方继续程序的执行,直到遇到下一个断点或程序结束。 - 继续执行程序:continue

step命令

step命令用于单步执行程序,如果当前行调用了函数,则进入该函数内部。 - 单步执行:step

其他常用命令

  • next:单步执行程序,但不会进入函数内部。
  • print:打印变量的值或表达式的值。
  • quit:退出gdb
  • list:列出源代码。默认显示当前断点附近的源代码,也可以指定行号或函数名来查看代码。

使用示例

假设有一个名为example.cpp的程序,你想调试这个程序,以下是可能的gdb使用步骤: 1. 使用g++ -g example.cpp -o example命令编译程序,生成调试信息。 2. 运行gdb example启动gdb。 3. 在main函数开始处设置断点:break main。 4. 开始执行程序:run。 5. 程序在main函数的第一行停下来,可以使用next单步执行,或使用step进入函数内部。 6. 用print查看某个变量的值:print variableName。 7. 如果想继续执行到下一个断点,使用continue

通过熟悉和使用这些gdb命令,可以有效地帮助你调试程序,找到并解决程序中的错误。