首页 教程 开发工具 全面掌握APT、Vim和GCC:Ubuntu软件管理与开发指南

全面掌握APT、Vim和GCC:Ubuntu软件管理与开发指南

文章目录

  • `Ubuntu` 软件包管理器
    • `Ubuntu` 软件包管理的基本概念
    • 常用的软件包管理器`APT`
    • `APT`常用命令
  • vim
    • `Vim` 的基本概念
    • `Vim` 的工作模式
    • Vim 的基本操作
  • gcc/g++
    • Ubuntu 安装 `gcc` / `g++`
    • 编译知识
    • 使用方法
    • 动静态函数库

Ubuntu 软件包管理器

**Ubuntu** 系统中,软件包管理器用于安装、更新、删除和管理软件包。Ubuntu 主要使用 APTAdvanced Package Tool 作为软件包管理系统,并提供了多种工具和命令来简化软件管理。


Ubuntu 软件包管理的基本概念

软件包(Package

  • 软件包是包含程序文件、元数据和依赖信息的压缩文件。
  • Ubuntu 使用 DEBDebian Package 格式的包。

仓库(Repository

  • Ubuntu 的软件包存储在官方的在线仓库中,也支持第三方仓库(PPA)。
  • 仓库的地址保存在 /etc/apt/sources.list 文件中。

常用的软件包管理器APT

Ubuntu 的主要软件包管理工具,基于命令行。管理 .deb 格式的软件包,自动处理依赖关系。

APT常用命令

1.更新仓库

sudoapt update

  • 更新软件包的缓存列表,检查是否有可用的更新。

2.升级系统

sudo apt upgrade

  • 升级已安装的软件包。

sudo apt full-upgrade

  • 升级所有软件包,包含删除旧包和安装新依赖。

3.安装软件包

sudo apt install package_name

  • 安装指定软件包(如 vimcurl 等)。

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

VimVi IMproved)是一种功能强大的文本编辑器,是经典编辑器 Vi 的增强版本,广泛应用于程序开发、系统配置等领域。它以高效的键盘操作、灵活的配置和强大的扩展能力著称,被称为“编辑器之神”。

Vim 的基本概念

Vim 的特点

  1. 多模式编辑
    • 普通模式:浏览、移动光标、复制、粘贴、删除等操作。
    • 插入模式:插入文本。
    • 命令模式:执行保存、退出、替换等命令。
    • 可视模式:选择文本块,进行批量操作。
  2. 高效性
    • 以键盘为核心操作方式,减少鼠标使用,提高编辑效率。
  3. 扩展性
    • 支持插件(如 NERDTreeYouCompleteMe),可自定义功能。
  4. 轻量级
    • 启动速度快,运行占用资源少。
  5. 跨平台支持
    • 适用于 LinuxmacOSWindows 等多种操作系统。

启动 Vim

vim filename

  • 如果文件不存在,会新建一个文件。
  • 进入后默认处于 普通模式

Vim 的工作模式

  1. 普通模式:默认进入的模式,用于浏览和编辑操作(非直接输入文本);切换到普通模式:按 ESC
  2. 插入模式:用于文本输入;进入插入模式:按 i(从光标前开始插入);
  3. 命令模式:用于执行命令(如保存、退出);从普通模式进入:按 :
  4. 可视模式:用于选择文本块;进入可视模式:按 v

快速切换

  • 普通模式到插入模式:ia
  • 插入模式到普通模式:ESC
  • 普通模式到命令模式::
  • 普通模式到可视模式:v

Vim 的基本操作

普通模式

移动光标:

  • 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++

gccg++GNU项目的一部分,是用于编译和处理CC++等多种编程语言的编译工具。

gcc 是用于 C 语言编译,g++是用于 C++ 编译

Ubuntu 安装 gcc / g++

运行以下指令来安装 gcc / g++

sudoapt-get update -ysudoaptinstall build-essential

  • sudo apt-get update -y :检查软件包更新
  • sudo apt install build-essentialbuild-essential 包含构建程序所需的几个工具。包括 g++gccmakeGNU调试器。

验证 gcc / g++ 是否安装成功:

gcc --version g++ --version

如果出现以下情况,成功检查到版本,则说明安装成功。
全面掌握APT、Vim和GCC:Ubuntu软件管理与开发指南

编译知识

我们知道,源文件需要经过编译才可以生成可执行程序,而编译又可以分为以下4个步骤:

  1. 预处理
    • 头文件展开
    • 宏替换
    • 条件编译
    • 去掉注释

经过预处理后源文件(.c 或者 .cpp)就变成了 .i 文件。

  1. 编译
    检查语法,生成汇编代码,.i 文件生成 .s 文件

  2. 汇编
    .s 文件的汇编代码转换成二进制代码,.s 文件生成 .o 目标文件

  3. 链接
    将多个目标文件与所需的库函数链接起来,生成可执行程序

使用方法

我们这里就以 gcc 做演示,g++ 也是同样的使用方式。

gcc [options] file.c -o output

代码解释:

  • -o 的作用是指定输出文件名

  • 整段代码的作用是 file.cgcc 编译生成 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

全面掌握APT、Vim和GCC:Ubuntu软件管理与开发指南

动静态函数库

我们都知道,如果我们的代码中使用到了一些库函数,我们就必须加上它的头文件,比如 printf 需要加上 <stdio.h> ,但是头文件也只是包含了库函数的声明,并没有其实现,这些库函数的实现其实是在特定文件路径的文件里。

Linux 系统中,这些库函数的实现是在 libc.so.6 的库文件(函数库)中,存放在在 /lib/x86_64-linux-gnu 路径里 。

ldd 指令可以查看可执行程序具体依赖于的库。
全面掌握APT、Vim和GCC:Ubuntu软件管理与开发指南

函数库是指为程序开发提供的预定义函数或功能集合,我们可以直接调用这些函数,无需从头写代码,提高开发效率,确保代码的可靠性和一致性。函数库可以分为静态库动态库两种形式。

1.静态库(Static Library

静态库在编译时会被直接链接到目标程序中,生成的可执行文件包含了库中的所有必要代码。因此,在程序运行时不需要依赖外部的库文件。

  • 文件格式:通常以.aLinux)或.libWindows)为扩展名。
  • 优点:不依赖外部文件,运行时更稳定;链接后的程序独立性强,分发时只需提供一个可执行文件。
  • 缺点:可执行文件较大,因为包含了所有库代码;更新库时需要重新编译程序。

