Linux工具使用

ops/2024/9/25 14:01:32/

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.ppmy.cn/ops/102363.html

相关文章

CentOS 安装 NVIDIA 相关软件包时出现依赖问题

CentOS 安装 NVIDIA 相关软件包时出现依赖问题 1 CentOS 安装 NVIDIA 相关软件包时报错如下2 解决方法 1 CentOS 安装 NVIDIA 相关软件包时报错如下 Error: Package: 3:kmod-nvidia-latest-dkms-550.90.07-1.el7.x86_64 (cuda-rhel7-x86_64)Requires: dkms Error: Package: 3:…

利用移动语义优化 C++ 程序性能的实用指南

利用移动语义优化 C 程序性能的实用指南 在现代 C 编程中,性能优化是一个重要的主题。随着 C11 引入了移动语义(Move Semantics),程序员可以更高效地管理资源,减少不必要的拷贝,从而显著提升程序性能。本文…

Linux下快速搭建七日杀官方私人服务器教程

今天给大家分享一下七日杀的个人开服教程,本教程基于Linux系统开发,推荐有一定基础的小伙伴尝试!如果你没有Linux的基础但实在想开的小伙伴可以根据以下教程一步步进行操作,后续这边也会上架对应视频操作 架设前准备: …

使用 Puppeteer 在 PHP 中解决 reCAPTCHA 以进行网页抓取

您是否在抓取数据时遇到 reCAPTCHA 障碍?我也遇到过。这些 CAPTCHA 挑战会将简单的抓取任务变成一大障碍。但别担心,我有一个解决方案可以帮助您轻松绕过这些障碍。 在本博文中,我将引导您使用 Puppeteer(一个功能强大的 Node.js…

zookeeper客户端命令行操作、节点类型及监听器

zookeeper客户端命令行操作、节点类型及监听器 文档 linux安装java -centos安装java -linux配置java环境变量zookeeper单机安装zookeeper集群安装zookeeper客户端命令行操作、节点类型及监听器zookeeper集群写数据原理java操作zookeeper 启动zookeeper客户端 启动客户端&…

无线通信频率分配

首先看看无线电信号的频谱如何划分: 一、5G NR 3GPP已指定5G NR 支持的频段列表,5G NR频谱范围可达100GHz,指定了两大频率范围: ① Frequency range 1 (FR1):就是我们通常讲的6GHz以下频段 频率…

【neo4j】neo4j-Desktop安装

Neo4j是一个高性能的图数据库,它使用图形结构来存储和处理数据。它是一个开源的、完全事务的数据库,专门设计用于大规模的图形数据。Neo4j使用一种名为Cypher的查询语言来处理图形数据,使用户能够方便地进行复杂的图形查询和分析。 Neo4j的主…

hadoop生态圈(四)- MapReduce

目录 MapReduce的基本原理 MapReduce流程图 Map阶段执行流程 Reduce阶段执行流程 Shuffle机制 MapReduce解决的是海量数据计算 MapReduce的思想核心是“分而治之”。就是把一个复杂的问题按一定的“分解”方法分为规模较小的若干部分,然后逐个解决,…