Linux环境基础开发工具的使用(apt、vim、gcc、g++、gdb、make/Makefile)

发布于:2025-02-27 ⋅ 阅读:(15) ⋅ 点赞:(0)

Linux环境基础开发工具的使用(apt、vim、gcc、g++、gdb、make/Makefile)

文章目录


Linux软件包管理器 - apt

Linux下安装软件的方式

在Linux下安装软件的方法大致有以下三种:

  1. 下载到程序的源代码,自行进行编译,得到可执行程序。
  2. 获取 .deb 安装包,通过 dpkg 命令进行安装(未解决软件的依赖关系)。
  3. 通过 apt 进行安装软件(常用)。

认识apt

apt 是一个在 Debian 和 Ubuntu 系列操作系统中常用的软件包管理器,能够从指定的服务器自动下载 .deb 包并安装,可以自动处理依赖性关系。

# 示例:
sudo apt install lrzsz

注意: 一个服务器同一时刻只允许一个 apt 进行安装,不能在同一时刻同时安装多个软件。

由于 apt 是从服务器上下载 .deb 包,所以在下载时必须联网,可以通过 ping 指令判断当前云服务器是否联网。

# 示例:
ping -c 4 google.com

查找软件包

# 示例:
apt list | grep lrzsz

安装软件

指令: sudo apt install 软件名

# 示例:
sudo apt install lrzsz

apt 会自动找到需要下载的所有软件包,并在确认后进行安装。安装完成时,会显示 “complete”。

如何实现本地机器和云服务器之间的文件互传

安装了 lrzsz 后,可以使用以下命令上传和下载文件:

  • 上传文件

    rz -E
    
  • 下载文件

    sz 文件名
    
# 示例:
sz test.txt

卸载软件

指令: sudo apt remove 软件名

# 示例:
sudo apt remove lrzsz

Linux编辑器 - vim

vim的基本概念

vim 是一个多模式的文本编辑器,常用于编辑文本和编程代码。在 vim 中,最常用的三种模式是:

  1. 命令模式(Normal mode):用于控制屏幕光标的移动、字符、字或行的删除、复制粘贴等操作。
  2. 插入模式(Insert mode):允许文字输入。
  3. 底行模式(Command mode):用于文件保存、退出、查找字符串等操作。

vim下各模式的切换

指令: vim 文件名

# 示例:
vim test.c

进入 vim 后默认为命令模式(普通模式),要输入文字需切换到插入模式。

  • 命令模式 切换至 插入模式
    输入 i:在当前光标处进入插入模式。
    输入 a:在当前光标的后一位置进入插入模式。
    输入 o:在当前光标处新起一行进入插入模式。

  • 命令模式 切换至 底行模式
    输入 Shift+; 即可,实际上就是输入 :

  • 插入模式底行模式 切换至 命令模式
    Esc 键即可。

vim命令模式各命令汇总

移动光标:

  • k:光标上移。
  • j:光标下移。
  • h:光标左移。
  • l:光标右移。

删除:

  • x:删除光标所在位置的字符。
  • dd:删除光标所在行。

复制粘贴:

  • yy:复制光标所在行。
  • p:将已复制的内容在光标的下一行粘贴。

撤销:

  • u:撤销。
  • Ctrl+r:恢复刚刚的撤销。

vim底行模式各命令汇总

保存退出:

  • w:保存文件。
  • q:退出 vim,如果无法离开 vim,可在 q 后面跟一个 ! 表示强制退出。
  • wq:保存并退出。

Linux编译器 - gcc/g++

gcc/g++的作用

gccg++ 是 GNU 提供的 C 和 C++ 编译器,常用于将源代码转换为机器能够执行的二进制文件。编译过程包括四个步骤:

  1. 预处理(头文件展开、去注释、宏替换、条件编译)。
  2. 编译(C代码翻译成汇编语言)。
  3. 汇编(汇编代码转为二进制目标代码)。
  4. 链接(将汇编过程产生的二进制代码进行链接)。

gcc/g++语法

语法: gcc/g++ [选项] [文件]

常用选项:

  • -E:只进行预处理,不生成文件。
  • -S:编译到汇编语言,不进行汇编和链接。
  • -c:编译到目标代码
  • -o:将处理结果输出到指定文件。
示例:
gcc -E test.c -o test.i   # 只进行预处理
gcc -S test.i -o test.s   # 编译到汇编
gcc -c test.s -o test.o   # 汇编成目标文件
gcc test.o -o test        # 链接成可执行文件

静态库与动态库

静态库是指编译链接时,把库文件的代码全部加入到可执行文件当中,生成的文件较大。但运行时不再需要库文件。静态库一般以 .a 为后缀。

动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件当中,而是在程序运行时由链接文件加载库,这样可以节省系统的开销。

动态库一般以 .so 为后缀。

gcc test.c -o test_s -static

生成的可执行文件使用静态链接。


Linux调试器 - gdb

gdb使用须知

程序发布方式:

  • debug版本:程序本身会被加入更多的调试信息,以便于进行调试。
  • release版本:不会添加任何调试信息,是不可调试的。

gdb命令汇总

进入gdb

gdb ./test_debug

调试命令

  • run:运行代码。
  • next:逐过程调试。
  • step:逐语句调试。
  • continue:继续执行到下一个断点。

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

make/Makefile的重要性

Makefile 用于管理程序的自动化编译,指定文件之间的依赖关系及构建方法。

依赖关系和依赖方法

文件 A 的变更会影响文件 B,那么文件 B 就依赖于文件 A。

示例:
test.o: test.c
    gcc -c test.c -o test.o

多文件编译

当工程中有多个源文件时,使用 make 工具按文件依赖顺序进行编译。

示例:
gcc -c test.c -o test.o
gcc -c main.c -o main.o
gcc test.o main.o -o mytest

项目清理

clean:
    rm -f *.o mytest

Linux第一个小程序 - 进度条

行缓冲区的概念

行缓冲区影响数据的显示,数据会先写入缓冲区,直到缓冲区满或者程序结束时才显示。

示例:
printf("hello world");
sleep(3);

\r 和 \n

  • \r 回车:将光标移到当前行行首。
  • \n 换行:将光标移到下一行。
示例:
printf("Hello World\r");
printf("Goodbye World\n");

进度条代码及效果展示

示例代码:
#include <stdio.h>
#include <unistd.h>

void show_progress_bar(int progress) {
    printf("\r[");
    int i;
    for (i = 0; i < 50; i++) {
        if (i < progress / 2) {
            printf("#");
        } else {
            printf(" ");
        }
    }
    printf("] %d%%", progress);
    fflush(stdout);
}

int main() {
    for (int i = 0; i <= 100; i++) {
        show_progress_bar(i);
        usleep(50000); // Sleep for 50ms
    }
    printf("\nDone!\n");
    return 0;
}