Linux工具使用

Linux编辑器-vim使用

1.vim的基本概念

在vim中,主要的三种模式分别是命令模式,插入模式和底行模式。

正常/普通/命令模式(Normal mode) 控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode

插入模式(Insert mode) 只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式。

末行模式(last line mode) 文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,shift+: 即可进入该模式。:

总结:

2.vim的基本操作

进入vim,在系统提示符号输入vim之后,是出于Normal mode,我们需要切换到Insert mode才能输入文字

[root@VM-16-4-centos ~]# vim test.c

退出vim及保存文件,需要进入底行模式;

  • w (保存当前文件)
  • wq (输入wq,存盘并退出)
  • q! (输入q!,不存盘强制退出vim) 

3.vim正常模式命令集

插入模式

按【i】切换到插入模式,按【i】键进入插入模式后是从光标当前位置开始输入文件

按【a】进入插入模式后,是目前光标所在位置的下一个位置开始输入文字

按【o】进入插入模式后,是插入新的一行,从行首开始输入文字。

移动光标

首先,vim可以使用键盘上的上下左右来控制,但是正规的vim是用小写字母【h】【j】【k】【l】,来分别控制左,下,上,右。

按【G】:移动到文章的最后

按【$】:移动到光标所在行的”行尾“

按【^】:移动到光标所在行的”行首“

按【w】:光标跳到下个字的开头

按【e】:光标跳到下个字的字尾

按【b】:光标回到上个字的开头

按【gg】:进入文本开始

按【shift+g】:进入文本末端

删除文字

「x」:每按一次,删除光标所在位置的一个字符

「#x」:例如,「6x」表示删除光标所在位置的“后面(包含自己在内)”6个字符

「X」:大写的X,每按一次,删除光标所在位置的“前面”一个字符

「#X」:例如,「20X」表示删除光标所在位置的“前面”20个字符

「dd」:删除光标所在行

「#dd」:从光标所在行开始删除#行

复制

「yw」:将光标所在之处到字尾的字符复制到缓冲区中。

「#yw」:复制#个字到缓冲区

「yy」:复制光标所在行到缓冲区。

「#yy」:例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字。

「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完 成复制与粘贴功能。

替换

【r】:替换光标所在处的字符

【R】:替换光标所到之处的字符,直到按下【Esc】键为止

撤销上一次操作

【u】:撤销最近的一次操作,按多次将会执行多次恢复。

【ctrl+r】:撤销的恢复

更改

【cw】:更改光标所在处的字到字尾处

【c#w】:表示更改#个字

跳到指定行

【ctrl】+【g】列出光标所在行的行号

【#G】:#代表某个数字,表示移动光标至文章的第#行行首。

4.vim末行模式命令集

  • 列出行号 : 【set nu】,输入之后会在文件中的每一行前面列出行号
  • 跳到文件中的某一行: 【#】号表示一个数字,在冒号后面输入一个数字,再按回车键就会跳到该行。
  • 查找字符 【/关键字】,先按/,再按回车,如果第一次找的关键字,不是我们想要的,可以一直按【n】会往后寻找我们想要的关键字
  • 【?关键字】:先按【?】键,再输入我们想要的字符,如果第一次找的关键字,不是我们想要的,可以一直按【n】会往前寻找我们想要的关键字
  • 保存文件 【w】在冒号后面输入字符【w】就可以将文件保存起来
  • 离开vim :【q】,按q键就是退出,如果无法离开就在【q】后跟一个!,强制退出。 【wq】是在退出时进行存盘。

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

1.背景

gcc是用来编译C语言代码的,g++是用来编译C++代码的,这两个编译器再指令和编译过程中几乎是一样的。所以还是以g++为主进行介绍。

2.gcc如何完成

2.1预处理(头文件和宏的替换)

在预处理过程中,会将我们代码中的宏定义进行替换,同时将头文件写入到我们的代码前面,同时会删除我们写的注释。下面是我们的操作指令。

g++ -E #.cpp -o #.i

 g++是指我们想要使用的编译器是g++,“-E”是代表让编译器在预处理结束之后停止编译过程。“#.cpp”则是我们写好的c++代码文件。“-o”是指利用前面处理过的内容生成一个目标文件,"#.i"是我们的目标文件的名字,".i"是文件的后缀。

2.2编译(生成汇编代码)

在编译阶段,编译器会将预处理过的C++文件翻译成汇编语言的文件

g++ -s #.i -o #.s

 2.3汇编(生成二进制文件)

在汇编阶段,编译器会将编译后的汇编文件翻译成为二进制文件

g++ -c #.s -o #.o

2.4链接(生成可执行文件)

 1.作用

