1. Linux 系统终端中常用的文件与目录操作命令

这些命令是操作Linux的基础,必须像肌肉记忆一样熟练。

命令 全称/含义 常用示例 作用
ls List ls -l ls -a 列出目录内容 (-l 显示详情,-a 显示隐藏文件)
cd Change Directory cd /home cd .. cd ~ 切换目录 (.. 上一级,~ 家目录,- 上一个目录)
pwd Print Working Directory pwd 显示当前所在目录的绝对路径
mkdir Make Directory mkdir test mkdir -p a/b/c 创建新目录 (-p 递归创建多层目录)
rmdir Remove Directory rmdir empty_dir 删除空目录
rm Remove rm file.txt rm -r dir/ rm -f a.out 删除文件或目录 (-r 递归删除,-f 强制删除不提示)
cp Copy cp a.txt b.txt cp -r dir1/ dir2/ 复制文件或目录 (-r 递归复制目录)
mv Move mv a.txt b.txt mv file.txt dir/ 移动文件/目录 或 重命名
cat Concatenate cat file.txt 查看文件全部内容
more / less - more file.txt less file.txt 分页查看文件内容 (less 功能更强大,推荐)
head / tail - head -n 5 file.txt tail -f log.txt 查看文件头/尾几行 (-f 实时追踪文件更新,看日志神器)
chmod Change Mode chmod +x program chmod 755 program 修改文件权限 (+x 添加可执行权限,755常用)
find - find . -name "*.cpp" 查找文件
grep Global Regular Expression Print grep "hello" file.txt 在文件中搜索文本

考试重点
* 参数的含义:-r, -f, -p等。
* mv 命令的两种用法(移动和重命名)。
* rmrmdir 的区别。
* 使用 tab 键自动补全文件名和路径。


2. Linux 系统下常见文本编辑工具的使用

主要考察两款编辑器:Vimnano

Vim (非常重要!)

Vim是初赛的绝对重点,一定要掌握基本操作模式。

  1. 启动与退出

    • vim file.txt:打开或创建文件。
    • 进入后是普通模式
    • 保存并退出:按下 Esc (确保进入普通模式) -> 输入 :wq -> 回车。
    • 不保存退出Esc -> :q! -> 回车。
  2. 三种主要模式

    • 普通模式 (Normal Mode):刚进入的模式,可以移动光标、删除、复制、粘贴文本。
      • i:切换到插入模式(在光标前插入)。
      • a:切换到插入模式(在光标后插入)。
      • x:删除当前光标所在字符。
      • dd:删除当前行。
      • yy:复制当前行。
      • p:粘贴。
    • 插入模式 (Insert Mode):可以像普通编辑器一样输入文字。按 Esc 返回普通模式。
    • 命令行模式 (Command-Line Mode):在普通模式下按 : 进入,可以执行保存、退出、查找替换等操作。
      • :w 保存
      • :q 退出
      • :wq 保存并退出
      • :set nu 显示行号 (非常有用!)

考试技巧:题目常给出一系列按键操作,问你最终结果是什么。务必熟悉 i, a, dd, x, :wq 等核心操作。

nano

nano更简单,界面底部有常用快捷键提示。
* Ctrl + O:保存 (Write Out)
* Ctrl + X:退出 (Exit)
* Ctrl + K:剪切行
* Ctrl + U:粘贴


3. 常用编译命令 g++ 与相关编译选项

这是核心考点,你必须知道每个选项的作用。

基本命令

g++ source.cpp -o program

* source.cpp:你的C++源文件。
* -o program:指定输出的可执行文件名为 program。如果不加 -o,默认输出 a.out

重要编译选项

选项 全称/含义 作用 示例
-O2 Optimize Level 2 二级优化,大幅提高程序运行速度。比赛必用! g++ -O2 test.cpp -o test
-std=c++11 C++ Standard 指定使用的C++标准(如c++11, c++14, c++17)。必须根据题目要求使用! g++ -O2 -std=c++11 test.cpp
-Wall Wall 开启所有常用的警告信息,帮助发现代码中的潜在问题。 g++ -Wall test.cpp
-Wl,--stack=size Window linker (Windows下的Mingw特有) 设置栈空间大小,防止DFS等递归爆栈。 g++ -Wl,--stack=268435456 test.cpp
-g Generate 在可执行文件中加入调试信息,这是使用GDB调试的前提 g++ -g test.cpp -o test

经典组合

# 比赛标准编译命令:开启优化、指定标准、显示警告、添加调试信息
g++ -O2 -std=c++14 -Wall -g test.cpp -o test


4. 使用 time 命令查看程序用时

time 命令用于测量一个命令的执行时间。在比赛中,这是测试程序运行时间的最简单方法。

使用方法

time ./program < input.txt > output.txt

或者先编译生成 program,然后:
time ./program

输出解读
你会看到三个时间:

real    0m1.002s  # 真实时间(墙钟时间),从开始到结束的总时间
user    0m0.956s  # 用户CPU时间,程序在用户态执行的时间
sys     0m0.044s  # 系统CPU时间,程序在内核态执行的时间

在比赛中,我们最关心的是 real 时间,因为它反映了程序的实际运行时间。user + sys 可能会大于或小于 real(在多核处理器上,如果程序是多线程的,user时间可能大于real时间)。


5. 调试工具 GDB 的使用

GDB是强大的命令行调试器。使用它的第一步是必须用 -g 选项编译程序

g++ -g buggy.cpp -o buggy

启动GDB

gdb ./buggy

常用GDB命令(在 (gdb) 提示符下输入):

命令 简写 作用
run r 开始运行程序,直到断点或结束。
break b 设置断点b main (在main函数开头断点),b 10 (在第10行断点)
next n 单步执行不进入函数内部。
step s 单步执行进入函数内部。
continue c 继续运行,直到下一个断点或程序结束。
print p 打印变量的值p variable p array[0]@10 (打印数组前10个元素)
display disp 每次停下来时都自动打印指定变量的值。
backtrace bt 查看函数调用栈(当程序崩溃或断点时,看调用路径)。
quit q 退出GDB。

示例调试流程
1. g++ -g test.cpp -o test
2. gdb ./test
3. (gdb) b main (在main函数设置断点)
4. (gdb) r (运行,会停在main函数开头)
5. (gdb) n (一步步向下执行)
6. (gdb) p i (查看变量i的值)
7. (gdb) c (继续运行)
8. (gdb) q (退出)

考试重点
* 必须用 -g 编译。
* 记住 run, break, next, print 这几个最核心命令的作用。