给自己一首歌的时间学习来Linux基本开发工具

Linux软件包管理器 —— yum

简介

在Linux下安装软件, 一个通常的办法是运用yum指令,yum是Linux下非常常用的一种包管理器. 主要应用在Fedora, RedHat, Centos等发行版上。

yum的使用

如何显示可以安装的软件有哪些呢?
我们可以输入以下指令:

  • yum list

搜索结果为:
在这里插入图片描述
通过yum list展示的内容过多,我们可以使用管道指令和grep进行筛选,以gcc为例:

  • yum list | grep gcc

在这里插入图片描述
接来下我们如何安装某一款软件呢?以sl为例:

  • sudo yum install sl

在这里插入图片描述

输入y,进行安装即可
最后我们如何想要卸载某一款软件?还是以sl为例:

  • sudo yum remove sl

在这里插入图片描述

Linux编辑器 —— vim

Vim的三种常用模式

1. 正常/普通/命令模式(Normal mode)

  • 控制屏幕光标的移动,字符、字或行的删除,移动复制某区段等
  • 可按i/a/o进入插入模式,shift+;进入末行模式

2. 插入模式(Insert mode)

  • 只有在插入模式下,才可以进行编辑代码
  • Esc可退回命令模式,不能直接到末行模式

3. 末行模式(Last line mode)

  • 文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作
  • Esc可退回命令模式,不能直接到插入模式

Vim的基本操作

在命令行输入vim+文件名可以直接进入vim全屏幕编辑画面,当该目录下不存在此文件时,vim会自动创建文件。进入vim模式之后,是处于正常模式。正常模式可以与插入模式和末行模式相互切换,但插入模式和末行模式之间不能直接切换。

Vim的正常模式命令集

  • 移动光标
指令 功能
h/j/k/l 光标向左/下/上/右移动
gg 移动到文章开始
shift+g 移动到文章最后
#+shift+g 光标移动到文章的第#行
shift+^ 移动光标所在行的行首
shift+$ 移动光标所在行的行尾
w 光标跳到下个字的开头
e 光标跳到下个字的字尾
b 光标回到上个字的开头
#l 光标移动到该行的第#个位置
  • 删除文字
指令 功能
dd 删除当前光标所在行
#dd 从光标所在行开始删除#行
x 删除光标所在位置的一个字符
#x 删除光标所在位置的#个字符
X(shift+x) 删除光标所在位置前面的一个字符
#X 删除光标所在位置前面的#个字符
  • 复制粘贴
指令 功能
yy 复制当前行
#yy 复制光标所在行往下数的#行
p 将缓冲区的字符粘贴到光标所在位置
#p 一次性粘贴#次p
dd+p 剪切
  • 其他
指令 功能
u 撤销上一次操作
shift+~ 快速大小写切换
r 替换光标所在处的字符
R 替换光标所到之处的字符,直到按下ESC键为止

Vim的末行模式命令集

在使用末行模式之前,需要保证此时处于正常模式,再按shift+;(:)进入末行模式。

指令 功能
set nu 在文件中的每一行前面列出行号
set nonu 取消文件中的行号
vs 文件 多文件操作
ctrl+w+w 文件之间的切换
w 保存当前的文件
q 退出当前文件
! 强制执行某个指令

Vim的配置

通常我们可以自己配置vim,vim的配置步骤为

  • 在用户目录下创建一个文件.vimrc
  • 在文件中添加配置选项即可

配置选项可以百度,这里举例

  • 设置语法高亮:syntax on
  • 显示行号:set nu
  • 设置缩进的空格数:set shiftwidth = 4

Linux编译器 —— gcc/g++

vim编辑器编写代码后,c程序使用gcc编译器,c++程序使用g++编译器。
使用方法:

  • gcc xxx.c

默认生产的可执行文件为a.out,要想生成指定文件名可用-o+文件名。

  • gcc xxx.c -o xxx

