
Ubuntu 软件包管理器在 **Ubuntu** 系统中,软件包管理器用于安装、更新、删除和管理软件包。Ubuntu 主要使用 APT(Advanced Package Tool) 作为软件包管理系统,并提供了多种工具和命令来简化软件管理
Ubuntu 软件包管理的基本概念软件包(Package)
Ubuntu 使用 DEB(Debian Package) 格式的包。仓库(Repository)
Ubuntu 的软件包存储在官方的在线仓库中,也支持第三方仓库(PPA)。/etc/apt/sources.list 文件中。APTUbuntu 的主要软件包管理工具,基于命令行。管理 .deb 格式的软件包,自动处理依赖关系。
APT常用命令1.更新仓库
sudo apt update2.升级系统
sudo apt upgradesudo apt full-upgrade3.安装软件包
sudo apt install package_namevim、curl 等)。4.删除软件包
sudo apt remove package_namesudo apt purge package_name5.搜索软件包
apt search package_name6.显示包信息
apt show package_name7.清理缓存
sudo apt autoremovesudo apt cleanVim(Vi IMproved)是一种功能强大的文本编辑器,是经典编辑器 Vi 的增强版本,广泛应用于程序开发、系统配置等领域。它以高效的键盘操作、灵活的配置和强大的扩展能力著称,被称为“编辑器之神”。
Vim 的基本概念Vim 的特点
NERDTree、YouCompleteMe),可自定义功能。Linux、macOS、Windows 等多种操作系统。启动 Vim
vim filenameVim 的工作模式ESC。i(从光标前开始插入);:。v。快速切换
i 或 a。ESC。:。v。普通模式
移动光标:
gg :光标移动到开头G :光标移动到结尾num + G :光标移动到指定行^ :光标移动到当前行开头$ :光标移动到当前行结尾h :光标左移l :光标右移k :光标上移j :光标下移w :光标移动到下一个字的开头e :光标移动到下一个字的结尾b :光标移动到上一个字的开头删除:
x :删除光标位置的字符num + x :删除从光标位置开始的 num 个字符X :删除光标位置的前一个字符num + X :删除光标位置前面的 num 个字符dd :删除当前行复制:
yy : 复制当前行num + yy : 复制从光标开始的 num 行p : 复制粘贴内容到当前行其他:
u : 撤销操作ctrl + r : 撤销的恢复shift + ~ :切换大小写搜索与替换:
/text :搜索文本?text :向上搜索n :查找下一个r :替换光标所在的字符R :替换光标所到之处的字符,按下 ESC 为止命令模式
:w : 保存文件:q :退出 Vim:q! :强制退出wq :保存并退出:vs file :分屏模式ctrl + ww :光标切换另一个窗口gcc 和 g++ 是 GNU项目的一部分,是用于编译和处理C、C++等多种编程语言的编译工具。
gcc 是用于 C 语言编译,g++是用于 C++ 编译
gcc / g++运行以下指令来安装 gcc / g++ :
sudo apt-get update -y
sudo apt install build-essentialsudo apt-get update -y :检查软件包更新sudo apt install build-essential : build-essential 包含构建程序所需的几个工具。包括 g++、gcc、make、GNU调试器。验证 gcc / g++ 是否安装成功:
gcc --version
g++ --version如果出现以下情况,成功检查到版本,则说明安装成功。

我们知道,源文件需要经过编译才可以生成可执行程序,而编译又可以分为以下4个步骤:
经过预处理后源文件(.c 或者 .cpp)就变成了 .i 文件。
.i 文件生成 .s 文件。
.s 文件的汇编代码转换成二进制代码,由 .s 文件生成 .o 目标文件。
我们这里就以 gcc 做演示,g++ 也是同样的使用方式。
gcc [options] file.c -o output代码解释:
-o 的作用是指定输出文件名
file.c 用 gcc 编译生成 output 可执行文件
./output
gcc file.c ,默认生成的是 a.out 文件。
如果我们想要编译过程在具体某个步骤停下来,生成编译过程中的临时文件,我们可以通过带特定选项来实现。
1.-E 选项,在预处理后停下来,由 .c 文件生成 .i 文件
gcc -E code.c -o code.i2.-S 选项,在编译后停下来,由.i 文件生成 .s 文件
gcc -S code.i -o code.s3.-c 选项,在汇编后停下来,由 .s 文件生成 .o 目标文件
gcc -c code.s -o code.o
我们都知道,如果我们的代码中使用到了一些库函数,我们就必须加上它的头文件,比如 printf 需要加上 <stdio.h> ,但是头文件也只是包含了库函数的声明,并没有其实现,这些库函数的实现其实是在特定文件路径的文件里。
在 Linux 系统中,这些库函数的实现是在 libc.so.6 的库文件(函数库)中,存放在在 /lib/x86_64-linux-gnu 路径里 。
ldd 指令可以查看可执行程序具体依赖于的库。

函数库是指为程序开发提供的预定义函数或功能集合,我们可以直接调用这些函数,无需从头写代码,提高开发效率,确保代码的可靠性和一致性。函数库可以分为静态库和动态库两种形式。
1.静态库(Static Library)
静态库在编译时会被直接链接到目标程序中,生成的可执行文件包含了库中的所有必要代码。因此,在程序运行时不需要依赖外部的库文件。
.a(Linux)或.lib(Windows)为扩展名。静态链接
gcc code.c -o mycode -static
2.动态库(Dynamic Library)
动态库在程序运行时加载,代码不直接嵌入到可执行文件中,而是以外部文件存在,允许多个程序共享同一个动态库。
.so(Shared Object,Linux)或.dll(Dynamic Link Library,Windows)为扩展名。动态链接
gcc code.c -o code 
使用 file 指令可以查看可执行程序链接库的类型。
file filename
Have a good day
See you next time, guys!😁✨🎞