在预处理阶段,编译器会将头文件中的内容拷贝到我们写的代码文件中,但是我们的头文件中只包含了函数的声明,仅仅是告诉编译器我们在文件中确实存在某个函数,但是没有告诉编译器我们如何实现的函数,而链接就是将函数具体实现的过程与我们的代码进行联系,从而生成一个可执行的文件。

2.静态链接和动态链接

写有具体的函数实现方法的库文件分为两类,一类是静态库,一类是动态库。

对于静态链接,编译q器就会将静态库中的代码实现拷贝到我们的代码中,优点是,如果我们的静态库丢失,代码文件也可以独立运行,缺点是,由于我们需要拷贝大量的代码,所以我们会浪费很多空间。  

对于动态链接,并不会将代码实现进行拷贝,而是和动态库建立一种联系,让编译器了解到函数的具体实现,优点是能够节约大量的空间,但是一旦丢失,则文件将无法运行 。

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

1.介绍

make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,Delphi的make,Visual C++的nmake,Linux下GNU的make。

make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。

2.使用make/mkefile来构建项目

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只管文件的依赖性,即,如果在我找了依赖关系之后,冒号后面的文件还是不在,那么对不起, 我就不工作啦。

3.项目清理

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

使用git命令行

1.安装git

首先使用命令安装git

yum install git

2.创建项目

我们需要登录自己的码云,在上面创建一个仓库。

3.下载项目到本地

创建好一个放置代码的目录

git clone [url]

url需要上面我们创建好的项目的链接。 

4.提交项目到云端使用方法

1.git add 

git add [文件名]

将代码放到刚才下载好的目录中,需要用git管理的文件告知git

2.git commit

提交改动到本地

git commit ""

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

3.git push

同步到远端服务器上

git push

此时,我们再打开我们的码云,刷新一下,就能看到代码的改动了。

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

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

相关文章

一本读懂数据库发展史的书

数据库及其存储技术,一直以来都是基础软件的主力。数据库系统的操作接口标准,也是应用型软件的重要接口,关系重大。 作为最“有感”的系统软件,数据库的历史悠久、品类繁多、创新活跃。 对数据库历史发展的介绍,有利…

CSS3视图过渡动画

