git标签
git可以给一个重要 commit添加标签,一个是为了记录该版本的重要性,如发布的v1.0版本,一个是为了给重要的commit起个别名,让commit更好记,之后更容易找到:Git 标签 | 菜鸟教程 (runoob.com)
先在本地删除了所有文件,然后再git rm所有文件,结果其中包括了一个之前未被跟踪的文件,然后就出错,但是我无视了它,依然commit并且push了,结果远程仓库里的那些文件依然存在(但是奇怪的是 我想将远程的那些文件pull下来,却不能),只有重新git rm,commit, push才行。所以git rm其实是个原子操作吗?一个文件rm出错,那么所有文件都不会被rm。
删除当前文件夹下所有文件的跟踪(即使没有文件夹也要加 -r,不然就会报错):git rm . -r
添加当前文件夹下所有文件的跟踪(这个即使有子文件夹,也不需要夹-r):git add .
echo命令
echo命令是打印命令,它可以在命令行输出简单的字符串,或者打印某一命令执行后的结果(使用反引号: `)
可以打印一个shell变量,如查看环境变量PATH:
或者查看自定义变量,使用 read 变量名 来在接下来的一行接收一个变量值,再使用 echo $变量名 输出该变量,:
其中read命令,一个一个词组地接收输入的参数,每个词组需要使用空格进行分隔;如果输入的词组个数大于需要的参数个数,则多出的词组将被作为整体为最后一个参数接收。
或者将一些信息打印输出到指定文件中,如下,输入 echo "this is a test file" >test.txt ,在home目录下就会生成test.txt文件,打开发现里面有我们刚刚指定输入的内容:
以及使用 echo "$(<test.txt)" 将文件的内容打印出来(相当于cat test.txt):
> 重定向输出到某个位置,替换原有文件的所有内容。
>> 重定向追加到某个位置,在原有文件的末尾添加内容。
< 重定向输入某个位置文件。
2> 重定向错误输出。
2>> 重定向错误追加输出到文件末尾。
&> 混合输出错误的和正确的都输出。
设置原样输出字符串,不进行转义或取变量(用单引号):
其他的,关于-e开启转义字符,设置转义字符的输出:echo命令详解 (一) 真的很详细-朱双印博客 (zsythink.net)
关于使用ANSI码控制输出的文字颜色:echo命令详解 (二) 真的很详细-朱双印博客 (zsythink.net)
使用echo命令,最好使用“”,不然一些转义字符等不能被识别:
| 能否引用变量 | 能否引用转移符 | 能否引用文本格式符(如:换行符、制表符)
单引号 | 否 | 否 | 否
双引号 | 能 | 能 | 能
无引号 | 能 | 能 | 否
ps命令
参考:linux系统中ps指令使用详解 (baidu.com)
其中比较常用的有:
ps -ef|grep 关键词 或者 ps -C 进程名 :抓取与 关键词 或 进程名 有关的进程
ps -u 用户名:显示与某一用户有关的所有进程
gdb调试
1. 在编译的时候在最后加上-g:gcc -a.c a -g 或者在前面加上-g:gcc -g -a.c a
2. 使用 gcc a 进入debug模式(gdb),输入q回车,退出该模式
3. 常用的命令:
r: 开始调试,遇到断点就中断;
c:继续执行
b n:在第n行设置断点;b 函数名:在函数名前设置断点。
clear:清除所有断点(基于行);d n:删除第n个断点(基于序号);d n-m:删除第n到第m个断点。
disable n-m(enable n);使第n到第m个断点无效。
where 或者bt或者info s:查看堆栈
l:查看源码(默认显示10行,按回车继续显示);list n 查看指定行前后代码;list 函数名查看函数代码;
回车:重复上一天命令
s:逐行步入调试(对源码,si为对汇编)
n:逐行调试(对源码,ni为对汇编)
up:调用栈上移一个函数调用;down:调用栈下移一个函数调用。
finish:从该函数退出
p 变量名:显示变量的值,如果全局变量与函数变量名重复,使用p file::变量值查看全局变量,使用 p function::变量名查看函数变量。
p 变量名=变量值:修改变量值
display 变量名(undisplay):在调试时,每次命中断点都显示该变量名的信息。
i locals:显示所有局部变量值;i b:显示所有断点信息;info还可以查看很多,具体的可以输入help info查看。
watch 变量名:击中某个断点后,可以监视该上下文中指定变量的值,如果有变化则会命中,显示的是改变值之后运行的下一行,参考:gdb下watch的使用_白永辉的专栏-CSDN博客_gdb watch。
调试子进程:在调试时,如果当前线程fork了子线程,默认并不会命中子线程的断点。要设置跟踪的进程:(gdb) set follow-fork-mode child
保存断点:每次退出gdb之后,即使进入的是同一个文件,上次打的断点也会消失,退出的时候,可以保存断点:save b 文件名(随便有没有后缀,自己能记住就好),然后下次使用 source 文件名 载入断点,或者在载入调试文件的时候使用 gdb a.out -x 文件名 载入断点。
在gdb中重新编译:shell gcc test.c -o test -g ,这样就不用改了源码又退出gdb重新编译了。其实shell命令在gdb中都可以用,只需要在前面加上shell就可以了。
TUI模式显示代码窗口:focush或者layout或者快捷键ctrl+x+a或者在进入debug模式时写gdb -tui a。 在显示代码中使用 focus next(简写 fs next) 控制焦点在src与cmd之间切换。 使用layout next 控制代码在源码、汇编、寄存器、源代码和汇编等四个窗口之间切换,layout src显示源码。 使用pgup/pgdn快捷键与l指令控制代码块显示。 当focus在代码窗口时,可以使用ctrl+p/ctrl+n来控制cmd窗口选中上一条/下一条命令。
其他命令:gdb调试工具常用命令 - 天娅之芸 - 博客园 (cnblogs.com)
GDB 常用命令学习_The_sun的博客-CSDN博客_gdb ni命令
Linux下gdb调试工具的使用_网络资源是无限的-CSDN博客