Git使用 简述
Git 只关心文件数据的整体是否发生变化 ,而大多数其他系统则只关心文件内容的具体差异。
保存到 Git 之前,所有数据都要进行内容的校验和(checksum)计算,并将结果作为数据唯一标识和索引 。
Git 使用 SHA-1 算法计算数据的校验和,通过对文件的内容或目录的结构计算出一个 SHA-1 哈希值,作为指纹字符串。该字串由 40 个十六进制字符(0-9 及 a-f)组成。所有保存在 Git 数据库中的内容都用此哈希值作索引 ,而不是靠文件名。
任何一个文件,在 Git 内都只有三种状态:已提交(committed),已修改(modified)和已暂存(staged)。已提交表示该文件已经被安全地保存在本地数据库;已修改表示修改了某个文件,但还没有提交保存;已暂存表示把已修改的文件放在下次提交时要保存的清单中。
Git 基本流程:
在工作目录中修改某些文件。
对修改后的文件进行快照,然后保存到暂存区域。
提交更新,将保存在暂存区域的文件快照永久转储到 Git 目录。
基本操作
查看配置信息
获取帮助
$ git help <verb> $ git <verb> --help $ man git-<verb>
对现有的某个项目开始用 Git 管理,只需到此项目所在的目录初始化:
如果当前目录下有几个文件想要纳入版本控制,先用git add命令告诉Git开始对这些文件进行跟踪,然后提交
$ git add *.c $ git add README $ git commit -m 'initial project version'
克隆仓库
$ git clone [url] $ git clone git://github.com/schacon/grit.git
检查当前文件状态:(工作目录的所有文件都不外乎两种状态:已跟踪或未跟踪。)
$ git status On branch master nothing to commit, working directory clean
git add
:根据目标文件的状态不同,此命令的效果也不同。可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等。
忽略某些文件
有些文件无需纳入 Git 管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。可以创建一个名为 .gitignore 的文件,列出要忽略的文件模式。
文件 .gitignore 的格式规范如下:
*.a !lib.a /TODO build/ doc/*.txt doc/**/*.txt
查看尚未暂存的文件更新了哪些部分,不加参数直接输入
查看已经暂存起来的文件和上次提交时的快照之间的差异
提交更新(先git status
看是否都暂存了)
$ git commit -m "Story 182: Fix benchmarks for speed"
在提交的时候,给 git commit
加上 -a
选项,Git
就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add
步骤.
移除文件
要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交。可以用 git rm
命令完成此项工作,并连带从工作目录中删除指定的文件,这样以后就不会出现在未跟踪文件清单中了。最后提交的时候,该文件就不再纳入版本管理了。如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f
另外一种情况是,我们想把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中。换句话说,仅是从跟踪清单中删除。比如一些大型日志文件或者一堆 .a 编译文件,不小心纳入仓库后,要移除跟踪但不删除文件,以便稍后在 .gitignore
文件中补上,用 --cached
选项即可:
$ git rm --cached readme.txt
后面可以列出文件或者目录的名字,也可以使用 glob 模式。比方说:
注意到星号 * 之前的反斜杠 \,因为 Git 有它自己的文件模式扩展匹配方式,所以我们不用 shell 来帮忙展开(译注:实际上不加反斜杠也可以运行,只不过按照 shell 扩展的话,仅仅删除指定目录下的文件而不会递归匹配。上面的例子本来就指定了目录,所以效果等同,但下面的例子就会用递归方式匹配,所以必须加反斜杠。)。此命令删除所有 log/ 目录下扩展名为 .log 的文件。类似的比如:
会递归删除当前目录及其子目录中所有 ~ 结尾的文件。
移动文件 $ git mv file_from file_to
其实,运行 git mv 就相当于运行了下面三条命令:
$ mv README.txt README $ git rm README.txt $ git add README
常用命令总结 $ git config 查看 git config 的相关命令 $ git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" $ gitk 图形化查看分支演变 $ git config merge.tool vimdiff 使用 git mergetool $ git config --global user.name "Your Name" 配置所有Git仓库的用户名和email, 去掉--global 则只针对当前Git仓库 $ git config --global user.email "email@example.com" $ git config --global user.name 查看全局配置的用户名和email $ git config --global user.email $ git init 把当前目录初始化为git仓库, 不想管理跟踪的文件, 可以在仓库根目录添加.gitignore文件, 在里面写对应规则 $ git clone <repo> 自动把本地master分支和远程master分支对应, 远程仓库默认名称origin $ git status $ git add <file> $ git commit -m "description" $ git remote add origin git@github.com:serenity/test.git 关联远程仓库 (先有本地仓库) $ git remote 查看远程库信息 $ git remote -v 查看远程库详细信息 $ git remote rm origin 删除已关联的远程库 origin $ git push -u origin <branch> 推送本地branch分支到远程, -u绑定本地分支与远程分支,首次推送时加,后续简写为git push/pull $ git push origin dev 推送本地dev分支到远程库 $ git branch --set-upstream-to=origin/dev dev git pull提示no tracking information,说明本地dev分支和远程dev分支的链接关系没有创建 $ git reflog reference logs(引用日志),恢复本地错误操作 $ git reset --hard HEAD@{1} 回退到指定提交 $ git reset --hard <commit_id> 所有引起HEAD指针变动的操作,都会被记录在git reflog命令中。如以下操作: * git checkout branchName:切换分支 。 * git commit:提交。 * git reset commit:重置。 * git checkout commit:签出某一个提交。 * git merge:合并操作。 * git rebase:变基。 * git pull:相当于 fetch + merge 。 merge 结果能够体现出时间线, rebase 会打乱时间线。 * git pull : Fast-forward:没有冲突,快速前进。合并分支时不会创建新的commit,所以看不出来曾经做过合并。 * git pull --rebase:相当于fetch + rebase。 * git clone :初始化ref 。 $ git merge dev 合并 dev 分支到当前分支 (当有冲突的时候, 需要先解决冲突) $ git merge --no-ff -m "merge with no-ff" dev 合并 dev 分支到当前分支(--no-ff 以普通模式合并,强行关闭 Fast forward 合并策略,创建一个新的 commit) $ git merge --abort 撤销本次merge 丢弃工作区 (Working Directory) 的修改 $ git restore <file> 建议使用 $ git checkout -- <file> 丢弃暂存区 (stage/index) 的修改 $ git restore --staged <file> 第一步: 把暂存区的修改撤销掉(unstage), 重新放回工作区 $ git restore <file> 第二步: 撤销工作区的修改 一个本地库关联多个远程库, 如同时关联 GitHub 和 Gitee $ git remote add github git@github.com:serenity/test.git $ git remote add gitee git@gitee.com:serenity/test.git $ git branch 查看分支列表及当前分支 $ git branch -v 查看各个分支最后一个提交信息 $ git branch -r 查看远程分支 $ git branch -a 查看所有本地和远程分支 $ git branch dev 创建 dev 分支,本地新建的分支如果不推送到远程,对其他人就是不可见的 $ git branch -d dev 删除 dev 分支 $ git branch -D dev 强制删除 dev 分支 $ git branch --set-upstream-to=origin/dev dev 指定本地 dev 分支与远程 origin/dev 分支的链接 $ git switch dev / git checkout dev 切换到dev分支 $ git switch -c dev / git checkout -b dev 创建并切换到新的dev分支 $ git switch -c dev origin/dev / git checkout -b dev origin/dev创建并切换到新的dev分支,同时关联本地dev分支和远程dev分支 $ git diff commitID1 commitID2 commit 比较 $ git diff / git diff -- <文件名> 工作区和暂存区比较 $ git diff remotes/origin/master 工作区与远程分支比较 $ git diff --cached ⽐较暂存区和上⼀次commit后的修改 $ git reset HEAD 暂存区恢复成 HEAD $ git checkout -- <文件名> 工作区恢复成暂存区文件 $ git push origin --delete <分支名> 删除远程分支 $ git rm -r -n --cached .vscode 展示此命令要删除的文件列表预览 $ git rm -r --cached .vscode 删除远程仓库和git仓库(暂存区和版本库)的文件(夹),本地目录下的文件(夹)不受影响 $ git log --graph 查看分支合并图 $ git log --graph --pretty=oneline --abbrev-commit $ git log dev ^master 查看 dev 有,而 master 中没有的 $ git log master..dev 查看 dev 中比 master 中多提交了哪些内容 $ git stash 保存当前工作区和暂存区的修改状态(将目前还不想提交但已修改的内容保存至堆栈,后续可以在某个分支上恢复出堆栈中的内容 $ git stash list 查看保存现场的列表 $ git stash pop 恢复的同时把 stash 内容也删除 $ git stash apply 恢复现场, stash 内容并不删除 $ git stash drop 删除 stash 内容 $ git stash apply stash@{0} 多次 stash, 恢复的时候, 先用git stash list查看, 然后恢复指定的 stash $ git cherry-pick <commit> 复制一个特定的提交到当前分支(当前分支的内容需要先 commit, 然后冲突的文件需要解决冲突, 然后 commit) $ git rebase 把本地未push的分叉提交历史整理成直线(使得我们在查看历史提交的变化时更容易, 因为分叉的提交需要三方对比) 切换到对应的分支 branch 上, 查看或者操作对应的标签 tag $ git tag 查看所有的标签 $ git tag <tagname> 打标签,默认标签是打在最新提交的commit上(绑定),如: git tag v1.0 $ git tag <tagname> <commit_id> 给对应的 commit_id 打标签 $ git tag -a <tagname> -m "标签说明信息" <commit_id> 创建带有说明的标签,用-a指定标签名,-m指定说明文字 $ git tag -d <tagname> 删除一个本地标签 $ git push origin :refs/tags/<tagname> 删除一个远程标签 $ git show <tagname> 查看标签信息 $ git push origin <tagname> 推送一个本地标签到远程 $ git push origin --tags 一次性推送全部尚未推送到远程的本地标签 删除远程标签, 需要先删除本地标签, 然后在删除远程标签, 如:删除标签 v0.9 $ git tag -d v0.9 $ git push origin :refs/tags/v0.9 git config core.ignorecase false 配置本地仓库文件大小写敏感
Tmux:terminal multiplexer 会话, 窗口, 窗格 根据Tmux的定义,在开启Tmux服务器后,会创建一个会话,该会话会创建一个窗口,其中仅包含一个窗格。Tmux使用C/S模型构建,主要包括以下模块:
server 服务器:输入 tmux 命令时就开启了一个服务器,服务器由于管理多个会话。
session 会话:一个服务器可以包含多个会话,可以理解成是一个特定的终端组合,通常将同一任务下的工作放到一个会话中。
window 窗口:一个会话可以包含多个窗口,一个窗口就相当于普通终端的一个标签,通常在不同的窗口中完成不同的工作。
pane 窗格:一个窗口可以被分割成多个小的窗格。
基本使用 使用Tmux快捷键需加上命令前缀Ctrl+b。
Ctrl+b+d 暂时离开当前会话
常用命令
信息查询:
tmux list-keys
tmux list-commands
tmux info
会话控制:
tmux new -s session_name
tmux attach -t session_name
tmux switch -t session_name
tmux rename -t old-name new-name
tmux list-sessions / tmux ls
tmux detach
tmux kill-server 关闭所有 session
窗口控制:
tmux new-window
tmux list-windows
tmux select-window -t :0-9
tmux rename-window
窗格控制:
tmux split-window 水平划分
tmux split-window -h 垂直划分
tmux swap-pane -[UDLR] 在指定方向交换 pane
tmux select-pane -[UDLR] 在指定方向选择下一个 pane
其他操作:
tmux clear-history 清空输出缓冲区
常用快捷键 基本操作
命令
说明
?
列出所有快捷键;按 q 返回
d
脱离当前会话,可暂时返回 Shell 界面
s
选择并切换会话;在同时开启了多个会话时使用
L
切换回上一次的会话
D
选择要脱离的会话;在同时开启了多个会话时使用
:
进入命令行模式;此时可输入支持的命令,例如 kill-server 关闭所有tmux会话
[
复制模式,光标移动到复制内容位置,空格键开始,方向键选择复制,回车确认,q/Esc 退出
]
进入粘贴模式,粘贴之前复制的内容,按 q/Esc 退出
~
列出提示信息缓存;其中包含了之前 tmux 返回的各种提示信息
t
显示当前的时间
窗口操作
命令
说明
c
创建新窗口
&
关闭当前窗口
[0-9]
数字键切换到指定窗口
p
切换至上一窗口
n
切换至下一窗口
l
前后窗口间互相切换
w
通过窗口列表切换窗口
,
重命名当前窗口,便于识别
.
修改当前窗口编号,相当于重新排序
f
在所有窗口中查找关键词,便于窗口多了切换
窗格操作
命令
说明
“
将当前面板上下分屏
%
将当前面板左右分屏
x
关闭当前分屏
!
将当前面板置于新窗口,即新建一个窗口,其中仅包含当前面板
q
显示面板编号
o
选择当前窗口中下一个面板
{
向前置换当前面板
}
向后置换当前面板
z
最大化当前所在面板
方向键
移动光标选择对应面板
page up
向上滚动屏幕,q 退出
page down
向下滚动屏幕,q 退出
alt+o
逆时针旋转当前窗口的面板
ctrl+o
顺时针旋转当前窗口的面板
ctrl+方向键
以 1 个单元格为单位移动边缘以调整当前面板大小
alt+方向键
以 5 个单元格为单位移动边缘以调整当前面板大小
复制模式(copy-mode) Tmux的使用类似于vim,在窗口中要自由的复制文本,可以进入复制模式,使用 prefix + [ 进入复制模式:
按 space 开始复制,移动光标选择复制区域
按 Enter 复制并退出 copy-mode。
将光标移动到指定位置,按 prefix + ] 粘贴
如果启用鼠标,可以用鼠标选中要复制的文本,prefix + ] 粘贴。还可以按住 shift 键,然后再用鼠标选中要复制的文本,此时是系统正常的复制,需要鼠标右键选择复制才能复制文本。在 Mac OSX 上,该快捷功能键是 option.
其他技巧 同步窗格 在一个窗口下的多个窗格中同时同步执行一个命令操作。需开启 synchronize-panes 配置。进入命令模式 Ctrl-B: 然后输入以下指令开启或关闭窗口同步:
:setw synchronize-panes on # 开启窗口同步 :setw synchronize-panes off # 关闭窗口同步
配置 /etc/tmux.conf 全局配置,~/.tmux.conf 用户配置。例如Tmux也可以像vim一样使用底行命令模式,我们重新配置其快捷键跟vim一样使用 :,在配置文件中添加如下内容:
# bind : to command-prompt like vim \# this is the default in tmux already bind : command-prompt
在命令行模式输入tmux 命令执行相关动作。
vim–write once, use anywhere
:h option-list 普通模式是Vim的自然放松状态。从进入插入模式到返回普通模式为止,在此期间输入或删除的任何内容都被当成一次修改。在撤销时如果想拥有更细的粒度,则尽量减少插入模式停留时间。 <CR> <Esc>o i I/a A($a )/o(A<CR>) O(ko) x/2x/dw/daw/dap/diw/d2w/2dw/dw./db/dd/2dd/d0/d$/dt) . 重复上次修改 >G 从当前行到末尾行统一增加缩进 r R/s S(^c$)/c C(c$) caw ciw c2” cc(S) / n/N */ y/yiw/yt,/yy/p v/viw/V/ctrl+v(块状选择) y/p/d/u ctrl+h/w/u 编辑模式下删除前一个字符/单词 /当前行 w/W 移到下一个word/WORD开头 e/E 移到下一个word/WORD尾 b/B 移到上一个word/WORD开头 cw/cW A word ends at a non-word character, such as a “.”, “-” or “)”. A WORD ends strictly with a white-space. This may not be a word in normal sense. 行间搜索移动 f/F{char} t{char} ;/, 前进/回退 0/$/^ 行首/行尾/第一个非空白字符 gg/G/ctrl+o 文件首/尾/快速返回上一次停留位置 H/M/L 屏幕开头/中间/结尾 ctrl+u/f 不同模式下上下翻页 zz 将本行置为屏幕中央 .,$/% s/\<pattern\>/target/g c n /pattern <CR> cw target <Esc> n . 使用ctrl+c/[ 代替esc Ctrl+r 撤消以前的撤消命令,恢复以前的操作结果。 gi 快速跳转到最后一次编辑的地方并进入插入模式 :vs/sp filename :e filename :ls :b n :bpre :bnext :bfirst :blast :b buffer_name <ctrl+w> w/h/j/k/l/H/L :tabnew filename gt/gT :reg name [a-z] 复制专用寄存器 ”+ p 粘贴系统剪贴板内容 :e! 重新加载内容,不保存修改 vim宏 q{reg} 录制 q 停止 @{reg} 回放 全选 + :normal I” 批量操作 ctrl+n/p 补全单词 ctrl+ x ctrl +f 补全文件名 :ctrl+p 切换上一个命令 vim a.c b.c -O :w !sudo tee % > /dev/null num<Ctrl-a/x > 对数字执行增/减,若光标不在数字上,则正向查找并跳转 g~/gu/gU 反转大小写/转为小写/转为大写 >/< 增加缩进/减小缩进 插入-普通模式是普通模式的一个特例。在此模式中,可以执行一个普通模式命令,执行完后又返回到插入模式。要从插入模式切换到插入-普通模式,可以按 < C-o > :h ex-cmd-index :'<,' >normal . 对高亮选区中的每一行执行普通模式下的 . 命令 :%normal A; 终端快捷键 ctrl+h/w/u 删除前一个字符/单词 /当前行 ctrl+a/e 快速移动到开头/结尾 ctrl+f/b 前移/后移
macOS brew search / info <packageName> brew -v/-h/list/update/outdated/upgrade/cleanup -n/cleanup [包名] w 查看谁正在登录当前mac shutdown -r now 重启 zmodload 对可加载zsh模块执行特定操作 which -a cmd tree | more echo $SHELL cat /etc/shells chsh -s /bin/zsh 切换shell sudo -i 判断root权限 open /bin 打开目录 open -a vscode file 使用某应用打开文件 open -e setting.json 文本编辑器打开文件(-t使用默认编辑器) md5 /usr/bin/clang* du -sh /usr/bin/clang* sudo killall coreaudiod 重启声音控制器 smartctl -a disk0 ioreg -rn AppleSmartBattery | grep -i capacity cmd + opt + shift + v 将剪贴板的内容粘贴为「纯文本格式」 cmd + opt + v 剪切/移动文件 cmd + opt + esc 强制退出应用 cmd + opt + d 快速显示或隐藏程序坞 ctrl + cmd + 空格 快速插入 Emoji 表情 shift + cmd + 3 保存当前窗口图片(到桌面) ctrl + shift + cmd +3 复制当前窗口图片 shift + cmd + 4 保存选中区域图片(到桌面) shift + cmd + 5 录制屏幕 ctrl + shift + cmd + 4 复制选中区域图片 cmd + shift + z 重做 App权限被写入名为TCC.db的数据库的access表中,这个数据库有两个: ~/Library/Application\ Support/com.apple.TCC/TCC.db:存储用户相关的权限,可以直接用root权限修改。一般不会出问题,也不需要手动添加 /Library/Application\ Support/com.apple.TCC/TCC.db:存储系统权限,需要关闭系统完整性保护(SIP)才能修改。绝大多数手动添加的情况都需要修改这个文件 禁用SIP(第二次操作时环境有问题需要 csrutil clear): 1、关机 2、长按电源键,直到显示进入恢复模式 3、选择实用工具-终端 4、执行命令 csrutil disable/enable 5、重新启动 sudo mount -uw / sudo /usr/bin/sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db "INSERT or REPLACE INTO access VALUES('kTCCServiceCamera','com.tencent.meeting',0,2,4,1,NULL,NULL,NULL,'UNUSED',NULL,0,1637381304);" kTCCServiceMicrophone/kTCCServiceScreenCapture sudo sqlite3 /Users/xiaoyu/Library/Application\ Support/com.apple.TCC/TCC.db .help 可以展示sqlite3的一些命令指令 .databases 展示数据库 .table 当前数据库的表 .schema access 查看建表语句 CREATE TABLE IF NOT EXISTS "access" ( service TEXT NOT NULL, client TEXT NOT NULL, client_type INTEGER NOT NULL, auth_value INTEGER NOT NULL, auth_reason INTEGER NOT NULL, auth_version INTEGER NOT NULL, csreq BLOB, policy_id INTEGER, indirect_object_identifier_type INTEGER, indirect_object_identifier TEXT NOT NULL DEFAULT 'UNUSED', indirect_object_code_identity BLOB, flags INTEGER, last_modified INTEGER NOT NULL DEFAULT CAST(strftime('%s', 'now') AS INTEGER), PRIMARY KEY (service, client, client_type, indirect_object_identifier), FOREIGN KEY (policy_id) REFERENCES policies (id) ON DELETE CASCADE ON UPDATE CASCADE ); homebrew 自家酿酒 (下载 source code 回来做 local compile) brew 命令根据配方 formula,酿造出一桶(keg)酒,即 keg 指整个编译完成的套件资料夹,预设目录在 /usr/local/Cellar/,地窖。 「keg-only」表示这个套件只会存放在桶子里,不会跑出桶子外,即 brew 不会帮你做 symlink 到 /usr/local,避免原生系统内还有一套 llvm 而打架,所以提示消息说 llvm 套件是 keg-only。 echo 'export PATH="/opt/homebrew/opt/llvm/bin:$PATH"' >> ~/.zshrc echo 'export LDFLAGS="-L/opt/homebrew/opt/llvm/lib"' >> ~/.zshrc echo 'export CPPFLAGS="-I/opt/homebrew/opt/llvm/include"' >> ~/.zshrc Makefile关系到整个工程的编译规则。 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。 CMake是一个跨平台的编译工具,并不直接构建出最终软件。通过与开发平台无关的脚本 CMakeLists.txt 来定制整个编译流程,输出各种各样的Makefile或者project文件。
Shell cd - 在两个目录间来回切换 command > file 覆盖重定向 command >> file 追加重定向 command < file 输入重定向 cat << EOF > file 内联输入重定向 cd /opt ; ls 使用分号;连接多个命令 find . -name "*.c" | xargs wc -l $ > rumenz.txt 快速清空一个文件 lsof -p $$ 查看当前进程打开的文件 curl -i www.baidu.com | head -n 1 检查网站是否可用 wget -m -p -E -k -K -np -v http://www.baidu.com netstat -a/-r 显示详细网络状况/系统路由表 mtr [www.baidu.com](http://www.baidu.com) 检测到达xx网站所有节点的通信质量 shell脚本开头最好写出作者Author,时间Create time,版本号Release,描述Script Description ~ 家目录(虚拟目录) ! 执行上一次命令 $ 取内容符号 \+ - * / % 加减乘除取余 & 后台执行 \* 通配符,匹配所有 ? 匹配一个字符 ; 在一行中多条命令用分号隔开 | 上一条命令的输出是下一条命令的输入 \ 转义字符,\* 看成乘法 ` 反引号,在命令中执行命令 '' 表示字符串,但是不解释变量 "" 表示字符串,解释变量 man -k 关键字 使用关键字搜索手册页 man 1 intro 指定内容区域搜索手册页 killall http* 通过进程名结束进程, 支持通配符 !! 唤回并重用历史列表中最近的命令 ! + [编号] 唤回并重用历史列表中任意一条命令 set 显示一份完整的当前环境变量列表 $? 保存上个已执行命令的退出状态码,查看命令执行成功与否,0表示正常终止 $$ 当前进程 用tcpdump嗅探80端口的访问看看谁最高 tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F "." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr | head -20 Vscode cmd-shift-p,toggle vim mode 关闭vim模式 c++开发配置 tasks用于在launch前执行编译任务,launch则是用来读取可执行文件。 GitHub github1s.com 在线vscode:仓库详情界面按下“。”键 在线运行项目:项目地址前加上“[gitpod.io/#/”前缀](http://gitpod.io/#/”前缀) Wireshark https抓包-macOS 在终端执行命令,打开新的 Chrome 浏览器 /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --user-data-dir=/tmp/chrome --ssl-key-log-file=/tmp/.ssl-key.log 打开 Wireshark - Perferences - Protocols - TLS ,在 (Pre)-Master-Secret log filename 输入 /tmp/.ssl-key.log 然后就可以抓到 https 包了。 安装:rpm -ivh xxx.rpm 卸载:rpm -e xxx.rpm 升级:rpm -U xxx.rpm 查询安装包:rpm -q 包名 查询包信息: rpm -qpi 列出文件包描述信息 查询包文件: rpm -qpl 列出文件包包含的文件 查询匹配包 rpm -qa|grep -i 关键字(不区分大小写) yum install yum update yum remove yum search yum deplist 查询依赖 yum info 查询包信息 gdb —args -g 可执行程序与源码之间映射 set args 设置程序参数 list->l 查看源代码 run->r 启动 continue->c 继续运行 finish 结束当前函数,返回到函数上一层调用点 return 立即结束执行当前函数,并返回 break->b 添加永久断点 backtrace->bt 查看当前线程调用堆栈 where 查看我们所在的调用栈 frame->f 与backtrace结合使用,切换不同堆栈 info break->info b 查看设置的断点信息 disable 断点编号:禁用断点编号对应断点 enable 断点编号:重新开启断点编号 delete 断点编号:删除对应断点 print->p 查看变量值 ptype 输出变量类型 info threads 查看当前进程的所有线程的运行情况 thread 切换不同线程 info args 查看当前函数参数值 next->n 执行下一条命令(逻辑上 step->s 单步步入 until n 快速执行完中间的代码,并跳到第 n 行 quit->q 退出gdb