linux入门之环境基础以及开发工具的使用(yum,vim,gcc/g++.makefile,gdb,git)

文章目录

目录

前言

一、Linux软件包管理器yum

二、Linux编辑器 -vim的使用

1.vim的基本概念

2.vim的基本操作

3.vim的基本配置

4.Linux编译器-gcc/g++使用

在这里涉及到一个概念:函数库

5.Linux调试器-gdb使用

6.Linux项目自动化构建工具-make/makefile

1.make原理

2.项目清理

7.实现linux程序 - 进度条

1.\r && \n

2.缓冲区

3.实现进度条代码,源码地址:linux: demo - Gitee.com

8.使用git命令行

 


前言

本文主要介绍了以下内容:

1.yum工具,进行软件安装

2.vim编辑器使用,学会vim的简单配置

3.gcc/g++编译器的使用,并了解原理和过程

4.简单gdb使用于调试

5.Makefile的编写,了解其运行思想

6.编写linux程序:进度条

7.学习git命令行的简单操作,将代码上传到gitee,并学会使用git管理代码版本


一、Linux软件包管理器yum

在Linux下安装软件一个通常的办法是下载到程序的源代码,进行编译得到可执行程序,但是这样过于麻烦,所以有人将常用的软件提前编译好,做成软件包,可以理解成wins上的安装程序,通过包管理器获取到编译好的软件包,直接进行安装。软件包和软件包管理器,就好比app和应用商店的关系。

yum就是linux下一种非常常用的包管理器

1.yum的一些指令

1.查看软件包

yum list | grep lrzsz

2.安装软件 yum install -y filename

3.卸载软件 yum remove filename

二、Linux编辑器 -vim的使用

vi/vim的区别简单来说,都是多模式编辑器,不同的是vim是vi的升级版,vim兼容所有的vi指令

1.vim的基本概念

vim有很多种模式,主要介绍这三种常用的模式:命令模式、插入模式、底行模式,各个模式的功能区分如下:

a.正常/普通/命令模式

控制屏幕光标的移动,字符或者行的删除,可进入插入/底行模式

b.插入模式

只有在insert mode下,才可以做文字输入,按esc回到命令行模式

c.末行模式

文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。

2.vim的基本操作

进入vim,在系统提示符号输入vim以及文件名称后就进入到vim全屏编辑画面

vim test.c

不过有一点要特别注意,就是你进入 vim 之后,是处于 [ 正常模式 ] ,你要切换到 [ 插入模式 ] 才能够输入文
字。
[ 正常模式 ] 切换至 [ 插入模式 ]
输入 a
输入 i
输入 o
[ 插入模式 ] 切换至 [ 正常模式 ]
目前处于 [ 插入模式 ] ,就只能一直输入文字,如果发现输错了字 , 想用光标键往回移动,将该字删除,可
以先按一下「 ESC 」键转到 [ 正常模式 ] 再删除文字。当然,也可以直接删除。
[ 正常模式 ] 切换至 [ 末行模式 ]
shift + ; , 其实就是输入「
:
退出 vim 及保存文件 , [ 正常模式 ] 下,按一下「
: 」冒号键进入「 Last line mode , 例如 :
: w (保存当前文件)
: wq ( 输入「 wq , 存盘并退出 vim)
: q! ( 输入 q!, 不存盘强制退出 vim)
插入模式
按「
i 」切换进入插入模式「 insert mode 」,按 “i” 进入插入模式后是从光标当前位置开始输入文件;
按「
a 」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字;
按「
o 」进入插入模式后,是插入新的一行,从行首开始输入文字。
从插入模式切换为命令模式
按「 ESC 」键。
移动光标
vim 可以直接用键盘上的光标来上下左右移动,但正规的 vim 是用小写英文字母「
h 」、「
j 」、「
k 」、
l 」,分别控制光标左、下、上、右移一格
按「 G 」:移动到文章的最后
按「 $ 」:移动到光标所在行的 行尾
按「
^ 」:移动到光标所在行的 行首
按「 w 」:光标跳到下个字的开头
按「
e 」:光标跳到下个字的字尾
按「
b 」:光标回到上个字的开头
按「 #l 」:光标移到该行的第 # 个位置,如: 5l,56l
按[ gg ]:进入到文本开始
按[ shift g ]:进入文本末端
按「 ctrl +
b 」:屏幕往 移动一页
按「 ctrl +
f 」:屏幕往 移动一页
按「 ctrl +
u 」:屏幕往 移动半页
按「 ctrl +
d 」:屏幕往 移动半页
删除文字
x 」:每按一次,删除光标所在位置的一个字符
#x 」:例如,「 6x 」表示删除光标所在位置的 后面(包含自己在内) ”6 个字符
X 」:大写的 X ,每按一次,删除光标所在位置的 前面 一个字符
#X 」:例如,「 20X 」表示删除光标所在位置的 前面 ”20 个字符
dd 」:删除光标所在行
#dd 」:从光标所在行开始删除 #
复制
yw 」:将光标所在之处到字尾的字符复制到缓冲区中。
#yw 」:复制 # 个字到缓冲区
yy 」:复制光标所在行到缓冲区。
#yy 」:例如,「 6yy 」表示拷贝从光标所在的该行 往下数 ”6 行文字。
「p 」:将缓冲区内的字符贴到光标所在位置。注意:所有与 “y” 有关的复制命令都必须与 “p” 配合才能完
成复制与粘贴功能。
替换
「r 」:替换光标所在处的字符。
R 」:替换光标所到之处的字符,直到按下「 ESC 」键为止。
撤销上一次操作
「u 」:如果您误执行一个命令,可以马上按下「 u 」,回到上一个操作。按多次 “u” 可以执行多次回
复。
ctrl + r : 撤销的恢复
更改
cw 」:更改光标所在处的字到字尾处
c#w 」:例如,「 c3w 」表示更改 3 个字
跳至指定的行
ctrl + 「g 」列出光标所在行的行号。
#G 」:例如,「 15G 」,表示移动光标至文章的第 15 行行首

