2 Linux环境基础开发工具

2 Linux环境基础开发工具

2.1 Linux软件包管理器yum

2.1.1 软件安装的方式

1. 源码安装
大多数开源的软件都是源码的形式。拿过来自己编译,安装。
优点:源码安装兼容性好。  
缺点:过程繁琐还容易卡壳。

2. rpm安装
RPM(Red-Hat Package Manager)红帽的软件包管理器。一般rpm安装使用rpm包,rpm包和tar包、gzip等不同,这些是压缩包,而rpm包是源码和一些安装规则的集合。使用RPM方式来安装后会指定软件安装位置,并生成对应的配置文件、服务启动脚本文件等。
优点:简化安装方式,不需要联网!
缺点:指定rpm包去安装,没有解决依赖关系。

3. yum安装
是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖关系,并且一次安装所有依赖的软件包。
优点:再次简化安装
缺点:需要联网,更准确的说法是需要有一个yum源。大型的公司都会有自己的yum源,或者是找到可访问的yum源,修改yum配置文件中的yum源地址,并使之生效,这样就可以用yum进行软件安装了。

2.1.2 查看软件包

这里主要介绍CentOS7下安装软件的方式。
通过yum list命令可以查看当前一共有哪些软件包,由于包的数量非常之多,使用grep命令筛选出我们所专注的包。例如:
yum list | grep lrzsz

2.1.3 安装软件

yum install lrzsz
注意

  • 安装软件时需要向系统目录中写入内容,需要使用sudo或者切换到root用户才可以。
  • 输入命令后,yum会自动找到有哪些软件包需要下载,询问时只要输入“y”即可自动安装。

2.1.4 卸载软件

yum remove lrzsz
注意

  • 卸载软件也要使用sudo或者切换到root用户

2.1.5 常用软件安装

yum install lrzsz用户XShell和Linux之间的文件传输工具
yum install gccC程序编译器
yum install g++C++程序编译器
yum install gdb程序调试工具
yum install glibc-static静态库

2.2 Linux文本编辑器Vim

