sudo用户设置:
修改etc下的sudoers配置文件,大概在91行左右 添加 用户名
yum:软件包管理工具
查看软件包:yum list
yum list | grep 软件 包名称
安装软件包:yum install 包名称
移除软件包:yum remove 包名称
vim:编辑器
vim中默认不能使用鼠标,为了完成能够插入,删除,复制,粘贴各个操作
分成了很多模式:12种模式,但是常用的有三种:
插入模式:插入数据
普通模式:完成命令操作(移动光标,复制,粘贴,删除,撤销,)
底行模式:保存文件,退出编辑
vim 文件名 默认进入普通模式 模式切换
普通模式->插入模式
"i"从光标所在处插入 "I"从行首开始插入
"a"从所在字符下一个位置处开始插入 "A"移动到行尾插入
"o"光标所在行之下新建一行 "O"光标所在行之上新建一行
普通模式->底行模式
":" "/" "!"
底行模式的操作:
:w :wq :q(ls -a 删掉这个隐藏的交换文件) :q!
/string ?string 是匹配字符串
普通模式下的操作:
光标移动:
hjkl 左上下右 WB 按单词移动 ctrl+f/b 翻页 gg/G 头尾移动
复制:
yy 复制光标所在行 3yy 从光标所在行开始复制3行
粘贴:
p 光标所在行下方粘贴 P光标所在行上方粘贴
删除:
dd 剪切光标所在行 ndd 包含光标所在行之下删除n行
x 删除光标所在字符 dw 删除单词 D 删除光标所在行,此行后边的数据
撤销:u
恢复撤销:ctrl+r
"ESC"切换到普通模式,如果不行,就按两下
gcc:编译器 它将高级语言编译成机器可以识别的语言
预处理:去掉注释,展开代码
编译:语法语义纠错,将C语言代码解释成汇编代码
汇编:将汇编代码解释成机器指令
链接:链接库文件中的代码
静态链接:链接静态库 将库中代码拷贝到程序中,程序比较大,但运行时不需要依赖静态库的存在
如果多个程序使用了相同的静态库,加载到内存中,出现多份冗余代码
(gcc 默认)动态链接:链接动态库 记录函数位置符号信息,程序比较小,但是运行时需要依赖动态库的存在
内存中共享同一份动态库代码
-o 指定生成的文件名称
-E 只进行预处理
-S 只进行编译
-C 只进行汇编
-static 使用静态链接
!gcc 最近的一次gcc
gdb:调试器
0.向程序中加入调试符号信息
gcc 默认生成release发布程序,可执行程序中没有加入调试符号信息
gcc -g 生成debug调试程序
1.加载程序
gdb ./main
2.开始调试
r 直接运行程序 start 开始逐步调试
3.常见操作:
list 查看代码 n 下一步 不跟踪进入函数,直接将函数运行完毕
list file:line s 下一步 跟踪进入函数
until 直接运行到指定行
until file:line
4.断点相关
b file:line 打断点 b function_name 给函数打断点
info b 查看断点信息
p 查看变量内容 continue 继续运行
print var
delete 3 删除3号断点,直接 delete 删除所有断点
watch 监控变量,变量改变了就停下来
watch var
5.查看调用栈信息
backtrace 查看函数调用栈信息,快速定位程序崩溃位置
bc
make/Makefile:项目自动化构建工具
Makefile:普通文本文件,但是不普通的是makefile中记录的是项目的构件流程规则
make:一个程序–makefile解释器:解释makfile中的项目构建规则;完成项目的构建
在当前目录下敲make命令,make程序在当前目录找makefile文件,逐行解释
makefile基本编写规则:
目标对象:依赖对象
tab 要执行的命令
make的解释规则:
make在makefile中寻找第一个目标对象:
目标对象不存在: 则报错退出
目标对象存在: 检查是否有依赖对象
没有依赖对象:检测外部是否有目标对象文件(文件是否已经生成过了)
目标对象未生成:执行要执行的命令(生成目标对象的命令)
目标对象已生成:报错,不需要重新生成
有依赖对象:检测外部是否有目标对象文件
目标对象未生成:执行要执行的命令(生成目标对象的命令)
目标对象已生成:检测目标对象文件与依赖对象的最后一次修改时间
通过最后一次修改时间判断目标对象文件是否是最新的(是否重新生成目标对象文件)
用于更新生成的文件!!!
makefile预定义变量:
$@: 目标对象
$^: 依赖对象
$<: 第一个依赖对象
//执行所有
SRC = $(wildcard ./*.c) 获取所有.c 文件
OBJ =
(
p
a
t
s
u
b
s
t
(patsubst %.c,%.o,
(patsubst(SRC))
main:$(OBJ)
伪对象:不管对象是否最新,是否存在,每次都需要为对象执行生成命令
声明伪对象: .PHONY:clean
makefile中变量赋值方式: 各有什么不同.
= := ?= +=
git:项目版本管理工具
基本操作:
git clone 网址
git add new_file
git commit -m “备注信息”
git push origin master(主分支)
进度条程序:
#include <stdio.h>
int main(){
char buf[10] = [0];
int i = 0;
while(i<10){
buf[i] = '-';
printf("%s\r",buf);// \
fflush(stdout);//刷新显示器缓冲区
i++;
sleep(1);
}
return 0;
}
缓冲区
printf("hello\n")---->buffer---->file "\n"刷新了缓冲区,将数据写入文件
"\r"回车作用,将输出起始位置移动到行首