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会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。

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

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

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

相关推荐
Michaelwubo3 分钟前
Docker dockerfile镜像编码 centos7
运维·docker·容器
远游客07138 分钟前
centos stream 8下载安装遇到的坑
linux·服务器·centos
马甲是掉不了一点的<.<9 分钟前
本地电脑使用命令行上传文件至远程服务器
linux·scp·cmd·远程文件上传
jingyu飞鸟10 分钟前
centos-stream9系统安装docker
linux·docker·centos
好像是个likun34 分钟前
使用docker拉取镜像很慢或者总是超时的问题
运维·docker·容器
超爱吃士力架39 分钟前
邀请逻辑
java·linux·后端
LIKEYYLL2 小时前
GNU Octave:特性、使用案例、工具箱、环境与界面
服务器·gnu
云云3213 小时前
搭建云手机平台的技术要求?
服务器·线性代数·安全·智能手机·矩阵
云云3213 小时前
云手机有哪些用途?云手机选择推荐
服务器·线性代数·安全·智能手机·矩阵
cominglately3 小时前
centos单机部署seata
linux·运维·centos