Linux环境基础和工具的使用

目录

1、Linux软件包管理器---yum

2、Linux开发工具

2.1、vim基本概念

2.2 vim基本操作

2.3 vim正常模式命令集

2.4 vim末行模式命令集

2.5 简单vim配置

2.5.1 配置文件的位置

3 Linux编译器--gcc/g++的使用

3.1 背景知识

3.2 gcc完成

4 Linux调试器--gdb使用

4.1 背景

4.2 gdb的使用

5 、Linux项目自动化构建工具--make/Mikefile

6、Linux系统下第一个小程序--进度条


1、Linux软件包管理器---yum

软件包:

  • 在Linux系统中安装软件,通常是下载程序源代码,然后进行编译,得到可执行程序。
  • 但是这样比较麻烦,这时就有人将一些常见的软件编译好,做成软件包,放在服务器中通过包管理就可以很方便的获取到这个编译好的软件包,从而可以直接进行安装。
  • 软件包和软件包管理器,相当于“App”和软件应用商店之间的1关系,yum就是Linux系统下的一种常见的软件包管理器,主要应用于Fedora, RedHat、Centos等发行版上.

查看软件包

        我们可以使用yum list 来列出当前一共有哪些软件包,由于软件包数量很多,因此在这里我使用grep命令来筛选出其中一个。

        从上述结果出我们可以看出:其中包含软件包名称,主版本号,次版本号,源程序发行号,软件包发行号,主机平台,cpu架构。

        “x86_x64”表示是64位系统的安装包(‘i686’表示32位系统的安装包,选着包时应该要与系统匹配)

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

        最后一列, os 表示的是 "软件源" 的名称, 类似于 "小米应用商店", "华为应用商店" 这样的概念.

安装软件

        我们可以使用 sudo yum install 软件包名称 来安装程序,当出现complete字样则说明安装成功,安装软件时由于要向系统目录中写入内容,一般需要使用sudo切换到root账户下才能完成,该命令只能一个一个安装,如果多个同时安装则会报错。

卸载软件

        我们今天使用 sudo yum remove 软件包名称 来卸载软件。

注意:在只用所有yum命令必须保证主机(虚拟机)网络通畅。

2、Linux开发工具

2.1、vim基本概念

        vim具有很多种命令模式,但是常用的有三种:命令模式(command mode)、插入模式(insert mode)、底行模式(last line mode)。

  •  正常、普通、命令模式(Normal mode):
              控制屏幕光标的移动,字符,字或行的删除,移动复制某区段进入insert mode 或者到last line mode
  • 插入模式(Insert mode)
               只有在insert mode下才能对文件进行文字输入,可以按【Esc】回到命令行模式。
  • 末行模式(last line mode)
    ​​​​          文件的保存或退出,也可以对文件进行替换,找字符串,列出行号等操作。

2.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

2.3 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行行首。

2.4 vim末行模式命令集

        在使用末行模式之前,请记住先按「ESC」键确定您已经处于正常模式,再按「:」冒号即可进入末行模式。

列出行号

   「set nu」: 输入「set nu」后,会在文件中的每一行前面列出行号。

跳到文件中的某一行

        「#」:「#」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15, 再回车,就会跳到文章的第15行。

查找字符

        「/关键字」: 先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按 「n」会往后寻找到您要的关键字为止。

        「?关键字」:先按「?」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直 按「n」会往前寻找到您要的关键字为止。

保存文件

        「w」: 在冒号输入字母「w」就可以将文件保存起来

离开vim

        「q」:按「q」就是退出,如果无法离开vim,可以在「q」后跟一个「!」强制离开vim。

        「wq」:一般建议离开时,搭配「w」一起使用,这样在退出的时候还可以保存文件。

2.5 简单vim配置

2.5.1 配置文件的位置

        在目录 /etc/ 下面,有个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效。

        而在每个用户的主目录下,都可以自己建立私有的配置文件,命名为:“.vimrc”。例如,/root目录下, 通常已经存在一个.vimrc文件,如果不存在,则创建之。

        切换用户成为自己执行 su ,进入自己的主工作目录,执行 cd ~

        打开自己目录下的.vimrc文件,执行 vim .vimrc

Vim 从入门到精通