在学习gcc编译器之前,先回顾一下c程序编译链接的过程:

  • 预处理(进行宏替换)
  • 编译(生成汇编)
  • 汇编(汇编转为机器码)
  • 链接(生成可执行文件或库文件)

gcc编译.c文件时,可以通过不同选项实现查看各个过程的编译结果。
示例程序test.c如下:

  1 #include <stdio.h>
  2 #define NUM 10
  3 int main()
  4 {
    
    
  5   // hello world
  6   int a = NUM + 1;
  7   printf("NUM = %d\n", a);                                                               
  8 }  
  • 预处理过程
  • gcc -E test.c -o test.i

vim test.i 查看内容发现预处理过程包括宏定义,文件包含,条件编译和去注释等
在这里插入图片描述

  • 编译过程
  • gcc -S test.i -o test.s

vim test.s 查看内容发现,在这个阶段首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,把代码翻译成汇编语言
在这里插入图片描述

  • 汇编过程
  • gcc -c test.s -o test.o

vim test.o查看内容发现,程序已经从汇编指令转为机器码
在这里插入图片描述

  • 链接过程
  • gcc test.o -o test

在这里插入图片描述
链接过程主要是将自己写的程序与函数或第三方库关联起来,生成可执行程序。
这里函数库分为静态库和动态库两种。

  • 静态库是指编译链接的时候,将所有库文件的代码全部添加到可执行代码中,在运行时不需要库文件,但是静态库文件较大,其后缀为.a
  • 动态库在程序执行时由运行时链接文件加载库,节省系统的开销,动态库文件较小,其后缀为.so

gcc 默认生成的可执行文件是动态链接的,可以通过file命令查看验证。当然要想可执行文件是静态链接,可以通过-static命令。
在这里插入图片描述
PS:有些服务器没有安装C语言的静态库,运行gcc -static test.c -o test_static会出现can not found -lc的错误,这里只需要运行sudo yum install glibc-static,安装静态库即可。
gcc命令选项:

选项 功能
-E 只激活预处理,不生产文件
-S 编译到汇编语言
-c 编译到目标代码
-o 生成指定文件
-g 生成调试信息
-static 采用静态链接库文件

Linux调试器 —— gdb

当使用gcc编译程序时,出现错误,又想和vs一样进行程序调试,怎么办呢?
在Linux下也有支持程序调试的调试器:gdb
用gdb调试的指令为:

  • gdb 文件

此时文件必须带有调试信息,使用-g指令让可执行程序带有调试信息。
在这里插入图片描述
使用ctrl+dquit退出
常用的调试命令:

list/l —— 显示源代码
r/run —— 运行程序
n/next —— 单条运行
s/step —— 进入函数调用
break/b 行号 —— 在某一行设置断点
info b —— 查看断点信息
delete breakpoints n —— 删除序号为n的断点
display 变量名 —— 跟踪查看变量的值
undisplay n —— 取消跟踪查看序号为n的变量
p 变量名 —— 打印变量值
finish —— 执行完当前函数
continue —— 执行到下一断点
until 行号 —— 执行到指定行

Linux项目管理器 —— make/Makefile

实现一个项目通常会有很多文件,Linux通过Makefile来管理这些文件的运行先后等复杂操作。
make是一个指令Makefile是一个文件,两者搭配使用,实现项目自动化构建。
Makefile文件的书写格式为:

目标文件:依赖文件
gcc [选项] 依赖文件 -o 目标文件

以mytest.c为例,若想把预处理、编译、汇编和链接过程的文件都生成,Makefile的书写为:
在这里插入图片描述
make命令运行结果:
在这里插入图片描述
要想删除make运行得到的可执行文件,则只需要在Makefile文件中加入:
在这里插入图片描述
然后执行make clean即可。
在这里插入图片描述
***PS:***.PHONY是一个修饰符号,让其后面的命令总是可执行

猜你喜欢

转载自blog.csdn.net/weixin_42301369/article/details/123118182
今日推荐