Ubuntu
软件包管理器在 **Ubuntu**
系统中,软件包管理器用于安装、更新、删除和管理软件包。Ubuntu
主要使用 APT
(Advanced Package Tool
) 作为软件包管理系统,并提供了多种工具和命令来简化软件管理
Ubuntu
软件包管理的基本概念软件包(Package
)
Ubuntu
使用 DEB
(Debian Package
) 格式的包。仓库(Repository
)
Ubuntu
的软件包存储在官方的在线仓库中,也支持第三方仓库(PPA
)。/etc/apt/sources.list
文件中。APT
Ubuntu
的主要软件包管理工具,基于命令行。管理 .deb
格式的软件包,自动处理依赖关系。
APT
常用命令1.更新仓库
sudo apt update
2.升级系统
sudo apt upgrade
sudo apt full-upgrade
3.安装软件包
sudo apt install package_name
vim
、curl
等)。4.删除软件包
sudo apt remove package_name
sudo apt purge package_name
5.搜索软件包
apt search package_name
6.显示包信息
apt show package_name
7.清理缓存
sudo apt autoremove
sudo apt clean
Vim
(Vi IMproved
)是一种功能强大的文本编辑器,是经典编辑器 Vi
的增强版本,广泛应用于程序开发、系统配置等领域。它以高效的键盘操作、灵活的配置和强大的扩展能力著称,被称为“编辑器之神”。
Vim
的基本概念Vim
的特点
NERDTree
、YouCompleteMe
),可自定义功能。Linux
、macOS
、Windows
等多种操作系统。启动 Vim
vim filename
Vim
的工作模式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-essential
sudo 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.i
2.-S
选项,在编译后停下来,由.i
文件生成 .s
文件
gcc -S code.i -o code.s
3.-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!😁✨🎞