LinuxYUMVimg++/gccgdbGit使用

news2024/11/15 4:48:07

前言

大家好,我是jiantaoyab,前面的文章给大家介绍了Linux的基础命令和权限,学会了命令行的模式使用Linux,今后要开始在Linux上写代码了,在这篇文章将介绍YUM、vim、gdb、git等常用的工具。

先来看看Linux如何安装软件

YUM

在Linux下,安装软件可以下载程序的源代码进行编译,得到可执行程序,但是这个过程是很复杂的,所以网上有人把软件编译好,做成软件包,放到服务器上,我们通过YUM/APT等下载下来就能用了。

这里我主要讲YUM。注意Centos,只能有一个YUM运行。

常用的选项

  • -y, --assumeyes:自动回答 “yes”,跳过确认提示,用于无需人工干预地进行批量安装或更新。
  • -q, --quiet:安静模式,只显示必要的输出信息,减少冗余和杂乱的信息。
  • -d, --downloadonly:仅下载软件包而不进行安装,适用于在离线环境中安装软件包。
  • –nogpgcheck:跳过 GPG 签名校验,允许安装未经授权或未签名的软件包。

YUM显示、搜索、查看

yum list          		 # yum list显示所有已经安装和可以安装的程序包   
yum info <package_name>  #显示安装包rpm的详细信息
yum groupinfo <group_name> #显示程序组group信息
 
yum search #可以在所有软件包中搜索包含有指定关键字的软件包   
yum deplist <package_name>	# 仅仅 查看程序rpm依赖情况
yum provides */命令		# 查看命令是由哪个包提供的    

比如我想查以pam开头的软件有哪些?

image-20240321211515532

YUM安装、卸载、升级

#不加-y则会询问是否安装,想控制哪些包安装,则不要加-y,想自动安装不进行交互,则加-y
yum -y install <package_name>	 
yum clean all  #命令可以清除缓存中老旧的头文件和软件包
yum remove	   #yum卸载
# 删除程序组group
yum groupremove <group_name>
#检查可更新的软件有哪些
yum check-update 	
#更新升级所有软件包    
yum update 					
yum -y update #升级所有包同时,也升级软件和系统内核;
yum -y upgrade#只升级所有包,不升级软件和系统内核,软件和内核保持原样
#有时候需要将高版本的依赖降级到低版本,降级命令如下
yum downgrade <package_name>	#降级,对于有依赖的,yum不会自动降级,需要手动降级依赖项

比如我想装个rzsz(这个工具用于 windows 机器和远端的 Linux 机器通过 XShell 传输文件)

先查看软件包,我这用2种方法都演示一下,第一个可以帮我们过滤很多包筛选出我们关注的包

在这里插入图片描述
软件包名称: 主版本号.次版本号.源程序发行号-软件包的发行号.主机平台.cpu架构.

“x86_64” 后缀表示64位系统的安装包, “i686” 后缀表示32位系统安装包. 选择包时要和系统匹配.

“el7” 表示操作系统发行版的版本. “el7” 表示的是 centos7/redhat7. “el6” 表示 centos6/redhat6.

base 表示的是 “软件源” 的名称, 类似于 “小米应用商店”, “华为应用商店” 这样的概念

image-20240321212727205

开始安装

sudo yum install lrzsz

image-20240321212922483

YUM配置文件

YUM的一切信息都存储在yum.reops.d目录下的配置文件中,通常位于/etc/yum.reops.d目录下。

image-20240321205815780

在这个目录下面有很多文件,都是.repo结尾的,repo文件是yum源(也就是软件仓库)的配置文件,通常一个repo文件定义了一个或者多个软件仓库的细节内容,例如我们将从哪里下载需要安装或者升级的软件包,repo文件中的设置内容将被yum读取和应用。

image-20240321210137622

image-20240321210041846

[extras]这个表示的是名称,[extras]是yum的ID,它必须唯一,本地有多个yum源的时候,这个[extras]必须是唯一的。
name:具体的yum源名字。
baseurl:是镜像服务器地址,只能写具体的确定地址。
mirrorlist:是镜像服务器的地址列表,里面有很多的服务器地址
gpgcheck=0:1是要验证,0为取消验证,使用公钥检验rpm包的正确性。
gpgcheck:是否检查软件包的GPG签名,值为1则对下载的rpm将进行gpg校验,校验密钥就是gpgkey,一般自己的yum源是不需要检测的。
gpgkey:指定GPG签名文件的URL。

