一、Linux目录结构
Bin:全称binary,含义是二进制。该目录中存储的都是一些二进制文件,文件都是可以被运行
的。
Dev:该目录中主要存放的是外接设备,例如盘、其他的光盘等。在其中的外接设备是不能直接被
使用的,需要挂载(类似window下的分配盘符)。
Etc:该目录主要存储一些配置文件。
Home:表示“家”,表示除了root用户以外其他用户的家目录,类似于windows下的User/用户目
录。
Proc:全称process,表示进程,该目录中存储的是Linux运行时候的进程。
Root:该目录是root用户自己的家目录。
Sbin:全称super binary,该目录也是存储一些可以被执行的二进制文件,但是必须得有super权
限的用户才能执行。
Tmp:表示“临时”的,当系统运行时候产生的临时文件会在这个目录存着。
Usr:存放的是用户自己安装的软件。类似于windows下的program files。
Var:存放的程序/系统的日志文件的目录。
Mnt:当外接设备需要挂载的时候,就需要挂载到mnt目录下。
二、Linux基本指令
1、pwd 打印当前终端所在目录
eg: pwd
2、ls
ls 列出当前目录下所有的文件/文件夹的名称
ls [路径名] 列出指定路径下的所有文件/文件夹名称
eg: ls ./ 列出当前目录下文件/文件名 ls ../ 列出上一级目录下文件/文件夹
【一个点表示上前目录,两个点表示上一级目录】
ls [选项] [路径] 以指定的格式列出指定路径下的所有文件/文件夹名
eg:ls -lah /home
选项解释:
-l:表示list,表示以详细列表的形式进行展示
-a:表示显示所有的文件/文件夹(包含了隐藏文件/文件夹)
-h:表示以可读性较高的形式显示
# ls -l 中 “-”表示改行对应的文档类型为文件,“d”表示文档类型为文件夹。
3、cd
cd 或 cd ~ 直接进入家目录
cd .. 返回上级目录
cd [路径名] 进入指定目录路径
4、mkdir 创建目录
mkdir myfolder 当前目录下创建myfolder目录
mkdir ~p a/b/c 创建a/b/c目录,一次性创建多层目录
mkdir [路径1] [路径2] [路径3] 一次性创建多个目录
5、 touch 创建文件
touch hello.cpp 在当前目录下创建hello.cpp文件
touch [路径] [文件名] 在路径目录下创建文件
6、 rm 删除文件/目录
rm myfile 删除当前路径下myfile文件
rm /hello/myfile 删除hello目录下的myfile文件
rm -rf myfolder 删除当前路径下的myfolder目录
7、cp 复制文件/文件夹
cp [被复制的文件路径] [文件被复制到的路径]
cp /home/hello/myfile ./ 将myfile文件复制到当前目录下
cp -r [被复制的文件夹路径] [文件夹被复制到的路径] -r 参数用于复制文件夹
cp -r /home/bing/myfolder / 复制/home/bing/myfolder文件夹到根目录/下
8、mv 移动文件到新位置或重命名文件
mv [需要移动的文件路径] [需要保存的位置路径]
mv myfile /myfile 移动当前目录下myfile文件到根目录/下
mv myfolder /myfolder 移动当前目录下myfolder文件夹到根目录/下
mv myfile myfile007 移动当前目录下myfile到根目录/下,并重命名为myfile007
9、man 查看命令的操作手册
man ls 查看ls命令的手册
man cd 查看cd命令的手册
man man 查看man命令的手册
三、g++编译C++代码
(1)编译过程
1. 预处理-Pre-Processing //生成.i文件
# -E 选项指示编译器仅对输入文件进行预处理
g++ -E test.cpp -o test.i //.i文件预处理作用:
#将所有的“#define”删除,并且展开所有的宏定义
#处理所有的条件编译指令,比如“#if”、“#ifdef”、“#elif”、“#else”、“#endif”
#处理“#include”预编译指令,将被包含的头文件插入到该编译指令的位置。(这个过程是递归进行的,因为被包含的文件可能还包含了其他文件)
#删除所有的注释“//”和“/* */”。
#添加行号和文件名标识,方便后边编译时编译器产生调试用的行号心意以及编译时产生编译错误或警告时能够显示行号。
#保留所有的#pragma编译指令,因为编译器需要使用它们。
2. 编译-Compiling //生成 .s文件
# -S 编译选项告诉 g++ 在为 C++ 代码产生了汇编语言文件后停止编译
# g++ 产生的汇编语言文件的缺省扩展名是 .s
g++ -S test.i -o test.s编译作用:
编译过程是整个程序构建的核心部分,编译成功,会将源代码由文本形式转换成机器语言,编译过程就是把预处理完的文件进行一系列词法分析、语法分析、语义分析以及优化后生成相应的汇编代码文件。
3. 汇编-Assembling // 生成.o文件
# -c 选项告诉 g++ 仅把源代码编译为机器语言的目标代码
# 缺省时 g++ 建立的目标代码文件有一个 .o 的扩展名。
g++ -c test.s -o test.o汇编作用:
将汇编代码转换成机器可以执行的指令,每一个汇编语句几乎都对应一条机器指令。
4. 链接-Linking //生成 bin文件
# -o 编译选项来为将产生的可执行文件用指定的文件名
g++ test.o -o test链接作用:
将各个模块之间相互引用的部分正确的衔接起来。它的工作就是把一些指令对其他符号地址的引用加以修正。链接过程主要包括了地址和空间分配、符号决议和重定向
(2)g++的一些重要编译参数
-g 编译带调试信息的可执行文件
-O[n] 优化源代码
- # -O 选项告诉 g++ 对源代码进行基本优化。这些优化在大多数情况下都会使程序执行的更快。 -O2
- 选项告诉 g++ 产生尽可能小和尽可能快的代码。 如-O2,-O3,-On(n 常为0–3)
- # -O 同时减小代码的长度和执行时间,其效果等价于-O1
- # -O0 表示不做优化
- # -O1 为默认优化
- # -O2 除了完成-O1的优化之外,还进行一些额外的调整工作,如指令调整等。
- # -O3 则包括循环展开和其他一些与处理特性相关的优化工作。
- # 选项将使编译的速度比使用 -O 时慢, 但通常产生的代码执行速度会更快
-l 和 -L 指定库文件 | 指定库文件路径
# 链接glog库
g++ -lglog test.cpp
-I指定头文件搜索目录
#当头文件不在编译文件的目录下时,需要指定搜索的头文件目录
-Wall 打印警告信息
# 打印出gcc提供的警告信息
g++ -Wall test.cpp-w 关闭警告信息
# 关闭所有警告信息
g++ -w test.cpp-o 指定输出文件名
# 指定输出可执行文件名为test
g++ test.cpp -o test-D 定义宏
#-DDEBUG 定义DEBUG宏,可能文件中有DEBUG宏部分的相关信息,用个DDEBUG来选择开启或关闭
-std=c++11 设置编译标准
# 使用 c++11 标准编译 test.cpp
g++ -std=c++11 test.cpp
参考文献