前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【Linux篇】让开发事半功倍:Linux 开发工具的实战指南(上篇)

【Linux篇】让开发事半功倍:Linux 开发工具的实战指南(上篇)

作者头像
熬夜学编程的小王
发布2025-03-27 09:00:46
发布2025-03-27 09:00:46
760
举报
文章被收录于专栏:编程小王编程小王
Linux 开发工具的魔力:如何提升你的开发速度

💬 欢迎讨论:如果你在学习过程中有任何问题或想法,欢迎在评论区留言,我们一起交流学习。你的支持是我继续创作的动力! 👍 点赞、收藏与分享:觉得这篇文章对你有帮助吗?别忘了点赞、收藏并分享给更多的小伙伴哦!你们的支持是我不断进步的动力! 🚀 分享给更多人:如果你觉得这篇文章对你有帮助,欢迎分享给更多对Linux OS感兴趣的朋友,让我们一起进步!

引言

在现代的操作系统中,软件包是将应用程序、工具、库文件及其依赖项打包成一个独立单元的重要手段。它为开发人员、系统管理员和终端用户提供了简化安装、管理和升级软件的方式,尤其在 Linux 环境下,软件包是保证系统稳定性和高效性的关键组成部分。

一.

\color{RedOrange}软件包管理器

1.1

\color{Purple}什么是软件包

在 Linux 中,软件包是指已经打包好的软件应用程序或库文件,通常包含了该软件的源代码、可执行文件、依赖库、配置文件等,目的是方便在 Linux 系统上进行安装、更新和卸载。

1.2

\color{Purple}Linux安装软件方法
  • 源代码安装
  • rpm包安装
  • 包管理器安装(yum/apt) Centos环境使用前者,Ubuntu使用后者

rpm包安装问题:

RPM 是一种强大的软件包管理工具,并且与许多 Linux 发行版(尤其是 Red Hat 系列)紧密集成,但它也存在一些局限性,特别是在依赖管理、软件源管理和更新等方面。为了弥补这些不足,用户通常会依赖像 YUM、DNF 等工具,这些工具在后台使用 RPM 但提供了更丰富的功能,如自动依赖解决、仓库管理、自动更新等。因此,虽然 RPM 本身是有效的安装工具,配合高级包管理器的使用,能够极大提升用户体验。

前面两种安装方法麻烦且很繁琐,问题多。所以小编很不推荐。

\color{Yellow}本篇文章将详细介绍如何在Ubuntu环境下安装软件

二.

\color{RedOrange}APT具体操作

2.1

\color{Purple}查看软件包

命令格式:

apt search 软件包

功能

  • 在仓库中搜索与关键字匹配的软件包,提供包名称和简短描述,帮助你快速找到相关软件包。

示例:

apt search lrzsz

输出内容:命令会列出所有匹配的包及其简短描述。例如:

Sorting… Done Full Text Search… Done cutecom/focal 0.30.3-1build1 amd64 Graphical serial terminal, like minicom lrzsz/focal,now 0.12.21-10 amd64 installed Tools for zmodem/xmodem/ymodem file transfer

简单说明

  • 如果该包已安装,会标明 installed。
  • 如果该包是自动安装的依赖包,可能会显示 automatic。

2.2

\color{Purple}安装软件

命令格式

sudo apt install -y 软件包

  • 友情提醒:

root用户不需要sudo提权,而普通用户需要提权 使用sudo提权

示例:

sudo apt install -y lrzsz

2.3

\color{Purple}卸载软件

命令格式:

sudo apt install -y 软件包

  • 此命令也需要提权!!!

示例:

sudo apt install -y lrzsz

  • apt remove -y lrzsz 是用于在基于 Debian 的系统中卸载 lrzsz 软件包的命令,并通过 -y 自动确认删除操作。它删除了软件包的二进制和库文件,但保留配置文件。如果你不再需要这个软件并且想完全清除它,可以使用 apt purge。

2.4

\color{Purple}安装源
  • 查看Ubuntu系统标准源命令格式:

cat /etc/apt/sources.list

  • 通过 cat /etc/apt/sources.list 命令,你可以查看当前系统中 APT 使用的所有软件源,这对于排查软件包下载问题、修改仓库源或切换到其他镜像源等操作非常有用。

三.

\color{RedOrange}vim编辑器