YUM的主配置文件 /etc/yum.conf文件

image-20240321210717340

cachedir=/var/cache/yum #yum下载的RPM包的缓存目录
keepcache=0 #缓存是否保存,1保存,0不保存。
debuglevel=2 #调试级别(0-10),默认为2
logfile=/var/log/yum.log #yum的日志文件所在的位置

Vim

Liunx绝大多数的文件是以ASCII纯文本的文件形式存在的,所以要学会用文本编辑软件修改设置、写程序文件等操作。

Vim常用的三种模式,是命令模式、插入模式和底行模式。

命令模式

先来介绍一下命令模式,因为用vim打开一个文件直接就进入了命令模式,在这个模式下可以通过键盘的[上下左右]按键或者 [H左J下K上L右]来操作光标的移动。

光标操作

shitf + ^光标定位到行首
shitf + $光标定位到h行尾
gg移动到文件第一行
G移动到文件最后一行
nG / n + shift + g移动到文件第n行
w/b以单词为单位前后光标移动

文本操作

/world | ?world向光标之下/上找一个名为word的单词
yy复制当前行 nyy 复制当前行和之后的n行
p在下一行粘贴 P 在本行开始粘贴 np粘贴n行
u撤销操作
dd删除当前光标所在的行 dd p 剪切功能
x向后删除一个字符相当于[del]
X向前删除一个字符相当于[Backspace]
shitf + ~快速切换大小写
r替换光标所在的字符
shift + r进入替换模式,可以一次替换多个内容
ctrl + r撤销刚刚的撤销

底行模式

在命令模式下,输入[:/ ?] 三个任何一个都能进入到低行模式。

:vs 文件名可以同时看多个文件,按ctrl + w 切换光标所在的文件

image-20240322095030849

:set no / nonu调出行号/取消行号
:q退出vim
:w将数据写入硬盘文件中
强制操作
!man 函数名可以不用退出vim直接查看man手册

插入模式

当在命令模式下按[i o a r]任意一个字符就能进入插入模式,当左下角出现[INSERT]说明进入到插入模式了,注意低行模式是不能直接切换到插入模式的。进入插入模式下就能编辑代码了。

批量化注释

  • Ctrl + v 进入块选择模式,然后移动光标选中你要注释的行,再按大写的 I 进入行首插入模式输入注释符号如 //#
  • Ctrl + v 进入块选择模式,选中你要删除的行首的注释符号,注意 // 要选中两个,选好之后按 d 即可删除注释

Vim配置

image-20240322095948012

可以看到我的vim不仅看起来舒服还有语法提示,这都是经过配置的。

注意,比如我的用户是jiantao配置了vim在自己的配置文件中,只会影响我自己,vim的配置文件在.vimrc中。自己配置vim 可以使用vim .vimrc进行配置

如果是Centos7下,大家可以用下面操作一键配置

curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh

更详细的Vim使用大家可以看Vim入门到精通

Linux编译器

在vim中写好c/c++代码之后,需要将程序预处理(进行宏替换)、编译(生成汇编)、汇编(生成机器可识别代码)、连接(生成可执行文件或库文件)生成不带后缀的可执行文件加上路径才能运行程序。

我们来拆分这个过程

预处理

预处理功能主要包括宏定义,文件包含,条件编译,去注释等,预处理指令是以#号开头的代码行。

gcc –E test.c –o test.i

选项“-E”,该选项的作用是让 gcc 在预处理结束后停止编译过程

image-20240322103347851

编译(生成汇编)

在这个阶段中,gcc 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc 把代码翻译成汇编语言。

gcc -S test.i -o test.s
#“-S”只进行编译而不进行汇编,生成汇编代码

image-20240322103333488

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

汇编阶段是把编译阶段生成的“.s”文件转成目标文件,.o是可重定向目标文件

gcc -c test.s -o test.o

image-20240322103317651

连接(生成可执行文件或库文件)

gcc test.o -o test

image-20240322103653633

