首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >命令行即生产力:打造你的Linux开发利器

命令行即生产力:打造你的Linux开发利器

作者头像
夜雨声烦1413
发布2026-01-12 18:03:20
发布2026-01-12 18:03:20
840
举报

1:Linux软件包管理器apt

  • apt是一个软件下载安装管理的一个客户端(类比小米应用商店,华为应用商城).
  • Linux中的软件包可能会存在依赖关系---->apt会帮助解决依赖关系的问题.

1.1:软件包的概念

  • 在Linux下安装软件,有三种方式:(1):下载程序的源代码,进行编译,得到可执行程序.(2):rpm安装.(3):apt安装
  • 但是下载程序的源代码太麻烦了,因此有些人将一些常用的软件提前编译好,做成软件包(可以理解成Windows上的安装程序)放在一个服务器上,通过包管理器去获取这个编译好的软件包,直接进行安装.
  • 软件包和软件包管理器,就好比"App"和"应用商店"这样的关系.

1.2:Linux系统的生态

1.3:apt相关操作

1.3.1:apt下载
1.3.2:apt删除

1.4:apt更新软件包

这两个指令我们在配置软件源文件的时候使用到过,需要root或者sudo。 指令:apt update:从软件仓库中更新软件包列表,确保获取到最新的软件包信息。 指令:apt upgrade:升级所有可升级的软件包到最新版本。

2:Linux编译器--vim的使用

vi/vim 的区别简单点来说,它们都是多模式编辑器,不同的是 vim 是 vi 的升级版本,它不仅兼容 vi 的所有指令,而且还有一些新的特性在里面。例如语法加亮,可视化操作不仅可以在终端运行,也可以运行于x window 、 mac os、 windows

2.1:vim的基本概念

vim的模式有很多种,但我们最主要只要掌握三种即可,分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode).

  • 命令模式

控制屏幕光标的移动,字符,字与行的删除,移动复制某区段以及进入插入模式或者到底行模式.

  • 插入模式

只有在该模式下,才能够进行文字输入,按[ESC]键可以回到命令模式.

  • 底行模式

文件的保存与退出,也可以进行文件替换,找字符串,列出行号等操作.在命令模式下,shift + : 即可进入该模式.

2.2:命令模式下的快捷键

  • n + yy ------>连续复制n行
  • n + p:粘贴到当前光标的下一行 n:表示将指定的内容粘贴n次
  • u: 撤销
  • ctrl + r:对历史撤销进行撤销
  • n + dd:剪切/删除指定行(连续的多行).
  • shift + 4:将光标定位到当前行的结尾.
  • shift + 6:将光标定位到当前行的开头.
  • gg:将光标定位到整个文本的最开头.
  • shift + g:将光标定位到整个文本的最后一行.
  • n + shift + g:将光标定位到整个文本的任意一行.
  • w:以单词为单位进行光标后移.
  • b:以单词为单位进行光标前移.
  • shift + ~:大小写切换
  • n + x:删除光标后续的一个字符,可以一次删除n个(一行内)
  • n + shift + x:删除光标之前的一个字符,可一次删除n个(一行内)
  • n + r:对光标指定的位置,进行一个字符的替换,可以一次替换多个
  • shift + r:进入替换模式,直接进行文本替换.
  • shift + zz:保存并退出.

2.3:底行模式下的快捷键

  • w:保存.
  • q:退出.
  • wq:保存并退出.
  • !:强制.
  • set nu / nonu:打开行号/去掉行号.
  • /关键字:对文本内容进行搜索.
  • !command:不退出vim的前提下进行shell命令的执行(常用与函数查看)
  • vs filename(分屏,多文件操作)
  • ctrl + ww:将光标进行屏幕的切换

2.4:vim中的批量化注释与批量化去注释

  • 在命令模式下,ctrl + v-------->hjkl进行区域选择--->shift + i(进行插入模式)---> //(进行注释)---->esc * 2;
  • 在命令模式下,ctrl + v-------->hjkl进行区域选择--->包含仅包含//---->d(进行删除);