Vim 是一款高度可定制化、功能强大的文本编辑器,它源自于 Vi 编辑器,并在其基础上进行扩展和改进。Vim 的设计目标是为程序员提供一个高效的编辑环境,同时支持多种编程语言和文件格式的处理。

3.1

\color{Purple}Vim 编辑器的背景
  • 起源:Vim 是由 Bram Moolenaar 在 1991 年开发的。它是从 Vi 编辑器派生而来的,Vi 编辑器最初由 Bill Joy 在 1976 年开发,并在 Unix 系统中成为标准文本编辑器之一。
  • Vim 的命名:Vim 的名字来源于 “Vi IMproved”(Vi 改进版),表示它在 Vi 的基础上做了许多增强和改进,例如支持多级撤销、语法高亮、插件扩展等。
  • 跨平台性:Vim 目前已支持多种操作系统,包括 Linux、Windows、macOS 等,这使得它在开发者社区中非常受欢迎。
  • 目标用户:Vim 主要面向开发者,尤其是那些需要频繁编辑代码和处理文本的程序员。由于它的强大功能和高效的键盘操作,Vim被认为是一款适合于高度熟练用户的编辑器。

3.2

\color{Purple}vim基本概念
3.2.1 vim常用三种模式

vim具有很多种模式,掌握三种模式即可。

命令模式(commandmode):命令模式是 Vim 启动后的默认模式,在该模式下,所有按键的输入都是用来执行编辑命令,而不是直接输入字符。用户在命令模式下可以进行各种文本操作,如移动光标、删除文本、复制粘贴等。

插⼊模式(Insert mode):插入模式是用于直接输入文本的模式。在插入模式下,Vim 会像传统的文本编辑器一样接收字符输入。你可以在插入模式下输入内容,修改文本。

底⾏模式(last line mode):末行模式是用于执行更复杂命令的模式,如保存文件、退出 Vim、查找替换等。在末行模式下,用户可以输入类似于命令行的命令。这些命令通常以冒号 : 开头,并在屏幕的底部显示。

3.3

\color{Purple}vim编辑器基本操作

三种模式下如何正确快速切换(如下图)

友情提醒:进入vim编辑器后,默认处于命令模式,你可以通过输入上图中的字符切换到你需要进入的模式中。 退出vim技巧:在命令模式下,按下 : 进入底行模式

  • w:保存当前文件
  • wq :存盘并退出vim
  • q!: 不存盘强制退出vim
3.3.1 正常模式下命令集

移动光标

  • h :光标向左移动一格
  • j :光标向下移动一格
  • k :光标向上移动一格
  • l :光标向右移动一格
  • G :移动到文章最后
  • $ :移动到光标所在行尾
  • ^ :移动到光标所在行首
  • w :光标跳转到下个字的开头
  • e : 光标跳到下个字的字尾
  • b : 光标回到上个字的开头
  • #l : 光标移到该⾏的第#个位置
  • gg : 光标跳转至文本开始
  • shift + g : 光标跳转至文本末端
  • shift + b : 屏幕往“后”移动⼀⻚
  • shift + f : 屏幕往“前”移动⼀⻚
  • shift + u : 屏幕往“后”移动半⻚
  • shift + d : 屏幕往“前”移动半⻚

删除文字操作

  • x : 每按一次,将会删除光标所在位置的一个字符
  • #x : 表⽰删除光标所在位置的“后⾯(包含⾃⼰在内)”x个字符
  • X : ⼤写的X,每按⼀次,删除光标所在位置的“前⾯”⼀个字符
  • #X : 表⽰删除光标所在位置的“前⾯”x个字符
  • dd : 删除光标所在行
  • #dd : 从光标所在⾏从上往下开始删除#⾏

复制:(下面的命令都可以接受后面的操作行为 ->

\color{Red}如果你想粘贴复制的单词,可以按 p 来粘贴。

)

  • 注意:p: 将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。
  • yw :复制当前光标所在位置的一个单词,并将其存入寄存器中。
  • #yw : 复制当前光标所在位置的#个单词,并将其存入寄存器中。
  • yy : 复制光标所在⾏到缓冲区。
  • #yy : 复制光标当前所在⾏从上往下数#行到缓冲区。

替换:

  • r :替换光标所在处的字符。(这个字符需要你从键盘中输入)
  • R : 一直替换光标所指处的字符,直至用户者按下Esc键,即可退出。