概述 网站的主题切换无非就是文字、背景图片或者颜色,我们可以先来看下 Element UI 官网的切换主题的动效: PS:Antdesign UI的主题切换动画也是大同小异。 实现的两种方式 CSS 为主 <script setup> const changeTheme = (e) => {if (document.startViewTransi…

深度学习实用方法 - 选择超参数篇

序言 在深度学习的浩瀚领域中&#xff0c;超参数的选择无疑是通往卓越模型性能的一把关键钥匙。超参数&#xff0c;作为训练前设定的、用于控制学习过程而非通过学习自动获得的参数&#xff0c;如学习率、批量大小、网络层数及节点数等&#xff0c;直接影响着模型的收敛速度、…

MySQL索引(三)

MySQL索引(三) 文章目录 MySQL索引(三)为什么建索引&#xff1f;怎么建立索引为什么不是说索引越多越好什么时候不用索引更好 索引怎么优化索引失效如何解决索引失效 学习网站&#xff1a;https://xiaolincoding.com/ 为什么建索引&#xff1f; 1.索引大大减少了MySQL需要扫描…

线性约束最小方差准则(LCMV)波束形成算法及MATLAB深入仿真分析

阵列信号处理——线性约束最小方差准则(LCMV)波束形成算法及MATLAB深入仿真分析 目录 前言 一、LCMV算法 二、仿真参数设置 三、抗干扰权值计算仿真 四、不同干扰方位下抗干扰性能仿真 五、不同信噪比和干噪比下抗干扰性能仿真 总结 前言 在信号处理模块中&#xff0c;通…

day13JS-MoseEvent事件

1. MouseEvent的类别 mousedown &#xff1a;按下键mouseup &#xff1a;释放键click &#xff1a;左键单击dblclick &#xff1a;左键双击contextmenu &#xff1a;右键菜单mousemove &#xff1a;鼠标移动mouseover : 鼠标经过 。 可以做事件委托&#xff0c;子元素可以冒泡…

【网络】网络层协议——IP协议

目录 1.TCP和IP的关系 2.IP协议报文 2.1. 4位首部长度&#xff0c;16位总长度&#xff0c;8位协议 2.2. 8位生存时间 &#xff0c;32位源IP地址和32位目的IP地址 3.IP地址的划分 3.1.IP地址的表现形式 3.2.旧版IP地址的划分 3.2.1.旧版IP地址的划分思路 3.2.2.分类划…

鸿蒙开发 数组改变,ui渲染没有刷新

问题描述&#xff1a; 数组push, 数组长度改变&#xff0c;ui也没有刷新 打印出了数组 console.log(this.toDoData.map(item > ${item.name}).join(, ), this.toDoData.length) 原代码&#xff1a; Text().fontSize(36).margin({ right: 40 }).onClick(() > {TextPicker…

MySQL 数据库深度解析:安装、语法与高级查询实战

一、引言 在现代软件开发和数据管理领域中&#xff0c;MySQL 数据库凭借其高效性、稳定性、开源性以及广泛的适用性&#xff0c;成为了众多开发者和企业的首选。无论是小型项目还是大型企业级应用&#xff0c;MySQL 都能提供可靠的数据存储和管理解决方案。本文将深入探讨 MyS…

uni-app - - - - - 使用uview-plus详细步骤

uni-app - - - - - 使用uview-plus详细步骤 1. 使用HbuilderX创建空白项目2. 安装插件3. uview-plus配置使用3.1 main.js配置3.2 uni.scss配置3.3 App.vue配置3.4 pages.json 4. 重启Hbuilderx 1. 使用HbuilderX创建空白项目 2. 安装插件 工具 > 插件安装 > 前往插件市场…

Linux上安装Conda以管理Python环境

在Windows下装了Linux发行版Debian&#xff0c;以后不用来回开启VMware啦&#xff01;并在Debian中安装了Conda,记录一下所需命令(其他版本如Ubuntu中安装是一样的命令)。 目录 1.WSL 2.安装Conda 3.Python环境配置 1.WSL Install WSL | Microsoft Learn 微软官网 ①以管理…

STM32(F103ZET6)第二十四课:IAP离线固件升级

目录 开发需求IAP介绍内部的内存分区1.内部FLASH划分2.内部数据读取3.数据写入与擦除4.具体升级函数 IAP更新升级步骤1.系统启动流程2.IAP启动流程详解3.整体设计流程4.Boot Loader的代码编写5.APP1代码编写&#xff08;目前&#xff09;6.APP2代码编写&#xff08;待升级&…

WEB开发---使用HTML CSS开发网页实时显示当前日期和时间

自己刚开始学习html css知识&#xff0c;临时做个网页&#xff0c;实时显示当前日期和时间功能。 代码如下&#xff1a; test.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport&q…

python解释器[源代码层面]

1 PyDictObject 在c中STL中的map是基于 RB-tree平衡二元树实现&#xff0c;搜索的时间复杂度为O(log2n) Python中PyDictObject是基于散列表(散列函数)实现&#xff0c;搜索时间最优为O(1) 1.1 散列列表 问题&#xff1a;散列冲突&#xff1a;多个元素计算得到相同的哈希值 …

ARM 寻址方式(18)

立即寻址&#xff1a; 也叫作立即数寻址。 就是 立即数&#xff0c;本身就包含在了 指令当中。 举例&#xff1a; ADD R0, R0,#1 其中&#xff0c;#1 &#xff0c; 就是立即数&#xff0c;对于16进制的立即数&#xff0c; 需要在# 后加上 #0x. 寄存器寻址。 就是数据就在…

Amos百度云下载与安装 附图文安装教程

如大家所了解的&#xff0c;Amos是一款经常被运用在社会科学研究中的数据分析软件&#xff0c;尤其广泛用于人文社会科学领域的各种研究中。运用Amos&#xff0c;可以帮助研究人员使用结构方程模型 (SEM) 对他们收集到的数据进行分析与解释。 自用Amos 24安装包&#xff0c;可按…

数据结构与算法(循环链表,双向链表)

循环链表 最后一个元素指向首元素 带尾指针的循环链表合并 双向链表 双向链表:在单链表的每个结点里再增加一个指向其直接前驱的指针 域 prior &#xff0c;这样链表中就形成了有两个方向不同的链&#xff0c;故称为双向链表 双向链表插入操作 思路 代码 删除操作 思路 代…

CTFHub SSRF靶场通关攻略(6-11)

FastCGI协议 首先写一个php的一句话木马&#xff0c;并进行base64编码 <?php eval($_POST[cmd]);?> 编码完成后把他写入shell.php文件中 echo "PD9waHAgQGV2YWwoJF9QT1NUW2NtZF0pOz8" | base64 -d > shell.php 使用Gopherus工具生成payload: 执命令 …

【工控】线扫相机小结

背景简介 我目前接触到的线扫相机有两种形式: 无采集卡,数据通过网线传输。 配备采集卡,使用PCIe接口。 第一种形式的数据通过网线传输,速度较慢,因此扫描和生成图像的速度都较慢,参数设置主要集中在相机本身。第二种形式的相机配备采集卡,通常速度更快,但由于相机和…

Clickhouse集群化(三)集群化部署

1. 准备 clickhouse支持副本和分片的能力&#xff0c;但是自身无法实现需要借助zookeeper或者clickhouse-keeper来实现不同节点之间数据同步&#xff0c;同时clickhouse的数据是最终一致性 。 2. Zookeeper 副本的写入流程 没有主从概念 平等地位 互为副本 2.1. 部署zookeep…