二、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:跨平台构建工具,适合大型项目。
  • 简单编译脚本:适用于小型项目或快速原型开发。
相关推荐
爱喝水的鱼丶1 小时前
SAP-ABAP:SAP 系统变量 SY-INDEX 学习笔记:从 1 开始的循环计数器
运维·开发语言·数据库·sap·abap
切糕师学AI1 小时前
Systemd 服务完全指南:从入门到生产实践
linux·systemd·systemctl
计算机安禾1 小时前
【计算机网络】第25篇:Linux网络数据包的解剖路径——从网卡驱动到协议栈的关键路径
linux·网络·计算机网络
深蓝易网1 小时前
工厂目视化实操手册,告别形式主义
运维·网络·数据库·人工智能·汽车
小明同学011 小时前
linux———进程间通信
linux·服务器·网络
南境十里·墨染春水1 小时前
linux学习进展 mysql视图详解
linux·学习·mysql
jimy11 小时前
Oracle的VM.Standard.E2.1.Micro虚拟机创建后,必要的安全设置,卸snap省内存
服务器·安全
songx_991 小时前
Linux基础3
linux·运维·服务器
拾光Ծ2 小时前
【Linux系统】进程信号(下):信号处理与“操作系统运行原理”
linux·运维·服务器·信号处理·操作系统原理