Linux环境基础开发工具的使用_yum源_vim_Git控制器
目录
本节目标:
一、Linux 软件包管理器 yum
1.什么是软件包
2.关于 rzsz
3.注意事项
4.查看软件包
5.注意事项:
6.如何安装软件
说到这里,就可以取百度上康康有哪些好玩的指令:
二、Linux开发工具
Linux编辑器-vim使用
1. vim的基本概念
1.正常/普通/命令模式(Normal mode)
2.插入模式(Insert mode)
3.末行模式(last line mode)
2. vim的基本操作
插入模式:
3. vim正常模式命令集
插入模式
从插入模式切换为命令模式
移动光标
移动文件cp到指定目录下:
现在可以打开vim编辑器来尝试每一个选项:
删除文字:
复制:
替换
撤销上一次操作
更改
跳至指定的行
4. vim末行模式命令集
列出行号
跳到文件中的某一行
查找字符
保存文件
离开vim
5. vim操作总结
三种模式
6. 简单vim配置
配置文件的位置
常用配置选项,用来测试
使用插件
手把手配置:
Ubuntu:配置vimpuls
1. 安装必要的依赖项
2. 克隆 Vimplus 项目
3. 安装 Vimplus
4. 配置 Python 环境
5. 检查安装结果
6. 可选:自定义配置
7. 更新 Vimplus
8. 卸载 Vimplus
参考资料
vim实现多行注释:
三、⾃动化构建-make/Makefile
3-1 背景
makefile文件:
依赖关系
3-4 推导过程
编译
• make是如何⼯作的,在默认的⽅式下,也就是我们只输⼊make命令。那么:
3-5 适度扩展语法
四、Linux第一个小程序-进度条
1.回车和换行 - \r&&\n
2.缓冲区问题:
2.1 测试代码:
简易百分比进度条:
第一代进度条:
第二代:模拟下载程序进度:
makefile:
main.c:
process.c:
process.h:
五、版本控制器Git
5-1 版本控制器
5-2 git 简史
5-3 安装 git
5-4 在 Gitee创建项⽬
1. 登陆成功后, 进⼊个⼈主⻚, 点击左下⽅的 新建创库 按钮新建项⽬
2.创建仓库
3.在Liunx上拉下本地仓库:
复制云端仓库的https地址:
git clone+云端仓库地址
可以看到不论是Linux下还是windows上都是一模一样的界面:
在第一次在Linux下进行git仓库上传的时候需要配置姓名和邮件:
进行配置好姓名和邮件后,这里创建一个test.c 文件进行上传:
1.git add ./*/[文件名] 这里就有点通配符的味道,一次性直接上传
2.git commit -m "上传描述"
3.git push
那么为了确保文件是否真的被上传成功,就可以直接区暂存区内看看,是否有新文件没有被上传:
git status
配置免密码提交:
本节目标:
1. 学习 yum 工具,进行软件安装2. 掌握 vim 编辑器使用,学会 vim 的简单配置3. 掌握 gcc/g++ 编译器的使用,并了解其过程,原理4. 掌握简单 gdb 使用于调试5. 掌握简单的 Makefile 编写,了解其运行思想6. 编写自己的第一个 Linux 程序:进度条7. 学习 git 命令行的简单操作 , 能够将代码上传到 Github 上
一、Linux 软件包管理器 yum
1.什么是软件包
2.关于 rzsz
3.注意事项
ping www.baidu.com
4.查看软件包
yum list | grep lrzsz
lrzsz.x86_64 0.12.20-36.el7 @base
5.注意事项:
6.如何安装软件
sudo yum install lrzsz
sudo yum remove lrzsz
说到这里,就可以取百度上康康有哪些好玩的指令:
二、Linux开发工具
Linux编辑器-vim使用
1. vim的基本概念
1.正常/普通/命令模式(Normal mode)
2.插入模式(Insert mode)
3.末行模式(last line mode)
2. vim的基本操作
$ vim test.c
插入模式:
3. vim正常模式命令集
插入模式
1.按「 i 」切换进入插入模式「 insert mode 」,按 “i” 进入插入模式后是从光标当前位置开始输入文件;2.按「 a 」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字;3.按「 o 」进入插入模式后,是插入新的一行,从行首开始输入文字。
从插入模式切换为命令模式
按「 ESC 」键
移动光标
1.vim 可以直接用键盘上的光标来上下左右移动,但正规的 vim 是用小写英文字母「 h 」、「 j 」、「 k 」、「l 」,分别控制光标左、下、上、右移一格2.按「 G 」:移动到文章的最后3.按「 $ 」:移动到光标所在行的 “ 行尾 ”4.按「 ^ 」:移动到光标所在行的 “ 行首 ”5.按「 w 」:光标跳到下个字的开头6.按「 e 」:光标跳到下个字的字尾7.按「 b 」:光标回到上个字的开头8.按「 #l 」:光标移到该行的第 # 个位置,如: 5l,56l9.按[ gg ]:进入到文本开始10.按[ shift + g ]:进入文本末端11.按「 ctrl 」 + 「 b 」:屏幕往 “前 ” 移动一页12.按「 ctrl 」 + 「 f 」:屏幕往 “后 ” 移动一页13.按「 ctrl 」 + 「 u 」:屏幕往“前”移动半页14.按「 ctrl 」 + 「 d 」:屏幕往“后”移动半页
移动文件cp到指定目录下:
现在可以打开vim编辑器来尝试每一个选项:
删除文字:
「 x 」:每按一次,删除光标所在位置的一个字符「 #x 」:例如,「 6x 」表示删除光标所在位置的 “ 后面(包含自己在内) ”6 个字符「 X 」:大写的 X ,每按一次,删除光标所在位置的 “ 前面 ” 一个字符「 #X 」:例如,「 20X 」表示删除光标所在位置的 “ 前面 ”20 个字符「 dd 」:删除光标所在行「 #dd 」:从光标所在行开始删除 # 行
复制:
「 yw 」:将光标所在之处到字尾的字符复制到缓冲区中。「 #yw 」:复制 # 个字到缓冲区「 yy 」:复制光标所在行到缓冲区。「 #yy 」:例如,「 6yy 」表示拷贝从光标所在的该行 “ 往下数 ”6 行文字。「 p」: 将缓冲区内的字符贴到光标所在位置。注意:所有与 “y” 有关的复制命令都必须与 “p” 配合才能完 成复制与粘贴功能。
替换
撤销上一次操作
更改
跳至指定的行
4. vim末行模式命令集
列出行号
跳到文件中的某一行
查找字符
「 / 关键字」 : 先按「 / 」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按 「n 」会往后寻找到您要的关键字为止。「 ? 关键字」:先按「 ? 」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n 」会往前寻找到您要的关键字为止。问题:/ 和 ?查找有和区别?操作实验一下
/# ,按n,会一直往后找?# ,按n,会一直往前找
保存文件
「 w 」 : 在冒号输入字母「 w 」就可以将文件保存起来
离开vim
「 q 」:按「 q 」就是退出,如果无法离开 vim ,可以在「 q 」后跟一个「 ! 」强制离开 vim 。「 wq 」:一般建议离开时,搭配「 w 」一起使用,这样在退出的时候还可以保存文件
5. vim操作总结
三种模式
正常模式插入模式底行模式
6. 简单vim配置
配置文件的位置
1.在目录 /etc/ 下面,有个名为 vimrc 的文件,这是系统中公共的 vim 配置文件,对所有用户都有效。2.而在每个用户的主目录下,都可以自己建立私有的配置文件,命名为: “.vimrc” 。例如, /root 目录下,通常已经存在一个.vimrc 文件 , 如果不存在,则创建之。3.切换用户成为自己执行 su ,进入自己的主工作目录 , 执行 cd ~4.打开自己目录下的 .vimrc 文件,执行 vim .vimrc
常用配置选项,用来测试
1.设置语法高亮 : syntax on2.显示行号 : set nu3.设置缩进的空格数为 4: set shiftwidth=4
使用插件
要配置好看的 vim ,原生的配置可能功能不全,可以选择安装插件来完善配置,保证用户是你要配置的用户,接下来:安装 TagList 插件 , 下载 taglist_xx.zip , 解压完成,将解压出来的 doc 的内容放到~ /.vim/doc, 将解压出来的plugin 下的内容拷贝到~ /.vim/plugin在~ /.vimrc 中添加 : let Tlist_Show_One_File=1 let Tlist_Exit_OnlyWindow=1 letTlist_Use_Right_Window=1安装文件浏览器和窗口管理器插件 : WinManager下载 winmanager.zip , 2.X 版本以上的解压 winmanager.zip ,将解压出来的 doc 的内容放到~ /.vim/doc, 将解压出来的 plugin 下的内容拷贝到~/.vim/plugin在~ /.vimrc 中添加 let g:winManagerWindowLayout=‘FileExplorer|TagList nmap wm :WMToggle<cr>然后重启 vim, 打开 ~/XXX.c 或~ /XXX.cpp, 在 normal 状态下输入 "wm", 你将看到上图的效果。
手把手配置:
CentOs:
https://blog.csdn.net/wooin/article/details/1858917
Ubuntu:配置vimpuls
1. 安装必要的依赖项
在安装 Vimplus 之前,确保你的系统中有一些基本的依赖库。打开终端并运行以下命令:
sudo apt update sudo apt install -y git vim gcc g++ make cmake python3 python3-pip
2. 克隆 Vimplus 项目
在终端中执行以下命令,将 Vimplus 项目克隆到本地:
cd ~ git clone https://github.com/chxuan/vimplus.git
3. 安装 Vimplus
进入 vimplus 目录,并运行安装脚本:
cd ~/vimplus ./install.sh
此脚本会自动为 Vim 安装插件、主题和相关的配置。安装过程可能较慢,尤其是在安装插件时,请耐心等待。
4. 配置 Python 环境
Vimplus 默认使用 Python3,如果你希望配置 Python 环境支持,还需要安装 pynvim
:
pip3 install pynvim
5. 检查安装结果
安装完成后,打开 Vim 并检查是否有 Vimplus 的主题和插件:
vim
进入 Vim 后,可以使用 :PlugInstall
命令来手动安装或更新插件。
6. 可选:自定义配置
你可以在
~/.vimrc
中添加或修改 Vimplus 的配置。例如,调整主题、快捷键、字体等。
7. 更新 Vimplus
如果想更新 Vimplus,可以执行以下命令:
cd ~/vimplus git pull ./update.sh
8. 卸载 Vimplus
如果需要卸载 Vimplus,可以使用以下命令:
cd ~/vimplus ./uninstall.sh
完成这些步骤后,你的 Vim 应该会有一个丰富的插件集成和增强的编辑体验。
参考资料
vim实现多行注释:
- 进入可视行模式:
- 移动到需要注释的第一行。
- 按下
Ctrl+v
进入块选择模式。- 使用方向键选择多行。
- 插入注释符号:
- 按下
Shift+i
或I
进入插入模式。- 输入注释符号(例如 #)。
- 按
Esc
键,vim 会自动在每一行添加注释符号。
三、⾃动化构建-make/Makefile
3-1 背景
• 会不会写makefile,从⼀个侧⾯说明了⼀个⼈是否具备完成⼤型⼯程的能⼒• ⼀个⼯程中的源⽂件不计数,其按类型、功能、模块分别放在若⼲个⽬录中,makefile定义了⼀系列的规则来指定,哪些⽂件需要先编译,哪些⽂件需要后编译,哪些⽂件需要重新编译,甚⾄于进⾏更复杂的功能操作• makefile带来的好处就是⸺“⾃动化编译”,⼀旦写好,只需要⼀个make命令,整个⼯程完全⾃动编译,极⼤的提⾼了软件开发的效率。• make是⼀个命令⼯具,是⼀个解释makefile中指令的命令⼯具,⼀般来说,⼤多数的IDE都有这个命令,⽐如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可⻅,makefile都成为了⼀种在⼯程⽅⾯的编译⽅法。• make是⼀条命令,makefile是⼀个⽂件,两个搭配使⽤,完成项⽬⾃动化构建。
makefile文件:
依赖关系
• 上⾯的⽂件myproc,它依赖myproc.c依赖⽅法• gcc -o myproc myproc.c ,就是与之对应的依赖关系项⽬清理• ⼯程是需要被清理的• 像clean这种,没有被第⼀个⽬标⽂件直接或间接关联,那么它后⾯所定义的命令将不会被⾃动执⾏,不过,我们可以显⽰要make执⾏。即命令⸺“make clean”,以此来清除所有的⽬标⽂件,以便重编译。• 但是⼀般我们这种clean的⽬标⽂件,我们将它设置为伪⽬标,⽤ .PHONY 修饰,伪⽬标的特性是,总是被执⾏的。• 可以将我们的 hello ⽬标⽂件声明成伪⽬标,测试⼀下📌 结论:.PHONY:让make忽略源⽂件和可执⾏⽬标⽂件的M时间对⽐
但是上面的操作,不能很好的看到可执行文件执行的过程,和被链接的过程,那么就要考虑手动打印的方法:
获取所有源文件的 .c
只需要将SRC里面的.c 都换成.o即可:
3-4 推导过程
myproc:myproc.o
gcc myproc.o -o myproc
myproc.o:myproc.s
gcc -c myproc.s -o myproc.o
myproc.s:myproc.i
gcc -S myproc.i -o myproc.s
myproc.i:myproc.c
gcc -E myproc.c -o myproc.i
.PHONY:clean
clean:
rm -f *.i *.s *.o myproc
编译
$ make
gcc -E myproc.c -o myproc.i
gcc -S myproc.i -o myproc.s
gcc -c myproc.s -o myproc.o
gcc myproc.o -o myproc
• make是如何⼯作的,在默认的⽅式下,也就是我们只输⼊make命令。那么:
1. make会在当前⽬录下找名字叫“Makefile”或“makefile”的⽂件。2. 如果找到,它会找⽂件中的第⼀个⽬标⽂件(target),在上⾯的例⼦中,他会找到 myproc 这个⽂件,并把这个⽂件作为最终的⽬标⽂件。3. 如果 myproc ⽂件不存在,或是 myproc 所依赖的后⾯的 myproc.o ⽂件的⽂件修改时间要⽐ myproc 这个⽂件新(可以⽤ touch 测试),那么,他就会执⾏后⾯所定义的命令来⽣成myproc 这个⽂件。4. 如果 myproc 所依赖的 myproc.o ⽂件不存在,那么 make 会在当前⽂件中找⽬标为myproc.o ⽂件的依赖性,如果找到则再根据那⼀个规则⽣成 myproc.o ⽂件。(这有点像⼀个堆栈的过程)5. 当然,你的C⽂件和H⽂件是存在的啦,于是 make 会⽣成 myproc.o ⽂件,然后再⽤myproc.o ⽂件声明 make 的终极任务,也就是执⾏⽂件 hello 了。6. 这就是整个make的依赖性,make会⼀层⼜⼀层地去找⽂件的依赖关系,直到最终编译出第⼀个⽬标⽂件。7. 在找寻的过程中,如果出现错误,⽐如最后被依赖的⽂件找不到,那么make就会直接退出,并 报错,⽽对于所定义的命令的错误,或是编译不成功,make根本不理。8. make只管⽂件的依赖性,即,如果在我找了依赖关系之后,冒号后⾯的⽂件还是不在,那么对不起,我就不⼯作啦。
3-5 适度扩展语法
BIN=proc.exe # 定义变量
CC=gcc
#SRC=$(shell ls *.c) # 采⽤shell命令⾏⽅式,获取当前所有.c⽂件名
SRC=$(wildcard *.c) # 或者使⽤ wildcard 函数,获取当前所有.c⽂件名
OBJ=$(SRC:.c=.o) # 将SRC的所有同名.c 替换 成为.o 形成⽬标⽂件列表
LFLAGS=-o # 链接选项
FLAGS=-c # 编译选项
RM=rm -f # 引⼊命令
$(BIN):$(OBJ)
@$(CC) $(LFLAGS) $@ $^ # $@:代表⽬标⽂件名。 $^: 代表依赖⽂件列表
@echo "linking ... $^ to $@"
%.o:%.c # %.c 展开当前⽬录下所有的.c。 %.o: 同时展开同
名.o
@$(CC) $(FLAGS) $< # %<: 对展开的依赖.c⽂件,⼀个⼀个的交给gcc。
@echo "compling ... $< to $@" # @:不回显命令
.PHONY:clean
clean:
$(RM) $(OBJ) $(BIN) # $(RM): 替换,⽤变量内容替换它
.PHONY:test
test:
@echo $(SRC)
@echo $(OBJ)
四、Linux第一个小程序-进度条
1.回车和换行 - \r&&\n
2.缓冲区问题:
所以在程序休眠时,没有“\n” 那么就会放在缓冲区里面,没有被刷新到显示屏上,但是如果加上“\n” 回车换行,那么缓冲区里面的内容会刷新在显示屏上。
2.1 测试代码:
要让每一个字符都在同一个位置进行打印,那么就说明是只回车,不换行;
当前进行回车换行,就达不到一直在同一个位置进行打印的效果:
但是只进行换行的时候,打印的内容在缓冲区内没有被刷新出来,就会造成最后打印不出结果的问题:
当进行手动刷新的时候就可以得到缓存区里面的值被打印出来:
要考虑如果当数字出现两位以上怎么办的情况:
3.想写一个什么样的进度条
创建好makefile:
进行修改process.c:
然后进行只回车,不换行进行刷新缓冲区:fflush(stdout);
简易百分比进度条:
第一代进度条:
第二代:模拟下载程序进度:
makefile:
1 SRC=$(wildcard *.c)
2 OBJ=$(SRC:.c=.o)
3 BIN=processbar
4
5 $(BIN):$(OBJ)
6 gcc -o $@ $^
7 %.o:%.c
8 gcc -c $< -std=c99
9
10 .PHONY:
11 clean:
12 rm -f $(OBJ) $(BIN)
13
main.c:
//main.c
1 #include "process.h"
2 #include <stdio.h>
3 #include <unistd.h>
4
5 double total = 1024.0;
6 double speed = 1.0;
7
8 void DownLoad()
9 {
10 double current=0;
11 while(current<=total)
12 {
13 FlushProcess(total,current);
14 //下载代码
15 usleep(3000);//充当下载数据
16 current+=speed;
17 }
18 printf("\ndownlocad %.2lfMB Done\n",current);
19 }
20
21
22
23 int main()
24 {
25 DownLoad();
26 return 0;
27 }
~
~
process.c:
#include "process.h"
2 #include <string.h>
3 #include <unistd.h>
4
5 #define NUM 101
6 #define STYLE '#'
7
8
9 FlushProcess(double total,double current)
10 {
11 char buffer[NUM];
12 memset(buffer,0,sizeof(buffer));
13 const char* lable="|/-\\";
14 int len=strlen(lable);
15
16 static int cnt=0;
17
18 //不需要自己循环填充#
19 int num = (int) (current*100/total);
20 for(int i=0;i<num ;i++)
21 {
22 buffer[i]=STYLE;
23 }
24
25 double rate=current/total;
26
27 cnt%=len;
28 printf("[%-100s][%.lf%%][%c]\r",buffer,rate*100,lable[cnt]);
29 cnt++;
30 fflush(stdout);
31
32 }
33
34
35
36 void process_v1()
37 {
38 char buffer[NUM];
39 memset(buffer,0,sizeof(buffer));
40 const char* lable="|/-\\";
41 int len=strlen(lable);
42
43 int cnt=0;
44 while(cnt<=100)
45 {
46 printf("[%-100s][%d%%][%c]\r",buffer,cnt,lable[cnt%len]);
47 fflush(stdout);
48 buffer[cnt]=STYLE;
49 cnt++;
50 usleep(50000);
51 }
52 printf("\n");
53 }
~
process.h:
#pragma once
2
3 #include <stdio.h>
4
5 void process_v1();
6
7
8 FlushProcess(double total,double current);
第二代模拟下载进度条:
五、版本控制器Git
不知道你⼯作或学习时,有没有遇到这样的情况:我们在编写各种⽂档时,为了防⽌⽂档丢失,更改失误,失误后能恢复到原来的版本,不得不复制出⼀个副本,⽐如:“报告-v1”“报告-v2”“报告-v3”“报告-确定版”“报告-最终版”“报告-究极进化版”...每个版本有各⾃的内容,但最终会只有⼀份报告需要被我们使⽤ 。但在此之前的⼯作都需要这些不同版本的报告,于是每次都是复制粘贴副本,产出的⽂件就越来越多,⽂件多不是问题,问题是:随着版本数量的不断增多,你还记得这些版本各⾃都是修改了什么吗?⽂档如此,我们写的项⽬代码,也是存在这个问题的!!
5-1 版本控制器
为了能够更⽅便我们管理这些不同版本的⽂件,便有了版本控制器。所谓的版本控制器,就是能让你了解到⼀个⽂件的历史,以及它的发展过程的系统。通俗的讲就是⼀个可以记录⼯程的每⼀次改动和版本迭代的⼀个管理系统,同时也⽅便多⼈协同作业。⽬前最主流的版本控制器就是 Git 。Git 可以控制电脑上所有格式的⽂件,例如 doc、excel、dwg、dgn、rvt等等。对于我们开发⼈员来说,Git 最重要的就是可以帮助我们管理软件开发项⽬中的源代码⽂件!
5-2 git 简史
同⽣活中的许多伟⼤事物⼀样,Git 诞⽣于⼀个极富纷争⼤举创新的年代。Linux 内核开源项⽬有着为数众多的参与者。 绝⼤多数的 Linux 内核维护⼯作都花在了提交补丁和保存归档的繁琐事务上(1991−2002年间)。 到 2002 年,整个项⽬组开始启⽤⼀个专有的分布式版本控制系统 BitKeeper 来管理和维护代码。到了 2005 年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区免费使⽤ BitKeeper 的权⼒。 这就迫使 Linux 开源社区(特别是 Linux 的缔造者 LinusTorvalds)基于使⽤ BitKeeper 时的经验教训,开发出⾃⼰的版本系统。 他们对新的系统制订了若⼲• ⽬标• 速度• 简单的设计• 对⾮线性开发模式的强⼒⽀持(允许成千上万个并⾏开发的分⽀)• 完全分布式有能⼒⾼效管理类似 Linux 内核⼀样的超⼤规模项⽬(速度和数据量)⾃诞⽣于 2005 年以来,Git ⽇臻成熟完善,在⾼度易⽤的同时,仍然保留着初期设定的⽬标。 它的速度⻜快,极其适合管理⼤项⽬,有着令⼈难以置信的⾮线性分⽀管理系统。
5-3 安装 git
sudo yum install git
sudo apt install git
5-4 在 Gitee创建项⽬
1. 登陆成功后, 进⼊个⼈主⻚, 点击左下⽅的 新建创库 按钮新建项⽬
2.创建仓库
3.在Liunx上拉下本地仓库:
复制云端仓库的https地址:
git clone+云端仓库地址
可以看到不论是Linux下还是windows上都是一模一样的界面:
这个.git 才是真正的本地仓库,每次进行更新的时候只会更新修改的位置,会记录每一次更新。
在第一次在Linux下进行git仓库上传的时候需要配置姓名和邮件:
git config --global user.name "Your Name"
git config --global user.email "your_email@example.com"
进行配置好姓名和邮件后,这里创建一个test.c 文件进行上传:
1.git add ./*/[文件名] 这里就有点通配符的味道,一次性直接上传
2.git commit -m "上传描述"
是将文件放入暂存区内:
这里的描述千万别乱写,以后时间长了,直接导出来所有文件,乱写的描述一眼就看到了;
3.git push
将暂存区内的文件进行上传到云端gitee的仓库
也就是这三步能够完成所有文件或者文件夹的同步更新;
此时可以看到test.c文件被成功上传;
那么为了确保文件是否真的被上传成功,就可以直接区暂存区内看看,是否有新文件没有被上传:
git status
假如存在有的文件没有被上传成功,那么就可以知道暂存区内还有文件;
另外就是windows 跟 Linux 同时可以对gitee的同一个仓库进行操作和修改,那么当win进行操作后,Linux就会传输失败,同样win也是;那么怎么解决呢?
其实这就说明win操作后,Linux的这个本地仓库就不是最新的仓库,只要重新更新一下云端仓库就可以正常继续上传了:win跟Linux产生了冲突;
git pull 来更新一下最新的仓库即可
配置免密码提交:
总结一下吧~总结不易,本章对我的收获和学习巨大,希望对你也有帮助!!!