我们的C程序中,并没有定义“printf”的函数实现,且在预编译中包含的“stdio.h”中也只有该函数的声明,而没有定义函数的实现,那么在哪里实“printf”函数的呢?

系统把这些函数实现都被做到名为 libc.so.6 的库文件中去了,在没有特别指定时,gcc 会到系统默认的搜索路径“/usr/lib”下进行查找,也就是链接到 libc.so.6 库函数中去,这样就能实现函数“printf”了,而这也就是链接的作用

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

静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。其后缀名一般为“.a”

动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为“.so”,如前面所述的 libc.so.6 就是动态库。

通过file 可执行文件可以看到,gcc 在编译时默认使用动态库。

如果想要生成静态库gcc/g++的时候加上 -static,如果报错

sudo yum install glibc-static。

image-20240322103838495

在Linux下一遍用g++/gcc来编译c++/c语言写的代码。

常用的选项

-E只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面
-S编译到汇编语言不进行汇编和链接
-c编译到目标代码
-o文件输出到文件(给文件起个新名字)
static生成的文件采用静态链接
-g生成调试信息。GNU 调试器可利用该信息
-O0-O3编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高
-w不生成任何警告信息
-Wall生成所有警告信息

Linux调试器

程序的发布方式有两种,debug模式和release模式。

Linux gcc/g++出来的二进制程序,默认是release模式要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项。

启动gdb调试

image-20240322205349894

调试过程

image-20240322210205095

image-20240322211757242

常用选项

run跑起来
list显示写的代码
b (break) + 行号打断点
d + 断点的行号可以删除断点
disable/enable b禁用断点(断点还在)/启用断点
s (step)逐语句
n逐过程
display常显示变量 &可以查看地址
undisplay +行号取消显示变量
finish直接跑完函数
until +n跳转到第n行
info b查看断点信息
delete b删除所有断点
delete breakpoints n删除序号为n的断点
info locals查看当前栈帧局部变量的值
quit退出gdb

Makefile

Make原理

执行make的时候,make会在当前路径下去找Makefile,Makefile记录了源代码如何编译的详细信息。如果找到,它会找文件中的第一个目标文件(target),并把这个文件作为最终的目标文件。

如果文件不存在,或是所依赖的后面的文件的文件修改时间要比这个文件新,那么,他就会执行后面所定义的命令来生成文件。make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。

在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错,而对于所定义的命令的错误,或是编译不成功,make根本不理。make只管文件的依赖性,即,如果在我找了依赖关系之后,冒号后面的文件还是不在,那make就不工作了。

我们来看看Makefile怎么编写,在后面的代码中我将都会写Makefile。

//目标:依赖文件
file:file.c    
  gcc file.c -o file -std=c99   //必须以Tab开头 
//后面我们一般这么写  gcc  -o  $@  $^
.PHONY:clean                                                             
clean:    
  rm -rf file  

make扫描makefile文件的时候,默认只会生成一个目标依赖关系,一般是第一个,所以直接make就能编译文件,而清理文件要加上make clean;

.PHONY 修饰的是一个伪目标的概念,就是总是能被执行,你会发现无论make clean多少次都是可以的,但是make只会生成一次,除非有修改。

一次形成2个可执行程序

.PHONY:all
all:myexe myexec

myexe:myexe.c	
	gcc -o $@  $^
myexec:myexec.c
	gcc -o $@  $^
.PHONY:clean
clean:
	rm -rf  myexec  myexe

进度条

说了那么多,我们来编写一个进度条程序

#include<stdio.h>
#include<unistd.h>
#include<string.h>
int main()
{
  char buffer[100];
  memset(buffer, '\0', sizeof(buffer));//初始化
  const char* lable="\\|/-";
  int i=0;
  while(i<=100)
  {
    //-100s 预留100个空间 -向左对齐
    buffer[i++]='#';
    printf("[%-100s][%d%%][%c]\r",buffer, i, lable[i%4]);
    fflush(stdout);//刷新到显示器上
    sleep(1);
  }
  printf("\n");
  return 0;
}

效果

在这里插入图片描述

Git

在Window下,我们经常运用Git,同样的Linux下也可以。

image-20240323135324409

这里教大家用git在linux下传东西到gitee

大家先创建一个仓库,在克隆/下载复制https

image-20240323135454526

