Linux环境基础开发工具的使用(apt、vim、gcc、g++、gdb、make/Makefile)
文章目录
- Linux软件包管理器 - apt
- Linux下安装软件的方式
- 认识apt
- 查找软件包
- 安装软件
- 如何实现本地机器和云服务器之间的文件互传
- 卸载软件
- Linux编辑器 - vim
- Linux编译器 - gcc/g++
- gcc/g++的作用
- gcc/g++语法
- 预处理
- 编译
- 汇编
- 链接
- 静态库与动态库
- Linux调试器 - gdb
- gdb使用须知
- gdb命令汇总
- Linux项目自动化构建工具 - make/Makefile
- make/Makefile的重要性
- 依赖关系和依赖方法
- 多文件编译
- make原理
- 项目清理
- Linux第一个小程序 - 进度条
- 行缓冲区的概念
- \r和\n
- 进度条代码及效果展示
linux%E8%BD%AF%E4%BB%B6%E5%8C%85%E7%AE%A1%E7%90%86%E5%99%A8---apt" rel="nofollow">Linux软件包管理器 - apt
Linux下安装软件的方式
在Linux下安装软件的方法大致有以下三种:
- 下载到程序的源代码,自行进行编译,得到可执行程序。
- 获取
.deb
安装包,通过dpkg
命令进行安装(未解决软件的依赖关系)。 - 通过
apt
进行安装软件(常用)。
认识apt
apt
是一个在 Debian 和 Ubuntu 系列操作系统中常用的软件包管理器,能够从指定的服务器自动下载 .deb
包并安装,可以自动处理依赖性关系。
# 示例:
sudo apt install lrzsz
注意: 一个服务器同一时刻只允许一个
apt
进行安装,不能在同一时刻同时安装多个软件。
由于 apt
是从服务器上下载 .deb
包,所以在下载时必须联网,可以通过 ping
指令判断当前云服务器是否联网。
# 示例:
ping -c 4 google.com
查找软件包
# 示例:
apt list | grep lrzsz
安装软件
指令: sudo apt install 软件名
# 示例:
sudo apt install lrzsz
apt
会自动找到需要下载的所有软件包,并在确认后进行安装。安装完成时,会显示 “complete”。
如何实现本地机器和云服务器之间的文件互传
安装了 lrzsz
后,可以使用以下命令上传和下载文件:
-
上传文件:
rz -E
-
下载文件:
sz 文件名
# 示例:
sz test.txt
卸载软件
指令: sudo apt remove 软件名
# 示例:
sudo apt remove lrzsz
linux%E7%BC%96%E8%BE%91%E5%99%A8---vim" rel="nofollow">Linux编辑器 - vim
vim_119">vim的基本概念
vim 是一个多模式的文本编辑器,常用于编辑文本和编程代码。在 vim 中,最常用的三种模式是:
- 命令模式(Normal mode):用于控制屏幕光标的移动、字符、字或行的删除、复制粘贴等操作。
- 插入模式(Insert mode):允许文字输入。
- 底行模式(Command mode):用于文件保存、退出、查找字符串等操作。
vim_127">vim下各模式的切换
指令: vim 文件名
# 示例:
vim test.c
进入 vim 后默认为命令模式(普通模式),要输入文字需切换到插入模式。
-
命令模式 切换至 插入模式
输入i
:在当前光标处进入插入模式。
输入a
:在当前光标的后一位置进入插入模式。
输入o
:在当前光标处新起一行进入插入模式。 -
命令模式 切换至 底行模式
输入Shift+;
即可,实际上就是输入:
。 -
插入模式 或 底行模式 切换至 命令模式
按Esc
键即可。
vim_149">vim命令模式各命令汇总
移动光标:
- 按
k
:光标上移。 - 按
j
:光标下移。 - 按
h
:光标左移。 - 按
l
:光标右移。
删除:
- 按
x
:删除光标所在位置的字符。 - 按
dd
:删除光标所在行。
复制粘贴:
- 按
yy
:复制光标所在行。 - 按
p
:将已复制的内容在光标的下一行粘贴。
撤销:
- 按
u
:撤销。 - 按
Ctrl+r
:恢复刚刚的撤销。
vim_173">vim底行模式各命令汇总
保存退出:
linux%E7%BC%96%E8%AF%91%E5%99%A8---gccg++" rel="nofollow">Linux编译器 - gcc/g++
gcc/g++的作用
gcc
和 g++
是 GNU 提供的 C 和 C++ 编译器,常用于将源代码转换为机器能够执行的二进制文件。编译过程包括四个步骤:
- 预处理(头文件展开、去注释、宏替换、条件编译)。
- 编译(C代码翻译成汇编语言)。
- 汇编(汇编代码转为二进制目标代码)。
- 链接(将汇编过程产生的二进制代码进行链接)。
gcc/g++语法
语法: gcc/g++ [选项] [文件]
常用选项:
-E
:只进行预处理,不生成文件。-S
:编译到汇编语言,不进行汇编和链接。-c
:编译到目标代码-o
:将处理结果输出到指定文件。
示例:
gcc -E test.c -o test.i # 只进行预处理
gcc -S test.i -o test.s # 编译到汇编
gcc -c test.s -o test.o # 汇编成目标文件
gcc test.o -o test # 链接成可执行文件
静态库与动态库
静态库是指编译链接时,把库文件的代码全部加入到可执行文件当中,生成的文件较大。但运行时不再需要库文件。静态库一般以 .a
为后缀。
动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件当中,而是在程序运行时由链接文件加载库,这样可以节省系统的开销。
动态库一般以 .so
为后缀。
gcc test.c -o test_s -static
生成的可执行文件使用静态链接。
linux%E8%B0%83%E8%AF%95%E5%99%A8---gdb" rel="nofollow">Linux调试器 - gdb
gdb使用须知
程序发布方式:
- debug版本:程序本身会被加入更多的调试信息,以便于进行调试。
- release版本:不会添加任何调试信息,是不可调试的。
gdb命令汇总
进入gdb:
gdb ./test_debug
调试命令:
run
:运行代码。next
:逐过程调试。step
:逐语句调试。continue
:继续执行到下一个断点。
linux%E9%A1%B9%E7%9B%AE%E8%87%AA%E5%8A%A8%E5%8C%96%E6%9E%84%E5%BB%BA%E5%B7%A5%E5%85%B7---makemakefile" rel="nofollow">Linux项目自动化构建工具 - make/Makefile
make/Makefile的重要性
Makefile
用于管理程序的自动化编译,指定文件之间的依赖关系及构建方法。
依赖关系和依赖方法
文件 A 的变更会影响文件 B,那么文件 B 就依赖于文件 A。
示例:
test.o: test.cgcc -c test.c -o test.o
多文件编译
当工程中有多个源文件时,使用 make
工具按文件依赖顺序进行编译。
示例:
gcc -c test.c -o test.o
gcc -c main.c -o main.o
gcc test.o main.o -o mytest
项目清理
clean:rm -f *.o mytest
linux%E7%AC%AC%E4%B8%80%E4%B8%AA%E5%B0%8F%E7%A8%8B%E5%BA%8F---%E8%BF%9B%E5%BA%A6%E6%9D%A1" rel="nofollow">Linux第一个小程序 - 进度条
行缓冲区的概念
行缓冲区影响数据的显示,数据会先写入缓冲区,直到缓冲区满或者程序结束时才显示。
示例:
printf("hello world");
sleep(3);
\r 和 \n
\r
回车:将光标移到当前行行首。\n
换行:将光标移到下一行。
示例:
printf("Hello World\r");
printf("Goodbye World\n");
进度条代码及效果展示
示例代码:
#include <stdio.h>
#include <unistd.h>void show_progress_bar(int progress) {printf("\r[");int i;for (i = 0; i < 50; i++) {if (i < progress / 2) {printf("#");} else {printf(" ");}}printf("] %d%%", progress);fflush(stdout);
}int main() {for (int i = 0; i <= 100; i++) {show_progress_bar(i);usleep(50000); // Sleep for 50ms}printf("\nDone!\n");return 0;
}