3 Linux编译器--gcc/g++的使用

3.1 背景知识

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

2. 编译(生成汇编)

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

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

3.2 gcc完成

格式 gcc [选项] 要编译的文件 [选项] [目标文件]

预处理(进行宏替换)

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

编译(生成汇编)

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

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

  • 汇编阶段是把编译阶段生成的“.s”文件转成目标文件
  • 读者在此可使用选项“-c”就可看到汇编代码已转化为“.o”的二进制目标代码了
  • 实例: gcc –c hello.s –o hello.o

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

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

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

  • 我们的C程序中,并没有定义“printf”的函数实现,且在预编译中包含的“stdio.h”中也只有该函数的声明,而 没有定义函数的实现,那么,是在哪里实“printf”函数的呢?
  • 最后的答案是:系统把这些函数实现都被做到名为 libc.so.6 的库文件中去了,在没有特别指定时,gcc 会到 系统默认的搜索路径“/usr/lib”下进行查找,也就是链接到 libc.so.6 库函数中去,这样就能实现函 数“printf”了,而这也就是链接的作用

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

  • 静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也 就不再需要库文件了。其后缀名一般为“.a”
  • 动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时 链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为“.so”,如前面所述的 libc.so.6 就是动态 库。gcc 在编译时默认使用动态库。完成了链接之后,gcc 就可以生成可执行文件,如下所示。 gcc hello.o –o hello
  • gcc默认生成的二进制程序,是动态链接的,这点可以通过 file 命令验证。

gcc选项

  • -E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面
  • -S  编译到汇编语言不进行汇编和链接
  • -c  编译到目标代码
  • -o 文件输出到 文件
  • -static 此选项对生成的文件采用静态链接
  • -g 生成调试信息。GNU 调试器可利用该信息。
  • -shared 此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库.
  • -O0
  • -O1
  • -O2
  • -O3 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高
  • -w  不生成任何警告信息。
  • -Wall 生成所有警告信息。

4 Linux调试器--gdb使用

4.1 背景

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

4.2 gdb的使用

  • list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。
  • list/l 函数名:列出某个函数的源代码。
  • r或run:运行程序。
  • n 或 next:单条执行。
  • s或step:进入函数调用
  • break(b) 行号:在某一行设置断点 break 函数名:在某个函数开头设置断点
  • info break :查看断点信息。
  • finish:执行到当前函数返回,然后挺下来等待命令
  • 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

5 、Linux项目自动化构建工具--make/Mikefile

原理

make是如何工作的,在默认的方式下,也就是我们只输入make命令。那么,

        1. make会在当前目录下找名字叫“Makefile”或“makefile”的文件。

        2. 如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“hello”这个文件, 并把这个文件作为最终的目标文件。

        3. 如果hello文件不存在,或是hello所依赖的后面的hello.o文件的文件修改时间要比hello这个文件新(可 以用 touch 测试),那么,他就会执行后面所定义的命令来生成hello这个文件。

        4. 如果hello所依赖的hello.o文件不存在,那么make会在当前文件中找目标为hello.o文件的依赖性,如果 找到则再根据那一个规则生成hello.o文件。(这有点像一个堆栈的过程)         5. 当然,你的C文件和H文件是存在的啦,于是make会生成 hello.o 文件,然后再用 hello.o 文件声明 make的终极任务,也就是执行文件hello了。

        6. 这就是整个make的依赖性,make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文 件。

        7. 在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错, 而对于所定义的命令的错误,或是编译不成功,make根本不理。

        8. make只管文件的依赖性,即,如果在我找了依赖关系之后,冒号后面的文件还是不在,那么对不起, 我就不工作啦。

项目清理

  •         工程是需要被清理的
  •         像clean这种,没有被第一个目标文件直接或间接关联,那么它后面所定义的命令将不会被自动执行, 不过,我们可以显示要make执行。即命令——“make clean”,以此来清除所有的目标文件,以便重编 译。
  •         但是一般我们这种clean的目标文件,我们将它设置为伪目标,用 .PHONY 修饰,伪目标的特性是,总是被 执行的。

6、Linux系统下第一个小程序--进度条