在Linux输入git clone 复制的https,这个时候,在当前的路径下就会多出一个文件夹,这个文件夹就是远端仓库。

image-20240323135922152

在.gitignore出现的后缀文件都不会上传到远端

image-20240323141223837

git status 查看状态

image-20240323140055037

先告诉git 你是谁

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

上传文件步骤

git add
git commit -m ""
git push

image-20240323140832444

上传成功后,就能在gitee上看到上传的文件

image-20240323140920907

更详细的git教程大家可以看git中文教程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1539416.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaEE 初阶篇-多线程属性和方法

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 创建线程对象并命名 2.0 线程属性 2.1 线程属性 - ID 2.2 线程属性 - 名称 2.3 线程属性 - 后台线程 2.4 线程属性 - 判断 PCB 是否存活 2.5 线程属性 - 终止线程…

数据库管理-第163期 19c重建ADG的两个方法(20240323

数据库管理163期 2024-03-23 数据库管理-第163期 19c重建ADG的两个方法&#xff08;20240323&#xff09;1 ORA-081032 新办法1 关闭MRP2 恢复备库3 其他操作4 启动备库5 启动MRP 3 老办法4 预告总结 数据库管理-第163期 19c重建ADG的两个方法&#xff08;20240323&#xff09;…

Stompy:一款针对时间戳的Timestomp工具

关于Stompy Stompy是一款功能强大的时间戳管理工具&#xff0c;在该工具的帮助下&#xff0c;广大研究人员能够轻松对指定文件或目录的时间戳进行修改和操作。该工具基于PowerShell开发&#xff0c;并且支持对目标目录中的所有文件执行递归时间戳操作。 功能介绍 1、修改独立…

有什么可以下载网页视频的浏览器插件 浏览器如何下载网页视频 网页视频怎么下载到本地 网页视频下载软件 IDM下载

在视频网站上看电影追剧&#xff0c;已经成为了大众生活中必不可少的一部分。为了保护自家视频的版权&#xff0c;很多平台都禁止用户下载会员视频。其实只要掌握了正确的方法&#xff0c;一样可以将会员视频下载到本地保存。那么有关有什么可以下载网页视频的浏览器&#xff0…

Fast-R-CNN论文笔记

目标检测之Fast R-CNN论文精讲&#xff0c;Fast RCNN_哔哩哔哩_bilibili 一 引言 1.1 R-CNN和SPPNet缺点 &#x1f600;R-CNN Training is a multi-stage pipeline 多阶段检测器&#xff08;两阶段和一阶段检测器&#xff09; 1️⃣首先训练了一个cnn用来提取候选区域的特征…

JMeter并发工具的使用

视频地址&#xff1a;Jmeter安装教程01_Jmeter之安装以及环境变量配置_哔哩哔哩_bilibili 一、JMeter是什么 JMeter是一款免安装包&#xff0c;官网下载好后直接解压缩并配置好环境变量就可以使用。 环境变量配置可参考&#xff1a;https://www.cnblogs.com/liulinghua90/p/…

只有IP地址怎么实现HTTPS访问?

只有IP地址也可以实现HTTPS访问。虽然大部分SSL证书通常是针对域名发放&#xff0c;但也存在专门针对IP地址发放的SSL证书&#xff0c;这类证书允许服务器通过HTTPS协议为其公网IP地址提供安全的Web服务。当服务器配置了基于IP地址的SSL证书后&#xff0c;用户可以通过“https:…

git基础-查看提交历史

查看提交历史 在创建了多个提交之后&#xff0c;或者如果克隆了一个具有现有提交历史的存储库&#xff0c;可能会想要回顾一下发生了什么。最基本和强大的工具就是 git log 命令。 运行下git log查看下输出状态 默认情况下&#xff0c;不带任何参数运行 git log 命令会以逆时…

Java之继承和多态(精简版-更适合复习)

继承 如果子类有&#xff0c;优先访问子类的&#xff0c;子类没有&#xff0c;然后去看父类有没有&#xff0c;父类也没有&#xff0c;那就会报错。 就是要访问父类怎么办&#xff1f;通过super关键字。 在静态方法当中&#xff0c;时不能使用this和super的。 当子类继承了父…

江苏开放大学2024年春《中级会计实务(上) 050284》第1次任务第一单元总论、第二单元存货练习参考答案

答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 电大搜题 多的用不完的题库&#xff…

院子摄像头的监控

院子摄像头的监控和禁止区域入侵检测相比&#xff0c;多了2个功能&#xff1a;1&#xff09;如果检测到有人入侵&#xff0c;则把截图保存起来&#xff0c;2&#xff09;如果检测到有人入侵&#xff0c;则向数据库插入一条事件数据。 打开checkingfence.py&#xff0c;添加如下…

2024阿里云学生服务器免费领取申请(2024新版教程)

阿里云学生服务器免费申请&#xff0c;之前是云翼计划学生服务器9元/月&#xff0c;现在是高校计划&#xff0c;学生服务器可以免费申请&#xff0c;先完成学生认证即可免费领取一台云服务器ECS&#xff0c;配置为2核2G、1M带宽、40G系统盘&#xff0c;在云服务器ECS实例过期之…

大学期末考试搜题软件?这4款足够解决问题 #知识分享#笔记#职场发展

当代大学生面临着繁重的学业压力和海量的知识点&#xff0c;如何高效地进行学习和搜题成了他们关注的焦点。幸运的是&#xff0c;随着科技的不断进步&#xff0c;我们有越来越多的日常搜题和学习软件可以帮助我们更好地应对这些挑战。在本文中&#xff0c;我将为大家介绍10款备…

软考复习笔记day3(计算机体系结构和指令系统基础)(精简版)

计算机体系结构分类 处理机数量分类&#xff1a; 单处理&#xff08;一个处理单元&#xff09;并行处理系统&#xff08;两个以上处理机互联&#xff09;.分布式处理系统 Flynn分类&#xff1a;&#xff08;常考&#xff09; 以指令流和数据流进行区别 指令流由控制部分进…

day03_mysql_课后练习 - 参考答案

文章目录 day03_mysql_课后练习mysql练习题第1题第2题第3题第4题第5题 day03_mysql_课后练习 mysql练习题 第1题 案例&#xff1a; 1、创建一个数据库&#xff1a;day03_test01_school 2、创建如下表格 表1 Department表的定义 字段名字段描述数据类型主键外键非空唯一D…

算法 之 排序算法

&#x1f389;欢迎大家观看AUGENSTERN_dc的文章(o゜▽゜)o☆✨✨ &#x1f389;感谢各位读者在百忙之中抽出时间来垂阅我的文章&#xff0c;我会尽我所能向的大家分享我的知识和经验&#x1f4d6; &#x1f389;希望我们在一篇篇的文章中能够共同进步&#xff01;&#xff01;&…

总结 | vue3项目初始化(附相应链接)

如何运行 vue 项目&#xff1a;vscode运行vue项目_vscode启动vue项目命令-CSDN博客 vue3项目搭建 目录管理 git管理&#xff1a;vue3项目搭建并git管理_git 新建vue3项目-CSDN博客 目录调整&#xff1a;vue3项目 - 目录调整-CSDN博客 vscode中快速生成vue3模板&#xff1a…

12 Games101 - 笔记 - 几何(网格处理)、阴影图

12 几何&#xff08;网格处理&#xff09;、阴影图 曲面细分 曲面细分是指将一个模型的面合理的分成更多小的面&#xff0c;从而提升模型精度&#xff0c;使模型越来越光滑&#xff0c;提高渲染效果。 Loop细分 Loop细分是指Loop提出来的细分规则&#xff0c;只能针对于三角…

中等职业学校大数据课程建设方案

大数据产业是以数据及数据所蕴含的信息价值为核心生产要素&#xff0c;通过数据技术、数据产品、数据服务等形式&#xff0c;使数据与信息价值在各行业经济活动中得到充分释放的赋能型产业。 大数据产业定义一般分为核心业态、关联业态、衍生业态三大业态。 一、专…

【Entity Framework】 EF中DbContext类详解

【Entity Framework】 EF中DbContext类详解 一、概述 DbContext类是实体框架的重要组成部分。它是应用域或实例类与数据库交互的桥梁。 从上图可以看出DbContext是负责与数据交互作为对象的主要类。DbContext负责以下活动&#xff1a; EntitySet&#xff1a;DbContext包含…