二、Linux 开发工具

1、vim 编辑器

正常模式与插入模式

Vim 的默认启动模式是正常模式 (Normal Mode),用于执行命令和导航。在正常模式下按 i 进入插入模式 (Insert Mode),可以编辑文本。按 Esc 返回正常模式。

插入模式的其他进入方式:

  • a:在当前光标后插入
  • o:在当前行下方新建一行并插入
  • I:移动到行首并插入
  • A:移动到行尾并插入

保存与退出

在正常模式下执行以下操作:

  • :w:保存文件
  • :q:退出(未修改时)
  • :q!:强制退出,放弃修改
  • :wq:x:保存并退出
  • ZZ(大写):快捷保存并退出

批量注释

块操作注释(适合多行):

  1. Ctrl + v 进入可视块模式
  2. 用方向键选择要注释的行
  3. I(大写),输入注释符号(如 #//
  4. Esc,所选行首会自动添加注释符号

取消注释

  1. 同样用 Ctrl + v 选择注释符号
  2. d 删除

搜索与替换

搜索

  • /keyword:向前搜索关键词
  • ?keyword:向后搜索
  • n:跳转到下一个匹配项
  • N:跳转到上一个匹配项

替换

  • :%s/old/new/g:全局替换所有 oldnew
  • :%s/old/new/gc:全局替换,每次询问确认
  • :10,20s/old/new/g:替换第 10-20 行的内容

快速跳转

行内跳转

  • 0:跳转到行首
  • ^:跳转到第一个非空白字符
  • $:跳转到行尾
  • w:按单词向前移动
  • b:按单词向后移动

文件内跳转

  • gg:跳转到文件首行
  • G:跳转到文件末行
  • :nnG:跳转到第 n 行(如 :1010G
  • Ctrl + o:返回上一个位置
  • Ctrl + i:前进到下一个位置

标记跳转

  • m{a-z}:设置标记(如 ma
  • ```a``:跳转到标记 a 的位置
  • :跳转到上次编辑的位置 复制代码

2、Git 基础操作与概念

git clone

用于将远程仓库克隆到本地。执行以下命令会将远程仓库复制到当前目录:

bash 复制代码
git clone <repository-url>

可选参数 -b 指定分支:

bash 复制代码
git clone -b <branch-name> <repository-url>
git add

将文件变更添加到暂存区。添加特定文件:

bash 复制代码
git add <filename>

添加所有变更:

bash 复制代码
git add .
git commit

提交暂存区的变更到本地仓库。附带提交信息:

bash 复制代码
git commit -m "commit message"

修改上一次提交(未推送时):

bash 复制代码
git commit --amend
git pull

拉取远程分支并合并到当前分支:

bash 复制代码
git pull origin <branch-name>

等同于 git fetch + git merge

git push

推送本地提交到远程分支:

bash 复制代码
git push origin <branch-name>

强制推送(谨慎使用):

bash 复制代码
git push -f origin <branch-name>

分支管理

创建分支

基于当前分支创建新分支:

bash 复制代码
git branch <new-branch-name>

创建并切换到新分支:

bash 复制代码
git checkout -b <new-branch-name>
切换分支

切换到已有分支:

bash 复制代码
git checkout <branch-name>
合并分支

将指定分支合并到当前分支:

bash 复制代码
git merge <branch-name>
删除分支

删除本地分支:

bash 复制代码
git branch -d <branch-name>

强制删除未合并分支:

bash 复制代码
git branch -D <branch-name>

删除远程分支:

bash 复制代码
git push origin --delete <branch-name>

代码备份策略

常规备份

通过定期提交和推送到远程仓库实现备份:

bash 复制代码
git add .
git commit -m "Backup: <date>"
git push origin main
使用标签(Tag)

为重要版本创建标签:

bash 复制代码
git tag -a v1.0 -m "Release version 1.0"
git push origin v1.0
分支备份

创建专用备份分支:

bash 复制代码
git checkout -b backup-<date>
git push origin backup-<date>
镜像仓库

添加额外远程仓库作为备份:

bash 复制代码
git remote add backup <backup-repo-url>
git push backup --all

注意事项

  • 强制推送 (-f) 可能覆盖他人工作,需团队协商后使用
  • 合并分支前建议先执行 git pull 更新本地代码
  • 敏感数据(如密码、密钥)不应提交到 Git
  • 大型文件建议使用 Git LFS 或排除在版本控制外

3、Makefile + CMake基础

Makefile 编译规则

Makefile 用于定义编译规则,自动化构建过程。一个典型的 Makefile 包含目标、依赖和命令。

makefile 复制代码
# 定义编译器和编译选项
CC = gcc
CFLAGS = -Wall -g

# 定义目标文件和可执行文件
TARGET = myprogram
OBJS = main.o utils.o

# 默认目标
all: $(TARGET)

# 生成可执行文件
$(TARGET): $(OBJS)
    $(CC) $(CFLAGS) -o $@ $^

# 编译每个源文件
%.o: %.c
    $(CC) $(CFLAGS) -c $<

# 清理生成的文件
clean:
    rm -f $(OBJS) $(TARGET)

多文件编译

多文件编译通常涉及多个源文件和头文件。Makefile 可以管理这些依赖关系。

makefile 复制代码
# 定义源文件和头文件
SRCS = main.c utils.c
HDRS = utils.h
OBJS = $(SRCS:.c=.o)

# 生成可执行文件
myprogram: $(OBJS)
    $(CC) $(CFLAGS) -o $@ $(OBJS)

# 自动生成依赖关系
%.o: %.c $(HDRS)
    $(CC) $(CFLAGS) -c $<

clean:
    rm -f $(OBJS) myprogram

CMake 工程配置

CMake 是一个跨平台的构建工具,可以生成 Makefile 或其他构建系统的配置文件。

cmake 复制代码
# CMake 最低版本要求
cmake_minimum_required(VERSION 3.10)

# 项目名称
project(MyProject)

# 设置编译选项
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -g")

# 添加可执行文件
add_executable(myprogram main.c utils.c)

# 添加头文件目录
target_include_directories(myprogram PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})

简单编译脚本

对于小型项目,可以使用简单的 Shell 脚本进行编译。

bash 复制代码
#!/bin/bash

# 编译选项
CFLAGS="-Wall -g"

# 编译所有源文件
gcc $CFLAGS -o myprogram main.c utils.c

# 运行程序
./myprogram

总结

  • Makefile:适合管理复杂的编译规则和依赖关系。
  • 多文件编译:通过 Makefile 或 CMake 管理多个源文件和头文件。
  • CMake:跨平台构建工具,适合大型项目。
  • 简单编译脚本:适用于小型项目或快速原型开发。
相关推荐
A小辣椒8 小时前
TShark:Wireshark CLI 功能
linux
A小辣椒12 小时前
TShark:基础知识
linux
AlfredZhao14 小时前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao1 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334661 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
大树882 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠2 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质2 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush42 天前
嵌入式linux学习记录十四、术语
linux·嵌入式