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

1. **cd 进入文件夹**
2. **ls 列出当前目录有什么文件，可以添加参数**
3. **pwd 当前在哪个目录**
4. **mkdir 创建文件夹 -p 递归创建**
5. **cp 复制文件**
6. **mv 移动文件**
7. **rm 删除文件 -r 递归删除 -f 强行删除**
8. chmod 更改文件权限
9. chown 更改文件所有者

# Linux 系统下常见文本编辑工具的使用(vi/vim)
1. 键位图，了解即可
![1729571347750](image/1.基础知识与编程环境/1729571347750.png)
2. 常用操作方式
   1. 基本上 vi/vim 共分为三种模式，命令模式（Command Mode）、输入模式（Insert Mode）和命令行模式（Command-Line Mode）
   2. 用户刚刚启动 vi/vim，便进入了命令模式。此状态下敲击键盘动作会被 Vim 识别为命令，而非输入字符，比如我们此时按下 i，并不会输入一个字符，i 被当作了一个命令。
   3. 在命令模式下按下 i 就进入了输入模式，使用 Esc 键可以返回到普通模式
3. 命令行模式命令
   1. 'i' 切换到输入模式，在光标当前位置开始输入文本。
   2. ':wq' 保存并推出
   3. ':q' 退出
   4. ':w' 只保存
   5. '结尾!' 在前几个命令后面添加'!'有强制执行的意味，可以修改只读文件
4. 其它深度学习vi/vim可以找其他资料

# g++、gcc 等编译器与相关编译选项

1. **g++ [source file 1 .....] -o [output file] [-O1,-O2,-O3,-Ofast] [-I/path/to/include/dir] [-L/path/to/libdir] [-l libname] 基本编译**
2. **gcc 与g++没有本质不同，只是gcc没有链接c++标准库**
3. g++ -E [source file1...] -o [output file] 生成经过预处理器的文本文件
4. g++ -S [sourcefile1...] -o [output file] 生成经过汇编编码的汇编文件
5. g++ -c [source file1...] -o [output file] 生成没有链接的二进制文件

# 在Linux 系统终端中运行程序，使用time 命令查看程序用时

1. 在linux终端运行程序只需要输入程序的相对路径或者绝对路径，如果出现权限错误，请给可执行文件chmod +x /path/to/exe，给他可执行权限
2. 测试程序运行时间time /path/to/exe，
   ```
   time ls
   program  public_html  repo  rocscm

   real    0m0.002s
   user    0m0.002s
   sys 0m0.000s
   ```

   1. real 外部能观测到的总时间
   2. user 程序在用户态实际执行的时间（除了系统调用和内核线程切换）
   3. sys 系统态时间，程序在I/O交互或者硬件调用的时间

# 调试工具GDB 的使用

1. gdb /path/to/exe 调试可执行文件，注意编译时要使用-g编译添加调试符号性息，优化最高开到-O2
2. 进入gdb页面后使用b <行号，函数名>,添加断点
3. r 开始运行
4. c 继续运行
5. s 逐步运行
6. n 到下一步，不会进入下一级函数
7. quit 退出
