一、包管理apt-get / apt
APT(Advanced Package Tool)是一个用于管理 Debian 及其衍生系统(如 Ubuntu)上软件包的工具。它提供了一系列命令用于安装、升级和删除软件包。apt-get 和 apt 是 APT 的两个主要命令行工具,虽然它们有相似的功能,但 apt 提供了更友好的用户界面。
apt-get
apt-get 是 APT 的一个底层工具,主要用于处理软件包的安装、升级和管理。常用命令包括:
- 安装软件包:
sudo apt-get install <package-name>
- 更新包列表:
sudo apt-get update
- 升级已安装的软件包:
sudo apt-get upgrade
- 全面升级系统:
sudo apt-get dist-upgrade
- 删除软件包:
sudo apt-get remove <package-name>
- 清理不再需要的包:
sudo apt-get autoremove
apt
apt 是一个较新的命令行工具,旨在提供更简洁的用户体验,它合并了apt-get和其他工具的一些功能。它适合日常使用,并提供了更多用户友好的选项。常用命令包括:
- 安装软件包:
sudo apt install <package-name>
- 更新包列表:
sudo apt update
- 升级已安装的软件包:
sudo apt upgrade
- 全面升级系统:
sudo apt full-upgrade
(代替dist-upgrade
) - 删除软件包:
sudo apt remove <package-name>
- 列出可用包:
apt list --available
- 显示包信息:
apt show <package-name>
主要区别
- 用户界面: apt 提供了更简洁的输出格式,易于阅读和理解。
- 功能合并: apt合并了apt-get、apt-cache 和dkpg的一些功能,使得操作更加统一和简便。
总体来说,apt 是 apt-get 的一个更新和改进版,适合日常使用,而apt-get依然在脚本和复杂操作中发挥作用。
二、编辑器vim
1. 安装:
sudo apt-get install vim # Debian/Ubuntu
2. 模式:
- 普通模式 (Normal Mode): 默认模式,用于浏览和编辑文本。按
Esc
键可以进入此模式。 - 插入模式 (Insert Mode): 用于插入和编辑文本。在普通模式下,按
i
、I
、a
、A
、o
或O
进入插入模式。 - 命令模式 (Command Mode): 用于执行命令和管理文件。在普通模式下,按
:
进入命令模式。 - 可视模式 (Visual Mode): 用于选择文本。可以按
v
进入可视模式,按V
进入行可视模式,按Ctrl-v
进入块可视模式。
3. 基本操作:
- 移动光标: 使用箭头键或
h
、j
、k
、l
移动光标(左、下、上、右)。 - 插入文本: 在普通模式下按
i
进入插入模式,可以开始输入文本。 - 删除文本: 在普通模式下,使用
x
删除光标所在位置的字符,使用dd
删除整行,使用d
配合运动命令删除文本。 - 复制与粘贴: 使用
y
复制("yank")文本,使用p
粘贴("put")文本。
4. 文件操作:
- 保存文件: 在命令模式下输入
:w
。 - 退出 Vim: 输入
:q
退出。如果未保存修改,可以使用:q!
强制退出。 - 保存并退出: 输入
:wq
或:x
。
5. 查找和替换:
- 查找: 在命令模式下输入
:/pattern
查找文本。 - 替换: 在命令模式下输入
:%s/old/new/g
将文件中所有的old
替换为new
。
6. 多窗口和多标签页:
- 分割窗口: 使用
:split
或:vsplit
将窗口水平或垂直分割。 - 切换窗口: 使用
Ctrl-w
和方向键或h
、j
、k
、l
切换窗口。 - 标签页: 使用
:tabnew
打开新标签页,使用:tabnext
切换标签页。
7. 配置和插件:
- 配置文件: Vim 的配置文件通常是
~/.vimrc
,用于设置个人偏好和自定义 Vim 行为。 - 插件: Vim 支持多种插件,增强编辑功能。例如,使用
vim-plug
、Vundle
或Pathogen
等插件管理器来安装和管理插件。
三、编译器gcc
安装:
- Linux: 可以通过包管理工具安装,例如在 Debian/Ubuntu 上使用
sudo apt-get install gcc
基本使用:
-
编译单文件:
gcc -o outputfile sourcefile.c
这里,
-o
选项指定输出文件的名称,sourcefile.c
是源代码文件。 -
编译并调试:
gcc -g -o outputfile sourcefile.c
-g
选项生成调试信息,用于调试程序。 -
优化:
gcc -O2 -o outputfile sourcefile.c
-O2
选项启用中级优化,-O3
用于更高层次的优化。 -
警告:
gcc -Wall -o outputfile sourcefile.c
-Wall
选项启用大多数警告信息,帮助发现潜在问题。
编译多个文件:
gcc -o outputfile file1.c file2.c
链接库:
-
静态链接库:
gcc -o outputfile sourcefile.c -L/path/to/lib -lname
-L
指定库的路径,-l
指定要链接的库(去掉前缀lib
和后缀.a
)。 -
动态链接库:
gcc -o outputfile sourcefile.c -L/path/to/lib -lname
动态链接库的前缀为
lib
,后缀为.so
,运行时需要库文件可用。
库 | 解释 | 对比 |
---|---|---|
静态库 | 1.定义: 静态库是一组已经编译好的目标文件(通常是 .o 文件的集合),它们被打包成一个单独的文件(通常以 .a 为扩展名),供链接器在编译时使用。 2.特点: 编译时链接:静态库在编译程序时被链接到最终的可执行文件中。链接后,目标文件中使用的库函数的代码会被复制到最终的可执行文件中。 独立性:生成的可执行文件不需要依赖外部的库文件,因为库的代码已经被静态地包含在可执行文件中。 使用场景:适用于那些不常变化且大小适中的库,如标准库(例如 C 语言的 libc)。 3.创建和使用: 创建静态库:使用编译器将多个目标文件打包成 .a 文件,例如 ar 工具。 使用静态库:在编译时通过 -l 参数指定库的名称,例如 -lm 表示链接数学库 libm.a | 静态库在编译时被直接复制到最终的程序中。这意味着,最终程序不需要依赖外部的静态库文件,所有需要的代码都包含在程序里面。 优点:程序运行时不需要依赖外部的库,因此可以很快速地启动和执行。 缺点:可执行文件会比较大,因为所有的代码都被复制到了程序里面。如果库有更新或者需要替换,就需要重新编译整个程序。 (我的理解是有一个小工具箱,里面装满了你需要的工具,比如锤子、螺丝刀等。每次你想用这些工具时,你都可以从自己的工具箱里拿出来直接用。静态库就像这个工具箱,它把程序需要的所有代码和功能都打包在一起,编译后形成一个完整的可执行文件。) |
动态库 | 1.定义: 动态库是一个独立的文件,其包含的代码在程序运行时才会被加载到内存中,并且可以被多个程序共享使用。 2.特点: 运行时链接:动态库在程序运行时由操作系统的动态链接器加载到内存中,并且可以被多个程序共享。 节省空间:不像静态库那样重复包含库的代码,动态库的代码只有一份实例,多个程序可以共享这一份代码。 更新和维护:动态库的更新不需要重新编译依赖它的程序,只需替换库文件即可。 3.创建和使用: 创建动态库:使用编译器生成共享对象(Shared Object),通常以 .so 为扩展名。 使用动态库:在编译时链接到动态库的头文件,并在运行时通过动态链接器加载库文件,例如使用 -l 参数和 -L 参数指定动态库的路径。 | 动态库在程序运行时才被加载到内存中使用,而不是在编译时被复制到程序里。这样的话,多个程序可以共享同一个动态库文件,这样节省了内存并且使得更新和维护变得更方便。 优点:节省内存空间,多个程序可以共享同一个库,更新和维护也比较方便。 缺点:程序在运行时需要依赖正确的库文件,加载和执行稍微慢一些。 (动态库则像是你住在一个大社区,有一个公共的工具库。每个人都可以从这个库里借用工具,这样大家可以节省空间并且更新工具也更方便,只需要更新一次公共库就好了。但是,如果公共库的管理员搞错了版本或者没有了某些工具,你就可能不能用某些工具了。 |
编译选项:
-
标准版本:
gcc -std=c99 -o outputfile sourcefile.c
-std=c99
选项指定 C 语言的标准版本,可以用c11
、c++11
、c++14
等其他标准版本。 -
预处理:
gcc -E sourcefile.c
-E
选项仅执行预处理,输出预处理后的源代码。 -
生成汇编代码:
gcc -S sourcefile.c
-S
选项生成汇编语言代码文件。 -
生成目标文件:
gcc -c sourcefile.c
-c
选项生成目标文件(.o
文件),用于后续的链接。
四、自动化构建工具make
安装
sudo apt-get install make
使用
-
创建 Makefile
-
运行 make: 在包含 Makefile 的目录中,运行
make
命令会按照 Makefile 中的规则执行编译过程。默认目标是 Makefile 中的第一个目标(在本例中是all
)。 -
指定目标: 可以指定特定的目标来运行,如
make clean
会执行clean
目标中的命令,删除生成的文件。 -
选项:
-B 或 --always-make | 强制 make 重新编译所有目标,即使它们已经是最新的 |
-C <dir> | 在指定的目录 <dir> 中执行 make |
-d | 显示详细的调试信息,帮助跟踪 make 的执行过程 |
-f <file> 或 --file=<file> | 使用指定的 Makefile 文件 |
-i 或 --ignore-errors | 忽略命令执行中的错误 |
-j [N] | 指定并行执行的作业数。make -j4 同时运行 4 个作业 |
-k 或 --keep-going | 在遇到错误时继续执行其他目标 |
-l [load] | 仅在系统负载低于指定值时执行作业。例如 make -l 2.0 |
-n 或 --just-print | 显示将要执行的命令但不实际执行 |
-O | 启用优化,可能会改变 make 的行为以提高性能 |
-p 或 --print-data-base | 显示 make 的内部数据结构,用于调试 |
-s 或 --silent | 仅显示错误信息,隐藏其他输出 |
-t 或 --touch | 更新目标的时间戳,而不实际执行命令 |
-v 或 --version | 显示 make 的版本信息 |
-W <file> 或 --what-if=<file> | 检查指定文件是否需要重新生成 |
五、版本控制git
-
git clone URL(仓库地址)
-
进入文件夹(比如我拉的是mastar,则在第一步之后 cd mastar)
-
git checkout master(切换你所拉取的分支的名称)
-
git pull origin <分支名称>
![](https://i-blog.csdnimg.cn/direct/f2aa08b10e624696a5dbc4c8bcfc1b30.png)
![](https://i-blog.csdnimg.cn/direct/40f93b2b5ac142d7961acc190e914777.png)
![](https://i-blog.csdnimg.cn/direct/1a06d6957241487eaefcd6a452f71b45.png)
![](https://i-blog.csdnimg.cn/direct/3ec85f0fea8d42c6842b704dbdfd6730.png)
![](https://i-blog.csdnimg.cn/direct/7ba32516d0a74b43a74c718588bf1c37.png)