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

server/2025/2/26 23:34:15/

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

文章目录


linux%E8%BD%AF%E4%BB%B6%E5%8C%85%E7%AE%A1%E7%90%86%E5%99%A8---apt" rel="nofollow">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%E7%BC%96%E8%BE%91%E5%99%A8---vim" rel="nofollow">Linux编辑器 - vim

vim_119">vim的基本概念

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

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

vim_127">vim下各模式的切换

指令: vim 文件名

# 示例:
vim test.c

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

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

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

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

vim_149">vim命令模式各命令汇总

移动光标:

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

删除:

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

复制粘贴:

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

撤销:

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

vim_173">vim底行模式各命令汇总

保存退出:

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

linux%E7%BC%96%E8%AF%91%E5%99%A8---gccg++" rel="nofollow">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%E8%B0%83%E8%AF%95%E5%99%A8---gdb" rel="nofollow">Linux调试器 - gdb

gdb使用须知

程序发布方式:

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

gdb命令汇总

进入gdb

gdb ./test_debug

调试命令

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

linux%E9%A1%B9%E7%9B%AE%E8%87%AA%E5%8A%A8%E5%8C%96%E6%9E%84%E5%BB%BA%E5%B7%A5%E5%85%B7---makemakefile" rel="nofollow">Linux项目自动化构建工具 - make/Makefile

make/Makefile的重要性

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

依赖关系和依赖方法

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

示例:
test.o: test.cgcc -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%E7%AC%AC%E4%B8%80%E4%B8%AA%E5%B0%8F%E7%A8%8B%E5%BA%8F---%E8%BF%9B%E5%BA%A6%E6%9D%A1" rel="nofollow">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;
}


http://www.ppmy.cn/server/170879.html

相关文章

安装 Milvus Java SDK

本主题介绍如何为 Milvus 安装 Milvus Java SDK。 当前版本的 Milvus 支持 Python、Node.js、GO 和 Java SDK。 要求 Java&#xff08;8 或更高版本&#xff09;Apache Maven 或 Gradle/Grails 安装 Milvus Java SDK 运行以下命令安装 Milvus Java SDK。 Apache Maven &…

Node.js 中 fs 模块的高级用法

目录 1. 流式文件处理 示例&#xff1a;大文件复制 2. 文件监控 示例&#xff1a;使用 fs.watch 监控文件变化 3. 异步递归操作 示例&#xff1a;异步递归遍历目录 4. 文件权限管理 示例&#xff1a;修改文件权限 5. 原子操作 示例&#xff1a;原子重命名文件 在 Nod…

Maven 基础环境搭建与配置(一)

一、Maven 初印象 在 Java 开发的广袤天地里&#xff0c;Maven 就像是一位神通广大的 “大管家”&#xff0c;为开发者们排忧解难&#xff0c;让项目管理与构建变得轻松高效。它是一个强大的项目管理和构建自动化工具&#xff0c;基于项目对象模型&#xff08;POM&#xff09;…

朴素贝叶斯法

文章目录 贝叶斯定理朴素贝叶斯法的学习与分类条件独立假设朴素贝叶斯的后验概率最大化准则朴素贝叶斯的基本公式 朴素贝叶斯法的参数估计极大似然估计 贝叶斯定理 前置知识&#xff1a;条件概率、全概率、贝叶斯公式 推荐视频&#xff0c;看完视频后搜索博客了解先验概率、后…

Node.js net 模块教程

Node.js net 模块教程 简介 Node.js 的 net 模块提供了用于实现 TCP 服务器和客户端的异步网络 API。它是 Node.js 网络功能的核心&#xff0c;为上层模块如 HTTP、HTTPS 等提供了基础支持。本教程将全面介绍 net 模块的使用方法和最佳实践。 引入 net 模块 const net req…

Day28 第八章 贪心算法 part01

一. 学习文章及资料 理论基础 455.分发饼干 376.摆动序列 53.最大子序和 二. 学习内容 1. 理论基础 贪心算法无规律&#xff01; 一般如想到局部最优&#xff0c;好像能推出全局最优&#xff0c;并且无明显反例&#xff0c;那就试一试&#xff01; 2. 分发饼干 (1) 解题思…

从零开始开发纯血鸿蒙应用之网页浏览

从零开始开发纯血鸿蒙应用 〇、前言一、优化菜单交互1、BuilderFunction.ets2、改造 PageTitleBar 二、网址打开1、方式选择1、使用浏览器打开2、内部打开2.1、声明权限2.2、封装 WebViewPage2.2.1、组件字段2.2.2、aboutToAppear2.2.3、onBackPress2.2.4、标题栏2.2.4、网页内…

c/c++蓝桥杯经典编程题100道(22)最短路径问题

最短路径问题 ->返回c/c蓝桥杯经典编程题100道-目录 目录 最短路径问题 一、题型解释 二、例题问题描述 三、C语言实现 解法1&#xff1a;Dijkstra算法&#xff08;正权图&#xff0c;难度★★&#xff09; 解法2&#xff1a;Bellman-Ford算法&#xff08;含负权边&a…