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 命令的两种用法(移动和重命名)。
* rm 和 rmdir 的区别。
* 使用 tab 键自动补全文件名和路径。
2. Linux 系统下常见文本编辑工具的使用
主要考察两款编辑器:Vim 和 nano。
Vim (非常重要!)
Vim是初赛的绝对重点,一定要掌握基本操作模式。
-
启动与退出:
vim file.txt:打开或创建文件。- 进入后是普通模式。
- 保存并退出:按下
Esc(确保进入普通模式) -> 输入:wq-> 回车。 - 不保存退出:
Esc->:q!-> 回车。
-
三种主要模式:
- 普通模式 (Normal Mode):刚进入的模式,可以移动光标、删除、复制、粘贴文本。
i:切换到插入模式(在光标前插入)。a:切换到插入模式(在光标后插入)。x:删除当前光标所在字符。dd:删除当前行。yy:复制当前行。p:粘贴。
- 插入模式 (Insert Mode):可以像普通编辑器一样输入文字。按
Esc返回普通模式。 - 命令行模式 (Command-Line Mode):在普通模式下按
:进入,可以执行保存、退出、查找替换等操作。:w保存:q退出:wq保存并退出:set nu显示行号 (非常有用!)
- 普通模式 (Normal Mode):刚进入的模式,可以移动光标、删除、复制、粘贴文本。
考试技巧:题目常给出一系列按键操作,问你最终结果是什么。务必熟悉 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 这几个最核心命令的作用。