//进度条#include<stdio.h>#include<unistd.h>#include<string.h>#define RED     "\x1b[31m"#define RESET   "\x1b[0m"#define M 101int main(){char MAX[M];char *x="-/\\|";                                                     memset(MAX ,0,sizeof(MAX));int cont=0;while(cont<100){MAX[cont++]='#';printf(RED"[%-100s]"RESET"[%d%%][%c]""\r",MAX,cont,x[cont%4]);fflush(stdout);usleep(100000);}printf("\n");return 0;

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RK3568驱动指南|第十四篇 单总线-第158章DS18B20编写字符设备驱动框架

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

站群CMS系统

站群CMS系统是一种用于批量建立和管理网站的内容管理系统&#xff0c;它能够帮助用户快速创建大量的网站&#xff0c;并实现对这些网站的集中管理。以下是三个在使用广泛的站群CMS系统&#xff0c;它们各具特色&#xff0c;可以满足不同用户的需求。 1. Z-BlogPHP Z-BlogPHP是…

深入解析大数据体系中的ETL工作原理及常见组件

** 引言 关联阅读博客文章&#xff1a;探讨在大数据体系中API的通信机制与工作原理 关联阅读博客文章&#xff1a;深入理解HDFS工作原理&#xff1a;大数据存储和容错性机制解析 ** 在当今数字化时代&#xff0c;大数据处理已经成为了企业成功的重要组成部分。而在大数据处…

mybatis流式游标查询-导出DB大数据量查询OOM问题

问题场景 Mysql数据处理类型分以下三种 com.mysql.cj.protocol.a.result.ResultsetRowsStatic&#xff1a;普通查询&#xff0c;将结果集一次性全部拉取到内存 com.mysql.cj.protocol.a.result.ResultsetRowsCursor&#xff1a;游标查询&#xff0c;将结果集分批拉取到内存&…

基于kmeans的聚类微博舆情分析系统

第一章绪论 1.1研究背景 如今在我们的生活与生产的每个角落都可以见到数据与信息的身影。自从上十世纪八十年代的中后期开始&#xff0c;我们使用的互联网技术已经开始快速发展&#xff0c;近些年来云计算、大数据和物联网等与互联网有相领域的发展让互联网技术达到了史无前例…

ChatGPT解决hmm...something seems to have gone wrong.

ChatGPT解决hmm…something seems to have gone wrong. 这里是官方社区的一种workaround办法。仅仅只是mark一下。 我这边遇到的现象是&#xff0c;ChatGPT 3.5是正常的&#xff0c;但是使用ChatGPT 4就会频繁的出现这样的输出。而且恶心的是&#xff0c;即使是这种输出&…

BUCK、BOOST、BUCK-BOOST电路原理分析

一、前导 DC-DC DC-DC电源&#xff0c;即直流-直流变换器&#xff0c;是指将一个固定的直流电压变换为可变的直流电压&#xff0c;也称为直流斩波器。DC-DC有多种拓扑结构&#xff0c;如BUCK&#xff08;降压&#xff09;、BOOST&#xff08;升压&#xff09;、BUCK-BOOST&…

php反序列化漏洞——phar反序列化漏洞

一.什么是phar文件 类比java语言 JAR是开发Java程序一个应用&#xff0c;包括所有的可执行、可访问的文件&#xff0c;都打包进了一个JAR文件里使得部署过程十分简单。 PHAR("Php ARchive")是PHP里类似于JAR的一种打包文件 对于PHP 5.3 或更高版本&#xff0c;Ph…

软件设计师26--关系代数

软件设计师26--关系代数 考点1&#xff1a;关系模式相关概念例题&#xff1a; 考点1&#xff1a;关系模式相关概念 并∪&#xff1a;结果是两张表所有记录的合并&#xff0c;相同记录只显示一次。 交∩&#xff1a;结果是两张表中相同的记录。 差-&#xff1a;S1-S2&#xff0…

springboot+vue学生宿舍物品存放系统tnozt

需求包括&#xff1a; 三个角色&#xff1a;学生&#xff0c;公寓管理员&#xff08;宿舍管理人员&#xff09;&#xff0c;系统管理员。 本系统基于java语言&#xff0c;结合数据库技术&#xff0c;通过面向对象的设计方法&#xff0c;实现学生信息管理、公寓信息管理、物品存…