撤销离本次最近的一次操作(可循环撤销,最近也是变动的)

  • u : 撤销上次的操作
  • Ctrl + r : 用于 重做(redo)你之前的撤销操作。也就是说,它会恢复你用 u(撤销)撤回的上一个操作。

更改

  • cw : 删除光标所在位置的单词(从前往后扫描的)并进入插入模式,允许你直接重新输入该单词。
  • c#w : 更改指定#个字符。

跳⾄指定的⾏

  • Ctrl + g : 快速查看光标的位置信息或显示文件信息。
  • #G : 光标跳转到指定#行行首。
3.3.2 末行模式下命令集

在使⽤末⾏模式之前,请记住先按「ESC」键确定您已经处于正常模式,再按「:」冒号即可进⼊末⾏模式。 列出⾏号

  • set nu : 会在每一行的前面显示行号,通常这是一个非常有用的功能,尤其是在编程或编辑大文件时,行号能帮助快速定位内容。

跳转至文件指定行

  • # :后面接上数字x,再按回车即可跳转至x行。

查找字符

  • /关键字 : 先按「/」键,再输⼊您想寻找的字符,如果第⼀次找的关键字不是您想要的,可以⼀直按「n」会往
\color{Red}后

寻找到您要的关键字为⽌。

  • 「?关键字」:先按「?」键,再输⼊您想寻找的字符,如果第⼀次找的关键字不是您想要的,可以⼀直按「n」会往
\color{Red}前

寻找到您要的关键字为⽌。

保存文件

  • w : 在冒号输⼊字⺟「w」再按回车就可以将⽂件保存起来。

退出vim

  • wq : 保存并退出vim编辑器。
  • q! : 不保存并强制退出vim编辑器。

非常实用的指令操作

  • 批量化注释: Ctrl +v -> hjkl ->shift + i = I ->// -> Esc
  • 批量化去注释 Ctrl + v -> hjkl -> d
  • vim 文件名 + 数字x -> 光标进入指定x行数
  • !g/!l : 执行最近与!后面(第一个字母相同即可,其它可不同)字符匹配指令
  • %s/printf/print/g 命令在 Vim 中表示将文件中所有的 printf 替换为 print,并且替换是全局的,即每一行的所有 printf 都会被替换。
  • Ctrl + ww : 底行模式下进行分屏模式,同时可以任意回到任意分屏

补充:vim一共有12种模式 打开,关闭,查看,查询,插⼊,删除,替换,撤销,复制等操作。

四.

\color{RedOrange}gcc/g++编译器

\color{Purple}4.1 编译与汇编

本篇博客详细解释过,不再叙述;

传送门:编译与链接

\color{Purple}4.2 编译选项

命令格式:

gcc 选项 要编译的⽂件 选项

4.2.1 编译过程详解

预处理(Preprocessing):

  • 作用:处理源代码中的 宏定义、头文件包含、条件编译 等指令。
  • 过程:通过处理 #define、#include、#if 等预处理指令,预处理器会生成一个没有宏和头文件指令的源代码文件。
  • 结果:输出一个经过处理的纯源代码文件,准备进入编译阶段。

命令格式:

  • gcc -E 源文件.c -o 目标文件.i

注:这里后面 -o 目的是方便查看过程,不加 -o 则会将处理的结果打印至显示器文件。

\color{Red}后面的处理过程都是一样的,不再重复强调

编译(Compilation):

  • 作用:将预处理后的源代码转换为 汇编语言。
  • 过程:编译器分析源代码,进行 语法分析,生成 中间表示(如抽象语法树),然后将其转化为目标语言(通常是汇编代码)。
  • 结果:生成一个与平台相关的汇编文件,包含程序的机器指令。

命令格式:

  • gcc -S 预处理形成文件.i -o 目标文件.s

汇编(Assembly):

  • 作用:将汇编代码转化为 机器代码。
  • 过程:汇编器将生成的汇编语言代码翻译成目标平台的机器指令,通常生成 目标文件(.o 或 .obj)。
  • 结果:生成一个机器代码文件(目标文件),这时的代码还不能独立运行。

命令格式:

  • gcc -c 编译形成的.s为后缀的临时文件 -o 目标文件.o

注意:这里形成的以.o为后缀的文件,是可重定位目标二进制文件,无法执行。