3:Linux编译器---gcc/g++的使用

gcc和g++分别是GNU的C和C++的编译器,gcc和g++在执行编译的时候一般有以下四个步骤

  • 预处理(头文件展开、去注释、宏替换、条件编译)。
  • 编译(C代码翻译成汇编语言)。
  • 汇编(汇编代码转为二进制目标代码)。
  • 链接(将汇编过程产生的二进制代码进行链接)。

3.1预处理

  • 预处理功能的主要包括宏替换,去注释,头文件展开,条件编译.
  • 预处理指令是以#号开头的代码行.

-E:是告诉编译器,从现在开始进行程序的编译,预处理完成,就停下来.

3.2:编译(生成汇编)

在这个阶段,gcc首先检查代码的规范性,是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc将代码编译成汇编语言.

-S:从现在开始进行程序的编译,编译完成并生成汇编代码就停下来.

3.3:汇编

汇编阶段是将编译阶段生成的.s文件转成目标文件.

-c:从现在开始进行程序的汇编,汇编完成就停下来!

3.4:链接

  • 链接阶段就是生成可执行文件与库文件.
  • 编译完成后则进行链接.

3.5:gcc选项

  • -E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面
  • -S 编译到汇编语言不进行汇编和链接
  • -c 编译到目标代码
  • -o 文件输出到 文件
  • -static 此选项对生成的文件采用静态链接
  • -g 生成调试信息。GNU 调试器可利用该信息。
  • -shared 此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库.
  • -O0 -O1 -O2 -O3 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高。
  • -w 不生成任何警告信息。
  • -Wall 生成所有警告信息。

4:链接详解

4.1:函数库

  • 我们的C程序中,并没有定义“printf”的函数实现,且在预编译中包含的“stdio.h”中也只有该函数的声明,而没有定义函数的实现,那么,是在哪里实“printf”函数的呢?
  • 答案是:系统把这些函数实现都被做到名为 libc.so.6 的库文件中去了,在没有特别指定时,gcc 会到系统默认的搜索路径“/usr/lib”下进行查找,也就是链接到 libc.so.6 库函数中去,这样就能实现函数“printf”了,而这也就是链接的作用

4.2:动态库与静态库

  • 静态库指的是在编译链接时,把库文件的代码全部加入到可执行文件当中去,因此生成的文件比较大,但在运行时也就不再需要库文件了.其后缀名一般为".a"
  • 动态库则与静态库相反,在编译链接时没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样子可以节约系统的开销.动态库的后缀名一般为.so

4.3:动态链接与静态链接

  • 动态链接:告知目标库的地址,然后去进行链接,动态链接是共享动态库的,但是一旦动态库缺失,所有的动态链接这个库里的程序,就都无法执行了.
  • 静态链接:在编译的时候,将库中的方法,拷贝到自己的可执行程序当中(不在关心任何库).
  • gcc默认形成的可执行程序,默认采用动态链接.默认情况下,Linux上,一般静态库是没有安装的.

动态链接:

  • 优点:省空间(磁盘的空间,内存的空间),bin体积小,加载速度快。
  • 缺点:依赖动态库,程序可移植性较差。

静态链接

  • 优点:不依赖第三方库,程序的可移植性较高。
  • 缺点:浪费空间。

5:Linux调试工具----gdb

5.1:list/l: list 文件名:行号 或者 list 行号 /函数.

5.2:b 文件名:行号/函数名 或者 b 行号/函数名.

  • info b:检查所打的断点信息
  • d 断点编号:函数断点

5.3:diable /enable 断点编号(关闭/打开断点)

5.4:r:运行程序 next/n:逐过程(不进入函数内部) setp/s(逐语句执行)

5.5:print /p 变量名:查看变量的内容 continue/c:运行到下一个断点处

5.6:display 变量名 undisplay 编号

5.7:until 行号

5.8:finish

5.9:set var 变量名

6:Linu项目自动化构建工具-make/Makefile