SWM341系列应用(USB应用)

1、测SWM341的主机功能&#xff0c;需要注意&#xff1a; SWM341的Host功能只支持Full Speed通信&#xff0c;好多U盘和tf读卡器都只支持High Speed&#xff0c;341无法与之通信 另外&#xff0c;测SWM341 Host的HID_Mouse例程时&#xff0c;好多鼠标都是Low Speed的&#xf…

C++ 标准库类型List

C/C总述&#xff1a;Study C/C-CSDN博客 目录 定义和初始化list对象 list中元素的访问 list的大小与容量 list的增 list的删 list的改 list的模拟实现 C 标准库中的 list 是一种双向链表容器&#xff0c;它支持快速的插入和删除操作。 ​ list 容器中各个元素的前后…

C++中的面向对象到底是什么

C中的面向对象到底是什么 对象嘛&#xff0c;就和大家都有的对象一样&#xff0c;两只眼睛、一个嘴巴、两条腿…… 对不起跑题了&#xff0c;C的面向对象中的对象可不是显示中的对象哦&#xff0c;但是有一些相似之处&#xff0c;有对象的同学可以参考着去学习C面向对象的概念…

AdaBoost算法详解自用笔记(1)二分类问题举例分析

AdaBoost算法详解自用笔记&#xff08;1&#xff09;二分类问题举例分析 提升方法的思路 AdaBoost作为一种提升方法&#xff0c;其需要回答两个问题&#xff1a;一是每一轮如何改变训练数据的权重或概率分布&#xff1b;二是如何将弱分类器组合成一个强分类器。对于第一个问题…

⾃定义类型:联合和枚举

乐观学习&#xff0c;乐观生活&#xff0c;才能不断前进啊&#xff01;&#xff01;&#xff01; 我的主页&#xff1a;optimistic_chen 我的专栏&#xff1a;c语言 点击主页&#xff1a;optimistic_chen和专栏&#xff1a;c语言&#xff0c; 创作不易&#xff0c;大佬们点赞鼓…

6.java openCV4.x 入门-Mat之局部区域读写及Range和Rect介绍

专栏简介 &#x1f492;个人主页 &#x1f4f0;专栏目录 点击上方查看更多内容 &#x1f4d6;心灵鸡汤&#x1f4d6;我们唯一拥有的就是今天&#xff0c;唯一能把握的也是今天建议把本文当作笔记来看&#xff0c;据说专栏目录里面有相应视频&#x1f92b; &#x1f9ed;文…

数据结构:非比较排序

非比较排序都具有很大的局限性,包括技术排序,基数排序,桶排序等 计数排序 时间复杂度:O(N) 空间复杂度:O(range) 适用范围 数据的范围集中的数组进行排序,不适合数据分散的数组 方法 统计每个数据出现的次数为n 建立一个相同大小的数组,将每个数据都初始化为0 然后遍历…

混合现实(MR)开发工具

混合现实&#xff08;MR&#xff09;开发工具是一系列软件和框架&#xff0c;它们使得开发者能够创建和优化能够在虚拟与现实世界之间无缝交互的应用程序。以下是一些在MR领域内广泛使用的开发工具。 1.Microsoft Mixed Reality Toolkit (MRTK) MRTK是一个跨平台的工具包&…

【亚马逊云科技】使用 Vscode Amazon-Q 完成 GUI 界面粉笔脚本开发

前言 亚马逊云科技- Q &#xff0c;可以快速获得紧迫问题的相关答案&#xff0c;解决问题&#xff0c;生成内容。当与 Q 聊天时&#xff0c;它会提供即时的相关信息和建议&#xff0c;以帮助简化任务、加快决策速度&#xff0c;并帮助激发工作中的创造力和创新。本次我们通过完…

实践笔记-harbor-01搭建(版本:2.9.0)

harbor搭建 1.下载安装包&#xff08;版本&#xff1a;2.9.0&#xff09;2.修改配置文件3.安装4.访问harbor5.可能用得上的命令: 环境&#xff1a;centos7 1.下载安装包&#xff08;版本&#xff1a;2.9.0&#xff09; 网盘资源&#xff1a;https://pan.baidu.com/s/1fcoJIa4x…