📚 目录(俏皮版)
🍳 一、软件管家 yum —— 做饭先备料
查看菜谱(软件包)
点菜安装
撤菜卸载
文件搬运工 rzsz
✍️ 二、编辑器 vim —— 键盘上的指尖芭蕾
三种核心模式
基本操作:进、写、退
正常模式常用指令(附例子)
末行模式常用指令
简单配置你的 vim
🔧 三、编译器 gcc/g++ —— 翻译官的故事
编译四部曲
函数库的悄悄话:静态 vs 动态
常用 gcc 选项
🐛 四、调试器 gdb —— 捉虫小能手
开始调试前的重要一步
gdb 常用命令(含例子)
🏗️ 五、自动化构建 make/Makefile —— 懒人必备神器
Makefile 的核心三要素
一个完整的例子
make 的工作原理
📊 六、第一个小程序:进度条 —— 动态视觉初体验
前置知识:\r 与 \n 的爱恨情仇
行缓冲区实验
进度条完整代码与解释
🌐 七、版本控制 git —— 代码的云端储存柜
安装与配置
三板斧实战(含免密配置)
🍳 一、软件管家 yum —— 做饭先备料
在 Linux 下装软件,传统方法是下载源码手动编译 —— 就像从种麦子开始做面包,太麻烦。yum 就是“应用商店”,帮你自动下载、安装、卸载软件包。
查看菜谱(软件包)
yum list|grep关键词例子:查找用于 Windows 和 Linux 之间传文件的 lrzsz 包
yum list|greplrzsz作用:列出所有名称包含 lrzsz 的可用软件包,并显示版本、架构等信息。
点菜安装
bashsudoyuminstall软件包名例子:安装 lrzsz
bashsudoyuminstalllrzsz作用:自动下载并安装该软件。sudo 是因为需要写入系统目录。
撤菜卸载
sudoyum remove 软件包名例子:卸载 lrzsz
sudoyum remove lrzsz作用:彻底删除软件及其配置文件。
文件搬运工 rzsz
安装 lrzsz 后,在 XShell 等终端中可以直接拖拽文件上传(rz 命令)或下载到 Windows(sz 文件名)。
💡 提示:所有 yum 操作必须联网!可以用 ping www.baidu.com 测试网络。
✍️ 二、编辑器 vim —— 键盘上的指尖芭蕾
Vim 是 Linux 自带的“神级编辑器”,没有鼠标,全靠键盘命令。初学可能觉得难,但熟练后效率飞升。
基本操作:进、写、退
1.打开/新建文件:vim test.c
2.按i进入插入模式,输入代码
3.按Esc回到正常模式
4.输入 :wq保存并退出
正常模式常用指令
末行模式常用指令
简单配置vim
在家目录创建 .vimrc 文件,写入:
syntax on" 语法高亮 set nu "显示行号setshiftwidth=4" 缩进4空格重启vim后效果立马显现
🔧 三、编译器 gcc/g++ —— 翻译官的故事
C/C++ 代码是人能读的“外语”,gcc 负责把它翻译成机器能执行的 0/1 指令。整个过程分为四步:
完整例子(以 hello.c 为例):
# 1. 预处理gcc-Ehello.c-ohello.i# 2. 编译gcc-Shello.i-ohello.s# 3. 汇编gcc-chello.s-ohello.o# 4. 链接gcc hello.o-ohello ./hello# 运行一步到位:gcc hello.c -o hello 直接生成可执行文件。
函数库的悄悄话:静态 vs 动态
动态库(.so):编译时只记录“指针”,运行时再加载。省空间,默认使用。
查看动态链接:file hello 会显示 dynamically linked。静态库(.a):把库代码直接复制进可执行文件。体积大,但可独立运行。
使用静态链接:gcc -static hello.c -o hello_static
🐛 四、调试器 gdb —— 捉虫小能手
程序出错了?gdb让你一步步观察程序的“内心活动”,找到 bug 藏身之处。
开始调试前的重要一步
gcc 默认生成的是 release 版(无法调试)。必须加上 -g 选项:
gcc-gmyprog.c-omyproggdb 常用命令(含例子)
启动调试:gdb myprog
调试小实战:假设程序第 20 行有 bug,我们想看看变量 sum 的变化
gdb myprog(gdb)b20# 在第20行打断点(gdb)r# 运行(gdb)psum# 打印当前 sum(gdb)n# 执行下一行(gdb)psum# 再打印,对比变化🏗️ 五、自动化构建 make/Makefile —— 懒人必备神器
当项目有十几个 .c 文件时,手动输入 gcc 命令会让人崩溃。Makefile 就像一个菜谱,告诉 make 命令如何一步步编译。
Makefile 的核心三要素
**1.目标:**想生成的文件(如 hello)
**2.依赖:**生成目标需要的原材料(如 hello.o)
**3.命令:**如何从依赖生成目标(如 gcc hello.o -o hello)
一个完整的例子
假设我们有一个 hello.c:
#include<stdio.h>intmain(){printf("Hello Makefile!\n");return0;}创建 Makefile 文件(注意 Tab 缩进,不能用空格):
hello: hello.o gcc hello.o-ohello hello.o: hello.s gcc-chello.s-ohello.o hello.s: hello.i gcc-Shello.i-ohello.s hello.i: hello.c gcc-Ehello.c-ohello.i .PHONY: clean clean:rm-fhello.i hello.s hello.o hello执行
make# 自动编译生成 hello./hello# 运行makeclean# 删除所有临时文件make 的工作原理
1.找当前目录下的 Makefile 或 makefile
2.执行第一个目标(这里是 hello)
3.如果目标文件不存在,或其依赖比它更新,就执行对应命令
4.依赖又可以触发下层目标,形成一个链式反应
注意:💡 .PHONY 声明 clean 是伪目标,总是执行其命令(避免和同名文件冲突)。
📊 六、第一个小程序:进度条 —— 动态视觉初体验
写一个动态刷新的进度条,能帮你深刻理解 \r(回车)、\n(换行) 以及行缓冲区的概念。
前置知识:\r 与 \n 的爱恨情仇
\n:换行(Newline),将光标移到下一行相同位置(在 Linux 中也会隐含回到行首,但标准 C 中需要区分)
\r:回车(Carriage Return),将光标移到当前行行首
在老式打字机上,\r\n 才是真正的“换到新行行首”。Linux 下通常只用 \n,但进度条需要原地刷新,所以要用 \r。
#include<stdio.h>#include<unistd.h>intmain(){printf("Hello");// 没有 \nsleep(3);// 等待3秒return0;}现象:先等待3秒,然后才一起打印 Hello。
原因:printf 默认是行缓冲,遇到 \n 或程序结束才刷新。加上 fflush(stdout) 可以立即输出。
进度条完整代码与解释
#include<stdio.h>#include<unistd.h>#include<string.h>intmain(){inti=0;charbar[102];memset(bar,0,sizeof(bar));// 清空数组constchar*label="|/-\\";// 旋转光标的四种形态(注意转义反斜杠)while(i<=100){printf("[%-100s][%d%%][%c]\r",bar,i,label[i%4]);fflush(stdout);// 立即刷新,不用等 \nbar[i++]='#';// 填充一个 #usleep(100000);// 休眠 0.1 秒,模拟进度}printf("\n");// 最后换行return0;}编译运行
gcc progress.c-oprogress ./progress现象:会看到一个动态刷新的进度条,并且一个小光标在转圈
🌐 七、版本控制 git —— 代码的云端储存柜
Git 是代码的时光机,可以随时回到任意历史版本,还能把代码托管到 GitHub 上。
sudoyuminstallgitgitconfig--globaluser.name"你的名字"gitconfig--globaluser.email"你的邮箱"三板斧实战
1. 克隆项目到本地
先在 GitHub 上新建仓库,复制 HTTPS 或 SSH 地址。
gitclone https://github.com/你的用户名/仓库名.gitcd仓库名- 第一板斧:git add—— 告诉 git 要跟踪哪些文件
echo"# My Project">>README.md# 新建一个文件gitaddREADME.md# 添加单个文件gitadd.# 添加当前目录所有改动3.第二板斧:git commit—— 在本地拍个快照
gitcommit-m"添加 README 文件"-m 后面是本次修改的说明(强烈建议写清楚改了什么)。
- 第三板斧:git push —— 同步到 GitHub 云端
gitpush origin main如果是第一次推送,可能需要输入 GitHub 用户名和密码(或 token)。
其他常用命令
gitstatus# 查看当前状态gitlog# 查看提交历史gitpull# 从云端拉取最新代码多动手敲命令,遇到错误别慌——每个报错都是成长的机会。如果在某一步卡住了,不妨回头再看看例子,或者用 man 命令 查阅官方手册。加油 同志们!