静态链接

gcc code.c -o mycode -static

全面掌握APT、Vim和GCC:Ubuntu软件管理与开发指南
2.动态库(Dynamic Library

动态库在程序运行时加载,代码不直接嵌入到可执行文件中,而是以外部文件存在,允许多个程序共享同一个动态库。

  • 文件格式:通常以.soShared ObjectLinux)或.dllDynamic Link LibraryWindows)为扩展名。
  • 优点:可执行文件更小,节省磁盘空间和内存;库的更新只需替换动态库文件,不需要重新编译程序。
  • 缺点:程序运行时需要依赖动态库文件,可能导致分发复杂性增加;如果动态库丢失或版本不匹配,程序可能无法运行。

动态链接

gcc code.c -o code

全面掌握APT、Vim和GCC:Ubuntu软件管理与开发指南

使用 file 指令可以查看可执行程序链接库的类型。

file filename

全面掌握APT、Vim和GCC:Ubuntu软件管理与开发指南


Have a good day😏

See you next time, guys!😁✨🎞
全面掌握APT、Vim和GCC:Ubuntu软件管理与开发指南

评论(0)条

提示:请勿发布广告垃圾评论,否则封号处理!!

    猜你喜欢
    【MySQL】用户管理

    【MySQL】用户管理

     服务器/数据库  2个月前  2.15k

    我们推荐使用普通用户对数据的访问。而root作为管理员可以对普通用户对应的权限进行设置和管理。如给张三和李四这样的普通用户权限设定后。就只能操作给你权限的库了。

    Cursor Rules 让开发效率变成10倍速

    Cursor Rules 让开发效率变成10倍速

     服务器/数据库  2个月前  1.21k

    在AI与编程的交汇点上,awesome-cursorrules项目犹如一座灯塔,指引着开发者们驶向更高效、更智能的编程未来。无论你是经验丰富的老手,还是刚入行的新人,这个项目都能为你的编程之旅增添一抹亮色。这些规则文件就像是你私人定制的AI助手,能够根据你的项目需求和个人偏好,精确地调教AI的行为。突然间,你会发现AI不仅能理解Next.js的最佳实践,还能自动应用TypeScript的类型检查,甚至主动提供Tailwind CSS的类名建议。探索新的应用场景,推动AI辅助编程的边界。

    探索Django 5: 从零开始,打造你的第一个Web应用

    探索Django 5: 从零开始,打造你的第一个Web应用

     服务器/数据库  2个月前  1.12k

    Django 是一个开放源代码的 Web 应用程序框架,由 Python 写成。它遵循 MVT(Model-View-Template)的设计模式,旨在帮助开发者高效地构建复杂且功能丰富的 Web 应用程序。随着每个版本的升级,Django 不断演变,提供更多功能和改进,让开发变得更加便捷。《Django 5 Web应用开发实战》集Django架站基础、项目实践、开发经验于一体,是一本从零基础到精通Django Web企业级开发技术的实战指南《Django 5 Web应用开发实战》内容以。

    MySQL 的mysql_secure_installation安全脚本执行过程介绍

    MySQL 的mysql_secure_installation安全脚本执行过程介绍

     服务器/数据库  2个月前  1.08k

    mysql_secure_installation 是 MySQL 提供的一个安全脚本,用于提高数据库服务器的安全性

    【MySQL基础篇】概述及SQL指令:DDL及DML

    【MySQL基础篇】概述及SQL指令:DDL及DML

     服务器/数据库  2个月前  483

    数据库是长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。数据库不仅仅是数据的简单堆积,而是遵循一定的规则和模式进行组织和管理的。数据库中的数据可以包括文本、数字、图像、音频等各种类型的信息。

    Redis中的哨兵(Sentinel)

    Redis中的哨兵(Sentinel)

     服务器/数据库  2个月前  309

    ​ 上篇文章我们讲述了Redis中的主从复制(Redis分布式系统中的主从复制-CSDN博客),本篇文章针对主从复制中的问题引出Redis中的哨兵,希望本篇文章会对你有所帮助。