Linux开发工具

Linux开发工具_第1张图片

Linux开发工具

我们在Linux下

  • 编写代码:vim
  • 编译代码:gcc/g++
  • 调试代码:gdb
  • 运行或者自动化构建程序:make/makefile

Linux编辑器 vim

编辑器 – 只负责写代码

打开vim时是命令模式(默认打开的模式),如果想从其他模式回到命令模式按ESC

在命令模式下输入

  • i:进入编辑/插入模式
  • ::进入底行模式
  • shift + r:进入替换模式

在底行模式下输入

  • q退出,q!强制退出
  • w保存,w!强制保存
  • wq保存退出 ,wq!强制保存退出
  • ESC回到命令模式

命令模式的常见命令

命令 作用
yy 将当前光标所在行复制
p 将复制行进行粘贴
dd 将当前光标所在行,剪切(删除)
nyy,np,ndd n是具体的数字,nyy指一次复制n行,np将复制的内容粘贴n次,剪切(删除)n行
u 撤销命令
ctrl + r 撤销u操作
shift + g 光标定位到文件结尾
n + shift + g 光标定位到第n行
gg 光标定位到文件开头
shift + 4($ 将光标定位到当前行的最结尾
shift + 6(^ 将光标定位到当前行的最开始
w 以单词为单位进行光标的后移
b 以单词为单位进行光标的前移
h,j,k,l 左,下,上,右
shift + ~ 大小写切换
r 替换光标所在的字符,支持nr
x or X 删除光标所在的字符,包括之前或者之后

底行模式常见命令

命令 作用
set nu/nonu 打开行号/取消行号
vs 文件名 分屏操作
w 写入
q 退出
!cmd: 不退出vim执行对应的命令(执行命令行,编译,运行,查看man)

在vim的底行模式中,

  1. 表示substitute,也就是替换, 格式为以下:
    • :[range]s[ubstitute]/{pattern}/{string}/[flags] [count]
    • range 表示区间 % 用于表示全文, 2,3 表示从第2行开始到第3行
    • {pattern} 表示字符串匹配规则,要匹配什么样的字符串 , 比如^a 表示以a字符起始的字符串
    • {string} 表示要将匹配到的字符串替换为的新的string字符串
    • [flags] s_flags中,g比较常用,通常使用g表示全部替换,默认如果不给的话,表示只替换一次
    • [count] 表示在一行中匹配多少次,很少会用到…
    • 如果想要将文件中所有 nihao 替换为 hello 则命令为: %s/nihao/hello/g
  2. :p 用于打印指定区间的行
    • :[range]p[rint] [flags]
  3. :i 在指定行上方添加文本
    • :{range}i[nsert] [!]

Linux编译器 gcc/g++

程序的翻译过程

文本的C – 计算机二进制

  1. 预处理(a.去注释 b.宏替换 c.头文件展开 d.条件编译 …).i
  2. 编译(C -> 汇编).s
  3. 汇编(汇编 -> 可重定向二进制目标文件).o
  4. 链接(链接 -> 多个 .0,.obj -> 合并形成一个可执行 .exe,.out)
[hmy@VM-8-15-centos ~]$ gcc mytest.c -o hmy //-o指定生成可执行文件的名称,hmy是可执行文件的名称

gcc/g++

选项 作用
-o 指定生成可执行文件的名称
-E 从现在开始进行程序的翻译,如果预处理完成,就停下来
-S 从现在开始进行程序的编译,如果编译完成,就停下来
-c 从现在开始进行程序的翻译,如果汇编完成,就停下来

动静态库

一般链接的过程,是有两种方式的:

  • 动态链接,需要动态库 Linux:.so Windows:.dll

    将库中我要的方法的地址,填入我的可执行程序中,建立关联!!

  • 静态链接,需要静态库 Linux:.a Windows:.lib

    将库中方法的实现,真的拷贝到我们的可执行程序中!!

gcc/g++默认形成的可执行程序是动态链接的

-static表明使用静态链接的方法形成可执行程序

[hmy@VM-8-15-centos ~]$ gcc mytest.c -o hmy -static

Linux项目自动化构建工具make/makefile

make是一个命令

makefile是一个文件

他们的作用是自动化构建项目

编写makefile

  • 依赖关系
  • 依赖方法
mytest:test.c  //依赖关系
	gcc test.c -o mytest  //依赖方法

.PHONY:clean  //伪目标
clean:  //依赖关系
	rm -f mytest  //依赖方法

make会自顶向下执行第一个依赖关系,当mytest没有写在第一个时,可以显式执行 make mytest

.PHONY伪目标:总是会根据依赖关系,执行依赖方法。习惯给clean设置

Linux软件包管理器 yum

YUM 是 “Yellowdog Updater, Modified” 的缩写,它是一个包管理工具,用于简化在系统上安装、更新和删除软件包的过程。

YUM可以理解为Linux上的软件应用市场

yum的作用:1.搜索、下载、安装 2.解决依赖关系

yum的操作

yum源:就是一个配置文件 [hmy@VM-8-15-centos lesson7]$ ls /etc/yum.repos.d 里面配置了你的下载网址

yum三板斧:

  1. yum list(查找所有软件) yum list | grep py(查找所有软件名包含py的软件)
  2. yum install
  3. yum remove

扩展:

  1. yum makecache 命令:该命令用于将服务器上的软件包信息缓存到本地系统。
  2. yum search 命令:该命令用于在所有可用的软件包中搜索包含指定关键字的软件包。
  3. yum clean all 命令:该命令用于清除缓存中的软件包头文件和旧的软件包。
  4. yum upgrade 命令
    • yum -y update:升级所有包同时,也升级软件和系统内核;
    • yum -y upgrade:只升级所有包,不升级软件和系统内核,软件和内核保持原样。 所以D选项不完整严谨

版本控制器 git

git三板斧:

预备:

  1. git clone 你的git仓库链接 例如:git clone https://gitee.com/h-miyang/for_-linux.git
  2. git add 你的文件 #添加我们的代码到本地仓库 例如:git add . 或 git add test.c
  3. git commit -m “这里必须写提交日志!” #提交代码到本地仓库中
  4. git push #提交我们的代码到远端仓库

其他情况:

  1. 有时候无法提交,会出现提交冲突 无脑 git pull
  2. .gitignore #不想提交某些后缀的文件同步到远端的git仓库,就可以添加到.gitignore
  3. git rm 删除文件

调试器 gdb

(no debugging symbols found). gcc && g++默认形成的可执行程序是release的!!故无法直接被调试!

gcc mytest.c -o mytest-debug -g # -g表示该程序是debug方式发布的

gdb操作:

gdb会记录最近一条命令,如果命令无变化,就直接回车2

命令 作用
quit 退出gdb
r(run) 开始调试,如果没有设置断点,就直接结束运行!
b(breakpoint)+ 行号 给特定的行号打断点
info(information) b 查看断点
d(delete)+ 断点编号 删除断点Linux开发工具_第2张图片
n(next) 逐过程
p(print)+ 变量名 打印变量内容
s(step) 逐语句
bt 查看当前调用堆栈
finish 将当前函数跑完就停下来
display + 变量名 设置长显示
undisplay + 变量名编号 取消长显示
until + 行号 跳转到指定行
c(continue) 运行至下一个断点处停下来
disable/enable + 断点编号 使能(打开和关闭)断点

你可能感兴趣的:(linux,服务器,gdb,vim,makefile,yum,git)