Linux 常用开发工具

目录

1. yum

2. vim文本编辑工具

2.1 模式

2.2 模式的切换

2.3 普通模式下的常用操作

3. gcc/g++编译器

3.1 编译步骤

3.2 gcc使用

4. Makefile

4.1 命名

4.2 编写

5. gdb程序调试工具(重点)

5.1 步骤

5.2 gdb常用命令

6. git项目版本控制工具


1. yum

红帽子系列linux操作系统的软件包管理工具(需要切换到root用户)

  • yum    软件的安装/移除/查看
    • yum list     查看所有软件 / 开发包
      • yum list | grep 包名      查看能够安装的软件包
      • yum list installed | grep 包名          查看已经安装的软件包    
    • yum install 包名      安装指定软件包     
    • yum remove 包名     移除已经安装的软件包     

文件传输软件包   lrzsz

修改/更新yum源的方法:  /etc/yum.repos.d/CentOS-Base.repo

2. vim文本编辑工具

  • 2.1 模式

vim有12种模式(6种基本模式,6种条件模式),每一种模式都有不同的功能,针对不同的操作有不同的模式。

  • 常用模式:
    • 普通模式:完成各种移动光标,复制粘贴
    • 插入模式:输入数据
    • 底行模式:完成保存、退出
    • (视图模式、替换模式)
  • vim file:打开文件,进入普通模式

  • 2.2 模式的切换

  • 2.2.1 从普通模式切换到插入模式

i        进入插入模式,从光标所在位置开始插入

a       光标移动至下一个字符处开始插入

o       在光标所在行的下方,新建一行,进入插入模式

O       在光标所在行的上方,新建一行,进入插入模式

I        将光标移动到行首,然后进入插入模式

A       将光标移动到行尾,然后进入插入模式

s        删除光标所在字符,然后进入插入模式

  • 2.2.2 从普通模式切换到底行模式

:w       保存

:q       退出

:q!      强制退出(不保存本次修改)

:wq     保存并退出

:!cmd   临时执行命令,按回车返回 (例:!pwd) 

  • 2.2.3 从插入模式/底行模式返回到普通模式

esc

  • 2.3 普通模式下的常用操作

  • 2.3.1 移动光标

h      向左移动光标

j       向下移动光标

k      向上移动光标

l       向右移动光标

w     光标向右移动一个单词(单词分界为特殊字符)

b      光标向左移动一个单词

ctrl+f / b   上下翻页

gg     光标移动到文档首行

G / shift+g     光标移动到文档末尾行

  • 2.3.2  复制

yy     复制光标所在行

        复制单词步骤:

           1.按v进入选中模式  2.移动光标选中文本  3.按y复制选中内容   4.按p粘贴到指定位置

nyy   从光标所在行开始向下复制n行

  • 2.3.3 粘贴

p      向光标所在行下方粘贴一行

P      向光标所在行上方新建粘贴一行

  • 2.3.4 剪切

dd    删除光标所在行(vim中删除其实是剪切)

ndd  从光标所在行开始向下删除n行

dw    删除光标所在位置开始的一个单词

x       删除光标所在字符

  • 2.3.5 其他

     撤销操作

ctrl+r  返回撤销操作

ctrl+v  进入列视图模式,可以进行选择操作(=  缩进对齐)

v        进入行视图模式,可以进行选择操作

r        替换光标所在字符

R      进入替换模式,对内容一直替换

gg=G  全文缩进对齐  或v选中按=

  • 在/etc/vimrc中设置

set nu 设置行号

set nonu 不要行号

set et  将制表符替换成相应长度的空格

set noet  不替换制表符为空格

set ai  设置自动缩进

set st=4  设置制表符的长度等于4个空格长度

set sts=4

set sw=4

3. gcc/g++编译器

