工程管理
git
git 命令
创建仓库
git init --bare //创建git仓库
git init
裸仓库 不存储具体代码
远端仓库
git clone
git clone 用户名@ip:/path/to
生成秘钥
ssh-keygen -t rsa -y
git 原理
引入暂存区
git add
发送到暂存区
git add world.c // 上传
git status
git restore -S world // 撤回
git commit
上传到仓库区
git commit world.c -m "日志" // 上传
git branch // git当前的分支
git log //
git config uesr.name black // 修改git用户名
git config uesr.email black // 修改git用户信息
git config --global user.name // 修改用户名
git reflog // 查看简化的版本信息
git reset head~1 //回退1个版本,回退到本地
git reset --hard:本地和暂存区和仓库一起回退
git reset --mixed:仓库回退,暂存区回退,本地不变 默认状态
git reset --soft:仓库回退,暂存区回退到上传之前的状态,
git 整理操作
git commint --amend // 修改上一次提交的修改,修改日志信息和代码
git rebase -i 7位 7位 // ^ 前一个版本 ~ 后一个版本 -s合并
git rebase --continue
git 冲突
远程仓库下载的代码和本地仓库中的代码发生冲突
本地冲突文件中 上面是本地 下面是冲突
git add world.c
git commit
git push
git checkout
从仓库下载到本地
git push
从仓库区上传到远端仓库
git push orgin master // 推送到远端orgin路径:master分支
git fetch / git clone
git fetch sourcetree使用
从远端仓库下载到本地仓库
git clone
git pull
从远端仓库直接下载到本地
git pull
分支管理
git branch develop // 创建分支
git checkout feature/charge // 转换分支
git checkout bug/timer // 切换分支
git merge bug/times // 合并分支
vim .gitignore // 不上传文件
Makefile Cmake
Makefile
- make 不带目标 默认第一个目标
- 依赖关系
make
make clean
伪对象
.PHONY: main clean
变量替代
(CC)=gcc
$(CC) -o simple main.c
自动变量
wildcard:通配符函数
patsubst:字符串替换
SRCS = $(wildcard *.c) // 所有.c文件
OBJS = $(patsubst %.c,%.o,$(SRCS))// 所有.c .o文件
cmake
单个工程实现
记得删除中间的过程文件
cmake . // 当前目录
cmake .. // 上一级目录
cmake_minimun_required (version 2.8) // 最低版本号要求
PROJECT(black) // 工程
SET(SRC_LIST main.c) // 手动加入文件
ADD_EXECUTABLE(black2 $(SRC_LIST)) // 添加可执行文件名
INSTALL
默认子目录:usr/local/
INSTALL(TARGETS black RUNTIME DESTINATION bin)
添加子目录
# 添加子目录
ADD_SUBDIRECTORY(src)
添加头文件路径
# 添加头文件路径
INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}/dir2")
添加静态库
# 默认是静态库
ADD_LIBRARY (dir1 SHARED ${DIR_SRCS})
# 动态库
ADD_LIBRARY(dir2 ${DIR_SRCS})
遍历添加子目录
#设置子目录
set(SUB_DIR_LIST "${CMAKE_CURRENT_SOURCE_DIR}/dir1" "${CMAKE_CURRENT_SOURCE_DIR}/dir2")
foreach(SUB_DIR ${SUB_DIR_LIST})
#遍历源文件
aux_source_directory(${SUB_DIR} SRC_LIST)
MESSAGE(STATUS "SUB_DIR-> " ${SUB_DIR})
MESSAGE(STATUS "SRC_LIST-> " ${SRC_LIST})
endforeach()
设置生成的so动态库最后输出的路径
#设置生成的so动态库最后输出的路径
SET(LIBRARY_OUTPUT_PATH ${RELEASE_DIR}/linux/${BuildType})
ADD_COMPILE_OPTIONS(-fPIC)
不区分大小写
静态库和动态库
# 优先连接动态库
#TARGET_LINK_LIBRARIES(darren Dir1)
# 强制使用静态库 完整的库文件名libDir1.a
TARGET_LINK_LIBRARIES(darren libDir1.a)
编译不同版本
# 编译Debug版本
cmake -DCMAKE_BUILD_TYPE=Debug ..
# 编译Release版本
cmake -DCMAKE_BUILD_TYPE=Release ..
Linux 基本命令
Linux基础命令
grep 搜索字符
find 查找文件
ls 显示文件
wc 命令
uptime机器启动时间+负载
ulimit用户资源
curl http
scp远程拷贝
dos2unix和unix2dos
sed
awk
CPU性能监控
平均负载
CPU上下文切换
如何排查CPU高利用率
内存性能监控
虚拟内存和物理内存
内存中的buffer和cache
内存优化监测
文件IO性能监控
缓存IO和直接IO
监控磁盘IO
网络IO性能监控
性能指标
网络信息
- 网络配置
- 套接字信息
- 协议栈统计信息
- 网络吞吐和PPS
- 连通性和延时
其他命令
- telnet:远程连接
- nc:验证端口是否开放
- mtr:连通性测试
- nslookup:检测域名解析
- traceroute:互联网中一代主机到另一台的路径
- sar:多功能监控工具
- netstat:网络接口状态
- iptraf:网络监控
- tcpdump:抓包工具
- nmap:扫描端口服务
- ethtool:查看网卡的配置情况
- lsof:列出打开文件
其他工具
- nmon:性能监控
- glances:系统监控
- w:谁登录并执行了哪些程序
- 日志监控工具:tail multitail