链接(Linking):

  • 作用:将一个或多个目标文件和库文件合并成一个 可执行文件。
  • 过程:链接器将目标文件中的符号和地址进行解析,并将外部引用(如库函数、全局变量等)链接到相应的内存地址。
  • 结果:生成最终的 可执行文件,可以运行在操作系统上。

命令格式:

  • gcc 汇编形成的.o文件 -o 目标可执行程序

问题1:问什么要编译和汇编:

减少开发的成本

\color{Purple}4.3 动态链接和静态链接
4.3.1 静态库(Static Library)
  • 定义:

静态库是一个包含了已编译代码的文件,通常是 .a(在 Linux 系统上)或 .lib(在 Windows 系统上)格式。

  • 链接方式:

静态库在编译时被链接到最终的可执行文件中。编译器会将静态库的代码直接嵌入到应用程序中。

  • 优点:

一旦编译完成,不需要依赖外部库文件,所有依赖都已经包含在可执行文件中。 运行时不需要加载外部库,启动速度可能更快。

  • 缺点:

文件大小较大,因为包含了所有依赖的代码。 如果库代码更新,必须重新编译应用程序。 不支持共享内存。

命令格式:

gcc 文件名.o -o 目标文件 -static

4.3.2 动态库(Dynamic Library)
  • 定义:

动态库是一个独立的代码库,通常是 .so(在 Linux 上)或 .dll(在 Windows 上)格式。它包含了可以在运行时被程序加载和执行的代码。

  • 链接方式:

动态库在编译时并不直接链接到应用程序中,而是通过链接器使用符号(也称为地址)引用。程序在运行时需要动态加载这些库。

  • 优点:

1 |可以共享内存,多个程序可以加载同一个动态库,这样可以节省系统资源。 2 | 如果库代码更新,程序不需要重新编译,只需要更新库文件即可。 3 | 可通过动态加载和卸载库来实现模块化功能。

  • 缺点:

1 | 程序启动时需要加载库,可能影响启动速度。 2 | 如果动态库缺失或版本不兼容,可能导致程序无法启动或崩溃。

  1. 补充一个命令ldd :是一个在 Linux 系统中用来显示一个可执行文件或共享库所依赖的共享库(动态库)列表的命令。它可以帮助你查看一个程序或库在运行时需要加载哪些共享库,并且展示每个库的实际位置。

命令格式:ldd executable-file

其中 executable-file 可以是一个可执行文件或者一个共享库文件。ldd 会列出该文件所依赖的所有共享库以及它们的路径。

示例:

ldd mycode

输出

linux-vdso.so.1 (0x00007ffc78fbd000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f21a35bd000) /lib64/ld-linux-x86-64.so.2 (0x00007f21a37bf000)

说明:

  • linux-vdso.so.1是 Linux 内核提供的虚拟动态共享对象(Virtual Dynamic Shared Object),它通常不需要物理文件,表示内核所提供的动态库接口。
  • libc.so.6是该程序所依赖的动态库。=> 后面的路径是实际的文件路径
  • /lib64/ld-linux-x86-64.so.2 是程序加载时的动态链接器,它负责加载其它共享库。

5.

\color{RedOrange}最后

本文介绍了 Linux 开发工具的基本概念及其使用方法,重点讲解了软件包管理器、APT 操作、Vim 编辑器、以及 GCC/G++ 编译器的使用。

首先,介绍了 Linux 中的软件包管理器,强调了使用 APT 进行软件包安装、卸载和源管理的操作。然后,详细阐述了 Vim 编辑器的基本操作、常用模式、以及高效的文本编辑技巧。接着,讲解了 GCC/G++ 编译器的编译与汇编过程,包括静态链接和动态链接的区别及各自的优缺点。最后,介绍了 ldd 命令,帮助开发者查看程序依赖的动态库。

路虽远,行则将至;事虽难,做则必成

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-03-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Linux 开发工具的魔力:如何提升你的开发速度
  • 引言
  • 一.
    • 1.1
    • 1.2
  • 二.
    • 2.1
    • 2.2
    • 2.3
    • 2.4
  • 三.
    • 3.1
    • 3.2
      • 3.2.1 vim常用三种模式
    • 3.3
      • 3.3.1 正常模式下命令集
      • 3.3.2 末行模式下命令集
  • 四.
      • 4.2.1 编译过程详解
      • 4.3.1 静态库(Static Library)
      • 4.3.2 动态库(Dynamic Library)
  • 5.
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档