将c/c++/java等高级语言程序编译成为机器可识别的指令代码

  • 3.1 编译步骤

  1. 预处理 :去掉注释,展开所有代码
  2. 编译 vi :先进行语法语义纠错,没有错误则编译成汇编语言
  3. 汇编 :将汇编代码编译为机器指令代码。汇编只是将我们写的代码汇编完毕,但是不能运行,因为代码不完全,我们调用的一些库函数并不知道如何实现,需要经过第四步才能生成可执行程序。
  4. 链接 :将库函数链接过来与我们的代码最终合并生成可执行程序
  • 库文件:存放函数实现代码的文件(已经汇编完成的公共代码),动态库:lib***.so ;静态库:lib***.a
  • 链接方式(gcc编译器默认动态链接):
    • 动态链接
      • 链接动态库(共享库 / 运行时库),只记录动态库的位置符号信息。代码冗余量小,生成的可执行程序小,占用资源少,但是动态链接生成的程序运行时需要动态库存在,对库的依赖程度高。
    • 静态链接
      • 链接静态库,直接将库文件中的代码拷贝到可执行程序中,代码冗余量高,生成的可执行程序大,占用资源多。但是静态链接生成的程序运行时不需要静态库存在,对库的依赖程度低,因为静态链接就是将库中的函数全部拿过来生成可执行程序
  • 3.2 gcc使用

linux下程序的执行就是告诉操作系统程序文件在哪个路径下

  • gcc常用选项:

-o    指定生成的文件名称

-E    预处理

-S    编译(针对已预处理过的文件)

-c     汇编(针对已编译过的文件或源文件)

-static  静态链接(gcc默认是动态链接)

-g     开启gdb调试选项,目的是为了在可执行程序中加入调试符号信息

4. Makefile

用于定义项目编译规则的普通文件,辅助项目的自动化编译。

  • 4.1 命名

Makefile或makefile

  • 4.2 编写

在makefile中通常定义很多的程序编译规则,在终端命令行下敲击一个make命令,则make程序就会跑到当前目录下寻找Makefile文件,然后按照Makefile中已经规划好的编译顺序以及编译规则来完成整个项目的编译。

  • 4.2.1 make命令

项目的自动化辅助构建工具

是一个解释程序,只在当前目录下找名字叫Makefile/makefile文件,逐步解释执行makefile中记录的编译规则(make只是解释规则,编译过程仍由编译器完成 )

  1. 到当前目录下查找makefile文件,找不到报错

  2. 在文件中找第一个目标对象,并把这个对象当做终极目标

  3. 将目标对象与依赖对象的最后一次修改时间进行对比,判断目标对象是否需要重新编译。若修改时间一样,则不重新编译,退出;若不是,重新编译。

  4. 为了生成终极目标,首先要保证依赖都存在,先去生成所有依赖对象(如果依赖对象不存在,会在makefile中查找依赖关系,看能否生成依赖对象,能 -> 生成;否 -> 报错退出),执行为了生成目标对象所要执行的命令.

  • 特点:

make只找第一个目标对象,第一个对象命令执行完毕后就退出。因此,之后的对象是无法生成的。

#make只找第一个对象生成,其他对象不再执行
#利用all实现多个对象的生成(将想要生成的其他所有对象作为第一个对象的依赖对象,make为了生成第一个对象,会间接的去生成这些依赖对象)
all:main test
main:main.c child.c
        gcc main.c child.c -o main
test:main.c child.c
        gcc main.c child.c -o main
clean:
        rm main *.o

make可以直接在外部直接指定要执行生成的对象  

  • 4.2.2 makefile 编写规则

main.c -> main

目标对象名称:依赖对象名称

[制表符\t]为了生成目标对象所执行的命令

# 注释以"#"开头
#编写规则:
#目标对象名称:依赖对象名称
#tab[\t]为了生成目标对象所要执行的命令
main:main.c child.c
    gcc main.c child.c -o main

目标对象:不一定是生成,只是为了让make找到依赖关系

依赖对象:主要用于判断目标对象是否是最新的

#不一定要生成目标对象
#可以不要依赖对象但不能没有目标对象
main:
     echo "hello world"
  •  4.2.3 伪对象

不管对象是否为最新的,都需要重新生成(执行下边的生成命令)

  • 声明伪对象:使用.PHONY
#伪对象:声明真正要生成的对象
.PHONY:main test
all:main test
main:main.c child.c
        gcc main.c child.c -o main
test:main.c child.c
        gcc main.c child.c -o main