3.vim的基本配置

本文没有详细介绍vim配置,可参考其他文章

4.Linux编译器-gcc/g++使用

背景知识:1.预处理 2.编译(生成汇编) 3.汇编(生成机器可识别代码) 4.链接(生成可执行文件或库文件)

a.预处理(进行宏替换)

  • 预处理功能主要包括宏定义,文件包含,条件编译,去注释等
  • 预处理指令是以#开头的代码行
  • 实例:gcc -E hello.c -o hello.i
  • 选项E,该选项的作用是让gcc在预处理结束后停止编译过程
  • 选项-o是指目标文件,i文件位已经预处理的c原始程序

b.编译(生成汇编)

  • 在这个阶段,gcc首先要检查代码的规范性,是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc把代码翻译成汇编语言
  • 用户可以使用-S选项进行查看,该选项只编译而不进行汇编,生成汇编代码
  • 实例: gcc -S hello.i -o hello.s

c.汇编(生成机器可识别代码)

  • 汇编阶段是把.s文件转成目标文件
  • -c
  • 实例:gcc -c hello.s -o hello.o

d.链接(生成可执行文件或库文件)

  • 在成功编译之后,就进入到了链接阶段
  • 实例:gcc hell.o - hello

在这里涉及到一个概念:函数库

在C程序中,没有定义printf函数实现,且在预编译中的“stdio.h"中也只有该函数声明,而没有定义函数的实现,原来在 libc.so.6的库文件中定义,在没有特别指定时,gcc会到系统默认的搜索路径"/usr/lib"下查找,也就是链接到libc.so.6库函数中,这样就实现函数printf,这也就是链接的作用。

函数库一般分为静态库和动态库两种

  1. 静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件较大,但是在运行的时候不再需要库文件了,后缀一般为.a
  2. 动态库是在程序执行的时候由运行时链接文件加载库,这样节省系统的开销,后缀一般为.so,gcc在编译时默认使用动态库,链接完成之后,gcc就可以生成可执行文件,gcc hello.o -o hello
  3. gcc默认生成的二进制程序,是动态链接的,可以通过file命令验证

5.Linux调试器-gdb使用

程序的发布方式有两种:debug模式和release模式,Linux gcc/g++出来的二进制程序默认是release模式,要使用gdb调试,必须在源码生成的二进制程序的时候,加上 -g选项

具体的:

list l 行号:显示 binFile 源代码,接着上次的位置往下列,每次列 10 行。
list l 函数名:列出某个函数的源代码。
r run :运行程序。
n next :单条执行。
s step :进入函数调用
break(b)  行号:在某一行设置断点
break  函数名:在某个函数开头设置断点
info break :查看断点信息。
fifinish :执行到当前函数返回,然后挺下来等待命令
print(p) :打印表达式的值,通过表达式可以修改变量的值或者调用函数
p 变量:打印变量值。
set var :修改变量的值
continue( c) :从当前位置开始连续而非单步执行程序
run( r) :从开始连续而非单步执行程序
delete breakpoints :删除所有断点
delete breakpoints n :删除序号为 n 的断点
disable breakpoints :禁用断点
enable breakpoints :启用断点
info( i) breakpoints :参看当前设置了哪些断点
display  变量名:跟踪查看一个变量,每次停下来都显示它的值
undisplay :取消对先前设置的那些变量的跟踪
until X 行号:跳至 X
breaktrace( bt) :查看各级函数调用及参数
info i) locals :查看当前栈帧局部变量的值
quit :退出 gdb