6.1:背景知识

  • 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的 则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂 的功能操作.
  • makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
  • make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命 令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一 种在工程方面的编译方法.
  • make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建.

6.2:依赖关系与依赖方法

6.3:make的原理

  • make是如何工作的,在默认的方式下,我们输入make命令,那么
  1. make会在当前目录下找名字叫"Makefile"或者"makefile"的文件.根据makefile的内容完成编译/清理工作
  • 2.makefile会对最新的可执行程序,默认不想重新生成----->提高编译效率
  • 3.makefile会对比可执行文件与源文件最近的修改时间,谁更新.
  • 4.make的依赖性,make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件.

在命令前面加了@符号后,此时再进行Make不会输出命令

makefile里的依赖方法可以跟多条命令

总结一下那就是

  • 1. make会在当前目录下找名字叫“Makefile”或“makefile”的文件。
  • 2. 如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“hello”这个文件,并把这个文件作为最终的目标文件。
  • 3. 如果hello文件不存在,或是hello所依赖的后面的hello.o文件的文件修改时间要比hello这个文件新(可以用 touch 测试),那么,他就会执行后面所定义的命令来生成hello这个文件。
  • 4. 如果hello所依赖的hello.o文件不存在,那么make会在当前文件中找目标为hello.o文件的依赖性,如果找到则再根据那一个规则生成hello.o文件。(这有点像一个堆栈的过程)
  • 5. 当然,你的C文件和H文件是存在的啦,于是make会生成 hello.o 文件,然后再用 hello.o 文件声明make的终极任务,也就是执行文件hello了。
  • 6. 这就是整个make的依赖性,make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。
  • 7. 在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错,而对于所定义的命令的错误,或是编译不成功,make根本不理。
  • 8. make只管文件的依赖性,即,如果在我找了依赖关系之后,冒号后面的文件还是不在,那么对不起, 我就不工作啦。

6.4:项目清理

  • 工程是需要被清理的
  • 像clean这种,没有被第一个目标文件直接或间接关联,那么它后面所定义的命令将不会被自动执行,不过,我们可以显示要make执行。即命令——“make clean”,以此来清除所有的目标文件,以便重编译。
  • 但是一般我们这种clean的目标文件,我们将它设置为伪目标,用 .PHONY 修饰,伪目标的特性是,总是被执行的。

好啦,家人们,关于Linux环境基础开发实现这块的相关细节知识,博主就讲到这里了

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1:Linux软件包管理器apt
    • 1.1:软件包的概念
    • 1.2:Linux系统的生态
    • 1.3:apt相关操作
      • 1.3.1:apt下载
      • 1.3.2:apt删除
    • 1.4:apt更新软件包
  • 2:Linux编译器--vim的使用
    • 2.1:vim的基本概念
    • 2.2:命令模式下的快捷键
    • 2.3:底行模式下的快捷键
    • 2.4:vim中的批量化注释与批量化去注释
  • 3:Linux编译器---gcc/g++的使用
    • 3.1预处理
    • 3.2:编译(生成汇编)
    • 3.3:汇编
    • 3.4:链接
    • 3.5:gcc选项
  • 4:链接详解
    • 4.1:函数库
    • 4.2:动态库与静态库
    • 4.3:动态链接与静态链接
  • 5:Linux调试工具----gdb
    • 5.1:list/l: list 文件名:行号 或者 list 行号 /函数.
    • 5.2:b 文件名:行号/函数名 或者 b 行号/函数名.
    • 5.3:diable /enable 断点编号(关闭/打开断点)
    • 5.4:r:运行程序 next/n:逐过程(不进入函数内部) setp/s(逐语句执行)
    • 5.5:print /p 变量名:查看变量的内容 continue/c:运行到下一个断点处
    • 5.6:display 变量名 undisplay 编号
    • 5.7:until 行号
    • 5.8:finish
    • 5.9:set var 变量名
  • 6:Linu项目自动化构建工具-make/Makefile
    • 6.1:背景知识
    • 6.2:依赖关系与依赖方法
    • 6.3:make的原理
    • 6.4:项目清理
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档