开发必备工具
为了提高开发效率,总结必备工具, 包括git, vim, tmux、Linux常用工具以及内存泄漏检测工具等等。待逐渐补充
1. git
git以及svn都是版本管理工具。现总结git如下
-
配置个人信息
git config --global user.email “"
git config --global user.name "” -
配置颜色
git config --global color.diff auto
git config --global color.status auto
git config --global color.branch auto -
查看相关
git log --author=<>
git log –p -1 看最近提交的改动内容
git show // 查看diff
git branch –a //查看所有分支
git branch //查看本地分支
git checkout 分支切换,切换到master分支
git pull origin master
git pull --rebase
git diff: 查看local和remote的区别
git diff origin master
git reset --hard -
提交代码
git status 查看本地库修改
git checkout – 取消对文件的修改。还原到最近的版本,废弃本地做的修改。
git add *.h *.cpp
git commit -a
或者git commit -m “commit code”
git add -u
git add -A -
撤销代码
git reset --soft HEAD^
撤销git add并保留本地修改
文件退出暂存区,但是修改保留:
git reset --mixed
撤销所有的已经 add 的文件:
git reset HEAD .
撤销某个文件或文件夹:
git reset HEAD -filename
- 代码管理
git cherry-pick 可以选择某一个分支中的一个或几个commit(s)来进行操作
git merge 合并代码
假设:你需要将master分支代码合并到临时分支master-dev-temp
git checkout master;
git pull;
git checkout master-dev-temp;
git merge master;
git stash save:
备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。
git stash pop: 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。
git rebase -i 聚合代码,去掉和自己提交无关的代码
git clone ** -b <branch_name> --depth=1 //指定分支和depth clone代码
-
patch代码
git format-patch -N -2 //基于本地最新的两个提交,生成patch
git am patch手动解决冲突
(1) patch代码可能提示:“patch does not apply”,说明patch不能合入,在解决问题后,“git am --continue”继续,也可以“git am --skip”忽略,或者“git am --abort”停止合入
(2) .git apply --reject **.patch
git status会看到.rej结尾的文件,此文件即表示希望合入的代码,需要解决冲突
(3) vim -O打开rejct文件和原文件,修改后,git add修改该文件
(4) git am --resolved解决冲突后合入 -
分支管理
从mater分支拉出来一个名为A的分支:
> git checkout master
> git pull origin master
> git checkout -b A
将A分支的代码合并到master分支:
> git checkout master
> git pull origin master
> git merge A
> git status // 查看是否存在冲突
> git add <conflicted_file>
> git commit -m "Resolve conflicts"
> git push origin master
3. Linux
3.1 命令
-
Linux下*.tar.gz文件压缩/解压缩命令
压缩命令:
命令格式:tar -zcvf 压缩文件名.tar.gz 被压缩文件名
可先切换到当前目录下。压缩文件名和被压缩文件名都可加入路径。
解压缩命令:
命令格式:tar -zxvf 压缩文件名.tar.gz
解压缩后的文件只能放在当前的目录。
tar -xvf 压缩文件名.tar.xz
-c :create 建立压缩档案的参数;
-z : 是否需要用gzip压缩;
-x : 解压缩压缩档案的参数;
-v: 压缩的过程中显示档案;
-f: 置顶文档名,在f后面立即接文件名,不能再加参数 -
scp 远程传输命令
scp ./test (username)@211.0.0.4:/tmp/ 传输本地test文件到远程服务器/tmp目录下
scp (username)@211.0.0.4:/tmp/test ./ 下载远程服务器文件到本地目录(或指定目的地) -
环境相关
中文显示问题:可以使用locale命令,查看当前系统默认采用的字符集
locale
export LANG=“zh_CN.UTF-8”
Linux基础:中文显示乱码
Linux工具大全 -
一些命令
删除前2天的文件:find ./ -mtime +2 -print|xargs rm -vf
[当文件过多或者需要指定清理某时间点文件采用上述命令] -
批量替换文件中字符串~sed命令
sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl 路径`
// 比如,在当前目录下,替换abort->commit
sed -i "s/abort/commit/g" `grep abort -rl ./`
// 查找给定的字符串,并删除这些字符串所在的行
sed -ie '/指定字符串/d' 文件名.log
- diff-查看两个文件夹所有不同
diff -Nrq a b
-r 递归
-q 只输出不同的文件
- Linux文件系统,磁盘占用量和实际不一致
sudo lsof -n | grep deleted
上述命令可以打印出所有针对已删除文件的读写操作,这类操作是无效的,找到对应的进程ID, kill掉即可
- 删除命令
当待删除的文件过多,可能出现Argument list too long的报错,可以通过如下命令进行删除:
// 删除当前目录,文件名前缀匹配store的所有文件
sudo find ./ -name "store*" -print0 | sudo xargs -0 rm
// 通过ls命令
ls | xargs rm -r
-
为什么 Linux buffer/cache 内存占用很高?参考如下文章
为什么 Linux buffer/cache 内存占用很高? -
查看进程工作目录
/proc/123/cwd 其中123是进程PID
3.2 调试相关
1. core dump
/proc/sys/kernel/core_pattern可以控制core文件保存位置和文件名格式。
sudo echo “/corefile/core-%e-%p-%t” > /proc/sys/kernel/core_pattern,可以将core文件统一生成到/corefile目录下,产生的文件名为core-命令名-pid-时间戳
2. ulimit
ulimit -a 可以查看系统相关配置,特别ulimit -s 10240可以设置堆栈大小为10M,如果不设置经常会有问题,比如进程启动不了,或者发生莫名其妙的core。(/etc/security/limits.conf)
3. gdb
gdb相关: set print pretty
查看汇编:disass
查看寄存器:info reg
3.3 系统相关
mkdir -p /data/1
mkfs.ext4 /dev/sdb 将sdb盘格式化为ext4格式
sudo mount /dev/sdb /data/1 将sdb盘挂载在/data/1
sysctl -a|grep core 查看core位置
查看流量
sar -n DEV 1 -m
查看网卡:千兆或者万兆
sudo ethtool eth0
w查看负载
lscpu 查看CPU核数
查看进程的父进程 cat /proc/pid/status | grep PPID
运维
top -d 1 按1
查看网络流量 sar
查看load w
sar -n DEV 1 -m
tsar命令
查看sdd盘的IO情况
tsar --io -I sdd -i 1 | less
查看网卡千兆和万兆
lspci |grep -i eth
sudo ethtool eth2 Speed: 10000Mb/s 表示万兆网卡
sudo ethtool eth3
cat /etc/sysconfig/network-scripts/ifcfg-eth0|grep bond0
MASTER=bond0
查看IO:
iostat 1 -xm
查看性能:
sudo perf top -p [pid]
rpm包安装:sudo rpm -ivh XX.ipm
nm: 查看二进制是否有符合表, nm 可执行文件(没有符号表,gdb无法查看详细信息)
dmesg时间转换工具