6.Linux项目自动化构建工具-make/makefile

一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列规则来指定文件的编译顺序,重新编译,甚至更复杂。makefile带来的好处就是自动化编译,make指令完成整个工程的自动编译,提高了软件开发的效率。

make是一个命令工具,一个解释makefile中指令的命令工具

makefile是一个文件,里面定义编译规则

hello.c:

    int main()
{
    printf("hello makefile");
    return 0;
}


Makefile文件中:

hello: hello.c  //依赖方法

    gcc hello -o hello.o        //依赖关系
    gcc -c hello.s -o hello.o
    gcc -S hello.i -o hello.s
    gcc -E hello.c -o hello.i

.PHONY:clean
clean:
    rm -f hello.i hello.s hello.o hello

1.make原理

  • make会在当前目录下找名字叫Makefile或makefile的文件
  • 如果找到,它会找到文件中的第一个目标文件,在上面的例子中,它会找到hello这个文件,并把这个文件作为最终的目标文件
  • 如果hello文件不存在,或者hello所依赖的后面的hello.o文件的修改文件比hello新(可以用touch测试),那么,他就会执行后面所定义的命令来生产hello这个文件
  • 如果hello所依赖的hello.o不存在,那么会找hello.o文件的依赖性(有点类似堆栈)
  • 这就是make的依赖性,make会一层一层去找文件的依赖关系,直到最终编译出第一个目标文件
  • 如果在寻找的过程中出现错误,比如最后的被依赖文件找不到,那么make就会退出或者报错
  • make只负责文件的依赖性,即找到依赖关系后,冒号后面的文件不存在,那么就不工作啦

2.项目清理

      工程是需要被清理的,上述的clean,没有被第一个目标文件直接或者间接关联,那么它后面所定义的命令不会被执行,不过我们可以显示make执行,即make clean用来清除所有的目标文件,以便重新编译

  • 一般我们使用clean的目标文件,将它设置为伪目标,用.PHONY修饰,伪目标的特性是,总是被执行的。

7.实现linux程序 - 进度条

1.\r && \n

\n 到下一行 换行

\r 到当前行的最开始 回车

 

#include 
int main()
{
 printf("hello Makefile!");
//好像是先执行了sleep 才打印? 其实并非这样 代码是从上到下顺序执行
//fflush(stdout); //主动刷新一下缓冲区
 sleep(3);
 return 0;
}

sleep的时候数据没有被刷新显示出来 字符串保存到了缓冲区,最后输出hello Makefile 
加上\n 打印是缓冲区有自己的刷新规则 遇到换行符就打印出来 --行缓冲


#include 
int main()
{
 printf("hello Makefile!\r"); //没有数据 因为\r是回到本行的开始
 return 0;
}

2.缓冲区

\n带上立马刷新,但是没有\n,带上sleep休眠的时候,数据没有显示,当程序准备退出的时候才显示出来。

3.实现进度条代码,源码地址:linux: demo - Gitee.com

首先,建立一个mkdir process文件夹,在这个文件夹里分别touch proc.h;proc.c;main.c程序,具体的程序编辑如下:

proc.h:
#pragma once
#include

extern void process(); //声明这个函数

proc.c:

#include "proc.h" 
#include
#include

#define SIZE 102
#define STYLE '#'
#define ARR '>'

//显示并覆盖的方案 
void process()
{
    const char * label = '"/|-\\";
    char bar[SIZE]; //定义进度条的大小
    memset(bar,'\0\,sizeof(bar)); //初始化都为\0
    int i = 0;
    while(i<=100)
    {
        printf("[%-100s][%d%%][%c]\r",bar,i,label[i%4]); 
       // -100s 左对齐 预留100个占位符
        fflush(stdout);
        bar[i++]=STYLE;
        if(i!=100) bar[i]=[ARR];
        usleep(100000);
}
//换行打印下一个
printf("\n");
}

8.使用git命令行

1.安装git

yum install git

2.在gitee中进行新建仓库 初始化仓库,选择语言,gitignore都选择c++,设置模板readme,由于gitee默认不开源,要在管理中打开开源,保存设置就可以。

3.将远端仓库拉到本地,复制http,在xshell中对应的文件夹git clone + gitee地址

4.将本地仓库放到刚刚下载好的目录中 git add .

5.提交改动到本地 git commit .

提交的时候应该注明提交日志,描述详细改动的内容

6.git push同步到远端服务器上


你可能感兴趣的:(linux,linux,服务器,git,c语言)