#伪对象一般声明clean
#防止外部含有名为clean的文件,当make clean时,系统clean认为是最新的而不执行命令
 SRC=$(wildcard ./*.c)
 ALL:main main1
 main:$(SRC)
         gcc $@ -o $^
 main1:$(SRC)
         gcc -static $@ -o  $^
.PHONY:clean
 clean:
         rm main main1

  • 4.2.4 预定义变量——makefile中应提前预定好的变量

$@  目标对象

$^  所有的依赖对象

$<  第一个依赖对象

 main:main1.c
     gcc $@ -o $^
  • wildcard关键字 ->  获取文件名   (eg: SRC=$(wildcard ./*.c)获取当前目录下文件名以.c结尾的文件作为变量赋值给SRC)
  • $()  ->  将括号中的字符串当做命令处理,命令的执行结果当做变量内容赋值给别的变量

定义变量后,该变量的使用需要在变量名前加上$符号,否则认为是字符串赋值(eg:src=main.c   a=$(src) )

SRC=$(wildcard ./*.c)
ALL:main main1
main:$(SRC)
        gcc -o $@ $^
main1:$(SRC)
        gcc -static -o $@ $^
  • 'main' is up date :目标对象已经是最新的了,不需要重新生成,make程序判断依赖文件的最后修改时间和目标对象文件                                     的最后修改时间,如果目标对象的时间戳大于依赖文件的时间戳,那么就证明依赖文件在上次编译后                                     就没有修改过,不需要重新编译。
  • 变量的定义赋值: 

=   普通变量定义赋值

:=   即时赋值

?=  若变量不为空,则赋值

+=  追加赋值

5. gdb程序调试工具(重点)

调试一个程序的与进行过程。

linux下程序编译默认生成release版本程序,不带有调试符号信息,程序无法被调试。所以程序调试的前提:编译生成debug版本程序,因此需要通过gcc -g开启调试。

  • 5.1 步骤

  • 1. gdb的开启:
    • gcc -g选项来开启调试,生成可执行程序时加入一些调试符号信息。

    eg:gcc -g main.c -o main

  • 2. 将程序符号信息加载进入gdb中
    • gdb直接加载:gdb ./main
    • 进入gdb:gdb     之后运行命令: file ./main
  • 5.2 gdb常用命令

    • 单步调试
      • run(r)       开始运行程序,程序直接跑起来
        • r     参数1 参数2 参数3...   r接收参数,执行程序(程序的参数在此加载)
      • start        开始逐步调试
        • next(n)       下一步,不跟踪进入函数
        • step(s)        下一步,跟踪进入函数
      • until n        直接运行到第n行停下
      • list(l)          查看当前行附近代码(上下5行)
        • l file:line 指定文件指定行代码查看
      • print(p)      查看变量内容
    • 断点:
      • b       添加一个断点
        • b file:line     给file第line行添加断点
        • b n                给当前文件第n行添加断点 
        • b function_name     给函数(函数中的第一行代码)添加断点
      • info(i)        查看调试信息       
        • i b   查看当前断点信息(info breakpoint)
      • d      删除断点(默认删除所有断点)
        • d n  删除id为n的断点,默认删除所有 
      • continue(c)       从断点处继续运行
      • line            向当前调试的文件指定行打断点
      • file:line    向指定文件的指定行打断点
      • watch  variable        变量监控,给变量添加断点,变量内容发生修改时,停止
    • bt               查看函数调用栈信息(快速定位程序调用崩溃位置,在哪一个函数崩溃)

6. git项目版本控制工具

git:分布式管理,为每个用户在本地创建代码仓库进行本地管理

svn:集中式管理

  • linux下的git三板斧:

  1. git clone    https-url    从github上克隆代码到当前路径
  2. git add file                  添加要提交的文件
  3. git commit -m             “desc”本地提交
  4. git push origin master 上传代码到git服务器
  • git使用ssh
    • 生成ssh密钥 
      •    ssh-keygen       提示信息回车即可
    • 家目录下.ssh目录下id_rsa.pub文件中的内容就是公钥信息
    • 赋值公钥信息,到git个人设置的sshkey中
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值