Vim中总共有12种模式,6种基本模式,6种条件模式。常用的有三种模式:

  1. 插入模式:只有在插入模式下,才可以做文字输入。
  2. 普通模式:控制屏幕光标的移动,字符或行的删除和复制。
  3. 底行模式:文件保存或退出,进行字符串查找和行定位等。
  • 从普通模式切换到插入模式
    i:进入插入模式,并且从光标所在位置开始插入
    a:光标移动到下一个字符处开始插入
    o:在光标所在行下方添加新航,进行插入模式
    I:光标移动到行首,开始插入
    A:光标移动到行尾,开始插入
    O:在光标所在行上方添加新行,进入插入模式

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

  • 从普通模式切换到底行模式
    冒号:
    :w 保存文件
    :q 退出
    :wq 保存并退出
    :q! 强制退出,不保存
    :!pwd 临时执行一条命令,回车返回

  • 普通模式下的常用操作

  1. 移动光标位置
    hjkl 分别对应上下左右移动光标
    0 光标移动到行首
    $ 光标移动到行尾
    w 光标向后移动一个单词(以特殊字符进行区分
    b 光标向前移动一个单词
    gg 光标移动到文档首行
    G 光标移动到文档尾行
    ctrl+f 向下翻页
    ctrl+b 向上翻页

  2. 拷贝
    yy 复制光标所在行
    nyy 从光标所在行开始向下复制n行数据

  3. 粘贴
    p 向光标所在行下方粘贴剪切板内容
    P 向光标所在行上方粘贴剪切板内容

  4. 剪切/删除
    dd 剪切/删除光标所在行
    ndd 从光标所在行开始向下剪切/删除n行数据
    dw 从光标所在位置开始剪切/删除一个单词
    D 从光标所在位置开始剪切/删除到行尾的数据
    x 剪切/删除光标所在位置的字符

  5. 其他
    u 撤销上一步操作
    ctrl+r 恢复操作
    gg=G 全文对齐
    :n 跳到第n行
    /字符串 字符串匹配,按n可以跳到下一个匹配字符串
    ?字符串 也是字符串匹配,按n可以跳到上一个匹配字符串
    :1,3s/select/epoll/g 将1-3行中的select替换成epoll 不指定行数就是全部替换

2.3 Linux编译器gcc/g++

一份代码文件要变成可执行程序要经历四个阶段:

  • 预处理
  • 编译
  • 汇编
  • 链接
  1. 预处理
  • 预处理完成的内容主要包括:红替换、头文件展开、条件编译、去注释、文件包含等
  • 实例:gcc -E hello.c -o hello.i
  • 选项“-E”的作用是让gcc只完成预处理就停止编译
  • 选项“-o”是指定要生成的目标文件,“.i”文件是经过预处理的C原始程序
  1. 编译
  • 在编译阶段,gcc首先要检查代码的规范性,是否有语法错误等,在检查无误后再将代码编译成汇编语言
  • 实例:gcc -S hello.i -o hello.s
  • 选项“-S”的作用是让gcc只完成编译即停止编译过程
  1. 汇编
  • 汇编阶段是把编译阶段生成的“.s”文件转换成目标文件
  • 实例:gcc -c hello.s -o hello.o
  • “-c”选项是将汇编代码转换成“.o”的二进制目标代码
  1. 链接
  • 链接阶段主要是将彼此有关的目标文件进行连接,使所有的目标文件成为一个能被操作系统执行的统一整体

  • 实例:gcc hello.o -o hello
    在这里涉及到另一个重要的概念:函数库
    函数库一般分为静态库和动态库两种

  • 函数库文件是指将很多的机器代码/代码文件合并到一起打包生成的文件。

  • 静态库是指编译链接时,将库文件的代码全部加入到可执行文件中,因此生产的文件比较大,但在运行时也就不需要库文件了。静态库文件名一般为lib***.a,lib是前缀,.a是后缀。

  • 动态库则与之相反。在编译链接时并没有将库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。所以动态库又称为共享库,运行时库。动态库文件名一般为lib***.so,lib是前缀,.so是后缀。

  • gcc默认是使用动态链接,要使用静态链接是,在gcc选项中加上“-static”

  • 链接方式的对比
    动态链接:只是记录了一些关于动态库函数的位置符号信息(生成文件小)
    优点是节省资源,更新升级方便;缺点是对库的依赖程度比较高,运行时需要存在。
    静态链接:直接将静态库中的数据全部拷贝到可执行程序中(生成文件大)
    优点是对库的依赖程度比较小;缺点是相对于动态链接资源浪费比较高,更新升级比较繁琐。

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

Makefile是一个不普通的文本文件,它可以辅助用户完成各种大型项目的编译,在其中可以记录各种编译规则,用make这个工具对Makefile中记录的规则,逐条解释执行(make只是解释规则,最终依然还是使用编译器来完成编译过程)。
Makefile命名规则:makefile/Makefile

#Makefile注释以#开头
#编写规则:
#    目标对象名称:依赖对象名称
#    tab[\t]为了生成目标对象所要执行的命令
#make程序解释Makefile文件中规则的流程:
#  1.先找目标对象
#    永远只生成第一个对象,第一个对象命令执行完毕就退出了
#  2.找到目标对象之后,跟依赖对象进行时间属性对比
#    判断程序是否是最新的,是否需要重新编译
#  3.执行为了生成目标对象所要执行的命令
#    这条命令,不一定非要生成目标对象
#  make可以直接在外部指定要执行生成的对象
#  make clean  
#  伪对象:不管目标对象是不是最新的,都需要重新生成
#  声明伪对象:.PHONY
#.PHONY:main test
#定义all对象是因为make只找第一个对象生成,其他对象将不再执行,但又是想要生成多个多个对象,
#那么就需要定义第一个对象,它的依赖对象是我们想要生成的其它所有对象,make为了生成第一个对象,
#会间接的去生成这些依赖对象
# makefile中的预定义变量
# 预定义变量是用于执行命令中
# $@:指的是目标对象
# $^:指的是所有的依赖对象
# $<:指的是所有的依赖对象中的第一个依赖对象
# wildcard 关键字,用于获取文件名
# $()用于使用一个变量
src=$(wildcard ./*.c)
all:main test
#main:main.c child.c
#    gcc main.c child.c -o main
main:$(src)
    gcc $^ -o $@
test:main.c child.c
    gcc main.c child.c -o test
#将clean声明为伪对象,就是为了防止外部有跟clean同名的文件,导致出现因为文件最新而不重新执行命令的问题
.PHONY:clean
clean:
    rm main

2.5 Linux调试器gdb

  • 程序的发布方式有两种,debug模式和release模式
    gcc/g++编译出来的默认是release模式

  • 要使用gdb对程序进行调试,必须在编译的时候加上-g选项,在生成可执行程序的时候加入调试符号信息

  • 将程序符号信息加载进入gdb中
    gdb./main(直接加载并进入gdb调试)
    file./main(已经进入gdb中)

  • 逐步调试:
    start 开始逐步调试
    n 下一步(不会跟踪进入函数)
    s 下一步(会跟踪进入函数)
    untill n 直接运行到第n行停下
    run 从开始重新运行

  • 断点相关操作
    b file:line 打断点
    b main.c:20 给main.c文件的第二十行打断点
    b myswap 给myswap函数打断点
    watch i 监控i变量
    d 删除所有断点
    d b n 删除序号为n的断点
    info breakpoint/i b 查看断点信息

  • 查看变量
    p 打印变量内容(&查看变量地址;*查看指针接引用内容)

  • 查看函数调用栈
    bt 快速定位程序崩溃位置

  • 其他
    l 查看运行代码的上下五行代码
    l n 查看第n行代码的上下五行代码
    c 继续运行

2.6 Linux命令行使用项目版本控制工具git

安装git
yum install git
创建项目
在github网页上创建好项目,将项目链接复制好以备下载
下载项目
git clone url在Linux中创建好一个放置代码的目录
url即是刚刚复制的项目链接
git三板斧

  1. git add
    将代码放到刚刚创建好的目录
    git add 文件名
    将需要用git管理的文件告知git

  2. git commit
    提交改动到本地
    git commit 目录

  3. git push
    同步到远程服务器上
    git push
    需要填入用户名和密码

git与svn的区别

  1. git是分布式版本控制系统,svn是集中式版本控制系统。
  2. git为用户建立了一个本地仓库,绝大多数操作都只需要访问本地文件和资源,不必联网就可以看到所有的历史版本记录,而svn却需要联网。
  3. git克隆一个完整项目的速度要比svn快很多。
  4. git的分支远比svn的强大,内容完整性要优于svn。
  5. git只关心文件数据整体是否发生变化,而svn则只关心文件内容的具体差异。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值