【Linux】工具使用

一、Linux 软件包管理器 yum

软件包
在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序.但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装.软件包和软件包管理器, 就好比 “App” 和 “应用商店” 这样的关系.yum(Yellow dog Updater, Modified)是Linux下非常常用的一种包管理器. 主要应用在Fedora, RedHat, Centos等发行版上。
yum使用
1yum list | grep 软件包名字可以查看软件包它的组成是: 主版本号.次版本号.源程序发行号-软件包的发行号.主机平台.cpu架构。如下图
在这里插入图片描述

  • “x86_64” 后缀表示64位系统的安装包, “i686” 后缀表示32位系统安装包. 选择包时要和系统匹配.
  • “el7” 表示操作系统发行版的版本. “el7” 表示的是 centos7/redhat7. “el6” 表示 centos6/redhat6.
  • os 表示的是 “软件源” 的名称, 类似于 “小米应用商店”, “华为应用商店” 这样的概念.
    yum -y install 软件名字可以安装软件如果是普通用户需切换root或者在前前面加sduo即可。
    yum -y remove 软件名字卸载软件使用同上。
    yum源
    应用商店及软件管家需要知道各个软件的下载地址通过网络的方式去对应的服务器找软件才能下载一般都内置下载链接的地址yum也需要它也有自己的配置文件称为yum源。在根目录/etc/yum.repos.d/路径下。
    更新yum源只需要四个步骤
  • 先进行备份老的yun源 Centos-base.repo
  • wget 命令来获取新的yum源配置文件从远程获取url资源的命令后面跟新的yum源配置文件路径可以去搜链接如163的http//mirrors.163.com/.help/CentOS7-163/repo。
  • mv 重命名成为Centos-Base,repo
  • yum clean&& yum makecache:清理老的的缓存并生成新的缓存。
    扩展软件
    如果安装的软件没有因为服务器上对应的软件分为官方软件和扩展软件所以就可能在扩展的yum源中只需要sudo yum -y epel-release。可以根据自己的base yum源找到和它匹配的扩展yum源。

二、 Linux开发工具

1 Linux编辑器-vim使用

编辑模式:
vim是一款多模式的编辑器有各种模式每种模式可以互相切换先介绍五种。
1命令模式控制屏幕光标的移动字符、字或行的删除移动复制某区段及进入插入模式下或者到底行模式。
2插入模式只有此模式下才可以做文字输入按「ESC」键可回到命令行模式。该模式是最频繁的编辑模式。
3底行模式文件保存或退出也可以进行文件替换找字符串列出行号等操作。 在命令模式下shift+: 即可进入该模
式。要查看你的所有模式打开vim底行模式直接输入help vim-modes。
4替换模式直接按shift +r 可以替换当前光标下的字符。
5视图模式在底行模式输入 vs +文件名可以多文件分屏编辑ctrl+ww可以进行文件切换。
如图
在这里插入图片描述
vim命令集
插入模式
(1) 按「i」切换进入插入模式「insert mode」按“i”进入插入模式后是从光标当前位置开始输入文件
(2) 按「a」进入插入模式后是从目前光标所在位置的下一个位置开始输入文字
(3 ) 按「o」进入插入模式后是插入新的一行从行首开始输入文字。
命令模式按esc进入
vim可以直接用键盘上的光标来上下左右移动但正规的vim是用小写英文字母「h」、「j」、「k」、「l」分别控制光标左、下、上、右移一格。
按「G」移动到文章的最后
按shift+「 $ 」移动到光标所在行的“行尾”
按shift+「^」移动到光标所在行的“行首”
按「w」光标跳到下个字的开头
按「e」光标跳到下个字的字尾
按「b」光标回到上个字的开头
按[gg]进入到文本开始
按[shift+g]进入文本末端
n shift [g]将光标定位到文档的指定行
按「ctrl」+「b」屏幕往“后”移动一页
按「ctrl」+「f」屏幕往“前”移动一页
按「ctrl」+「u」屏幕往“后”移动半页
按「ctrl」+「d」屏幕往“前”移动半页
「x」每按一次删除光标所在位置的一个字符
「#x」例如「6x」表示删除光标所在位置的“后面包含自己在内”6个字符
「X」大写的X每按一次删除光标所在位置的“前面”一个字符
「nX」例如「20X」表示删除光标所在位置的“前面”20个字符
「dd」删除光标所在行
「ndd」从光标所在行开始删除n行
「yw」将光标所在之处到字尾的字符复制到缓冲区中。
「nyw」复制n个字到缓冲区
「yy」复制光标所在行到缓冲区。
「nyy」例如「6yy」表示拷贝从光标所在的该行“往下数”6行文字。
「p」将缓冲区内的字符贴到光标所在位置。注意所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。
[n pp]:粘贴n行内容到指定的光标下
[u]:撤销刚刚的操作
[ctrl+r]对撤销进行撤销
[shfit ~]:快速大小写切换
「r」替换光标所在处的字符。
「R」替换光标所到之处的字符直到按下「ESC」键为止。
「cw」更改光标所在处的字到字尾处
「cnw」例如「c3w」表示更改3个字
「ctrl」+「g」列出光标所在行的行号。
「nG」例如「15G」表示移动光标至文章的第15行行首。
底行模式先exc 在shift+进入
「set nu」: 输入「set nu」后会在文件中的每一行前面列出行号。
「n」:「n」号表示一个数字在冒号后输入一个数字再按回车键就会跳到该行了如输入数字1再回车就会跳到文章的第1行。
「/关键字」: 先按「/」键再输入您想寻找的字符如果第一次找的关键字不是您想要的可以一直按「n」会往后寻找到您要的关键字为止。
[%s///g]:将单词进行替换
[!+命令]:可以不用退出vim 进行命令执行再按enter可以立即返回vim
替换模式先esc 再shfit+r 可以替换当前光标下的内容。
视图模式先进入底行模式再vs +文件名可以分屏编辑文件光标在哪就在哪一行编辑ctrll+ww切换不同界面。

2简单vim配置

配置vim就是为了写代码以及编辑内内容等操作起来时方便而且有美化界面快速注释功能模板补全功能工程浏览功能代码补全功能。分为手动配置和自动化配置。
手动配置
可以自己配置vim在启动的时候会自动在当前用户的目录下寻找配置文件如果没有就是默认。先创建.vimrc在里面进行增加指令进行配置指令可以在网上搜索。
自动化配置
这种方法非常适合我们新手使用是大佬们针对我们这种对vim配置方法不熟悉的新手封装的一键式vim环境安装包. 主要用在终端vim用户, 目前只支持centos 7版本。如何配置在自己的普通用户后面输入curl -sf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh 后面会再让你输入root用户密码也就是超级用户 就可以直接自动安装了如图
在这里插入图片描述

三、Linux编译器-gcc/g++使用

gccg++在linux中是一个编译器可以把对应的c代码和++代码进行编译对于一个.c的源程序gcc把它最终编译成一个可执行程序分为四个步骤。
(1)预处理
在这里插入图片描述
q.i是目标文件q.c是被执行的文件也叫做依赖文件。

  • 预处理功能主要包括宏定义,文件包含,条件编译,去注释等。
  • 预处理指令是以#号开头的代码行。
  • 选项“-E”,该选项的作用是让 gcc 在预处理结束后停止编译过程。
  • 选项“-o”是指目标文件,“.i”文件为已经过预处理的C原始程序。
    (2)编译
    在这里插入图片描述
    q,s是目标文件q,i是依赖文件
  • 在这个阶段中,gcc 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc 把代码翻译成汇编语言。
  • 用户可以使用“-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码。
    (3)汇编
    在这里插入图片描述

q.c是目标文件吗q.s是依赖文件

  • 汇编阶段是把编译阶段生成的“.s”文件转成目标文件
  • 在此可使用选项“-c”就可看到汇编代码已转化为“.o”的二进制目标代码了
    (4)l链接

在成功编译之后,就进入了链接阶段。生成可执行程序如图在这里插入图片描述

四、动态库和静态库

在C程序中并没有定义“printf”的函数实现,且在预编译中包含的“stdio.h”中也只有该函数的声明,而没有定义函数的实现,那么,是在哪里实“printf”函数的呢?最后的答案是:系统把这些函数实现都被做到名为 libc.so.6 的库文件中去了,在没有特别指定时,gcc 会到系统默认的搜索路径“/usr/lib”下进行查找,也就是链接到 libc.so.6 库函数中去,这样就能实现函数“printf”了,而这也就是链接的作用
那可以总结说库是写好的可以复用的代码并且是成熟的因为链接方式不同可以分为静态库和动态库
(1)静态库
在链接阶段时编译器会将汇编生成的目标的文件与所要用到的库一起链接打包到可执行文件中也就是将所需要的库中的代码拷贝到程序中这叫做静态链接被拷贝的库叫静态库。静态链接成功程序不再依赖任何库自己可以独立运行。静态库文件格式是ibxx.a。
(2)动态库
在链接成功后的可执行程序会存一个指向库的地址在程序运行时才会去读取库函数使用这叫做动态链接被链接的库叫动态库也叫做共享库。动态链接成功后程序还是依赖动态库。如果动态库消失程序无法正常运行。动态库文件格式是libxx.so。
(3)优缺点
静态库优点编译链接成功的可执行文件可以独立运行不再需要向外部索要函数库的内容。
静态库缺点库更新时需要重新编译链接可执行程序的文件比较大。
动态库优点因为可以被共享真正的实现永远都是在库中程序内部只有地址就可以实时链接最新的库可执行文件小节省空间。
动态库缺点无法单独运行必须保证能够链接到库。
(4)linux环境下默认使用的是动态链接和动态库
如果需要静态链接在链接时后面加上-static静态生成的可执行程序比动态大得多。可以通过两条指令file和ldd来查看它们的链接方式和库。
file+可执行程序名称这条指令可以识别文件类型还可以辨别一些文件的编码格式。
ldd+可执行程序名称可以列出动态库依赖性关系去掉.so及后面的和前面的lib 中间的就是动态库的名称。如lib.c.so.6动态库的名称是c。

五、Linux调试器-gdb使用

程序的发布方式有两种debug模式和release模式Linux gcc/g++出来的二进制程序默认是release模式要使用gdb调试必须在源代码生成二进制程序的时候, 加上 -g 选项。
1调试指令
正式调试指令gdb+程序名称如图
在这里插入图片描述
具体调试指令gdb有记忆功能按上下方向键可以查看历史指令以前输入的指令。
r运行代码
l+行号/file行号/函数名列出代码
n逐语句
s逐过程
b+行号在指定行上打断点
d+断点编号删除断点不指定编号删除所有断点
info+b查看所有断点信息
enable breakpoint开启断点
disable breakpoint关闭断点
c跳转下一个断点
display长显示如内置类型结构体等自定义类型stl
undisplay取消长显示
until 行号在函数内使用进行指定位置跳转执行完区间代码
finish进入一个函数把一个函数跑完停下来
p +变量查看变量的值
set var修改变量的值
退出调试指令quit或者ctrl+d
2查看调试指令信息
指令readelf -S 可执行程序名 | grep debug

readelf指令一般用于查看ELF格式的文件信息如在linux下的可执行文件静态和动态库等包含ELF格式的文件-S选项是显示节头信息。如图
在这里插入图片描述

六、Linux项目自动化构建工具-make/Makefile

(1)make/Makefile介绍

1.1 make/Makefile概念
make是一条命令用来解释makefile中指令的命令工具makefile是一个文件两个搭配使用完成项目自动化构建。大多数的IDE都有这个“make”命令比如Delphi的makeVisual C++的nmakeLinux下GNU的make。可见makefile都成为了一种在工程方面的编译方法。
1.2 使用背景
会不会写makefile从一个侧面说明了一个人是否具备完成大型工程的能力如果遇到很多个源文件需要编译和链接时运行时用gcc得把所有的源文件名字写在一起检查起来很麻烦可以把编译的指令存在Makefile/makefile文件里统一管理makefile定义了一系列的规则来指定哪些文件需要先编译哪些文件需要后编译哪些文件需要重新编译甚至于进行更复杂的功能操作。
1.3使用优势
makefile带来的好处就是——“自动化编译”一旦写好只需要一个make命令整个工程完全自动编译极大的提高了软件开发的效率。

2make/Makefile具体使用

1、先创建一个源文件在里面写入代码如图
在这里插入图片描述
2、再创建一个Makefile/makefile文件进入到文件写入内容
在这里插入图片描述
第一行是依赖关系以冒号为分隔符左面w是目标文件右边是生成目标文件所要的依赖文件。
第二行是依赖方法先以tab开头后面写入具体的操作方法gcc正常编译的指令。
2.1 执行顺序
整体是从上往下执行先看依赖关系中的依赖文件是否存在。如果存在就执行对应的依赖方法反之不存在就跳过依赖方法继续往下找生成依赖文件的依赖关系和依赖方法生成前面指令想要的依赖文件生成后再回来执行指令。如果有多个文件和头文件头文件不必写只要其他源文件包含了它系统会自动到当前目录下找自己写的头文件来连接。
3、清理工作
在这里插入图片描述
在里面还以写入用来清理生成的可执行程序或目标文件的命令可以快快速清理和重编译源代码一般这种命令被设置为伪目标用.PHONY修饰。
接着给目标文件取名为clean它不需要依赖文件因为执行的是第五行的依赖方法。在外面执行命令只需输入 make clean就可以清除所有的目标文件。
3.1 伪目标意思是总是被执行的.PHONY是makefile的一个关键字用来修饰目标文件表示任何时候都可以被执行。即便没有对应的文件。如下
在这里插入图片描述
第一次make时候执行指令再按make不能再执行了如果想让他再次执行在Makefile文件里加上.PHONY后面跟目标文件。如图
在这里插入图片描述
在这里插入图片描述
这样就可以总是被执行。
3.2 make是怎么知道当前形成的可执行程序是最新的软件生命周期有两条线一个是源代码线一个是可执行程序线正常开发先有源代码再有可执行如果可执行程序的时间最近修改时间比源代码修改时间晚一些说明可执行程序是最新的在make的时候不再让执行了而源代码当前是比可执行程序的时间早说明源代码没有修改过即老的。
所以是否需要重新编译执行通过对比时间来进行即最近修改时间
如何再次执行

  • 先用stat查看源文件和可执行程序文件的时间。
  • 再直接touch +原来的源文件可以修改时间就可以让make再次执行。

2make原理

在这里插入图片描述
如上

  • . make会在当前目录下找名字叫“Makefile”或“makefile”的文件。
  • 如果找到它会找文件中的第一个目标文件在上图中会找到“w”这个文件并把这个文件作为最终的目标文件。
  • 如果w文件不存在或是w所依赖的后面的q.o文件的文件修改时间要比hello这个文件新那么他就会执行后面所定义的命令来生成w这个文件。
  • 如果w所依赖的q.o文件不存在那么make会在当前文件中找目标为q.o文件的依赖性如果找到则再根据那一个规则生成q.o文件。
  • C文件和头文件是存在的make会生成 q.o 文件然后再用 q.o 文件声明make的终极任务也就是执行文件w了。
  • 这就是整个make的依赖性make会一层又一层地去找文件的依赖关系直到最终编译出第一个目标文件。
  • 在找的过程中如果出现错误比如最后被依赖的文件找不到那么make就会直接退出并报错而对于所定义的命令的错误或是编译不成功make根本不理。
  • make只管文件的依赖性即如果在我找了依赖关系之后冒号后面的文件还是不在那就不工作。

3\r&&\n

\r和\n是c语言的控制字符。
\r是回车的意思将光标重新回到本行开头。
\n是换行的意思将光标换到下一行不一定到下一行行首在c语言中有换行并到行首的功能。
行缓冲区在I/O操作输入输出如果遇到换行符\n时进行真正的I/O操作此时自己的输入的内容先放在缓冲区等按下回车换行时才进行实际的I/O操作但对于行缓冲每一行缓冲区的长度是固定的只要填满缓冲区没有遇到换行符也会刷新缓冲区。
如下例子
在这里插入图片描述
在这里插入图片描述
带有\n时直接打印出字符。再睡眠2s最后退出程序。
在这里插入图片描述

在这里插入图片描述

而不带\n时。先睡眠2s。最后打印字符最后退出程序。
第一个出现了字符这就验证了换行符刷新了缓冲区。第二个没有出现字符说明字符在sleep期间被保存起来了也即是缓冲区。如果想让它不带换行符就打印出来可以在后面加一个fflushstdout手动刷新缓冲区。

4进度条小程序实现

                                                                                                                                          
  1 #include"pro.h"
  2 #include<string.h>
  3 #include<unistd.h>
  4 #define N 101
  5 #define sym '#'
  6 void ProcessBar()
  7 {
  8  const char *lab="|/-\\";
  9   char bar[N];
 10   memset(bar,'\0',sizeof(bar));
 11   int i=0;
 12   while(i<=100)
 13   {
 14     printf("[%-100s][%d%%][%c]\r",bar,i,lab[i%4]);
 15     fflush(stdout);
 16     bar[i++]=sym;
 17    usleep(100000);
 18   }
 19   printf("\n");                                                                                                                                                     
 20 }


1、先用宏定义一个N表示数量另一个sym表示进度条的字符以方便修改。
2、再把数组每个空间都置为0再用while循环一百次打印字符和百分比和加载图案。
3、%-100s预留出100个空间从左到右打印打印加载符号的时候先用字符指针存4个字符的首地址因为循环100次而一共就有4个字符就要取模。
5、当每一次打印的时候要想让它回到当前行的最开始不要换行需要加上\r而加上\r字符不能从缓冲区刷新出来所以后面加上fflush来刷新缓冲区。
结果如图
在这里插入图片描述

七、使用git命令行

git是一个开源的分布式版本管理系统最常用的功能是我们可以从服务器上克隆完整的git仓库到本机上并在自己的本机上根据不同的开发目的创建分支修改代码最后可以提交到代码托管平台如githubgitee。在国内经常使用gitee。

具体使用:
一、clone仓库到本地
现在gitee创建一个仓库点击进入仓库点克隆下载复制HTTPS即url在linux下输入指令git clone url。本地仓库创建完成。
二、提交代码至远端
复制要提交的代码到本地仓库。之后分为3个步骤

  • git add .把我们拷贝的文件添加到仓库里的一个暂存区。
  • git commit -m “ 写有用的信息” 。这个提交是真正的提交把对应的修改内容提交到当前分支。
  • git push 把代码推送到远端让本地仓库和远端仓库保持一致。此时远端仓库就有了刚才的提交的文件。
  • git log 可以查看日志可以看以前的提交的信息及提交记录
  • git status查看本地和远端之间的同步状态
  • git rm 文件名删除远端的文件后面还需要重复以上三个步骤就可删除远端的文件
    刚开始commit的时候可能会出现下面这种情况
    在这里插入图片描述
    填写一下邮箱和你的用户名把上面的两行代码输入到命令行中在引号里面写入用户名和邮箱就能解决。
    三、git add 和commit的区别
    需要明白三个概念工作区版本库。暂存区
    当在开一个工程项目时主目录使我们的工作区有一个隐藏目录git这个就是git的版本库里面存了很多文件包括暂存区还有一个git为我们自动创建的第一个分支master以及指向master的一个指针HEAD。
    git add把文件添加进去实际上把修改添加到暂存区
    git commit提交更改把暂存区所有内容提交到当前分支也即是往git为我们创建的master分支上提交更改。
    简单来说就是需要提交的文件修改都先放在暂存区最后一次性将暂存区的所有内容提交到分支上。
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: linux